From 5f4310d444c0d2c7ba5e70be7878a74927933ebf Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Fri, 3 Apr 2020 13:57:28 -0700 Subject: [PATCH] fixup Object.create assignment, __PURE__ tweaks --- src/ast/variables/NamespaceVariable.ts | 16 ++++++++----- .../_expected/amd/main.js | 2 +- .../_expected/cjs/main.js | 2 +- .../_expected/es/main.js | 2 +- .../_expected/system/main.js | 2 +- test/cli/node_modules/bar/lib/config.js | 11 +++++++++ test/cli/node_modules/bar/package.json | 3 +++ .../rollup-config-foo/lib/config.js | 11 +++++++++ .../rollup-config-foo/package.json | 3 +++ test/cli/samples/watch/bundle-error/main.js | 2 +- .../rollup.config.js | 23 +++++++++++++++---- .../watch/watch-config/rollup.config.js | 8 +------ .../_expected/amd.js | 3 +-- .../_expected/cjs.js | 3 +-- .../ns-external-star-reexport/_expected/es.js | 3 +-- .../_expected/system.js | 3 +-- 16 files changed, 67 insertions(+), 30 deletions(-) create mode 100644 test/cli/node_modules/bar/lib/config.js create mode 100644 test/cli/node_modules/bar/package.json create mode 100644 test/cli/node_modules/rollup-config-foo/lib/config.js create mode 100644 test/cli/node_modules/rollup-config-foo/package.json diff --git a/src/ast/variables/NamespaceVariable.ts b/src/ast/variables/NamespaceVariable.ts index f81eab1b2d8..65c124d5758 100644 --- a/src/ast/variables/NamespaceVariable.ts +++ b/src/ast/variables/NamespaceVariable.ts @@ -92,7 +92,8 @@ export default class NamespaceVariable extends Variable { return `${t}${safeName}: ${original.getName()}`; }); - members.unshift(`${t}__proto__:${_}null`); + const objectCreate = this.reexportedNamespaceVariables.length; + if (!objectCreate) members.unshift(`${t}__proto__:${_}null`); if (options.namespaceToStringTag) { members.unshift(`${t}[Symbol.toStringTag]:${_}'Module'`); @@ -101,12 +102,15 @@ export default class NamespaceVariable extends Variable { const name = this.getName(); let output = `{${n}${members.join(`,${n}`)}${n}}`; if (this.reexportedNamespaceVariables.length) { - output = `/*#__PURE__*/Object.assign(${this.reexportedNamespaceVariables + output = `Object.assign(Object.create(null), ${this.reexportedNamespaceVariables .map((v) => v.getName()) - .join(', ')}, ${output})`; - } - if (this.syntheticNamedExports) { - output = `/*#__PURE__*/Object.assign(${output}, ${this.module.getDefaultExport().getName()})`; + .join(', ')}, ${output}${ + this.syntheticNamedExports ? ', ' + this.module.getDefaultExport().getName() : '' + })`; + if (!options.freeze) output = '*#__PURE__*/' + output; + } else if (this.syntheticNamedExports) { + output = `Object.assign(${output}, ${this.module.getDefaultExport().getName()})`; + if (!options.freeze) output = '*#__PURE__*/' + output; } if (options.freeze) { output = `/*#__PURE__*/Object.freeze(${output})`; diff --git a/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/amd/main.js b/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/amd/main.js index 6285d62559e..5731e5c57a5 100644 --- a/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/amd/main.js +++ b/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/amd/main.js @@ -6,7 +6,7 @@ define(function () { 'use strict'; }; const foo = 100; - var ns = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign({ + var ns = /*#__PURE__*/Object.freeze(Object.assign({ __proto__: null, foo: foo, 'default': d diff --git a/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/cjs/main.js b/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/cjs/main.js index f2c1b375abb..282e6ab8941 100644 --- a/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/cjs/main.js +++ b/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/cjs/main.js @@ -6,7 +6,7 @@ const d = { }; const foo = 100; -var ns = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign({ +var ns = /*#__PURE__*/Object.freeze(Object.assign({ __proto__: null, foo: foo, 'default': d diff --git a/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/es/main.js b/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/es/main.js index 3b23f6d33bb..ab1c380da37 100644 --- a/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/es/main.js +++ b/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/es/main.js @@ -4,7 +4,7 @@ const d = { }; const foo = 100; -var ns = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign({ +var ns = /*#__PURE__*/Object.freeze(Object.assign({ __proto__: null, foo: foo, 'default': d diff --git a/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/system/main.js b/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/system/main.js index 1147e48c999..6aecf6312bf 100644 --- a/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/system/main.js +++ b/test/chunking-form/samples/mixed-synthetic-named-exports/_expected/system/main.js @@ -9,7 +9,7 @@ System.register([], function () { }; const foo = 100; - var ns = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign({ + var ns = /*#__PURE__*/Object.freeze(Object.assign({ __proto__: null, foo: foo, 'default': d diff --git a/test/cli/node_modules/bar/lib/config.js b/test/cli/node_modules/bar/lib/config.js new file mode 100644 index 00000000000..785d84d0212 --- /dev/null +++ b/test/cli/node_modules/bar/lib/config.js @@ -0,0 +1,11 @@ +const replace = require( '@rollup/plugin-replace' ); + +module.exports = { + input: 'main.js', + output: { + format: 'cjs' + }, + plugins: [ + replace( { ANSWER: 42 } ) + ] +}; diff --git a/test/cli/node_modules/bar/package.json b/test/cli/node_modules/bar/package.json new file mode 100644 index 00000000000..fbd490130d0 --- /dev/null +++ b/test/cli/node_modules/bar/package.json @@ -0,0 +1,3 @@ +{ + "main": "lib/config.js" +} diff --git a/test/cli/node_modules/rollup-config-foo/lib/config.js b/test/cli/node_modules/rollup-config-foo/lib/config.js new file mode 100644 index 00000000000..785d84d0212 --- /dev/null +++ b/test/cli/node_modules/rollup-config-foo/lib/config.js @@ -0,0 +1,11 @@ +const replace = require( '@rollup/plugin-replace' ); + +module.exports = { + input: 'main.js', + output: { + format: 'cjs' + }, + plugins: [ + replace( { ANSWER: 42 } ) + ] +}; diff --git a/test/cli/node_modules/rollup-config-foo/package.json b/test/cli/node_modules/rollup-config-foo/package.json new file mode 100644 index 00000000000..fbd490130d0 --- /dev/null +++ b/test/cli/node_modules/rollup-config-foo/package.json @@ -0,0 +1,3 @@ +{ + "main": "lib/config.js" +} diff --git a/test/cli/samples/watch/bundle-error/main.js b/test/cli/samples/watch/bundle-error/main.js index a4012bff06c..1352aefa03e 100644 --- a/test/cli/samples/watch/bundle-error/main.js +++ b/test/cli/samples/watch/bundle-error/main.js @@ -1 +1 @@ -export default 42; \ No newline at end of file +<=> \ No newline at end of file diff --git a/test/cli/samples/watch/watch-config-early-update/rollup.config.js b/test/cli/samples/watch/watch-config-early-update/rollup.config.js index ec6ec213bce..f6d6c59bddd 100644 --- a/test/cli/samples/watch/watch-config-early-update/rollup.config.js +++ b/test/cli/samples/watch/watch-config-early-update/rollup.config.js @@ -1,9 +1,24 @@ - export default { - input: {output2: "main.js"}, + import path from 'path'; + import fs from 'fs'; + const messageFile = path.resolve(__dirname, '_actual', 'message.txt'); + export default new Promise(resolve => { + fs.writeFileSync(messageFile, 'loading'); + const watcher = fs.watch(messageFile, event => { + if (event === 'change') { + const content = fs.readFileSync(messageFile, 'utf8'); + if (content === 'loaded') { + watcher.close(); + fs.writeFileSync(messageFile, 'resolved'); + resolve({ + input: {output1: "main.js"}, output: { dir: "_actual", format: "es" } - }; - \ No newline at end of file + }); + } + } + }); + }); + \ No newline at end of file diff --git a/test/cli/samples/watch/watch-config/rollup.config.js b/test/cli/samples/watch/watch-config/rollup.config.js index 2f5615a36b2..13c3a05fe47 100644 --- a/test/cli/samples/watch/watch-config/rollup.config.js +++ b/test/cli/samples/watch/watch-config/rollup.config.js @@ -1,7 +1 @@ -export default { - input: {output: "main4.js"}, - output: { - dir: "_actual", - format: "es" - } -}; \ No newline at end of file +throw new Error("Config contains initial errors"); \ No newline at end of file diff --git a/test/form/samples/ns-external-star-reexport/_expected/amd.js b/test/form/samples/ns-external-star-reexport/_expected/amd.js index a6985e6d5e8..93459c8c30b 100644 --- a/test/form/samples/ns-external-star-reexport/_expected/amd.js +++ b/test/form/samples/ns-external-star-reexport/_expected/amd.js @@ -2,8 +2,7 @@ define(['external-ns-1', 'external-ns-2'], function (externalNs1, externalNs2) { const val = 5; - var ns = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(externalNs1, externalNs2, { - __proto__: null, + var ns = /*#__PURE__*/Object.freeze(Object.assign(Object.create(null), externalNs1, externalNs2, { val: val })); diff --git a/test/form/samples/ns-external-star-reexport/_expected/cjs.js b/test/form/samples/ns-external-star-reexport/_expected/cjs.js index 8a7644394f7..986e8a89707 100644 --- a/test/form/samples/ns-external-star-reexport/_expected/cjs.js +++ b/test/form/samples/ns-external-star-reexport/_expected/cjs.js @@ -5,8 +5,7 @@ var externalNs2 = require('external-ns-2'); const val = 5; -var ns = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(externalNs1, externalNs2, { - __proto__: null, +var ns = /*#__PURE__*/Object.freeze(Object.assign(Object.create(null), externalNs1, externalNs2, { val: val })); diff --git a/test/form/samples/ns-external-star-reexport/_expected/es.js b/test/form/samples/ns-external-star-reexport/_expected/es.js index b5044bf53e5..b139f881c07 100644 --- a/test/form/samples/ns-external-star-reexport/_expected/es.js +++ b/test/form/samples/ns-external-star-reexport/_expected/es.js @@ -3,8 +3,7 @@ import * as externalNs2 from 'external-ns-2'; const val = 5; -var ns = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(externalNs1, externalNs2, { - __proto__: null, +var ns = /*#__PURE__*/Object.freeze(Object.assign(Object.create(null), externalNs1, externalNs2, { val: val })); diff --git a/test/form/samples/ns-external-star-reexport/_expected/system.js b/test/form/samples/ns-external-star-reexport/_expected/system.js index 4e307c3a236..0ab8d6a72e8 100644 --- a/test/form/samples/ns-external-star-reexport/_expected/system.js +++ b/test/form/samples/ns-external-star-reexport/_expected/system.js @@ -11,8 +11,7 @@ System.register(['external-ns-1', 'external-ns-2'], function (exports) { const val = 5; - var ns = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(externalNs1, externalNs2, { - __proto__: null, + var ns = /*#__PURE__*/Object.freeze(Object.assign(Object.create(null), externalNs1, externalNs2, { val: val }));