Skip to content

Commit

Permalink
Use block bindings for SystemJS output
Browse files Browse the repository at this point in the history
  • Loading branch information
lukastaegert committed Sep 7, 2021
1 parent dc50059 commit d6fe2ab
Show file tree
Hide file tree
Showing 34 changed files with 2,379 additions and 2,914 deletions.
20 changes: 7 additions & 13 deletions src/finalisers/system.ts
Expand Up @@ -16,16 +16,14 @@ export default function system(
intro,
snippets,
outro,
usesTopLevelAwait,
varOrConst
usesTopLevelAwait
}: FinaliserOptions,
options: NormalizedOutputOptions
): Bundle {
const { _, getFunctionIntro, getNonArrowFunctionIntro, n, s } = snippets;
const { importBindings, setters, starExcludes } = analyzeDependencies(
dependencies,
exports,
varOrConst,
t,
snippets
);
Expand All @@ -44,7 +42,7 @@ export default function system(
`],${_}(${getNonArrowFunctionIntro(wrapperParams, { isAsync: false, name: null })}{${n}${t}${
options.strict ? "'use strict';" : ''
}` +
getStarExcludesBlock(starExcludes, varOrConst, t, snippets) +
getStarExcludesBlock(starExcludes, t, snippets) +
getImportBindingsBlock(importBindings, t, snippets) +
`${n}${t}return${_}{${
setters.length
Expand Down Expand Up @@ -82,9 +80,8 @@ export default function system(
function analyzeDependencies(
dependencies: ChunkDependencies,
exports: ChunkExports,
varOrConst: 'var' | 'const',
t: string,
{ _, getObject, getPropertyAccess, n }: GenerateCodeSnippets
{ _, cnst, getObject, getPropertyAccess, n }: GenerateCodeSnippets
): { importBindings: string[]; setters: string[]; starExcludes: Set<string> | null } {
const importBindings: string[] = [];
const setters: string[] = [];
Expand Down Expand Up @@ -122,9 +119,8 @@ function analyzeDependencies(
starExcludes = getStarExcludes({ dependencies, exports });
}
setter.push(
`${varOrConst} setter${_}=${_}${exportMapping};`,
// TODO Lukas const
`for${_}(var name${_}in${_}module)${_}{`,
`${cnst} setter${_}=${_}${exportMapping};`,
`for${_}(${cnst} name${_}in${_}module)${_}{`,
`${t}if${_}(!_starExcludes[name])${_}setter[name]${_}=${_}module[name];`,
'}',
'exports(setter);'
Expand Down Expand Up @@ -157,18 +153,16 @@ const getStarExcludes = ({ dependencies, exports }: ModuleDeclarations): Set<str

const getStarExcludesBlock = (
starExcludes: Set<string> | null,
varOrConst: string,
t: string,
{ _, getObject, n }: GenerateCodeSnippets
{ _, cnst, getObject, n }: GenerateCodeSnippets
): string =>
starExcludes
? `${n}${t}${varOrConst} _starExcludes${_}=${_}${getObject(
? `${n}${t}${cnst} _starExcludes${_}=${_}${getObject(
[...starExcludes].map(prop => [prop, '1']),
{ indent: _, lineBreaks: false }
)};`
: '';

// TODO Lukas use let instead of var
const getImportBindingsBlock = (
importBindings: string[],
t: string,
Expand Down
2 changes: 1 addition & 1 deletion test/cli/samples/generated-code-preset-override/_config.js
@@ -1,4 +1,4 @@
module.exports = {
description: 'overrides the treeshake option when using presets',
description: 'overrides the generatedCode option when using presets',
command: 'rollup --config --generatedCode es5 --generatedCode.arrowFunctions'
};
@@ -1,7 +1,13 @@
module.exports = {
description: 'does not use arrow functions',
options: {
external: ['external', 'externalAuto', 'externalDefault', 'externalDefaultOnly'],
external: [
'external',
'externalAuto',
'externalDefault',
'externalDefaultOnly',
'externalNoImport'
],
strictDeprecations: false,
output: {
compact: true,
Expand Down
@@ -1,7 +1,13 @@
module.exports = {
description: 'uses arrow functions',
options: {
external: ['external', 'externalAuto', 'externalDefault', 'externalDefaultOnly'],
external: [
'external',
'externalAuto',
'externalDefault',
'externalDefaultOnly',
'externalNoImport'
],
strictDeprecations: false,
output: {
compact: true,
Expand Down
@@ -0,0 +1,11 @@
module.exports = {
description: 'does not use block bindings',
options: {
external: ['external'],
output: {
compact: true,
generatedCode: { arrowFunctions: true, blockBindings: true },
name: 'bundle'
}
}
};

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

@@ -0,0 +1 @@
import foo__default from'external';export*from'external';console.log(foo__default);

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

@@ -0,0 +1,11 @@
module.exports = {
description: 'uses block bindings',
options: {
external: ['external'],
output: {
compact: true,
generatedCode: { arrowFunctions: true, blockBindings: true },
name: 'bundle'
}
}
};

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

@@ -0,0 +1 @@
import foo__default from'external';export*from'external';console.log(foo__default);

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

@@ -1,9 +1,18 @@
define(['external'], (function (foo) { 'use strict';
define(['exports', 'external'], (function (exports, foo) { 'use strict';

var _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { 'default': e };

var foo__default = /*#__PURE__*/_interopDefaultLegacy(foo);

console.log(foo__default["default"]);

Object.keys(foo).forEach(k => {
if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
enumerable: true,
get: () => foo[k]
});
});

Object.defineProperty(exports, '__esModule', { value: true });

}));
@@ -1,9 +1,18 @@
'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var foo = require('external');

var _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { 'default': e };

var foo__default = /*#__PURE__*/_interopDefaultLegacy(foo);

console.log(foo__default["default"]);

Object.keys(foo).forEach(k => {
if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
enumerable: true,
get: () => foo[k]
});
});
@@ -1,3 +1,4 @@
import foo from 'external';
import foo__default from 'external';
export * from 'external';

console.log(foo);
console.log(foo__default);
@@ -1,4 +1,4 @@
(function (foo) {
var bundle = (function (exports, foo) {
'use strict';

var _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { 'default': e };
Expand All @@ -7,4 +7,15 @@

console.log(foo__default["default"]);

})(foo);
Object.keys(foo).forEach(k => {
if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
enumerable: true,
get: () => foo[k]
});
});

Object.defineProperty(exports, '__esModule', { value: true });

return exports;

})({}, foo);
@@ -1,13 +1,19 @@
System.register('bundle', ['external'], (function () {
System.register('bundle', ['external'], (function (exports) {
'use strict';
var foo;
var _starExcludes = { 'default': 1 };
var foo__default;
return {
setters: [module => {
foo = module["default"];
foo__default = module["default"];
var setter = {};
for (var name in module) {
if (!_starExcludes[name]) setter[name] = module[name];
}
exports(setter);
}],
execute: (function () {

console.log(foo);
console.log(foo__default);

})
};
Expand Down
@@ -1,13 +1,22 @@
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('external')) :
typeof define === 'function' && define.amd ? define(['external'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.foo));
})(this, (function (foo) { 'use strict';
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) :
typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.bundle = {}, global.foo));
})(this, (function (exports, foo) { 'use strict';

var _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { 'default': e };

var foo__default = /*#__PURE__*/_interopDefaultLegacy(foo);

console.log(foo__default["default"]);

Object.keys(foo).forEach(k => {
if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
enumerable: true,
get: () => foo[k]
});
});

Object.defineProperty(exports, '__esModule', { value: true });

}));
@@ -1,2 +1,3 @@
import foo from 'external';
console.log(foo);
export * from 'external';
@@ -1,9 +1,18 @@
define(['external'], (function (foo) { 'use strict';
define(['exports', 'external'], (function (exports, foo) { 'use strict';

const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { 'default': e };

const foo__default = /*#__PURE__*/_interopDefaultLegacy(foo);

console.log(foo__default["default"]);

Object.keys(foo).forEach(k => {
if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
enumerable: true,
get: () => foo[k]
});
});

Object.defineProperty(exports, '__esModule', { value: true });

}));
@@ -1,9 +1,18 @@
'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

const foo = require('external');

const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { 'default': e };

const foo__default = /*#__PURE__*/_interopDefaultLegacy(foo);

console.log(foo__default["default"]);

Object.keys(foo).forEach(k => {
if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
enumerable: true,
get: () => foo[k]
});
});
@@ -1,3 +1,4 @@
import foo from 'external';
import foo__default from 'external';
export * from 'external';

console.log(foo);
console.log(foo__default);
@@ -1,4 +1,4 @@
(function (foo) {
var bundle = (function (exports, foo) {
'use strict';

const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { 'default': e };
Expand All @@ -7,4 +7,15 @@

console.log(foo__default["default"]);

})(foo);
Object.keys(foo).forEach(k => {
if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
enumerable: true,
get: () => foo[k]
});
});

Object.defineProperty(exports, '__esModule', { value: true });

return exports;

})({}, foo);
@@ -1,13 +1,19 @@
System.register('bundle', ['external'], (function () {
System.register('bundle', ['external'], (function (exports) {
'use strict';
var foo;
const _starExcludes = { 'default': 1 };
var foo__default;
return {
setters: [module => {
foo = module["default"];
foo__default = module["default"];
const setter = {};
for (const name in module) {
if (!_starExcludes[name]) setter[name] = module[name];
}
exports(setter);
}],
execute: (function () {

console.log(foo);
console.log(foo__default);

})
};
Expand Down

0 comments on commit d6fe2ab

Please sign in to comment.