aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/builtins/cpp/NodeEventsBuiltins.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js/builtins/cpp/NodeEventsBuiltins.cpp')
-rw-r--r--src/bun.js/builtins/cpp/NodeEventsBuiltins.cpp111
1 files changed, 99 insertions, 12 deletions
diff --git a/src/bun.js/builtins/cpp/NodeEventsBuiltins.cpp b/src/bun.js/builtins/cpp/NodeEventsBuiltins.cpp
index dca0ee431..852dfd6ee 100644
--- a/src/bun.js/builtins/cpp/NodeEventsBuiltins.cpp
+++ b/src/bun.js/builtins/cpp/NodeEventsBuiltins.cpp
@@ -51,7 +51,7 @@ namespace WebCore {
const JSC::ConstructAbility s_nodeEventsOnAsyncIteratorCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
const JSC::ConstructorKind s_nodeEventsOnAsyncIteratorCodeConstructorKind = JSC::ConstructorKind::None;
const JSC::ImplementationVisibility s_nodeEventsOnAsyncIteratorCodeImplementationVisibility = JSC::ImplementationVisibility::Public;
-const int s_nodeEventsOnAsyncIteratorCodeLength = 4455;
+const int s_nodeEventsOnAsyncIteratorCodeLength = 4565;
static const JSC::Intrinsic s_nodeEventsOnAsyncIteratorCodeIntrinsic = JSC::NoIntrinsic;
const char* const s_nodeEventsOnAsyncIteratorCode =
"(function (emitter, event, options) {\n" \
@@ -59,18 +59,21 @@ const char* const s_nodeEventsOnAsyncIteratorCode =
"\n" \
" var { AbortSignal, Symbol, Number, Error } = globalThis;\n" \
"\n" \
- " var AbortError = class AbortError extends Error {\n" \
- " constructor(message = \"The operation was aborted\", options = void 0) {\n" \
- " if (options !== void 0 && typeof options !== \"object\") {\n" \
- " throw new Error(`Invalid AbortError options:\\n" \
+ " function makeAbortError(msg, opts = void 0) {\n" \
+ " var AbortError = class AbortError extends Error {\n" \
+ " constructor(message = \"The operation was aborted\", options = void 0) {\n" \
+ " if (options !== void 0 && typeof options !== \"object\") {\n" \
+ " throw new Error(`Invalid AbortError options:\\n" \
"\\n" \
"${JSON.stringify(options, null, 2)}`);\n" \
+ " }\n" \
+ " super(message, options);\n" \
+ " this.code = \"ABORT_ERR\";\n" \
+ " this.name = \"AbortError\";\n" \
" }\n" \
- " super(message, options);\n" \
- " this.code = \"ABORT_ERR\";\n" \
- " this.name = \"AbortError\";\n" \
- " }\n" \
- " };\n" \
+ " };\n" \
+ " return new AbortError(msg, opts);\n" \
+ " }\n" \
"\n" \
" if (@isUndefinedOrNull(emitter)) @throwTypeError(\"emitter is required\");\n" \
" //\n" \
@@ -86,7 +89,7 @@ const char* const s_nodeEventsOnAsyncIteratorCode =
"\n" \
" if (signal?.aborted) {\n" \
" //\n" \
- " throw new AbortError(@undefined, { cause: signal?.reason });\n" \
+ " throw makeAbortError(@undefined, { cause: signal?.reason });\n" \
" }\n" \
"\n" \
" var highWatermark = options.highWatermark ?? Number.MAX_SAFE_INTEGER;\n" \
@@ -107,7 +110,7 @@ const char* const s_nodeEventsOnAsyncIteratorCode =
" var listeners = [];\n" \
"\n" \
" function abortListener() {\n" \
- " errorHandler(new AbortError(@undefined, { cause: signal?.reason }));\n" \
+ " errorHandler(makeAbortError(@undefined, { cause: signal?.reason }));\n" \
" }\n" \
"\n" \
" function eventHandler(value) {\n" \
@@ -222,6 +225,90 @@ const char* const s_nodeEventsOnAsyncIteratorCode =
"})\n" \
;
+const JSC::ConstructAbility s_nodeEventsOncePromiseCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
+const JSC::ConstructorKind s_nodeEventsOncePromiseCodeConstructorKind = JSC::ConstructorKind::None;
+const JSC::ImplementationVisibility s_nodeEventsOncePromiseCodeImplementationVisibility = JSC::ImplementationVisibility::Public;
+const int s_nodeEventsOncePromiseCodeLength = 2418;
+static const JSC::Intrinsic s_nodeEventsOncePromiseCodeIntrinsic = JSC::NoIntrinsic;
+const char* const s_nodeEventsOncePromiseCode =
+ "(function (emitter, name, options) {\n" \
+ " \"use strict\";\n" \
+ "\n" \
+ " var { AbortSignal, Error } = globalThis;\n" \
+ "\n" \
+ " function makeAbortError(msg, opts = void 0) {\n" \
+ " var AbortError = class AbortError extends Error {\n" \
+ " constructor(message = \"The operation was aborted\", options = void 0) {\n" \
+ " if (options !== void 0 && typeof options !== \"object\") {\n" \
+ " throw new Error(`Invalid AbortError options:\\n" \
+ "\\n" \
+ "${JSON.stringify(options, null, 2)}`);\n" \
+ " }\n" \
+ " super(message, options);\n" \
+ " this.code = \"ABORT_ERR\";\n" \
+ " this.name = \"AbortError\";\n" \
+ " }\n" \
+ " };\n" \
+ " return new AbortError(msg, opts);\n" \
+ " }\n" \
+ "\n" \
+ " if (@isUndefinedOrNull(emitter)) return @Promise.@reject(@makeTypeError(\"emitter is required\"));\n" \
+ " //\n" \
+ " if (!(@isObject(emitter) && @isCallable(emitter.emit) && @isCallable(emitter.on)))\n" \
+ " return @Promise.@reject(@makeTypeError(\"emitter must be an EventEmitter\"));\n" \
+ "\n" \
+ " if (@isUndefinedOrNull(options)) options = {};\n" \
+ "\n" \
+ " //\n" \
+ " var signal = options.signal;\n" \
+ " if (signal !== @undefined && (!@isObject(signal) || !(signal instanceof AbortSignal)))\n" \
+ " return @Promise.@reject(@makeTypeError(\"options.signal must be an AbortSignal\"));\n" \
+ "\n" \
+ " if (signal?.aborted) {\n" \
+ " //\n" \
+ " return @Promise.@reject(makeAbortError(@undefined, { cause: signal?.reason }));\n" \
+ " }\n" \
+ "\n" \
+ " var eventPromiseCapability = @newPromiseCapability(@Promise);\n" \
+ "\n" \
+ " var errorListener = (err) => {\n" \
+ " emitter.removeListener(name, resolver);\n" \
+ " if (!@isUndefinedOrNull(signal)) {\n" \
+ " signal.removeEventListener(\"abort\", abortListener);\n" \
+ " }\n" \
+ " eventPromiseCapability.@reject.@call(@undefined, err);\n" \
+ " };\n" \
+ "\n" \
+ " var resolver = (...args) => {\n" \
+ " if (@isCallable(emitter.removeListener)) {\n" \
+ " emitter.removeListener(\"error\", errorListener);\n" \
+ " }\n" \
+ " if (!@isUndefinedOrNull(signal)) {\n" \
+ " signal.removeEventListener(\"abort\", abortListener);\n" \
+ " }\n" \
+ " eventPromiseCapability.@resolve.@call(@undefined, args);\n" \
+ " };\n" \
+ " \n" \
+ " emitter.once(name, resolver);\n" \
+ " if (name !== \"error\" && @isCallable(emitter.once)) {\n" \
+ " //\n" \
+ " //\n" \
+ " emitter.once(\"error\", errorListener);\n" \
+ " }\n" \
+ "\n" \
+ " function abortListener() {\n" \
+ " emitter.removeListener(name, resolver);\n" \
+ " emitter.removeListener(\"error\", errorListener);\n" \
+ " eventPromiseCapability.@reject.@call(@undefined, makeAbortError(@undefined, { cause: signal?.reason }));\n" \
+ " }\n" \
+ "\n" \
+ " if (!@isUndefinedOrNull(signal))\n" \
+ " signal.addEventListener(\"abort\", abortListener, { once: true });\n" \
+ "\n" \
+ " return eventPromiseCapability.@promise;\n" \
+ "})\n" \
+;
+
#define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \
JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \