diff --git a/src/Chunk.ts b/src/Chunk.ts index d74890d50ef..e59ff285000 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -291,13 +291,13 @@ export default class Chunk { } } for (const module of this.entryModules) { - const requiredFacades: FacadeName[] = [...module.userChunkNames].map(name => ({ + const requiredFacades: FacadeName[] = Array.from(module.userChunkNames, name => ({ name })); if (requiredFacades.length === 0 && module.isUserDefinedEntryPoint) { requiredFacades.push({}); } - requiredFacades.push(...[...module.chunkFileNames].map(fileName => ({ fileName }))); + requiredFacades.push(...Array.from(module.chunkFileNames, fileName => ({ fileName }))); if (requiredFacades.length === 0) { requiredFacades.push({}); } @@ -416,7 +416,7 @@ export default class Chunk { } getDynamicImportIds(): string[] { - return [...this.dynamicDependencies].map(chunk => chunk.id as string); + return Array.from(this.dynamicDependencies, chunk => chunk.id as string); } getExportNames(): string[] { @@ -426,7 +426,7 @@ export default class Chunk { } getImportIds(): string[] { - return [...this.dependencies].map(chunk => chunk.id as string); + return Array.from(this.dependencies, chunk => chunk.id as string); } getRenderedHash(outputPluginDriver: PluginDriver): string { diff --git a/src/Module.ts b/src/Module.ts index da56c09984f..819083f69a6 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -717,7 +717,7 @@ export default class Module { ast: this.esTreeAst, code: this.code, customTransformCache: this.customTransformCache, - dependencies: [...this.dependencies].map(module => module.id), + dependencies: Array.from(this.dependencies, module => module.id), id: this.id, moduleSideEffects: this.moduleSideEffects, originalCode: this.originalCode, diff --git a/src/ModuleLoader.ts b/src/ModuleLoader.ts index 649843c7d87..8fee02fb38f 100644 --- a/src/ModuleLoader.ts +++ b/src/ModuleLoader.ts @@ -234,7 +234,7 @@ export class ModuleLoader { private fetchAllDependencies(module: Module): Promise { return Promise.all([ - ...[...module.sources].map(async source => { + ...Array.from(module.sources, async source => { const resolution = await this.fetchResolvedDependency( source, module.id, diff --git a/src/ast/nodes/shared/knownGlobals.ts b/src/ast/nodes/shared/knownGlobals.ts index 85fe83b4a91..be47374f08d 100644 --- a/src/ast/nodes/shared/knownGlobals.ts +++ b/src/ast/nodes/shared/knownGlobals.ts @@ -76,7 +76,7 @@ const knownGlobals: GlobalDescription = { // @ts-ignore __proto__: null, [ValueProperties]: IMPURE, - from: PF, + from: O, isArray: PF, of: PF, prototype: O diff --git a/test/function/samples/array-from-side-effect/_config.js b/test/function/samples/array-from-side-effect/_config.js new file mode 100644 index 00000000000..f8fffc8cca0 --- /dev/null +++ b/test/function/samples/array-from-side-effect/_config.js @@ -0,0 +1,8 @@ +const assert = require('assert'); + +module.exports = { + description: 'Observes side-effects in Array.from', + exports(exports) { + assert.strictEqual(exports.x, 7); + } +}; diff --git a/test/function/samples/array-from-side-effect/main.js b/test/function/samples/array-from-side-effect/main.js new file mode 100644 index 00000000000..8d4d2b00f67 --- /dev/null +++ b/test/function/samples/array-from-side-effect/main.js @@ -0,0 +1,3 @@ +export let x = 1; +const list = [1, 2, 3]; +Array.from(list, v => (x += v));