From 4f84c6bc34fc48dd838ca92a4d504e28fd9d174a Mon Sep 17 00:00:00 2001 From: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Date: Mon, 23 Jan 2023 04:02:06 -0800 Subject: Prepare for plugins --- src/bun.js/bindings/BunPlugin.cpp | 70 +++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 24 deletions(-) (limited to 'src/bun.js/bindings/BunPlugin.cpp') diff --git a/src/bun.js/bindings/BunPlugin.cpp b/src/bun.js/bindings/BunPlugin.cpp index 4faf4882a..6090ea7c0 100644 --- a/src/bun.js/bindings/BunPlugin.cpp +++ b/src/bun.js/bindings/BunPlugin.cpp @@ -21,6 +21,7 @@ namespace Zig { extern "C" void Bun__onDidAppendPlugin(void* bunVM, JSGlobalObject* globalObject); +using OnAppendPluginCallback = void (*)(void*, JSGlobalObject* globalObject); static bool isValidNamespaceString(String& namespaceString) { @@ -31,7 +32,7 @@ static bool isValidNamespaceString(String& namespaceString) return namespaceRegex->match(namespaceString) > -1; } -static EncodedJSValue jsFunctionAppendOnLoadPluginBody(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callframe, BunPluginTarget target) +static EncodedJSValue jsFunctionAppendOnLoadPluginBody(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callframe, BunPluginTarget target, BunPlugin::Base& plugin, void* ctx, OnAppendPluginCallback callback) { JSC::VM& vm = globalObject->vm(); auto scope = DECLARE_THROW_SCOPE(vm); @@ -77,14 +78,13 @@ static EncodedJSValue jsFunctionAppendOnLoadPluginBody(JSC::JSGlobalObject* glob return JSValue::encode(jsUndefined()); } - Zig::GlobalObject* global = reinterpret_cast(globalObject); - auto& plugins = global->onLoadPlugins[target]; - plugins.append(vm, filter->regExp(), jsCast(func), namespaceString); - Bun__onDidAppendPlugin(reinterpret_cast(globalObject)->bunVM(), globalObject); + plugin.append(vm, filter->regExp(), jsCast(func), namespaceString); + callback(ctx, globalObject); + return JSValue::encode(jsUndefined()); } -static EncodedJSValue jsFunctionAppendOnResolvePluginBody(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callframe, BunPluginTarget target) +static EncodedJSValue jsFunctionAppendOnResolvePluginBody(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callframe, BunPluginTarget target, BunPlugin::Base& plugin, void* ctx, OnAppendPluginCallback callback) { JSC::VM& vm = globalObject->vm(); auto scope = DECLARE_THROW_SCOPE(vm); @@ -131,42 +131,58 @@ static EncodedJSValue jsFunctionAppendOnResolvePluginBody(JSC::JSGlobalObject* g return JSValue::encode(jsUndefined()); } - Zig::GlobalObject* global = reinterpret_cast(globalObject); - auto& plugins = global->onResolvePlugins[target]; - plugins.append(vm, filter->regExp(), jsCast(func), namespaceString); + plugin.append(vm, filter->regExp(), jsCast(func), namespaceString); + callback(ctx, globalObject); - Bun__onDidAppendPlugin(reinterpret_cast(globalObject)->bunVM(), globalObject); return JSValue::encode(jsUndefined()); } +static EncodedJSValue jsFunctionAppendOnResolvePluginGlobal(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callframe, BunPluginTarget target) +{ + Zig::GlobalObject* global = Zig::jsCast(globalObject); + + auto& plugins = global->onResolvePlugins[target]; + auto callback = Bun__onDidAppendPlugin; + return jsFunctionAppendOnResolvePluginBody(globalObject, callframe, target, plugins, global->bunVM(), callback); +} + +static EncodedJSValue jsFunctionAppendOnLoadPluginGlobal(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callframe, BunPluginTarget target) +{ + Zig::GlobalObject* global = Zig::jsCast(globalObject); + + auto& plugins = global->onLoadPlugins[target]; + auto callback = Bun__onDidAppendPlugin; + return jsFunctionAppendOnLoadPluginBody(globalObject, callframe, target, plugins, global->bunVM(), callback); +} + JSC_DEFINE_HOST_FUNCTION(jsFunctionAppendOnLoadPluginNode, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callframe)) { - return jsFunctionAppendOnLoadPluginBody(globalObject, callframe, BunPluginTargetNode); + return jsFunctionAppendOnLoadPluginGlobal(globalObject, callframe, BunPluginTargetNode); } JSC_DEFINE_HOST_FUNCTION(jsFunctionAppendOnLoadPluginBun, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callframe)) { - return jsFunctionAppendOnLoadPluginBody(globalObject, callframe, BunPluginTargetBun); + return jsFunctionAppendOnLoadPluginGlobal(globalObject, callframe, BunPluginTargetBun); } JSC_DEFINE_HOST_FUNCTION(jsFunctionAppendOnLoadPluginBrowser, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callframe)) { - return jsFunctionAppendOnLoadPluginBody(globalObject, callframe, BunPluginTargetBrowser); + return jsFunctionAppendOnLoadPluginGlobal(globalObject, callframe, BunPluginTargetBrowser); } JSC_DEFINE_HOST_FUNCTION(jsFunctionAppendOnResolvePluginNode, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callframe)) { - return jsFunctionAppendOnResolvePluginBody(globalObject, callframe, BunPluginTargetNode); + return jsFunctionAppendOnResolvePluginGlobal(globalObject, callframe, BunPluginTargetNode); } JSC_DEFINE_HOST_FUNCTION(jsFunctionAppendOnResolvePluginBun, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callframe)) { - return jsFunctionAppendOnResolvePluginBody(globalObject, callframe, BunPluginTargetBun); + return jsFunctionAppendOnResolvePluginGlobal(globalObject, callframe, BunPluginTargetBun); } JSC_DEFINE_HOST_FUNCTION(jsFunctionAppendOnResolvePluginBrowser, (JSC::JSGlobalObject * globalObject, JSC::CallFrame* callframe)) { - return jsFunctionAppendOnResolvePluginBody(globalObject, callframe, BunPluginTargetBrowser); + return jsFunctionAppendOnResolvePluginGlobal(globalObject, callframe, BunPluginTargetBrowser); } extern "C" EncodedJSValue jsFunctionBunPluginClear(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callframe) @@ -182,30 +198,28 @@ extern "C" EncodedJSValue jsFunctionBunPluginClear(JSC::JSGlobalObject* globalOb return JSValue::encode(jsUndefined()); } -extern "C" EncodedJSValue jsFunctionBunPlugin(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callframe) +extern "C" EncodedJSValue setupBunPlugin(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callframe, BunPluginTarget target) { JSC::VM& vm = globalObject->vm(); auto clientData = WebCore::clientData(vm); auto throwScope = DECLARE_THROW_SCOPE(vm); if (callframe->argumentCount() < 1) { - JSC::throwTypeError(globalObject, throwScope, "Bun.plugin() needs at least one argument (an object)"_s); + JSC::throwTypeError(globalObject, throwScope, "plugin needs at least one argument (an object)"_s); return JSValue::encode(jsUndefined()); } JSC::JSObject* obj = callframe->uncheckedArgument(0).getObject(); if (!obj) { - JSC::throwTypeError(globalObject, throwScope, "Bun.plugin() needs an object as first argument"_s); + JSC::throwTypeError(globalObject, throwScope, "plugin needs an object as first argument"_s); return JSValue::encode(jsUndefined()); } - JSC::JSValue setupFunctionValue = obj->get(globalObject, Identifier::fromString(vm, "setup"_s)); + JSC::JSValue setupFunctionValue = obj->getIfPropertyExists(globalObject, Identifier::fromString(vm, "setup"_s)); if (!setupFunctionValue || setupFunctionValue.isUndefinedOrNull() || !setupFunctionValue.isCell() || !setupFunctionValue.isCallable()) { - JSC::throwTypeError(globalObject, throwScope, "Bun.plugin() needs a setup() function"_s); + JSC::throwTypeError(globalObject, throwScope, "plugin needs a setup() function"_s); return JSValue::encode(jsUndefined()); } - Zig::GlobalObject* global = reinterpret_cast(globalObject); - BunPluginTarget target = global->defaultBunPluginTarget; if (JSValue targetValue = obj->getIfPropertyExists(globalObject, Identifier::fromString(vm, "target"_s))) { if (auto* targetJSString = targetValue.toStringOrNull(globalObject)) { auto targetString = targetJSString->value(globalObject); @@ -216,7 +230,7 @@ extern "C" EncodedJSValue jsFunctionBunPlugin(JSC::JSGlobalObject* globalObject, } else if (targetString == "browser"_s) { target = BunPluginTargetBrowser; } else { - JSC::throwTypeError(globalObject, throwScope, "Bun.plugin() target must be one of 'node', 'bun' or 'browser'"_s); + JSC::throwTypeError(globalObject, throwScope, "plugin target must be one of 'node', 'bun' or 'browser'"_s); return JSValue::encode(jsUndefined()); } } @@ -310,6 +324,14 @@ extern "C" EncodedJSValue jsFunctionBunPlugin(JSC::JSGlobalObject* globalObject, RELEASE_AND_RETURN(throwScope, JSValue::encode(jsUndefined())); } +extern "C" EncodedJSValue jsFunctionBunPlugin(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callframe) +{ + Zig::GlobalObject* global = reinterpret_cast(globalObject); + BunPluginTarget target = global->defaultBunPluginTarget; + + return setupBunPlugin(globalObject, callframe, target); +} + void BunPlugin::Group::append(JSC::VM& vm, JSC::RegExp* filter, JSC::JSFunction* func) { filters.append(JSC::Strong { vm, filter }); -- cgit v1.2.3 /prepare-for-libuv'>jarred/prepare-for-libuv Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
AgeCommit message (Expand)AuthorFilesLines
2023-01-05BumpGravatar Jarred Sumner 1-1/+1
2023-01-05fix `onConnectError()` error propagation (#1730)Gravatar Alex Lam S.L 1-2/+2
2023-01-05Update tcp-echo.bun.tsGravatar Jarred Sumner 1-13/+15
2023-01-05Really fix #1722Gravatar Jarred Sumner 2-3/+41
2023-01-05improve `.toThrow()` compatibility with Jest (#1728)Gravatar Alex Lam S.L 2-17/+33
2023-01-04Fix Bun.serve typings (#1714)Gravatar u9g 1-2/+2
2023-01-04implement `expect().toThrow()` (#1727)Gravatar Alex Lam S.L 5-130/+370
2023-01-04Add `SharedBuffer` from WebKit to make it easier to import more WebCore stuffGravatar Jarred Sumner 2-0/+1111
2023-01-04Fix default export for streamGravatar Jarred Sumner 1-11/+4
2023-01-04Fixes #1722Gravatar Jarred Sumner 1-1/+2
2023-01-04split server/client for tcp echo benchmark to better measure net.Socket perfGravatar Jarred Sumner 2-58/+60
2023-01-04buffer list clean-ups (#1721)Gravatar Alex Lam S.L 1-37/+68
2023-01-04Support non-classes in node:net (#1712)Gravatar Jarred Sumner 1-198/+216
2023-01-04Fixes #1716Gravatar Jarred Sumner 1-2/+2
2023-01-0410x faster `new Buffer` (#1717)Gravatar Jarred Sumner 19-520/+480
2023-01-03Update README.mdGravatar Jarred Sumner 1-2/+2
2023-01-03Add sqlite to vendorGravatar Jarred Sumner 1-4/+8
2023-01-03Fixes https://github.com/oven-sh/bun/issues/1695Gravatar Jarred Sumner 1-1/+1
2023-01-03Remove usages of std.xGravatar Jarred Sumner 7-98/+75
2023-01-03[streams] speed up `Readable` in some cases (#1708)Gravatar Alex Lam S.L 3-14/+140
2023-01-03Fix crash in BufferListGravatar Jarred Sumner 1-2/+2