diff --git a/src/Chunk.ts b/src/Chunk.ts index 74b095ae887..8d358ade374 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -5,7 +5,6 @@ import Module from './Module'; import ExportDefaultDeclaration from './ast/nodes/ExportDefaultDeclaration'; import FunctionDeclaration from './ast/nodes/FunctionDeclaration'; import ChildScope from './ast/scopes/ChildScope'; -import { UNDEFINED_EXPRESSION } from './ast/values'; import ExportDefaultVariable from './ast/variables/ExportDefaultVariable'; import ExportShimVariable from './ast/variables/ExportShimVariable'; import LocalVariable from './ast/variables/LocalVariable'; @@ -83,7 +82,6 @@ export type ChunkExports = { expression: string | null; hoisted: boolean; local: string; - uninitialized: boolean; }[]; export interface ReexportSpecifier { @@ -997,12 +995,8 @@ export default class Chunk { } let expression = null; let hoisted = false; - let uninitialized = false; let local = variable.getName(); if (variable instanceof LocalVariable) { - if (variable.init === UNDEFINED_EXPRESSION) { - uninitialized = true; - } for (const declaration of variable.declarations) { if ( declaration.parent instanceof FunctionDeclaration || @@ -1024,8 +1018,7 @@ export default class Chunk { exported: exportName, expression, hoisted, - local, - uninitialized + local }); } return exports; diff --git a/src/ast/nodes/AssignmentExpression.ts b/src/ast/nodes/AssignmentExpression.ts index 28111010856..ef5b35288fb 100644 --- a/src/ast/nodes/AssignmentExpression.ts +++ b/src/ast/nodes/AssignmentExpression.ts @@ -7,10 +7,15 @@ import { removeLineBreaks, RenderOptions } from '../../utils/renderHelpers'; -import { getSystemExportFunctionLeft } from '../../utils/systemJsRendering'; +import { + renderSystemExportExpression, + renderSystemExportFunction, + renderSystemExportSequenceAfterExpression +} from '../../utils/systemJsRendering'; import { createHasEffectsContext, HasEffectsContext, InclusionContext } from '../ExecutionContext'; import { EMPTY_PATH, ObjectPath, UNKNOWN_PATH } from '../utils/PathTracker'; import Variable from '../variables/Variable'; +import Identifier from './Identifier'; import * as NodeType from './NodeType'; import { ExpressionNode, IncludeChildren, NodeBase } from './shared/Node'; import { PatternNode } from './shared/Pattern'; @@ -68,7 +73,7 @@ export default class AssignmentExpression extends NodeBase { render( code: MagicString, options: RenderOptions, - { preventASI, renderedParentType }: NodeRenderOptions = BLANK + { preventASI, renderedParentType, renderedSurroundingElement }: NodeRenderOptions = BLANK ): void { if (this.left.included) { this.left.render(code, options); @@ -83,40 +88,39 @@ export default class AssignmentExpression extends NodeBase { removeLineBreaks(code, inclusionStart, this.right.start); } this.right.render(code, options, { - renderedParentType: renderedParentType || this.parent.type + renderedParentType: renderedParentType || renderedSurroundingElement || this.parent.type }); } if (options.format === 'system') { - const exportNames = - this.left.variable && options.exportNamesByVariable.get(this.left.variable); - if (this.left.type === 'Identifier' && exportNames) { - const _ = options.compact ? '' : ' '; - const operatorPos = findFirstOccurrenceOutsideComment( - code.original, - this.operator, - this.left.end - ); - const operation = - this.operator.length > 1 ? `${exportNames[0]}${_}${this.operator.slice(0, -1)}${_}` : ''; - code.overwrite( - operatorPos, - findNonWhiteSpace(code.original, operatorPos + this.operator.length), - `=${_}${ - exportNames.length === 1 - ? `exports('${exportNames[0]}',${_}` - : getSystemExportFunctionLeft([this.left.variable!], false, options) - }${operation}` - ); - code.appendLeft(this.right.end, ')'); + if (this.left instanceof Identifier) { + const variable = this.left.variable!; + const exportNames = options.exportNamesByVariable.get(variable); + if (exportNames) { + if (exportNames.length === 1) { + renderSystemExportExpression(variable, this.start, this.end, code, options); + } else { + renderSystemExportSequenceAfterExpression( + variable, + this.start, + this.end, + this.parent.type !== NodeType.ExpressionStatement, + code, + options + ); + } + } } else { const systemPatternExports: Variable[] = []; this.left.addExportedVariables(systemPatternExports, options.exportNamesByVariable); if (systemPatternExports.length > 0) { - code.prependRight( + renderSystemExportFunction( + systemPatternExports, this.start, - `(${getSystemExportFunctionLeft(systemPatternExports, true, options)}` + this.end, + (renderedParentType || renderedSurroundingElement) === NodeType.ExpressionStatement, + code, + options ); - code.appendLeft(this.end, '))'); } } } diff --git a/src/ast/nodes/ImportExpression.ts b/src/ast/nodes/ImportExpression.ts index 1117494f793..f5e67cdd6ac 100644 --- a/src/ast/nodes/ImportExpression.ts +++ b/src/ast/nodes/ImportExpression.ts @@ -51,7 +51,8 @@ export default class ImportExpression extends NodeBase { code.overwrite( this.start, this.end, - `Promise.resolve().then(function${_}()${_}{${_}return ${this.inlineNamespace.getName()}${s}${_}})` + `Promise.resolve().then(function${_}()${_}{${_}return ${this.inlineNamespace.getName()}${s}${_}})`, + { contentOnly: true } ); return; } @@ -60,9 +61,10 @@ export default class ImportExpression extends NodeBase { code.overwrite( this.start, findFirstOccurrenceOutsideComment(code.original, '(', this.start + 6) + 1, - this.mechanism.left + this.mechanism.left, + { contentOnly: true } ); - code.overwrite(this.end - 1, this.end, this.mechanism.right); + code.overwrite(this.end - 1, this.end, this.mechanism.right, { contentOnly: true }); } this.source.render(code, options); } diff --git a/src/ast/nodes/UpdateExpression.ts b/src/ast/nodes/UpdateExpression.ts index 06aecaab74f..a6d7b0fdcd5 100644 --- a/src/ast/nodes/UpdateExpression.ts +++ b/src/ast/nodes/UpdateExpression.ts @@ -1,8 +1,9 @@ import MagicString from 'magic-string'; import { RenderOptions } from '../../utils/renderHelpers'; import { - getSystemExportFunctionLeft, - getSystemExportStatement + renderSystemExportExpression, + renderSystemExportSequenceAfterExpression, + renderSystemExportSequenceBeforeExpression } from '../../utils/systemJsRendering'; import { HasEffectsContext } from '../ExecutionContext'; import { EMPTY_PATH, ObjectPath } from '../utils/PathTracker'; @@ -32,48 +33,33 @@ export default class UpdateExpression extends NodeBase { render(code: MagicString, options: RenderOptions): void { this.argument.render(code, options); if (options.format === 'system') { - const variable = this.argument.variable; - const exportNames = options.exportNamesByVariable.get(variable!); - if (exportNames && exportNames.length) { + const variable = this.argument.variable!; + const exportNames = options.exportNamesByVariable.get(variable); + if (exportNames) { const _ = options.compact ? '' : ' '; - const name = variable!.getName(); if (this.prefix) { if (exportNames.length === 1) { - code.overwrite( - this.start, - this.end, - `exports('${exportNames[0]}',${_}${this.operator}${name})` - ); + renderSystemExportExpression(variable, this.start, this.end, code, options); } else { - code.overwrite( + renderSystemExportSequenceAfterExpression( + variable, this.start, this.end, - `(${this.operator}${name},${_}${getSystemExportStatement( - [variable!], - options - )},${_}${name})` + this.parent.type !== NodeType.ExpressionStatement, + code, + options ); } - } else if (exportNames.length > 1) { - code.overwrite( - this.start, - this.end, - `(${getSystemExportFunctionLeft([variable!], false, options)}${this.operator}${name}))` - ); } else { - let op; - switch (this.operator) { - case '++': - op = `${name}${_}+${_}1`; - break; - case '--': - op = `${name}${_}-${_}1`; - break; - } - code.overwrite( + const operator = this.operator[0]; + renderSystemExportSequenceBeforeExpression( + variable, this.start, this.end, - `(exports('${exportNames[0]}',${_}${op}),${_}${name}${this.operator})` + this.parent.type !== NodeType.ExpressionStatement, + code, + options, + `${_}${operator}${_}1` ); } } diff --git a/src/ast/nodes/VariableDeclaration.ts b/src/ast/nodes/VariableDeclaration.ts index b72e2e8559d..9327220f439 100644 --- a/src/ast/nodes/VariableDeclaration.ts +++ b/src/ast/nodes/VariableDeclaration.ts @@ -9,8 +9,8 @@ import { RenderOptions } from '../../utils/renderHelpers'; import { - getSystemExportFunctionLeft, - getSystemExportStatement + getSystemExportStatement, + renderSystemExportExpression } from '../../utils/systemJsRendering'; import { InclusionContext } from '../ExecutionContext'; import { EMPTY_PATH } from '../utils/PathTracker'; @@ -165,7 +165,12 @@ export default class VariableDeclaration extends NodeBase { let separatorString = '', leadingString, nextSeparatorString; - const systemPatternExports: Variable[] = []; + const aggregatedSystemExports: Variable[] = []; + const singleSystemExport = gatherSystemExportsAndGetSingleExport( + separatedNodes, + options, + aggregatedSystemExports + ); for (const { node, start, separator, contentEnd, end } of separatedNodes) { if (!node.included) { code.remove(start, end); @@ -186,27 +191,15 @@ export default class VariableDeclaration extends NodeBase { } isInDeclaration = false; } else { - if (options.format === 'system' && node.init !== null) { - if (node.id.type !== NodeType.Identifier) { - node.id.addExportedVariables(systemPatternExports, options.exportNamesByVariable); - } else { - const exportNames = options.exportNamesByVariable.get(node.id.variable!); - if (exportNames) { - const _ = options.compact ? '' : ' '; - const operatorPos = findFirstOccurrenceOutsideComment( - code.original, - '=', - node.id.end - ); - code.prependLeft( - findNonWhiteSpace(code.original, operatorPos + 1), - exportNames.length === 1 - ? `exports('${exportNames[0]}',${_}` - : getSystemExportFunctionLeft([node.id.variable!], false, options) - ); - nextSeparatorString += ')'; - } - } + if (singleSystemExport && singleSystemExport === node.id.variable) { + const operatorPos = findFirstOccurrenceOutsideComment(code.original, '=', node.id.end); + renderSystemExportExpression( + singleSystemExport, + findNonWhiteSpace(code.original, operatorPos + 1), + separator === null ? contentEnd : separator, + code, + options + ); } if (isInDeclaration) { separatorString += ','; @@ -237,9 +230,40 @@ export default class VariableDeclaration extends NodeBase { lastSeparatorPos, actualContentEnd!, renderedContentEnd, - systemPatternExports, + aggregatedSystemExports, options, isNoStatement ); } } + +function gatherSystemExportsAndGetSingleExport( + separatedNodes: { + node: VariableDeclarator; + }[], + options: RenderOptions, + aggregatedSystemExports: Variable[] +): Variable | null { + let singleSystemExport: Variable | null = null; + if (options.format === 'system') { + for (const { node } of separatedNodes) { + if ( + node.id instanceof Identifier && + node.init && + aggregatedSystemExports.length === 0 && + options.exportNamesByVariable.get(node.id.variable!)?.length === 1 + ) { + singleSystemExport = node.id.variable!; + aggregatedSystemExports.push(singleSystemExport); + } else { + node.id.addExportedVariables(aggregatedSystemExports, options.exportNamesByVariable); + } + } + if (aggregatedSystemExports.length > 1) { + singleSystemExport = null; + } else if (singleSystemExport) { + aggregatedSystemExports.length = 0; + } + } + return singleSystemExport; +} diff --git a/src/finalisers/system.ts b/src/finalisers/system.ts index 49fccabb938..c30bbcfb8a6 100644 --- a/src/finalisers/system.ts +++ b/src/finalisers/system.ts @@ -6,13 +6,11 @@ import { FinaliserOptions } from './index'; function getStarExcludes({ dependencies, exports }: ModuleDeclarations): Set { const starExcludes = new Set(exports.map(expt => expt.exported)); - if (!starExcludes.has('default')) starExcludes.add('default'); - // also include reexport names + starExcludes.add('default'); for (const { reexports } of dependencies) { if (reexports) { for (const reexport of reexports) { - if (reexport.imported !== '*' && !starExcludes.has(reexport.reexported)) - starExcludes.add(reexport.reexported); + if (reexport.imported !== '*') starExcludes.add(reexport.reexported); } } } @@ -60,9 +58,7 @@ function getExportsBlock( const getHoistedExportsBlock = (exports: ChunkExports, _: string, t: string, n: string): string => getExportsBlock( - exports - .filter(expt => expt.hoisted || expt.uninitialized) - .map(expt => ({ name: expt.exported, value: expt.uninitialized ? 'void 0' : expt.local })), + exports.filter(expt => expt.hoisted).map(expt => ({ name: expt.exported, value: expt.local })), _, t, n @@ -139,10 +135,8 @@ export default function system( if (!starExcludes) { starExcludes = getStarExcludes({ dependencies, exports }); } - if (!createdSetter) { - setter.push(`${varOrConst} _setter${_}=${_}{};`); - createdSetter = true; - } + createdSetter = true; + setter.push(`${varOrConst} _setter${_}=${_}{};`); setter.push(`for${_}(var _$p${_}in${_}module)${_}{`); setter.push(`${t}if${_}(!_starExcludes[_$p])${_}_setter[_$p]${_}=${_}module[_$p];`); setter.push('}'); diff --git a/src/utils/systemJsRendering.ts b/src/utils/systemJsRendering.ts index 77a867c9254..206e470655f 100644 --- a/src/utils/systemJsRendering.ts +++ b/src/utils/systemJsRendering.ts @@ -1,42 +1,108 @@ +import MagicString from 'magic-string'; import Variable from '../ast/variables/Variable'; import { RenderOptions } from './renderHelpers'; export function getSystemExportStatement( exportedVariables: Variable[], - options: RenderOptions + { compact, exportNamesByVariable }: RenderOptions, + modifier = '' ): string { - const _ = options.compact ? '' : ' '; + const _ = compact ? '' : ' '; if ( exportedVariables.length === 1 && - options.exportNamesByVariable.get(exportedVariables[0])!.length === 1 + exportNamesByVariable.get(exportedVariables[0])!.length === 1 ) { const variable = exportedVariables[0]; - return `exports('${options.exportNamesByVariable.get(variable)}',${_}${variable.getName()})`; + return `exports('${exportNamesByVariable.get(variable)}',${_}${variable.getName()}${modifier})`; } else { return `exports({${_}${exportedVariables .map(variable => { - return options.exportNamesByVariable + return exportNamesByVariable .get(variable)! - .map(exportName => `${exportName}:${_}${variable.getName()}`) + .map(exportName => `${exportName}:${_}${variable.getName()}${modifier}`) .join(`,${_}`); }) .join(`,${_}`)}${_}})`; } } -export function getSystemExportFunctionLeft( +export function renderSystemExportExpression( + exportedVariable: Variable, + expressionStart: number, + expressionEnd: number, + code: MagicString, + { compact, exportNamesByVariable }: RenderOptions +): void { + const _ = compact ? '' : ' '; + code.prependRight( + expressionStart, + `exports('${exportNamesByVariable.get(exportedVariable)}',${_}` + ); + code.appendLeft(expressionEnd, ')'); +} + +export function renderSystemExportFunction( exportedVariables: Variable[], - setFromExpression: boolean, + expressionStart: number, + expressionEnd: number, + needsParens: boolean | undefined, + code: MagicString, options: RenderOptions -): string { +): void { const _ = options.compact ? '' : ' '; const s = options.compact ? '' : ';'; - return `function${_}(v)${_}{${_}return exports({${_}${exportedVariables - .map(variable => { - return options.exportNamesByVariable - .get(variable)! - .map(exportName => `${exportName}:${_}${setFromExpression ? variable.getName() : 'v'}`) - .join(`,${_}`); - }) - .join(`,${_}`)}${_}}),${_}v${s}${_}}(`; + code.prependRight( + expressionStart, + `function${_}(v)${_}{${_}return ${getSystemExportStatement( + exportedVariables, + options + )},${_}v${s}${_}}(` + ); + code.appendLeft(expressionEnd, ')'); + if (needsParens) { + code.prependRight(expressionStart, '('); + code.appendLeft(expressionEnd, ')'); + } +} + +export function renderSystemExportSequenceAfterExpression( + exportedVariable: Variable, + expressionStart: number, + expressionEnd: number, + needsParens: boolean | undefined, + code: MagicString, + options: RenderOptions +): void { + const _ = options.compact ? '' : ' '; + code.appendLeft( + expressionEnd, + `,${_}${getSystemExportStatement( + [exportedVariable], + options + )},${_}${exportedVariable.getName()}` + ); + if (needsParens) { + code.prependRight(expressionStart, '('); + code.appendLeft(expressionEnd, ')'); + } +} + +export function renderSystemExportSequenceBeforeExpression( + exportedVariable: Variable, + expressionStart: number, + expressionEnd: number, + needsParens: boolean | undefined, + code: MagicString, + options: RenderOptions, + modifier: string +): void { + const _ = options.compact ? '' : ' '; + code.prependRight( + expressionStart, + `${getSystemExportStatement([exportedVariable], options, modifier)},${_}` + ); + if (needsParens) { + code.prependRight(expressionStart, '('); + code.appendLeft(expressionEnd, ')'); + } } diff --git a/test/chunking-form/samples/chunk-live-bindings/_expected/system/generated-dep1.js b/test/chunking-form/samples/chunk-live-bindings/_expected/system/generated-dep1.js index b7059895ad0..9c556ec0931 100644 --- a/test/chunking-form/samples/chunk-live-bindings/_expected/system/generated-dep1.js +++ b/test/chunking-form/samples/chunk-live-bindings/_expected/system/generated-dep1.js @@ -15,14 +15,14 @@ System.register([], function (exports) { function fn$1 () { fn$2(); console.log(text); - text$1 = exports('b', 'dep1 fn after dep2'); + exports('b', text$1 = 'dep1 fn after dep2'); } var text$1 = exports('b', 'dep1 fn'); function fn () { console.log(text$1); - text = exports('t', 'dep2 fn after dep1'); + exports('t', text = 'dep2 fn after dep1'); } var text = exports('t', 'dep2 fn'); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/dep.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/dep.js index 850241b9ad6..c4aea58c6cd 100644 --- a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/dep.js +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/dep.js @@ -3,7 +3,7 @@ System.register([], function (exports) { return { execute: function () { - const foo = function (v) { return exports({ foo: v, bar: v }), v; }(1); + const foo = 1; exports({ foo: foo, bar: foo }); } }; diff --git a/test/chunking-form/samples/preserve-modules-export-alias/_expected/system/dep.js b/test/chunking-form/samples/preserve-modules-export-alias/_expected/system/dep.js index 850241b9ad6..c4aea58c6cd 100644 --- a/test/chunking-form/samples/preserve-modules-export-alias/_expected/system/dep.js +++ b/test/chunking-form/samples/preserve-modules-export-alias/_expected/system/dep.js @@ -3,7 +3,7 @@ System.register([], function (exports) { return { execute: function () { - const foo = function (v) { return exports({ foo: v, bar: v }), v; }(1); + const foo = 1; exports({ foo: foo, bar: foo }); } }; diff --git a/test/chunking-form/samples/sanitize-internal-exports/_expected/system/main.js b/test/chunking-form/samples/sanitize-internal-exports/_expected/system/main.js index 8cd65e22484..e04f32c6caf 100644 --- a/test/chunking-form/samples/sanitize-internal-exports/_expected/system/main.js +++ b/test/chunking-form/samples/sanitize-internal-exports/_expected/system/main.js @@ -3,281 +3,6 @@ System.register([], function (exports, module) { return { execute: function () { - exports({ - v1: void 0, - v10: void 0, - v100: void 0, - v101: void 0, - v102: void 0, - v103: void 0, - v104: void 0, - v105: void 0, - v106: void 0, - v107: void 0, - v108: void 0, - v109: void 0, - v11: void 0, - v110: void 0, - v111: void 0, - v112: void 0, - v113: void 0, - v114: void 0, - v115: void 0, - v116: void 0, - v117: void 0, - v118: void 0, - v119: void 0, - v12: void 0, - v120: void 0, - v121: void 0, - v122: void 0, - v123: void 0, - v124: void 0, - v125: void 0, - v126: void 0, - v127: void 0, - v128: void 0, - v129: void 0, - v13: void 0, - v130: void 0, - v131: void 0, - v132: void 0, - v133: void 0, - v134: void 0, - v135: void 0, - v136: void 0, - v137: void 0, - v138: void 0, - v139: void 0, - v14: void 0, - v140: void 0, - v141: void 0, - v142: void 0, - v143: void 0, - v144: void 0, - v145: void 0, - v146: void 0, - v147: void 0, - v148: void 0, - v149: void 0, - v15: void 0, - v150: void 0, - v151: void 0, - v152: void 0, - v153: void 0, - v154: void 0, - v155: void 0, - v156: void 0, - v157: void 0, - v158: void 0, - v159: void 0, - v16: void 0, - v160: void 0, - v161: void 0, - v162: void 0, - v163: void 0, - v164: void 0, - v165: void 0, - v166: void 0, - v167: void 0, - v168: void 0, - v169: void 0, - v17: void 0, - v170: void 0, - v171: void 0, - v172: void 0, - v173: void 0, - v174: void 0, - v175: void 0, - v176: void 0, - v177: void 0, - v178: void 0, - v179: void 0, - v18: void 0, - v180: void 0, - v181: void 0, - v182: void 0, - v183: void 0, - v184: void 0, - v185: void 0, - v186: void 0, - v187: void 0, - v188: void 0, - v189: void 0, - v19: void 0, - v190: void 0, - v191: void 0, - v192: void 0, - v193: void 0, - v194: void 0, - v195: void 0, - v196: void 0, - v197: void 0, - v198: void 0, - v199: void 0, - v2: void 0, - v20: void 0, - v200: void 0, - v201: void 0, - v202: void 0, - v203: void 0, - v204: void 0, - v205: void 0, - v206: void 0, - v207: void 0, - v208: void 0, - v209: void 0, - v21: void 0, - v210: void 0, - v211: void 0, - v212: void 0, - v213: void 0, - v214: void 0, - v215: void 0, - v216: void 0, - v217: void 0, - v218: void 0, - v219: void 0, - v22: void 0, - v220: void 0, - v221: void 0, - v222: void 0, - v223: void 0, - v224: void 0, - v225: void 0, - v226: void 0, - v227: void 0, - v228: void 0, - v229: void 0, - v23: void 0, - v230: void 0, - v231: void 0, - v232: void 0, - v233: void 0, - v234: void 0, - v235: void 0, - v236: void 0, - v237: void 0, - v238: void 0, - v239: void 0, - v24: void 0, - v240: void 0, - v241: void 0, - v242: void 0, - v243: void 0, - v244: void 0, - v245: void 0, - v246: void 0, - v247: void 0, - v248: void 0, - v249: void 0, - v25: void 0, - v250: void 0, - v251: void 0, - v252: void 0, - v253: void 0, - v254: void 0, - v255: void 0, - v256: void 0, - v257: void 0, - v258: void 0, - v259: void 0, - v26: void 0, - v260: void 0, - v261: void 0, - v262: void 0, - v263: void 0, - v264: void 0, - v265: void 0, - v266: void 0, - v267: void 0, - v268: void 0, - v269: void 0, - v27: void 0, - v270: void 0, - v271: void 0, - v272: void 0, - v28: void 0, - v29: void 0, - v3: void 0, - v30: void 0, - v31: void 0, - v32: void 0, - v33: void 0, - v34: void 0, - v35: void 0, - v36: void 0, - v37: void 0, - v38: void 0, - v39: void 0, - v4: void 0, - v40: void 0, - v41: void 0, - v42: void 0, - v43: void 0, - v44: void 0, - v45: void 0, - v46: void 0, - v47: void 0, - v48: void 0, - v49: void 0, - v5: void 0, - v50: void 0, - v51: void 0, - v52: void 0, - v53: void 0, - v54: void 0, - v55: void 0, - v56: void 0, - v57: void 0, - v58: void 0, - v59: void 0, - v6: void 0, - v60: void 0, - v61: void 0, - v62: void 0, - v63: void 0, - v64: void 0, - v65: void 0, - v66: void 0, - v67: void 0, - v68: void 0, - v69: void 0, - v7: void 0, - v70: void 0, - v71: void 0, - v72: void 0, - v73: void 0, - v74: void 0, - v75: void 0, - v76: void 0, - v77: void 0, - v78: void 0, - v79: void 0, - v8: void 0, - v80: void 0, - v81: void 0, - v82: void 0, - v83: void 0, - v84: void 0, - v85: void 0, - v86: void 0, - v87: void 0, - v88: void 0, - v89: void 0, - v9: void 0, - v90: void 0, - v91: void 0, - v92: void 0, - v93: void 0, - v94: void 0, - v95: void 0, - v96: void 0, - v97: void 0, - v98: void 0, - v99: void 0 - }); - var v1, v2, v3, @@ -549,7 +274,7 @@ System.register([], function (exports, module) { v269, v270, v271, - v272; + v272; exports({ v1: v1, v2: v2, v3: v3, v4: v4, v5: v5, v6: v6, v7: v7, v8: v8, v9: v9, v10: v10, v11: v11, v12: v12, v13: v13, v14: v14, v15: v15, v16: v16, v17: v17, v18: v18, v19: v19, v20: v20, v21: v21, v22: v22, v23: v23, v24: v24, v25: v25, v26: v26, v27: v27, v28: v28, v29: v29, v30: v30, v31: v31, v32: v32, v33: v33, v34: v34, v35: v35, v36: v36, v37: v37, v38: v38, v39: v39, v40: v40, v41: v41, v42: v42, v43: v43, v44: v44, v45: v45, v46: v46, v47: v47, v48: v48, v49: v49, v50: v50, v51: v51, v52: v52, v53: v53, v54: v54, v55: v55, v56: v56, v57: v57, v58: v58, v59: v59, v60: v60, v61: v61, v62: v62, v63: v63, v64: v64, v65: v65, v66: v66, v67: v67, v68: v68, v69: v69, v70: v70, v71: v71, v72: v72, v73: v73, v74: v74, v75: v75, v76: v76, v77: v77, v78: v78, v79: v79, v80: v80, v81: v81, v82: v82, v83: v83, v84: v84, v85: v85, v86: v86, v87: v87, v88: v88, v89: v89, v90: v90, v91: v91, v92: v92, v93: v93, v94: v94, v95: v95, v96: v96, v97: v97, v98: v98, v99: v99, v100: v100, v101: v101, v102: v102, v103: v103, v104: v104, v105: v105, v106: v106, v107: v107, v108: v108, v109: v109, v110: v110, v111: v111, v112: v112, v113: v113, v114: v114, v115: v115, v116: v116, v117: v117, v118: v118, v119: v119, v120: v120, v121: v121, v122: v122, v123: v123, v124: v124, v125: v125, v126: v126, v127: v127, v128: v128, v129: v129, v130: v130, v131: v131, v132: v132, v133: v133, v134: v134, v135: v135, v136: v136, v137: v137, v138: v138, v139: v139, v140: v140, v141: v141, v142: v142, v143: v143, v144: v144, v145: v145, v146: v146, v147: v147, v148: v148, v149: v149, v150: v150, v151: v151, v152: v152, v153: v153, v154: v154, v155: v155, v156: v156, v157: v157, v158: v158, v159: v159, v160: v160, v161: v161, v162: v162, v163: v163, v164: v164, v165: v165, v166: v166, v167: v167, v168: v168, v169: v169, v170: v170, v171: v171, v172: v172, v173: v173, v174: v174, v175: v175, v176: v176, v177: v177, v178: v178, v179: v179, v180: v180, v181: v181, v182: v182, v183: v183, v184: v184, v185: v185, v186: v186, v187: v187, v188: v188, v189: v189, v190: v190, v191: v191, v192: v192, v193: v193, v194: v194, v195: v195, v196: v196, v197: v197, v198: v198, v199: v199, v200: v200, v201: v201, v202: v202, v203: v203, v204: v204, v205: v205, v206: v206, v207: v207, v208: v208, v209: v209, v210: v210, v211: v211, v212: v212, v213: v213, v214: v214, v215: v215, v216: v216, v217: v217, v218: v218, v219: v219, v220: v220, v221: v221, v222: v222, v223: v223, v224: v224, v225: v225, v226: v226, v227: v227, v228: v228, v229: v229, v230: v230, v231: v231, v232: v232, v233: v233, v234: v234, v235: v235, v236: v236, v237: v237, v238: v238, v239: v239, v240: v240, v241: v241, v242: v242, v243: v243, v244: v244, v245: v245, v246: v246, v247: v247, v248: v248, v249: v249, v250: v250, v251: v251, v252: v252, v253: v253, v254: v254, v255: v255, v256: v256, v257: v257, v258: v258, v259: v259, v260: v260, v261: v261, v262: v262, v263: v263, v264: v264, v265: v265, v266: v266, v267: v267, v268: v268, v269: v269, v270: v270, v271: v271, v272: v272 }); const lazy = exports('lazy', module.import('./generated-lazy.js')); diff --git a/test/form/samples/assignment-to-exports-class-declaration/_expected/system.js b/test/form/samples/assignment-to-exports-class-declaration/_expected/system.js index d868c404bdd..355c3b216ce 100644 --- a/test/form/samples/assignment-to-exports-class-declaration/_expected/system.js +++ b/test/form/samples/assignment-to-exports-class-declaration/_expected/system.js @@ -4,7 +4,7 @@ System.register('myModule', [], function (exports) { execute: function () { let Foo = exports('Foo', class Foo {}); - Foo = exports('Foo', lol( Foo )); + exports('Foo', Foo = lol( Foo )); } }; diff --git a/test/form/samples/assignment-to-exports/_expected/system.js b/test/form/samples/assignment-to-exports/_expected/system.js index 4c730ae6d67..4736a84ceef 100644 --- a/test/form/samples/assignment-to-exports/_expected/system.js +++ b/test/form/samples/assignment-to-exports/_expected/system.js @@ -3,34 +3,27 @@ System.register('bundle', [], function (exports) { return { execute: function () { - exports({ - bar1: void 0, - bar2: void 0, - foo1: void 0, - foo2: void 0 - }); - // Unassigned export - var foo1; + var foo1; exports('foo1', foo1); // Reassigned uninitialised export - bar1 = exports('bar1', 1); - var bar1; + exports('bar1', bar1 = 1); + var bar1; exports('bar1', bar1); // Reassigned initialised export var baz1 = exports('baz1', 1); - baz1 = exports('baz1', 2); + exports('baz1', baz1 = 2); // Unassigned export - var kept1, foo2, kept2; + var kept1, foo2, kept2; exports('foo2', foo2); // Reassigned uninitialised export - var kept1, bar2, kept2; - bar2 = exports('bar2', 1); + var kept1, bar2, kept2; exports('bar2', bar2); + exports('bar2', bar2 = 1); // Reassigned initialised export var kept1, baz2 = exports('baz2', 1), kept2; - baz2 = exports('baz2', 2); + exports('baz2', baz2 = 2); console.log( kept1, kept2 ); diff --git a/test/form/samples/compact-named-export/_expected/system.js b/test/form/samples/compact-named-export/_expected/system.js index d6d3896ceb8..4537b7c6654 100644 --- a/test/form/samples/compact-named-export/_expected/system.js +++ b/test/form/samples/compact-named-export/_expected/system.js @@ -1,5 +1,5 @@ System.register('foo',[],function(exports){'use strict';return{execute:function(){let x = exports('x',42); -x=exports('x',x+1); -x=exports('x',x+1); -(exports('x',x+1),x++); +exports('x',x+=1); +exports('x',x=x+1); +exports('x',x+1),x++; exports('x',++x);}}}); \ No newline at end of file diff --git a/test/form/samples/deconflict-format-specific-exports/_expected/system.js b/test/form/samples/deconflict-format-specific-exports/_expected/system.js index db840212d24..75f0b444c21 100644 --- a/test/form/samples/deconflict-format-specific-exports/_expected/system.js +++ b/test/form/samples/deconflict-format-specific-exports/_expected/system.js @@ -13,7 +13,7 @@ System.register('bundle', [], function (exports) { x: 42 }; console.log(exports$1); - (exports('x', x + 1), x++); + exports('x', x + 1), x++; } function nestedNoConflict() { diff --git a/test/form/samples/deconflict-format-specific-globals/_expected/system.js b/test/form/samples/deconflict-format-specific-globals/_expected/system.js index a75b2da52c3..7be54025e43 100644 --- a/test/form/samples/deconflict-format-specific-globals/_expected/system.js +++ b/test/form/samples/deconflict-format-specific-globals/_expected/system.js @@ -33,7 +33,7 @@ System.register('bundle', ['external'], function (exports, module) { console.log(_interopDefault, _interopNamespace, module$1, require, exports$1, document, URL); module.import('external').then(console.log); - value = exports('default', 1); + exports('default', value = 1); console.log(module.meta.url); } diff --git a/test/form/samples/default-export-live-binding/_expected/system.js b/test/form/samples/default-export-live-binding/_expected/system.js index f64c633d298..913dacc4c9a 100644 --- a/test/form/samples/default-export-live-binding/_expected/system.js +++ b/test/form/samples/default-export-live-binding/_expected/system.js @@ -4,7 +4,7 @@ System.register('bundle', [], function (exports) { execute: function () { let foo = exports('default', null); - const setFoo = exports('setFoo', value => (foo = exports('default', value))); + const setFoo = exports('setFoo', value => (exports('default', foo = value))); } }; diff --git a/test/form/samples/export-live-bindings/_expected/system.js b/test/form/samples/export-live-bindings/_expected/system.js index 5dfb541a56a..f17b516dbd7 100644 --- a/test/form/samples/export-live-bindings/_expected/system.js +++ b/test/form/samples/export-live-bindings/_expected/system.js @@ -10,13 +10,13 @@ System.register('iife', [], function (exports) { }); function update$2 () { - foo = exports('foo', foo + 10); + exports('foo', foo += 10); } let foo = exports('foo', 10); function update$1 () { - (exports('bar', bar + 1), bar++); + exports('bar', bar + 1), bar++; } let bar = exports('bar', 10); diff --git a/test/form/samples/modify-export-semi/_expected/system.js b/test/form/samples/modify-export-semi/_expected/system.js index 1362736a2ba..4892ee7c31d 100644 --- a/test/form/samples/modify-export-semi/_expected/system.js +++ b/test/form/samples/modify-export-semi/_expected/system.js @@ -5,7 +5,7 @@ System.register([], function (exports) { let foo = exports('foo', 'foo'); - foo = exports('foo', 'bar'); + exports('foo', foo = 'bar'); } }; diff --git a/test/form/samples/override-external-namespace/_expected/system.js b/test/form/samples/override-external-namespace/_expected/system.js index 1ef69adff58..b263fe89b8a 100644 --- a/test/form/samples/override-external-namespace/_expected/system.js +++ b/test/form/samples/override-external-namespace/_expected/system.js @@ -11,15 +11,10 @@ System.register('bundle', ['external'], function (exports) { }], execute: function () { - exports({ - b: void 0, - c: void 0 - }); - const a = exports('a', 'defined'); - let b; - var c; - const reassign = exports('reassign', () => (b = exports('b', 'defined'))); + let b; exports('b', b); + var c; exports('c', c); + const reassign = exports('reassign', () => (exports('b', b = 'defined'))); } }; diff --git a/test/form/samples/reassigned-exported-functions-and-classes/_expected/system.js b/test/form/samples/reassigned-exported-functions-and-classes/_expected/system.js index a1e5425461f..2529a18ce30 100644 --- a/test/form/samples/reassigned-exported-functions-and-classes/_expected/system.js +++ b/test/form/samples/reassigned-exported-functions-and-classes/_expected/system.js @@ -6,10 +6,10 @@ System.register('bundle', [], function (exports) { exports('foo', foo); function foo () {} - foo = exports('foo', 1); + exports('foo', foo = 1); class bar {} exports('bar', bar); - bar = exports('bar', 1); + exports('bar', bar = 1); } }; diff --git a/test/form/samples/render-declaration-semicolons/_expected/system.js b/test/form/samples/render-declaration-semicolons/_expected/system.js index a6cb60bd425..670fb575ea3 100644 --- a/test/form/samples/render-declaration-semicolons/_expected/system.js +++ b/test/form/samples/render-declaration-semicolons/_expected/system.js @@ -3,13 +3,6 @@ System.register('bundle', [], function (exports) { return { execute: function () { - exports({ - i: void 0, - j: void 0, - k: void 0, - l: void 0 - }); - var a, b; console.log(a, b); @@ -22,13 +15,13 @@ System.register('bundle', [], function (exports) { const g = 3, h = 4; console.log(g, h); - var i, j; + var i, j; exports({ i: i, j: j }); - var k, l; + var k, l; exports({ k: k, l: l }); - const m = exports('m', 1), n = exports('n', 2); + const m = 1, n = 2; exports({ m: m, n: n }); - const o = exports('o', 3), p = exports('p', 4); + const o = 3, p = 4; exports({ o: o, p: p }); } }; diff --git a/test/form/samples/render-named-export-declarations/_expected/system.js b/test/form/samples/render-named-export-declarations/_expected/system.js index d47c490a381..a46a643249e 100644 --- a/test/form/samples/render-named-export-declarations/_expected/system.js +++ b/test/form/samples/render-named-export-declarations/_expected/system.js @@ -3,26 +3,17 @@ System.register('bundle', [], function (exports) { return { execute: function () { - exports({ - aBar: void 0, - aFoo: void 0, - bBar: void 0, - bFoo: void 0, - cFoo: void 0, - dBar: void 0 - }); + var aFoo, aBar; exports({ aFoo: aFoo, aBar: aBar }); + exports('aBar', aBar = 2); - var aFoo, aBar; - aBar = exports('aBar', 2); + var bFoo, bBar; exports({ bFoo: bFoo, bBar: bBar }); + exports('bFoo', bFoo = 2); - var bFoo, bBar; - bFoo = exports('bFoo', 2); + var cFoo, cBar = 1; exports({ cFoo: cFoo, cBar: cBar }); + exports('cBar', cBar = 2); - var cFoo, cBar = exports('cBar', 1); - cBar = exports('cBar', 2); - - var dFoo = exports('dFoo', 1), dBar; - dFoo = exports('dFoo', 2); + var dFoo = 1, dBar; exports({ dFoo: dFoo, dBar: dBar }); + exports('dFoo', dFoo = 2); } }; diff --git a/test/form/samples/system-comments/_expected.js b/test/form/samples/system-comments/_expected.js index 474e9b8e7d1..bf0f137f92c 100644 --- a/test/form/samples/system-comments/_expected.js +++ b/test/form/samples/system-comments/_expected.js @@ -7,13 +7,14 @@ System.register([], function (exports) { var singleLine = exports('singleLine', /*#__PURE__*/pureFunc()); - singleLine = exports('singleLine', /*#__PURE__*/pureFunc()); + exports('singleLine', singleLine = /*#__PURE__*/pureFunc()); var multiLine = exports('multiLine', /*#__PURE__*/ pureFunc()); - multiLine = exports('multiLine', /*#__PURE__*/ + exports('multiLine', multiLine = + /*#__PURE__*/ pureFunc()); } diff --git a/test/form/samples/system-export-compact/_expected.js b/test/form/samples/system-export-compact/_expected.js deleted file mode 100644 index 1160f5e7b11..00000000000 --- a/test/form/samples/system-export-compact/_expected.js +++ /dev/null @@ -1,3 +0,0 @@ -System.register([],function(exports){'use strict';return{execute:function(){exports({a:void 0,b:void 0,c:void 0});let a, b; - -(function(v){return exports({a:a}),v}([{ b: a = (exports('a',a-1),a--) }] = { b: (function(v){return exports({b:v,c:v}),v}(--b)) })), (function(v){return exports({a:a}),v}([a] = [1]));}}}); \ No newline at end of file diff --git a/test/form/samples/system-export-compact/main.js b/test/form/samples/system-export-compact/main.js deleted file mode 100644 index 41f58664a03..00000000000 --- a/test/form/samples/system-export-compact/main.js +++ /dev/null @@ -1,5 +0,0 @@ -export let a, b; - -[{ b: a = a-- }] = { b: b-- }, [a] = [1]; - -export { b as c }; diff --git a/test/form/samples/system-export-declarations/_config.js b/test/form/samples/system-export-declarations/_config.js new file mode 100644 index 00000000000..0c60c7ff7cb --- /dev/null +++ b/test/form/samples/system-export-declarations/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'Renders declarations where some variables are exported', + options: { + output: { + format: 'system' + } + } +}; diff --git a/test/form/samples/system-export-declarations/_expected.js b/test/form/samples/system-export-declarations/_expected.js new file mode 100644 index 00000000000..863dfa8c543 --- /dev/null +++ b/test/form/samples/system-export-declarations/_expected.js @@ -0,0 +1,30 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + // middle binding + const a1 = 1, a2 = exports('a2', 2), a3 = 3; + console.log(a1, a2, a3); + + // first binding + const b1 = exports('b1', 1), b2 = 2; + console.log(b1, b2); + + // last binding + const c1 = 1, c2 = exports('c2', 2); + console.log(c1, c2); + + // middle binding with other bindings removed + const d2 = exports('d2', 2); + + // uninitialized binding + let e1 = 1, e2, e3 = 3; exports('e2', e2); + console.log(e1, e2, e3); + + // destructuring declaration + let {f1, f2} = globalThis.obj; exports('f2', f2); + + } + }; +}); diff --git a/test/form/samples/system-export-declarations/main.js b/test/form/samples/system-export-declarations/main.js new file mode 100644 index 00000000000..b61ed02d886 --- /dev/null +++ b/test/form/samples/system-export-declarations/main.js @@ -0,0 +1,27 @@ +// middle binding +const a1 = 1, a2 = 2, a3 = 3; +console.log(a1, a2, a3); +export { a2 }; + +// first binding +const b1 = 1, b2 = 2; +console.log(b1, b2); +export { b1 }; + +// last binding +const c1 = 1, c2 = 2; +console.log(c1, c2); +export { c2 }; + +// middle binding with other bindings removed +const d1 = 1, d2 = 2, d3 = 3; +export { d2 }; + +// uninitialized binding +let e1 = 1, e2, e3 = 3; +console.log(e1, e2, e3); +export { e2 }; + +// destructuring declaration +let {f1, f2} = globalThis.obj, {f3} = globalThis.obj; +export { f2 }; diff --git a/test/form/samples/system-export-destructuring-assignment/_config.js b/test/form/samples/system-export-destructuring-assignment/_config.js deleted file mode 100644 index 82ec35dd48d..00000000000 --- a/test/form/samples/system-export-destructuring-assignment/_config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - description: 'supports destructuring assignments of exports for systemJS', - options: { - output: { - format: 'system' - } - } -}; diff --git a/test/form/samples/system-export-destructuring-assignment/_expected.js b/test/form/samples/system-export-destructuring-assignment/_expected.js deleted file mode 100644 index 37d18c89069..00000000000 --- a/test/form/samples/system-export-destructuring-assignment/_expected.js +++ /dev/null @@ -1,19 +0,0 @@ -System.register([], function (exports) { - 'use strict'; - return { - execute: function () { - - exports({ - a: void 0, - b: void 0, - c: void 0 - }); - - let a, b, c; - - console.log((function (v) { return exports({ a: a }), v; }({a} = someObject))); - ((function (v) { return exports({ b: b, c: c }), v; }({b, c} = someObject))); - - } - }; -}); diff --git a/test/form/samples/system-export-destructuring-assignment/main.js b/test/form/samples/system-export-destructuring-assignment/main.js deleted file mode 100644 index 5f3831cdff7..00000000000 --- a/test/form/samples/system-export-destructuring-assignment/main.js +++ /dev/null @@ -1,4 +0,0 @@ -export let a, b, c; - -console.log({a} = someObject); -({b, c} = someObject); diff --git a/test/form/samples/system-export-destructuring-declaration/_expected.js b/test/form/samples/system-export-destructuring-declaration/_expected.js index 6e2ba2be402..9ccd368a2dc 100644 --- a/test/form/samples/system-export-destructuring-declaration/_expected.js +++ b/test/form/samples/system-export-destructuring-declaration/_expected.js @@ -3,13 +3,15 @@ System.register([], function (exports) { return { execute: function () { - const {a = 1, ...b} = global1, c = exports('c', global2), {d} = global3; exports({ a: a, b: b, d: d }); + const {a = 1, ...b} = global1, c = global2, {d} = global3; exports({ a: a, b: b, c: c, d: d }); const [e, ...f] = global4; exports({ e: e, f: f }); const {g, x: h = 2, y: {z: i}, a: [j ,k,, l]} = global5; exports({ g: g, h: h, i: i, j: j, k: k, l: l }); var m = exports('m', 1); var {m} = global6; exports('m', m); + (function (v) { return exports('m', m), v; }({m} = global7)); + } }; }); diff --git a/test/form/samples/system-export-destructuring-declaration/main.js b/test/form/samples/system-export-destructuring-declaration/main.js index aacc41461f2..1433c43e60d 100644 --- a/test/form/samples/system-export-destructuring-declaration/main.js +++ b/test/form/samples/system-export-destructuring-declaration/main.js @@ -4,3 +4,5 @@ export const {g, x: h = 2, y: {z: i}, a: [j ,k,, l]} = global5; export var m = 1; var {m} = global6; + +null, {m} = global7; diff --git a/test/form/samples/system-export-compact/_config.js b/test/form/samples/system-export-rendering-compact/_config.js similarity index 50% rename from test/form/samples/system-export-compact/_config.js rename to test/form/samples/system-export-rendering-compact/_config.js index 7dc4dfaa73a..c06f8a33114 100644 --- a/test/form/samples/system-export-compact/_config.js +++ b/test/form/samples/system-export-rendering-compact/_config.js @@ -1,5 +1,5 @@ module.exports = { - description: 'supports destructuring assignments of exports for systemJS', + description: 'Renders updates of exported variables for SystemJS output in compact mode', options: { output: { format: 'system', diff --git a/test/form/samples/system-export-rendering-compact/_expected.js b/test/form/samples/system-export-rendering-compact/_expected.js new file mode 100644 index 00000000000..f943ad99017 --- /dev/null +++ b/test/form/samples/system-export-rendering-compact/_expected.js @@ -0,0 +1,55 @@ +System.register([],function(exports){'use strict';return{execute:function(){// --- +// Single export name +let foo = exports('foo',1); + +// Assignment +// foo = 2 +exports('foo',foo = 2); +console.log(exports('foo',foo = 2)); + +// foo += 2 +exports('foo',foo += 2); +console.log(exports('foo',foo += 2)); + +// { foo } = obj +(function(v){return exports('foo',foo),v}({ foo } = obj)); +console.log(function(v){return exports('foo',foo),v}({ foo } = obj)); + +// Update +// foo++ +exports('foo',foo+1),foo++; +console.log((exports('foo',foo+1),foo++)); +exports('foo',foo-1),foo--; + +// ++foo +exports('foo',++foo); +console.log(exports('foo',++foo)); +exports('foo',--foo); + +// --- +// Multiple export names +let bar = 1; exports({bar:bar,bar2:bar}); + +// Assignment +// bar = 2 +bar = 2,exports({bar:bar,bar2:bar}),bar; +console.log((bar = 2,exports({bar:bar,bar2:bar}),bar)); + +// bar += 2 +bar += 2,exports({bar:bar,bar2:bar}),bar; +console.log((bar += 2,exports({bar:bar,bar2:bar}),bar)); + +// { bar } = obj +(function(v){return exports({bar:bar,bar2:bar}),v}({ bar } = obj)); +console.log(function(v){return exports({bar:bar,bar2:bar}),v}({ bar } = obj)); + +// Update +// bar++ +exports({bar:bar+1,bar2:bar+1}),bar++; +console.log((exports({bar:bar+1,bar2:bar+1}),bar++)); +exports({bar:bar-1,bar2:bar-1}),bar--; + +// ++bar +++bar,exports({bar:bar,bar2:bar}),bar; +console.log((++bar,exports({bar:bar,bar2:bar}),bar)); +--bar,exports({bar:bar,bar2:bar}),bar;}}}); \ No newline at end of file diff --git a/test/form/samples/system-export-rendering-compact/main.js b/test/form/samples/system-export-rendering-compact/main.js new file mode 100644 index 00000000000..3ab355b4663 --- /dev/null +++ b/test/form/samples/system-export-rendering-compact/main.js @@ -0,0 +1,56 @@ +// --- +// Single export name +export let foo = 1; + +// Assignment +// foo = 2 +foo = 2; +console.log(foo = 2); + +// foo += 2 +foo += 2; +console.log(foo += 2); + +// { foo } = obj +({ foo } = obj); +console.log({ foo } = obj); + +// Update +// foo++ +foo++; +console.log(foo++); +foo--; + +// ++foo +++foo; +console.log(++foo); +--foo; + +// --- +// Multiple export names +export let bar = 1; +export { bar as bar2 }; + +// Assignment +// bar = 2 +bar = 2; +console.log(bar = 2); + +// bar += 2 +bar += 2; +console.log(bar += 2); + +// { bar } = obj +({ bar } = obj); +console.log({ bar } = obj); + +// Update +// bar++ +bar++; +console.log(bar++); +bar--; + +// ++bar +++bar; +console.log(++bar); +--bar; diff --git a/test/form/samples/system-export-rendering/_config.js b/test/form/samples/system-export-rendering/_config.js new file mode 100644 index 00000000000..846122a4c7c --- /dev/null +++ b/test/form/samples/system-export-rendering/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'Renders updates of exported variables for SystemJS output', + options: { + output: { + format: 'system' + } + } +}; diff --git a/test/form/samples/system-export-rendering/_expected.js b/test/form/samples/system-export-rendering/_expected.js new file mode 100644 index 00000000000..3901a93a30b --- /dev/null +++ b/test/form/samples/system-export-rendering/_expected.js @@ -0,0 +1,64 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + // --- + // Single export name + let foo = exports('foo', 1); + + // Assignment + // foo = 2 + exports('foo', foo = 2); + console.log(exports('foo', foo = 2)); + + // foo += 2 + exports('foo', foo += 2); + console.log(exports('foo', foo += 2)); + + // { foo } = obj + (function (v) { return exports('foo', foo), v; }({ foo } = obj)); + console.log(function (v) { return exports('foo', foo), v; }({ foo } = obj)); + + // Update + // foo++ + exports('foo', foo + 1), foo++; + console.log((exports('foo', foo + 1), foo++)); + exports('foo', foo - 1), foo--; + + // ++foo + exports('foo', ++foo); + console.log(exports('foo', ++foo)); + exports('foo', --foo); + + // --- + // Multiple export names + let bar = 1; exports({ bar: bar, bar2: bar }); + + // Assignment + // bar = 2 + bar = 2, exports({ bar: bar, bar2: bar }), bar; + console.log((bar = 2, exports({ bar: bar, bar2: bar }), bar)); + + // bar += 2 + bar += 2, exports({ bar: bar, bar2: bar }), bar; + console.log((bar += 2, exports({ bar: bar, bar2: bar }), bar)); + + // { bar } = obj + (function (v) { return exports({ bar: bar, bar2: bar }), v; }({ bar } = obj)); + console.log(function (v) { return exports({ bar: bar, bar2: bar }), v; }({ bar } = obj)); + + // Update + // bar++ + exports({ bar: bar + 1, bar2: bar + 1 }), bar++; + console.log((exports({ bar: bar + 1, bar2: bar + 1 }), bar++)); + exports({ bar: bar - 1, bar2: bar - 1 }), bar--; + + // ++bar + ++bar, exports({ bar: bar, bar2: bar }), bar; + console.log((++bar, exports({ bar: bar, bar2: bar }), bar)); + --bar, exports({ bar: bar, bar2: bar }), bar; + + } + }; +}); diff --git a/test/form/samples/system-export-rendering/main.js b/test/form/samples/system-export-rendering/main.js new file mode 100644 index 00000000000..3ab355b4663 --- /dev/null +++ b/test/form/samples/system-export-rendering/main.js @@ -0,0 +1,56 @@ +// --- +// Single export name +export let foo = 1; + +// Assignment +// foo = 2 +foo = 2; +console.log(foo = 2); + +// foo += 2 +foo += 2; +console.log(foo += 2); + +// { foo } = obj +({ foo } = obj); +console.log({ foo } = obj); + +// Update +// foo++ +foo++; +console.log(foo++); +foo--; + +// ++foo +++foo; +console.log(++foo); +--foo; + +// --- +// Multiple export names +export let bar = 1; +export { bar as bar2 }; + +// Assignment +// bar = 2 +bar = 2; +console.log(bar = 2); + +// bar += 2 +bar += 2; +console.log(bar += 2); + +// { bar } = obj +({ bar } = obj); +console.log({ bar } = obj); + +// Update +// bar++ +bar++; +console.log(bar++); +bar--; + +// ++bar +++bar; +console.log(++bar); +--bar; diff --git a/test/form/samples/system-multiple-export-bindings/_expected.js b/test/form/samples/system-multiple-export-bindings/_expected.js index c72502e8b94..4adc6c6deee 100644 --- a/test/form/samples/system-multiple-export-bindings/_expected.js +++ b/test/form/samples/system-multiple-export-bindings/_expected.js @@ -21,31 +21,31 @@ System.register([], function (exports) { // Namespace variable // Variable Declaration - let a = function (v) { return exports({ a: v, a2: v }), v; }(1), b = exports('b', 2), c = function (v) { return exports({ c: v, c2: v }), v; }(3); + let a = 1, b = 2, c = 3; exports({ a: a, a2: a, b: b, c: c, c2: c }); // Export default expression var a$1 = exports('default', a); // Assignment Expression - a = function (v) { return exports({ a: v, a2: v }), v; }(b = exports('b', c = function (v) { return exports({ c: v, c2: v }), v; }(0))); + a = exports('b', b = (c = 0, exports({ c: c, c2: c }), c)), exports({ a: a, a2: a }), a; // Destructing Assignment Expression - ((function (v) { return exports({ a: a, a2: a, b: b, c: c, c2: c }), v; }({ a, b, c } = { c: 4, b: 5, a: 6 }))); + (function (v) { return exports({ a: a, a2: a, b: b, c: c, c2: c }), v; }({ a, b, c } = { c: 4, b: 5, a: 6 })); // Destructuring Defaults - var p = function (v) { return exports({ p: v, pp: v }), v; }(5); - var q = function (v) { return exports({ q: v, qq: v }), v; }(10); - ((function (v) { return exports({ p: p, pp: p }), v; }({ p = q = function (v) { return exports({ q: v, qq: v }), v; }(20) } = {}))); + var p = 5; exports({ p: p, pp: p }); + var q = 10; exports({ q: q, qq: q }); + (function (v) { return exports({ p: p, pp: p }), v; }({ p = (q = 20, exports({ q: q, qq: q }), q) } = {})); // Function Assignment function fn () { } - fn = function (v) { return exports({ fn: v, fn2: v }), v; }(5); + fn = 5, exports({ fn: fn, fn2: fn }), fn; // Update Expression - (function (v) { return exports({ a: v, a2: v }), v; }(++a)), (exports('b', b + 1), b++), (++c, exports({ c: c, c2: c }), c); - (function (v) { return exports({ a: v, a2: v }), v; }(++a)); + (exports({ a: a + 1, a2: a + 1 }), a++), (exports('b', b + 1), b++), (++c, exports({ c: c, c2: c }), c); + (exports({ a: a + 1, a2: a + 1 }), a++); // Class Declaration class A {} exports({ A: A, B: A }); diff --git a/test/form/samples/system-uninitialized/_expected.js b/test/form/samples/system-uninitialized/_expected.js index 15dbebf0095..bf976f7cbd8 100644 --- a/test/form/samples/system-uninitialized/_expected.js +++ b/test/form/samples/system-uninitialized/_expected.js @@ -3,14 +3,11 @@ System.register([], function (exports) { return { execute: function () { - exports({ - p: void 0, - q: q - }); + exports('q', q); - var p; + var p; exports('p', p); function q () { - p = exports('p', 10); + exports('p', p = 10); } } diff --git a/test/form/samples/updating-assignments/_expected/system.js b/test/form/samples/updating-assignments/_expected/system.js index 78a7127d368..f67d255b221 100644 --- a/test/form/samples/updating-assignments/_expected/system.js +++ b/test/form/samples/updating-assignments/_expected/system.js @@ -4,19 +4,19 @@ System.register('bundle', [], function (exports) { execute: function () { let x = exports('x', 1); - x = exports('x', 2); - x = exports('x', x + 1); - x = exports('x', x - 1); - x = exports('x', x * 2); - x = exports('x', x / 2); - x = exports('x', x % 2); - x = exports('x', x ** 2); - x = exports('x', x << 1); - x = exports('x', x >> 1); - x = exports('x', x >>> 1); - x = exports('x', x & 3); - x = exports('x', x ^ 2); - x = exports('x', x | 2); + exports('x', x = 2); + exports('x', x += 1); + exports('x', x -= 1); + exports('x', x *= 2); + exports('x', x /= 2); + exports('x', x %= 2); + exports('x', x **= 2); + exports('x', x <<= 1); + exports('x', x >>= 1); + exports('x', x >>>= 1); + exports('x', x &= 3); + exports('x', x ^= 2); + exports('x', x |= 2); } };