mirror of
https://github.com/nodejs/node.git
synced 2026-10-14 10:26:26 -04:00
lib: add primordials.SafeArrayIterator
PR-URL: https://github.com/nodejs/node/pull/36532 Reviewed-By: Rich Trott <rtrott@gmail.com>
This commit is contained in:
1 parent
aabbf3011b
commit
0b6d3070a1
7 files changed
+33
-9
No files matched your search
@@ -13,6 +13,7 @@ const {
|
||||
ObjectGetOwnPropertyDescriptor,
|
||||
ObjectGetOwnPropertyDescriptors,
|
||||
ReflectApply,
|
||||
SafeArrayIterator,
|
||||
SafeMap,
|
||||
String,
|
||||
Symbol,
|
||||
@@ -653,6 +654,7 @@ function defineEventHandler(emitter, name) {
|
||||
const EventEmitterMixin = (Superclass) => {
|
||||
class MixedEventEmitter extends Superclass {
|
||||
constructor(...args) {
|
||||
args = new SafeArrayIterator(args);
|
||||
super(...args);
|
||||
FunctionPrototypeCall(EventEmitter, this);
|
||||
}
|
||||
|
||||
@@ -462,7 +462,7 @@ function trySelf(parentPath, request) {
|
||||
const EXPORTS_PATTERN = /^((?:@[^/\\%]+\/)?[^./\\%][^/\\%]*)(\/.*)?$/;
|
||||
function resolveExports(nmPath, request) {
|
||||
// The implementation's behavior is meant to mirror resolution in ESM.
|
||||
const [, name, expansion = ''] =
|
||||
const { 1: name, 2: expansion = '' } =
|
||||
StringPrototypeMatch(request, EXPORTS_PATTERN) || [];
|
||||
if (!name)
|
||||
return;
|
||||
|
||||
@@ -10,6 +10,7 @@ const {
|
||||
PromiseResolve,
|
||||
PromisePrototypeCatch,
|
||||
ReflectApply,
|
||||
SafeArrayIterator,
|
||||
SafeSet,
|
||||
StringPrototypeIncludes,
|
||||
StringPrototypeMatch,
|
||||
@@ -60,9 +61,9 @@ class ModuleJob {
|
||||
});
|
||||
|
||||
if (promises !== undefined)
|
||||
await PromiseAll(promises);
|
||||
await PromiseAll(new SafeArrayIterator(promises));
|
||||
|
||||
return PromiseAll(dependencyJobs);
|
||||
return PromiseAll(new SafeArrayIterator(dependencyJobs));
|
||||
};
|
||||
// Promise for the list of all dependencyJobs.
|
||||
this.linked = link();
|
||||
@@ -90,8 +91,8 @@ class ModuleJob {
|
||||
}
|
||||
jobsInGraph.add(moduleJob);
|
||||
const dependencyJobs = await moduleJob.linked;
|
||||
return PromiseAll(
|
||||
ArrayPrototypeMap(dependencyJobs, addJobsToDependencyGraph));
|
||||
return PromiseAll(new SafeArrayIterator(
|
||||
ArrayPrototypeMap(dependencyJobs, addJobsToDependencyGraph)));
|
||||
};
|
||||
await addJobsToDependencyGraph(this);
|
||||
|
||||
|
||||
@@ -242,6 +242,9 @@ primordials.SafeWeakSet = makeSafe(
|
||||
// Refs: https://tc39.es/ecma262/#sec-%typedarray%-intrinsic-object
|
||||
[
|
||||
{ name: 'TypedArray', original: Reflect.getPrototypeOf(Uint8Array) },
|
||||
{ name: 'ArrayIterator', original: {
|
||||
prototype: Reflect.getPrototypeOf(Array.prototype[Symbol.iterator]()),
|
||||
} },
|
||||
{ name: 'StringIterator', original: {
|
||||
prototype: Reflect.getPrototypeOf(String.prototype[Symbol.iterator]()),
|
||||
} },
|
||||
@@ -253,6 +256,10 @@ primordials.SafeWeakSet = makeSafe(
|
||||
copyPrototype(original.prototype, primordials, `${name}Prototype`);
|
||||
});
|
||||
|
||||
primordials.SafeArrayIterator = createSafeIterator(
|
||||
primordials.ArrayPrototypeSymbolIterator,
|
||||
primordials.ArrayIteratorPrototypeNext
|
||||
);
|
||||
primordials.SafeStringIterator = createSafeIterator(
|
||||
primordials.StringPrototypeSymbolIterator,
|
||||
primordials.StringIteratorPrototypeNext
|
||||
|
||||
+2
-2
@@ -446,8 +446,8 @@ ObjectDefineProperties(URL.prototype, {
|
||||
if (ctx.host === null && ctx.path.length > 1 && ctx.path[0] === '') {
|
||||
ret += '/.';
|
||||
}
|
||||
for (const segment of ctx.path) {
|
||||
ret += '/' + segment;
|
||||
if (ctx.path.length) {
|
||||
ret += '/' + ArrayPrototypeJoin(ctx.path, '/');
|
||||
}
|
||||
}
|
||||
if (options.search && ctx.query !== null)
|
||||
|
||||
@@ -6,6 +6,7 @@ const {
|
||||
ObjectDefineProperty,
|
||||
RegExp,
|
||||
RegExpPrototypeTest,
|
||||
SafeArrayIterator,
|
||||
StringPrototypeToUpperCase
|
||||
} = primordials;
|
||||
|
||||
@@ -78,7 +79,7 @@ function debuglog(set, cb) {
|
||||
debug = debuglogImpl(enabled, set);
|
||||
if (typeof cb === 'function')
|
||||
cb(debug);
|
||||
debug(...args);
|
||||
debug(...new SafeArrayIterator(args));
|
||||
};
|
||||
let enabled;
|
||||
let test = () => {
|
||||
@@ -86,7 +87,7 @@ function debuglog(set, cb) {
|
||||
test = () => enabled;
|
||||
return enabled;
|
||||
};
|
||||
const logger = (...args) => debug(...args);
|
||||
const logger = (...args) => debug(...new SafeArrayIterator(args));
|
||||
ObjectDefineProperty(logger, 'enabled', {
|
||||
get() {
|
||||
return test();
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
'use strict';
|
||||
|
||||
const common = require('../common');
|
||||
|
||||
|
||||
const ArrayIteratorPrototype =
|
||||
Object.getPrototypeOf(Array.prototype[Symbol.iterator]());
|
||||
|
||||
delete Array.prototype[Symbol.iterator];
|
||||
delete ArrayIteratorPrototype.next;
|
||||
|
||||
require('../common/fixtures');
|
||||
import('../fixtures/es-modules/test-esm-ok.mjs').then(common.mustCall());
|
||||
Reference in new issue
Block a user