diff --git a/lib/child_process.js b/lib/child_process.js index 2b2b6f083f1469..3fb21f755be3d7 100644 --- a/lib/child_process.js +++ b/lib/child_process.js @@ -37,6 +37,7 @@ const { ObjectAssign, ObjectDefineProperty, ObjectPrototypeHasOwnProperty, + PromiseWithResolvers, RegExpPrototypeExec, SafeSet, StringPrototypeIncludes, @@ -47,7 +48,6 @@ const { const { convertToValidSignal, - createDeferredPromise, getSystemErrorName, kEmptyObject, promisify, @@ -237,7 +237,7 @@ function exec(command, options, callback) { const customPromiseExecFunction = (orig) => { return (...args) => { - const { promise, resolve, reject } = createDeferredPromise(); + const { promise, resolve, reject } = PromiseWithResolvers(); promise.child = orig(...args, (err, stdout, stderr) => { if (err !== null) { diff --git a/lib/internal/abort_controller.js b/lib/internal/abort_controller.js index 25293a7c2e56f7..b812f588c23e99 100644 --- a/lib/internal/abort_controller.js +++ b/lib/internal/abort_controller.js @@ -10,6 +10,7 @@ const { ObjectDefineProperty, ObjectSetPrototypeOf, PromiseResolve, + PromiseWithResolvers, SafeFinalizationRegistry, SafeSet, SafeWeakRef, @@ -28,7 +29,6 @@ const { kWeakHandler, } = require('internal/event_target'); const { - createDeferredPromise, customInspectSymbol, kEmptyObject, kEnumerableProperty, @@ -486,7 +486,7 @@ async function aborted(signal, resource) { validateObject(resource, 'resource', kValidateObjectAllowObjects); if (signal.aborted) return PromiseResolve(); - const abortPromise = createDeferredPromise(); + const abortPromise = PromiseWithResolvers(); const opts = { __proto__: null, [kWeakHandler]: resource, once: true, [kResistStopPropagation]: true }; signal.addEventListener('abort', abortPromise.resolve, opts); return abortPromise.promise; diff --git a/lib/internal/blob.js b/lib/internal/blob.js index 1ec619f2bdbfcc..43a7ae5ac34d9c 100644 --- a/lib/internal/blob.js +++ b/lib/internal/blob.js @@ -9,6 +9,7 @@ const { ObjectSetPrototypeOf, PromisePrototypeThen, PromiseReject, + PromiseWithResolvers, RegExpPrototypeExec, RegExpPrototypeSymbolReplace, StringPrototypeSplit, @@ -47,7 +48,6 @@ const { } = require('internal/util/types'); const { - createDeferredPromise, customInspectSymbol: kInspect, kEmptyObject, kEnumerableProperty, @@ -325,7 +325,7 @@ class Blob { this.pendingPulls = []; }, pull(c) { - const { promise, resolve, reject } = createDeferredPromise(); + const { promise, resolve, reject } = PromiseWithResolvers(); this.pendingPulls.push({ resolve, reject }); const readNext = () => { reader.pull((status, buffer) => { @@ -478,7 +478,7 @@ function createBlobFromFilePath(path, options) { } function arrayBuffer(blob) { - const { promise, resolve, reject } = createDeferredPromise(); + const { promise, resolve, reject } = PromiseWithResolvers(); const reader = blob[kHandle].getReader(); const buffers = []; const readNext = () => { diff --git a/lib/internal/fs/watchers.js b/lib/internal/fs/watchers.js index f5ecc15159f457..efa8dd85c64bfb 100644 --- a/lib/internal/fs/watchers.js +++ b/lib/internal/fs/watchers.js @@ -4,6 +4,7 @@ const { FunctionPrototypeCall, ObjectDefineProperty, ObjectSetPrototypeOf, + PromiseWithResolvers, Symbol, } = primordials; @@ -15,7 +16,6 @@ const { }, } = require('internal/errors'); const { - createDeferredPromise, kEmptyObject, } = require('internal/util'); @@ -325,7 +325,7 @@ async function* watch(filename, options = kEmptyObject) { throw new AbortError(undefined, { cause: signal?.reason }); const handle = new FSEvent(); - let { promise, resolve, reject } = createDeferredPromise(); + let { promise, resolve, reject } = PromiseWithResolvers(); const oncancel = () => { handle.close(); reject(new AbortError(undefined, { cause: signal?.reason })); @@ -368,7 +368,7 @@ async function* watch(filename, options = kEmptyObject) { while (!signal?.aborted) { yield await promise; - ({ promise, resolve, reject } = createDeferredPromise()); + ({ promise, resolve, reject } = PromiseWithResolvers()); } throw new AbortError(undefined, { cause: signal?.reason }); } finally { diff --git a/lib/internal/test_runner/runner.js b/lib/internal/test_runner/runner.js index 18940ffdbe8b58..0ba40d7ba7f71f 100644 --- a/lib/internal/test_runner/runner.js +++ b/lib/internal/test_runner/runner.js @@ -18,6 +18,7 @@ const { ObjectAssign, PromisePrototypeThen, PromiseResolve, + PromiseWithResolvers, SafeMap, SafePromiseAll, SafePromiseAllReturnVoid, @@ -63,7 +64,6 @@ const { getInspectPort, isUsingInspector, isInspectorMessage } = require('intern const { isRegExp } = require('internal/util/types'); const { pathToFileURL } = require('internal/url'); const { - createDeferredPromise, kEmptyObject, } = require('internal/util'); const { kEmitMessage } = require('internal/test_runner/tests_stream'); @@ -744,7 +744,7 @@ function run(options = kEmptyObject) { }; } else { runFiles = async () => { - const { promise, resolve: finishBootstrap } = createDeferredPromise(); + const { promise, resolve: finishBootstrap } = PromiseWithResolvers(); await root.runInAsyncScope(async () => { const parentURL = pathToFileURL(cwd + sep).href; diff --git a/lib/internal/webstreams/adapters.js b/lib/internal/webstreams/adapters.js index 14f0f65b275b60..4e99d56aa4be7e 100644 --- a/lib/internal/webstreams/adapters.js +++ b/lib/internal/webstreams/adapters.js @@ -7,6 +7,7 @@ const { ObjectEntries, PromisePrototypeThen, PromiseResolve, + PromiseWithResolvers, SafePromiseAll, SafePromisePrototypeFinally, SafeSet, @@ -64,7 +65,6 @@ const { } = require('internal/errors'); const { - createDeferredPromise, kEmptyObject, normalizeEncoding, } = require('internal/util'); @@ -213,7 +213,7 @@ function newWritableStreamFromStreamWritable(streamWritable) { write(chunk) { if (streamWritable.writableNeedDrain || !streamWritable.write(chunk)) { - backpressurePromise = createDeferredPromise(); + backpressurePromise = PromiseWithResolvers(); return SafePromisePrototypeFinally( backpressurePromise.promise, () => { backpressurePromise = undefined; @@ -227,7 +227,7 @@ function newWritableStreamFromStreamWritable(streamWritable) { close() { if (closed === undefined && !isWritableEnded(streamWritable)) { - closed = createDeferredPromise(); + closed = PromiseWithResolvers(); streamWritable.end(); return closed.promise; } @@ -900,7 +900,7 @@ function newWritableStreamFromStreamBase(streamBase, strategy) { } function doWrite(chunk, controller) { - const promise = createDeferredPromise(); + const promise = PromiseWithResolvers(); let ret; let req; try { @@ -933,7 +933,7 @@ function newWritableStreamFromStreamBase(streamBase, strategy) { }, close() { - const promise = createDeferredPromise(); + const promise = PromiseWithResolvers(); const req = new ShutdownWrap(); req.oncomplete = () => promise.resolve(); const err = streamBase.shutdown(req); @@ -1000,7 +1000,7 @@ function newReadableStreamFromStreamBase(streamBase, strategy, options = kEmptyO }, cancel() { - const promise = createDeferredPromise(); + const promise = PromiseWithResolvers(); try { ondone(); } catch (error) { diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index 5d9379287e9605..2369175733c115 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -19,6 +19,7 @@ const { PromisePrototypeThen, PromiseReject, PromiseResolve, + PromiseWithResolvers, SafePromiseAll, Symbol, SymbolAsyncIterator, @@ -50,7 +51,6 @@ const { } = require('internal/util/types'); const { - createDeferredPromise, customInspectSymbol: kInspect, kEmptyObject, kEnumerableProperty, @@ -252,7 +252,7 @@ class ReadableStream { validateObject(strategy, 'strategy', kValidateObjectAllowObjectsAndNull); this[kState] = createReadableStreamState(); - this[kIsClosedPromise] = createDeferredPromise(); + this[kIsClosedPromise] = PromiseWithResolvers(); this[kControllerErrorFunction] = () => {}; // The spec requires handling of the strategy first @@ -486,7 +486,7 @@ class ReadableStream { new ERR_INVALID_STATE.TypeError( 'The reader is not bound to a ReadableStream')); } - const promise = createDeferredPromise(); + const promise = PromiseWithResolvers(); // eslint-disable-next-line no-use-before-define readableStreamDefaultReaderRead(reader, new ReadableStreamAsyncIteratorReadRequest(reader, state, promise)); @@ -643,7 +643,7 @@ function InternalTransferredReadableStream() { this[kType] = 'ReadableStream'; this[kState] = createReadableStreamState(); - this[kIsClosedPromise] = createDeferredPromise(); + this[kIsClosedPromise] = PromiseWithResolvers(); } ObjectSetPrototypeOf(InternalTransferredReadableStream.prototype, ReadableStream.prototype); @@ -786,7 +786,7 @@ class ReadableStreamAsyncIteratorReadRequest { class DefaultReadRequest { constructor() { - this[kState] = createDeferredPromise(); + this[kState] = PromiseWithResolvers(); } [kChunk](value) { @@ -806,7 +806,7 @@ class DefaultReadRequest { class ReadIntoRequest { constructor() { - this[kState] = createDeferredPromise(); + this[kState] = PromiseWithResolvers(); } [kChunk](value) { @@ -1230,7 +1230,7 @@ function InternalReadableStream(start, pull, cancel, highWaterMark, size) { markTransferMode(this, false, true); this[kType] = 'ReadableStream'; this[kState] = createReadableStreamState(); - this[kIsClosedPromise] = createDeferredPromise(); + this[kIsClosedPromise] = PromiseWithResolvers(); const controller = new ReadableStreamDefaultController(kSkipThrow); setupReadableStreamDefaultController( this, @@ -1258,7 +1258,7 @@ function InternalReadableByteStream(start, pull, cancel) { markTransferMode(this, false, true); this[kType] = 'ReadableStream'; this[kState] = createReadableStreamState(); - this[kIsClosedPromise] = createDeferredPromise(); + this[kIsClosedPromise] = PromiseWithResolvers(); const controller = new ReadableByteStreamController(kSkipThrow); setupReadableByteStreamController( this, @@ -1392,7 +1392,7 @@ function readableStreamPipeTo( } } - const promise = createDeferredPromise(); + const promise = PromiseWithResolvers(); const state = { currentWrite: PromiseResolve(), @@ -1509,7 +1509,7 @@ function readableStreamPipeTo( await writer[kState].ready.promise; - const promise = createDeferredPromise(); + const promise = PromiseWithResolvers(); // eslint-disable-next-line no-use-before-define readableStreamDefaultReaderRead(reader, new PipeToReadableStreamReadRequest(writer, state, promise)); @@ -1613,7 +1613,7 @@ function readableStreamDefaultTee(stream, cloneForBranch2) { let reason2; let branch1; let branch2; - const cancelPromise = createDeferredPromise(); + const cancelPromise = PromiseWithResolvers(); async function pullAlgorithm() { if (reading) return; @@ -1712,7 +1712,7 @@ function readableByteStreamTee(stream) { let reason2; let branch1; let branch2; - const cancelDeferred = createDeferredPromise(); + const cancelDeferred = PromiseWithResolvers(); function forwardReaderError(thisReader) { PromisePrototypeThen( @@ -2159,7 +2159,7 @@ function readableStreamReaderGenericInitialize(reader, stream) { stream[kState].reader = reader; switch (stream[kState].state) { case 'readable': - reader[kState].close = createDeferredPromise(); + reader[kState].close = PromiseWithResolvers(); break; case 'closed': reader[kState].close = { diff --git a/lib/internal/webstreams/transfer.js b/lib/internal/webstreams/transfer.js index 9835e6ab272c98..9ce3f249ffd2bd 100644 --- a/lib/internal/webstreams/transfer.js +++ b/lib/internal/webstreams/transfer.js @@ -3,6 +3,7 @@ const { ObjectDefineProperties, PromiseResolve, + PromiseWithResolvers, ReflectConstruct, } = primordials; @@ -28,10 +29,6 @@ const { writableStreamDefaultControllerErrorIfNeeded, } = require('internal/webstreams/writablestream'); -const { - createDeferredPromise, -} = require('internal/util'); - const assert = require('internal/assert'); const { @@ -181,7 +178,7 @@ class CrossRealmTransformWritableSink { this[kState] = { port, controller: undefined, - backpressurePromise: createDeferredPromise(), + backpressurePromise: PromiseWithResolvers(), unref, }; @@ -239,7 +236,7 @@ class CrossRealmTransformWritableSink { }; } await this[kState].backpressurePromise.promise; - this[kState].backpressurePromise = createDeferredPromise(); + this[kState].backpressurePromise = PromiseWithResolvers(); try { this[kState].port.postMessage({ type: 'chunk', value: chunk }); } catch (error) { diff --git a/lib/internal/webstreams/transformstream.js b/lib/internal/webstreams/transformstream.js index 9e26387b3b6110..cd3c96d68a59b8 100644 --- a/lib/internal/webstreams/transformstream.js +++ b/lib/internal/webstreams/transformstream.js @@ -5,6 +5,7 @@ const { ObjectDefineProperties, ObjectSetPrototypeOf, PromisePrototypeThen, + PromiseWithResolvers, Symbol, SymbolToStringTag, } = primordials; @@ -23,7 +24,6 @@ const { } = internalBinding('messaging'); const { - createDeferredPromise, customInspectSymbol: kInspect, kEmptyObject, kEnumerableProperty, @@ -161,7 +161,7 @@ class TransformStream { extractHighWaterMark(writableHighWaterMark, 1); const actualWritableSize = extractSizeAlgorithm(writableSize); - const startPromise = createDeferredPromise(); + const startPromise = PromiseWithResolvers(); initializeTransformStream( this, @@ -439,7 +439,7 @@ function transformStreamSetBackpressure(stream, backpressure) { assert(stream[kState].backpressure !== backpressure); if (stream[kState].backpressureChange.promise !== undefined) stream[kState].backpressureChange.resolve?.(); - stream[kState].backpressureChange = createDeferredPromise(); + stream[kState].backpressureChange = PromiseWithResolvers(); stream[kState].backpressure = backpressure; } @@ -583,7 +583,7 @@ async function transformStreamDefaultSinkAbortAlgorithm(stream, reason) { return controller[kState].finishPromise; } - const { promise, resolve, reject } = createDeferredPromise(); + const { promise, resolve, reject } = PromiseWithResolvers(); controller[kState].finishPromise = promise; const cancelPromise = controller[kState].cancelAlgorithm(reason); transformStreamDefaultControllerClearAlgorithms(controller); @@ -616,7 +616,7 @@ function transformStreamDefaultSinkCloseAlgorithm(stream) { if (controller[kState].finishPromise !== undefined) { return controller[kState].finishPromise; } - const { promise, resolve, reject } = createDeferredPromise(); + const { promise, resolve, reject } = PromiseWithResolvers(); controller[kState].finishPromise = promise; const flushPromise = controller[kState].flushAlgorithm(controller); transformStreamDefaultControllerClearAlgorithms(controller); @@ -654,7 +654,7 @@ function transformStreamDefaultSourceCancelAlgorithm(stream, reason) { return controller[kState].finishPromise; } - const { promise, resolve, reject } = createDeferredPromise(); + const { promise, resolve, reject } = PromiseWithResolvers(); controller[kState].finishPromise = promise; const cancelPromise = controller[kState].cancelAlgorithm(reason); transformStreamDefaultControllerClearAlgorithms(controller); diff --git a/lib/internal/webstreams/writablestream.js b/lib/internal/webstreams/writablestream.js index ba1461fc70e95f..5baaf20c30ba26 100644 --- a/lib/internal/webstreams/writablestream.js +++ b/lib/internal/webstreams/writablestream.js @@ -11,6 +11,7 @@ const { PromisePrototypeThen, PromiseReject, PromiseResolve, + PromiseWithResolvers, Symbol, SymbolToStringTag, } = primordials; @@ -30,7 +31,6 @@ const { } = internalBinding('messaging'); const { - createDeferredPromise, customInspectSymbol: kInspect, kEmptyObject, kEnumerableProperty, @@ -170,7 +170,7 @@ class WritableStream { this[kState] = createWritableStreamState(); - this[kIsClosedPromise] = createDeferredPromise(); + this[kIsClosedPromise] = PromiseWithResolvers(); this[kControllerErrorFunction] = () => {}; const size = extractSizeAlgorithm(strategy?.size); @@ -305,7 +305,7 @@ function InternalTransferredWritableStream() { this[kType] = 'WritableStream'; this[kState] = createWritableStreamState(); - this[kIsClosedPromise] = createDeferredPromise(); + this[kIsClosedPromise] = PromiseWithResolvers(); } ObjectSetPrototypeOf(InternalTransferredWritableStream.prototype, WritableStream.prototype); @@ -521,7 +521,7 @@ function InternalWritableStream(start, write, close, abort, highWaterMark, size) markTransferMode(this, false, true); this[kType] = 'WritableStream'; this[kState] = createWritableStreamState(); - this[kIsClosedPromise] = createDeferredPromise(); + this[kIsClosedPromise] = PromiseWithResolvers(); const controller = new WritableStreamDefaultController(kSkipThrow); setupWritableStreamDefaultController( @@ -557,7 +557,7 @@ const isWritableStreamDefaultController = function createWritableStreamState() { return { __proto__: null, - close: createDeferredPromise(), + close: PromiseWithResolvers(), closeRequest: { __proto__: null, promise: undefined, @@ -616,7 +616,7 @@ function setupWritableStreamDefaultWriter(writer, stream) { case 'writable': if (!writableStreamCloseQueuedOrInFlight(stream) && stream[kState].backpressure) { - writer[kState].ready = createDeferredPromise(); + writer[kState].ready = PromiseWithResolvers(); } else { writer[kState].ready = { promise: PromiseResolve(), @@ -663,7 +663,7 @@ function setupWritableStreamDefaultWriter(writer, stream) { } function setClosedPromiseToNewPromise() { - writer[kState].close = createDeferredPromise(); + writer[kState].close = PromiseWithResolvers(); } } @@ -688,7 +688,7 @@ function writableStreamAbort(stream, reason) { reason = undefined; } - const abort = createDeferredPromise(); + const abort = PromiseWithResolvers(); stream[kState].pendingAbortRequest = { abort, @@ -715,7 +715,7 @@ function writableStreamClose(stream) { } assert(state === 'writable' || state === 'erroring'); assert(!writableStreamCloseQueuedOrInFlight(stream)); - stream[kState].closeRequest = createDeferredPromise(); + stream[kState].closeRequest = PromiseWithResolvers(); const { promise } = stream[kState].closeRequest; if (writer !== undefined && backpressure && state === 'writable') writer[kState].ready.resolve?.(); @@ -731,7 +731,7 @@ function writableStreamUpdateBackpressure(stream, backpressure) { } = stream[kState]; if (writer !== undefined && stream[kState].backpressure !== backpressure) { if (backpressure) { - writer[kState].ready = createDeferredPromise(); + writer[kState].ready = PromiseWithResolvers(); } else { writer[kState].ready.resolve?.(); } @@ -961,7 +961,7 @@ function writableStreamAddWriteRequest(stream) { promise, resolve, reject, - } = createDeferredPromise(); + } = PromiseWithResolvers(); ArrayPrototypePush( stream[kState].writeRequests, {