Skip to content

Commit 0c08b61

Browse files
committed
lib: refactor project to use Promise.withResolvers
1 parent 8882a21 commit 0c08b61

File tree

17 files changed

+75
-76
lines changed

17 files changed

+75
-76
lines changed

lib/child_process.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const {
3737
ObjectAssign,
3838
ObjectDefineProperty,
3939
ObjectPrototypeHasOwnProperty,
40+
PromiseWithResolvers,
4041
RegExpPrototypeExec,
4142
SafeSet,
4243
StringPrototypeIncludes,
@@ -47,7 +48,6 @@ const {
4748

4849
const {
4950
convertToValidSignal,
50-
createDeferredPromise,
5151
getSystemErrorName,
5252
kEmptyObject,
5353
promisify,
@@ -237,7 +237,7 @@ function exec(command, options, callback) {
237237

238238
const customPromiseExecFunction = (orig) => {
239239
return (...args) => {
240-
const { promise, resolve, reject } = createDeferredPromise();
240+
const { promise, resolve, reject } = PromiseWithResolvers();
241241

242242
promise.child = orig(...args, (err, stdout, stderr) => {
243243
if (err !== null) {

lib/internal/abort_controller.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const {
88
ObjectDefineProperties,
99
ObjectDefineProperty,
1010
PromiseResolve,
11+
PromiseWithResolvers,
1112
SafeFinalizationRegistry,
1213
SafeSet,
1314
Symbol,
@@ -26,7 +27,6 @@ const {
2627
kWeakHandler,
2728
} = require('internal/event_target');
2829
const {
29-
createDeferredPromise,
3030
customInspectSymbol,
3131
kEmptyObject,
3232
kEnumerableProperty,
@@ -449,7 +449,7 @@ async function aborted(signal, resource) {
449449
validateObject(resource, 'resource', kValidateObjectAllowObjects);
450450
if (signal.aborted)
451451
return PromiseResolve();
452-
const abortPromise = createDeferredPromise();
452+
const abortPromise = PromiseWithResolvers();
453453
const opts = { __proto__: null, [kWeakHandler]: resource, once: true, [kResistStopPropagation]: true };
454454
signal.addEventListener('abort', abortPromise.resolve, opts);
455455
return abortPromise.promise;

lib/internal/blob.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const {
99
ObjectSetPrototypeOf,
1010
PromisePrototypeThen,
1111
PromiseReject,
12+
PromiseWithResolvers,
1213
RegExpPrototypeExec,
1314
RegExpPrototypeSymbolReplace,
1415
StringPrototypeSplit,
@@ -47,7 +48,6 @@ const {
4748
} = require('internal/util/types');
4849

4950
const {
50-
createDeferredPromise,
5151
customInspectSymbol: kInspect,
5252
kEmptyObject,
5353
kEnumerableProperty,
@@ -273,7 +273,7 @@ class Blob {
273273
if (!isBlob(this))
274274
return PromiseReject(new ERR_INVALID_THIS('Blob'));
275275

276-
const { promise, resolve, reject } = createDeferredPromise();
276+
const { promise, resolve, reject } = PromiseWithResolvers();
277277
const reader = this[kHandle].getReader();
278278
const buffers = [];
279279
const readNext = () => {
@@ -340,7 +340,7 @@ class Blob {
340340
this.pendingPulls = [];
341341
},
342342
pull(c) {
343-
const { promise, resolve, reject } = createDeferredPromise();
343+
const { promise, resolve, reject } = PromiseWithResolvers();
344344
this.pendingPulls.push({ resolve, reject });
345345
const readNext = () => {
346346
reader.pull((status, buffer) => {

lib/internal/fs/watchers.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const {
44
FunctionPrototypeCall,
55
ObjectDefineProperty,
66
ObjectSetPrototypeOf,
7+
PromiseWithResolvers,
78
Symbol,
89
} = primordials;
910

@@ -15,7 +16,6 @@ const {
1516
},
1617
} = require('internal/errors');
1718
const {
18-
createDeferredPromise,
1919
kEmptyObject,
2020
} = require('internal/util');
2121

@@ -325,7 +325,7 @@ async function* watch(filename, options = kEmptyObject) {
325325
throw new AbortError(undefined, { cause: signal?.reason });
326326

327327
const handle = new FSEvent();
328-
let { promise, resolve, reject } = createDeferredPromise();
328+
let { promise, resolve, reject } = PromiseWithResolvers();
329329
const oncancel = () => {
330330
handle.close();
331331
reject(new AbortError(undefined, { cause: signal?.reason }));
@@ -368,7 +368,7 @@ async function* watch(filename, options = kEmptyObject) {
368368

369369
while (!signal?.aborted) {
370370
yield await promise;
371-
({ promise, resolve, reject } = createDeferredPromise());
371+
({ promise, resolve, reject } = PromiseWithResolvers());
372372
}
373373
throw new AbortError(undefined, { cause: signal?.reason });
374374
} finally {

lib/internal/per_context/primordials.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -744,5 +744,18 @@ primordials.SafeStringPrototypeSearch = (str, regexp) => {
744744
return match ? match.index : -1;
745745
};
746746

747+
// TODO(@anonrig): Remove this when V8 removes the flag to disable Promise.withResolvers()
748+
// eslint-disable-next-line node-core/prefer-primordials
749+
primordials.PromiseWithResolvers = Promise.withResolvers || (() => {
750+
let resolve;
751+
let reject;
752+
const promise = new Promise((res, rej) => {
753+
resolve = res;
754+
reject = rej;
755+
});
756+
757+
return { promise, resolve, reject };
758+
});
759+
747760
ObjectSetPrototypeOf(primordials, null);
748761
ObjectFreeze(primordials);

lib/internal/streams/duplexify.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
const {
44
FunctionPrototypeCall,
5+
PromiseWithResolvers,
56
} = primordials;
67

78
const {
@@ -27,7 +28,6 @@ const { destroyer } = require('internal/streams/destroy');
2728
const Duplex = require('internal/streams/duplex');
2829
const Readable = require('internal/streams/readable');
2930
const Writable = require('internal/streams/writable');
30-
const { createDeferredPromise } = require('internal/util');
3131
const from = require('internal/streams/from');
3232

3333
const {
@@ -209,7 +209,7 @@ module.exports = function duplexify(body, name) {
209209
};
210210

211211
function fromAsyncGen(fn) {
212-
let { promise, resolve } = createDeferredPromise();
212+
let { promise, resolve } = PromiseWithResolvers();
213213
const ac = new AbortController();
214214
const signal = ac.signal;
215215
const value = fn(async function*() {
@@ -221,7 +221,7 @@ function fromAsyncGen(fn) {
221221
if (done) return;
222222
if (signal.aborted)
223223
throw new AbortError(undefined, { cause: signal.reason });
224-
({ promise, resolve } = createDeferredPromise());
224+
({ promise, resolve } = PromiseWithResolvers());
225225
yield chunk;
226226
}
227227
}(), { signal });

lib/internal/test_runner/harness.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const {
44
ArrayPrototypePush,
55
FunctionPrototypeBind,
66
PromiseResolve,
7+
PromiseWithResolvers,
78
SafeMap,
89
SafePromiseAllReturnVoid,
910
} = primordials;
@@ -26,7 +27,6 @@ const {
2627
shouldColorizeTestFiles,
2728
} = require('internal/test_runner/utils');
2829
const { queueMicrotask } = require('internal/process/task_queues');
29-
const { createDeferredPromise } = require('internal/util');
3030
const { bigint: hrtime } = process.hrtime;
3131
const resolvedPromise = PromiseResolve();
3232
const testResources = new SafeMap();
@@ -35,7 +35,7 @@ let globalRoot;
3535
testResources.set(reporterScope.asyncId(), reporterScope);
3636

3737
function createTestTree(rootTestOptions, globalOptions) {
38-
const buildPhaseDeferred = createDeferredPromise();
38+
const buildPhaseDeferred = PromiseWithResolvers();
3939
const harness = {
4040
__proto__: null,
4141
buildPromise: buildPhaseDeferred.promise,

lib/internal/test_runner/runner.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const {
1717
ObjectAssign,
1818
PromisePrototypeThen,
1919
PromiseResolve,
20+
PromiseWithResolvers,
2021
SafeMap,
2122
SafePromiseAll,
2223
SafePromiseAllReturnVoid,
@@ -59,7 +60,6 @@ const { getInspectPort, isUsingInspector, isInspectorMessage } = require('intern
5960
const { isRegExp } = require('internal/util/types');
6061
const { pathToFileURL } = require('internal/url');
6162
const {
62-
createDeferredPromise,
6363
getCWDURL,
6464
kEmptyObject,
6565
} = require('internal/util');
@@ -688,7 +688,7 @@ function run(options = kEmptyObject) {
688688
};
689689
} else {
690690
runFiles = async () => {
691-
const { promise, resolve: finishBootstrap } = createDeferredPromise();
691+
const { promise, resolve: finishBootstrap } = PromiseWithResolvers();
692692

693693
await root.runInAsyncScope(async () => {
694694
const parentURL = getCWDURL().href;

lib/internal/test_runner/test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const {
1616
ObjectSeal,
1717
PromisePrototypeThen,
1818
PromiseResolve,
19+
PromiseWithResolvers,
1920
ReflectApply,
2021
RegExpPrototypeExec,
2122
SafeMap,
@@ -49,7 +50,6 @@ const {
4950
isTestFailureError,
5051
} = require('internal/test_runner/utils');
5152
const {
52-
createDeferredPromise,
5353
kEmptyObject,
5454
once: runOnce,
5555
} = require('internal/util');
@@ -133,7 +133,7 @@ function lazyAssertObject(harness) {
133133
}
134134

135135
function stopTest(timeout, signal) {
136-
const deferred = createDeferredPromise();
136+
const deferred = PromiseWithResolvers();
137137
const abortListener = addAbortListener(signal, deferred.resolve);
138138
let timer;
139139
let disposeFunction;
@@ -775,7 +775,7 @@ class Test extends AsyncResource {
775775
// pending for later execution.
776776
this.reporter.enqueue(this.nesting, this.loc, this.name);
777777
if (this.root.harness.buildPromise || !this.parent.hasConcurrency()) {
778-
const deferred = createDeferredPromise();
778+
const deferred = PromiseWithResolvers();
779779

780780
deferred.test = this;
781781
this.parent.addPendingSubtest(deferred);

lib/internal/test_runner/utils.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const {
1212
NumberParseInt,
1313
NumberPrototypeToFixed,
1414
ObjectGetOwnPropertyDescriptor,
15+
PromiseWithResolvers,
1516
RegExp,
1617
RegExpPrototypeExec,
1718
SafeMap,
@@ -27,7 +28,6 @@ const { AsyncResource } = require('async_hooks');
2728
const { relative } = require('path');
2829
const { createWriteStream } = require('fs');
2930
const { pathToFileURL } = require('internal/url');
30-
const { createDeferredPromise } = require('internal/util');
3131
const { getOptionValue } = require('internal/options');
3232
const { green, yellow, red, white, shouldColorize } = require('internal/util/colors');
3333

@@ -57,7 +57,7 @@ const kDefaultPattern = `**/{${ArrayPrototypeJoin(kPatterns, ',')}}.?(c|m)js`;
5757

5858
function createDeferredCallback() {
5959
let calledCount = 0;
60-
const { promise, resolve, reject } = createDeferredPromise();
60+
const { promise, resolve, reject } = PromiseWithResolvers();
6161
const cb = (err) => {
6262
calledCount++;
6363

0 commit comments

Comments
 (0)