Skip to content

Commit

Permalink
Add pure annotations again, small refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
lukastaegert committed Apr 4, 2020
1 parent 6b43b23 commit 8ff2966
Show file tree
Hide file tree
Showing 22 changed files with 71 additions and 68 deletions.
48 changes: 23 additions & 25 deletions src/Module.ts
Expand Up @@ -5,7 +5,7 @@ import extractAssignedNames from 'rollup-pluginutils/src/extractAssignedNames';
import {
createHasEffectsContext,
createInclusionContext,
InclusionContext,
InclusionContext
} from './ast/ExecutionContext';
import ExportAllDeclaration from './ast/nodes/ExportAllDeclaration';
import ExportDefaultDeclaration from './ast/nodes/ExportDefaultDeclaration';
Expand Down Expand Up @@ -42,7 +42,7 @@ import {
ResolvedIdMap,
RollupError,
RollupWarning,
TransformModuleJSON,
TransformModuleJSON
} from './rollup/types';
import { error, Errors } from './utils/error';
import getCodeFrame from './utils/getCodeFrame';
Expand Down Expand Up @@ -123,7 +123,7 @@ export interface AstContext {
export const defaultAcornOptions: acorn.Options = {
ecmaVersion: 2020,
preserveParens: false,
sourceType: 'module',
sourceType: 'module'
};

function tryParse(module: Module, Parser: typeof acorn.Parser, acornOptions: acorn.Options) {
Expand All @@ -132,7 +132,7 @@ function tryParse(module: Module, Parser: typeof acorn.Parser, acornOptions: aco
...defaultAcornOptions,
...acornOptions,
onComment: (block: boolean, text: string, start: number, end: number) =>
module.comments.push({ block, text, start, end }),
module.comments.push({ block, text, start, end })
});
} catch (err) {
let message = err.message.replace(/ \(\d+:\d+\)$/, '');
Expand All @@ -145,7 +145,7 @@ function tryParse(module: Module, Parser: typeof acorn.Parser, acornOptions: aco
{
code: 'PARSE_ERROR',
message,
parserError: err,
parserError: err
},
err.pos
);
Expand All @@ -164,15 +164,15 @@ function handleMissingExport(
message: `'${exportName}' is not exported by ${relativeId(
importedModule
)}, imported by ${relativeId(importingModule.id)}`,
url: `https://rollupjs.org/guide/en/#error-name-is-not-exported-by-module`,
url: `https://rollupjs.org/guide/en/#error-name-is-not-exported-by-module`
},
importerStart!
);
}

const MISSING_EXPORT_SHIM_DESCRIPTION: ExportDescription = {
identifier: null,
localName: MISSING_EXPORT_SHIM_VARIABLE,
localName: MISSING_EXPORT_SHIM_VARIABLE
};

function getVariableForExportNameRecursive(
Expand Down Expand Up @@ -290,17 +290,17 @@ export default class Module {
loc: {
column: location.column,
file: this.id,
line: location.line,
line: location.line
},
message: `Error when using sourcemap for reporting an error: ${e.message}`,
pos,
pos
});
}

props.loc = {
column: location.column,
file: this.id,
line: location.line,
line: location.line
};
props.frame = getCodeFrame(this.originalCode, location.line, location.column);
}
Expand Down Expand Up @@ -342,7 +342,7 @@ export default class Module {
return error({
code: Errors.SYNTHETIC_NAMED_EXPORTS_NEED_DEFAULT,
id: this.id,
message: `Modules with 'syntheticNamedExports' need a default export.`,
message: `Modules with 'syntheticNamedExports' need a default export.`
});
}
return this.defaultExport;
Expand Down Expand Up @@ -632,7 +632,7 @@ export default class Module {
sourcemapChain,
syntheticNamedExports,
transformDependencies,
transformFiles,
transformFiles
}: TransformModuleJSON & {
alwaysRemovedCode?: [number, number][];
transformFiles?: EmittedFile[] | undefined;
Expand Down Expand Up @@ -678,7 +678,7 @@ export default class Module {

this.magicString = new MagicString(code, {
filename: (this.excludeFromSourcemap ? null : fileName)!, // don't include plugin helpers in sourcemap
indentExclusionRanges: [],
indentExclusionRanges: []
});
for (const [start, end] of this.alwaysRemovedCode) {
this.magicString.remove(start, end);
Expand All @@ -704,7 +704,7 @@ export default class Module {
includeDynamicImport: this.includeDynamicImport.bind(this),
includeExternalReexportNamespace: this.includeExternalReexportNamespace.bind(this),
includeVariable: this.includeVariable.bind(this),
isCrossChunkImport: (importDescription) =>
isCrossChunkImport: importDescription =>
(importDescription.module as Module).chunk !== this.chunk,
magicString: this.magicString,
module: this,
Expand All @@ -722,7 +722,7 @@ export default class Module {
this.graph.treeshakingOptions.unknownGlobalSideEffects)!,
usesTopLevelAwait: false,
warn: this.warn.bind(this),
warnDeprecation: this.graph.warnDeprecation.bind(this.graph),
warnDeprecation: this.graph.warnDeprecation.bind(this.graph)
};

this.scope = new ModuleScope(this.graph.scope, this.astContext);
Expand All @@ -741,7 +741,7 @@ export default class Module {
ast: this.esTreeAst,
code: this.code,
customTransformCache: this.customTransformCache,
dependencies: Array.from(this.dependencies).map((module) => module.id),
dependencies: Array.from(this.dependencies).map(module => module.id),
id: this.id,
moduleSideEffects: this.moduleSideEffects,
originalCode: this.originalCode,
Expand All @@ -750,7 +750,7 @@ export default class Module {
sourcemapChain: this.sourcemapChain,
syntheticNamedExports: this.syntheticNamedExports,
transformDependencies: this.transformDependencies,
transformFiles: this.transformFiles,
transformFiles: this.transformFiles
};
}

Expand Down Expand Up @@ -811,7 +811,7 @@ export default class Module {

this.exports.default = {
identifier: node.variable.getAssignedVariableName(),
localName: 'default',
localName: 'default'
};
} else if (node instanceof ExportAllDeclaration) {
// export * from './other'
Expand All @@ -831,7 +831,7 @@ export default class Module {
specifier.type === NodeType.ExportNamespaceSpecifier ? '*' : specifier.local.name,
module: null as any, // filled in later,
source,
start: specifier.start,
start: specifier.start
};
}
} else if (node.declaration) {
Expand Down Expand Up @@ -872,7 +872,7 @@ export default class Module {
return this.error(
{
code: 'DUPLICATE_IMPORT',
message: `Duplicated import '${localName}'`,
message: `Duplicated import '${localName}'`
},
specifier.start
);
Expand All @@ -890,7 +890,7 @@ export default class Module {
module: null as any, // filled in later
name,
source,
start: specifier.start,
start: specifier.start
};
}
}
Expand All @@ -910,9 +910,7 @@ export default class Module {
}

private includeDynamicImport(node: ImportExpression) {
const resolution = (this.dynamicImports.find(
(dynamicImport) => dynamicImport.node === node
) as {
const resolution = (this.dynamicImports.find(dynamicImport => dynamicImport.node === node) as {
resolution: string | Module | ExternalModule | undefined;
}).resolution;
if (resolution instanceof Module) {
Expand Down Expand Up @@ -952,7 +950,7 @@ export default class Module {
code: 'SHIMMED_EXPORT',
exporter: relativeId(this.id),
exportName: name,
message: `Missing export "${name}" has been shimmed in module ${relativeId(this.id)}.`,
message: `Missing export "${name}" has been shimmed in module ${relativeId(this.id)}.`
});
this.exports[name] = MISSING_EXPORT_SHIM_DESCRIPTION;
}
Expand Down
45 changes: 25 additions & 20 deletions src/ast/variables/NamespaceVariable.ts
Expand Up @@ -12,9 +12,9 @@ export default class NamespaceVariable extends Variable {
isNamespace!: true;
memberVariables: { [name: string]: Variable } = Object.create(null);
module: Module;
reexportedNamespaces: string[] = [];
private reexportedNamespaceVariables: ExternalVariable[] = [];

private reexportedExternalNamespaces: string[] = [];
private reexportedExternalNamespaceVariables: ExternalVariable[] = [];
private referencedEarly = false;
private references: Identifier[] = [];
private syntheticNamedExports: boolean;
Expand Down Expand Up @@ -50,8 +50,10 @@ export default class NamespaceVariable extends Variable {
break;
}
}
for (const name of this.reexportedNamespaces) {
this.reexportedNamespaceVariables.push(this.context.includeExternalReexportNamespace(name));
for (const name of this.reexportedExternalNamespaces) {
this.reexportedExternalNamespaceVariables.push(
this.context.includeExternalReexportNamespace(name)
);
}
if (this.context.preserveModules) {
for (const memberName of Object.keys(this.memberVariables))
Expand All @@ -66,7 +68,7 @@ export default class NamespaceVariable extends Variable {
initialise() {
for (const name of this.context.getExports().concat(this.context.getReexports())) {
if (name[0] === '*' && name.length > 1) {
this.reexportedNamespaces.push(name.slice(1));
this.reexportedExternalNamespaces.push(name.slice(1));
} else {
this.memberVariables[name] = this.context.traceExport(name);
}
Expand All @@ -78,7 +80,7 @@ export default class NamespaceVariable extends Variable {
const n = options.compact ? '' : '\n';
const t = options.indent;

const members = Object.keys(this.memberVariables).map((name) => {
const members = Object.keys(this.memberVariables).map(name => {
const original = this.memberVariables[name];

if (this.referencedEarly || original.isReassigned) {
Expand All @@ -92,30 +94,33 @@ export default class NamespaceVariable extends Variable {
return `${t}${safeName}: ${original.getName()}`;
});

const objectCreate = this.reexportedNamespaceVariables.length;
if (!objectCreate) members.unshift(`${t}__proto__:${_}null`);

if (options.namespaceToStringTag) {
members.unshift(`${t}[Symbol.toStringTag]:${_}'Module'`);
}

const name = this.getName();
// TODO Lukas rename to reflect they are external
const hasExternalReexports = this.reexportedExternalNamespaceVariables.length > 0;
if (!hasExternalReexports) members.unshift(`${t}__proto__:${_}null`);

let output = `{${n}${members.join(`,${n}`)}${n}}`;
if (this.reexportedNamespaceVariables.length) {
output = `Object.assign(Object.create(null), ${this.reexportedNamespaceVariables
.map((v) => v.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 (hasExternalReexports || this.syntheticNamedExports) {
const assignmentArgs = [output];
if (hasExternalReexports) {
assignmentArgs.unshift(
'/*#__PURE__*/Object.create(null)',
...this.reexportedExternalNamespaceVariables.map(variable => variable.getName())
);
}
if (this.syntheticNamedExports) {
assignmentArgs.push(this.module.getDefaultExport().getName());
}
output = `/*#__PURE__*/Object.assign(${assignmentArgs.join(`,${_}`)})`;
}
if (options.freeze) {
output = `/*#__PURE__*/Object.freeze(${output})`;
}

const name = this.getName();
output = `${options.varOrConst} ${name}${_}=${_}${output};`;

if (options.format === 'system' && this.exportName) {
Expand Down
Expand Up @@ -6,7 +6,7 @@ define(function () { 'use strict';
};
const foo = 100;

var ns = /*#__PURE__*/Object.freeze(Object.assign({
var ns = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign({
__proto__: null,
foo: foo,
'default': d
Expand Down
Expand Up @@ -6,7 +6,7 @@ const d = {
};
const foo = 100;

var ns = /*#__PURE__*/Object.freeze(Object.assign({
var ns = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign({
__proto__: null,
foo: foo,
'default': d
Expand Down
Expand Up @@ -4,7 +4,7 @@ const d = {
};
const foo = 100;

var ns = /*#__PURE__*/Object.freeze(Object.assign({
var ns = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign({
__proto__: null,
foo: foo,
'default': d
Expand Down
Expand Up @@ -9,7 +9,7 @@ System.register([], function () {
};
const foo = 100;

var ns = /*#__PURE__*/Object.freeze(Object.assign({
var ns = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign({
__proto__: null,
foo: foo,
'default': d
Expand Down
4 changes: 2 additions & 2 deletions test/form/samples/compact/_expected/amd.js
@@ -1,6 +1,6 @@
define(['external'],function(x){'use strict';x=x&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;var self=/*#__PURE__*/Object.freeze({[Symbol.toStringTag]:'Module',__proto__:null,get default(){return foo}});console.log(self);
define(['external'],function(x){'use strict';x=x&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;var self=/*#__PURE__*/Object.freeze({__proto__:null,[Symbol.toStringTag]:'Module',get default(){return foo}});console.log(self);
function foo () {
console.log( x );
}
// trailing comment
return foo;});
return foo;});
2 changes: 1 addition & 1 deletion test/form/samples/compact/_expected/cjs.js
@@ -1,4 +1,4 @@
'use strict';function _interopDefault(e){return(e&&(typeof e==='object')&&'default'in e)?e['default']:e}var x=_interopDefault(require('external'));var self=/*#__PURE__*/Object.freeze({[Symbol.toStringTag]:'Module',__proto__:null,get default(){return foo}});console.log(self);
'use strict';function _interopDefault(e){return(e&&(typeof e==='object')&&'default'in e)?e['default']:e}var x=_interopDefault(require('external'));var self=/*#__PURE__*/Object.freeze({__proto__:null,[Symbol.toStringTag]:'Module',get default(){return foo}});console.log(self);
function foo () {
console.log( x );
}
Expand Down
2 changes: 1 addition & 1 deletion test/form/samples/compact/_expected/es.js
@@ -1,4 +1,4 @@
import x from'external';var self=/*#__PURE__*/Object.freeze({[Symbol.toStringTag]:'Module',__proto__:null,get default(){return foo}});console.log(self);
import x from'external';var self=/*#__PURE__*/Object.freeze({__proto__:null,[Symbol.toStringTag]:'Module',get default(){return foo}});console.log(self);
function foo () {
console.log( x );
}
Expand Down
4 changes: 2 additions & 2 deletions test/form/samples/compact/_expected/iife.js
@@ -1,6 +1,6 @@
var foo=(function(x){'use strict';x=x&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;var self=/*#__PURE__*/Object.freeze({[Symbol.toStringTag]:'Module',__proto__:null,get default(){return foo}});console.log(self);
var foo=(function(x){'use strict';x=x&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;var self=/*#__PURE__*/Object.freeze({__proto__:null,[Symbol.toStringTag]:'Module',get default(){return foo}});console.log(self);
function foo () {
console.log( x );
}
// trailing comment
return foo;}(x));
return foo;}(x));
2 changes: 1 addition & 1 deletion test/form/samples/compact/_expected/system.js
@@ -1,4 +1,4 @@
System.register('foo',['external'],function(exports){'use strict';var x;return{setters:[function(module){x=module.default;}],execute:function(){exports('default',foo);var self=/*#__PURE__*/Object.freeze({[Symbol.toStringTag]:'Module',__proto__:null,get default(){return foo}});console.log(self);
System.register('foo',['external'],function(exports){'use strict';var x;return{setters:[function(module){x=module.default;}],execute:function(){exports('default',foo);var self=/*#__PURE__*/Object.freeze({__proto__:null,[Symbol.toStringTag]:'Module',get default(){return foo}});console.log(self);
function foo () {
console.log( x );
}
Expand Down
4 changes: 2 additions & 2 deletions test/form/samples/compact/_expected/umd.js
@@ -1,6 +1,6 @@
(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?module.exports=f(require('external')):typeof define==='function'&&define.amd?define(['external'],f):(g=g||self,g.foo=f(g.x));}(this,(function(x){'use strict';x=x&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;var self=/*#__PURE__*/Object.freeze({[Symbol.toStringTag]:'Module',__proto__:null,get default(){return foo}});console.log(self);
(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?module.exports=f(require('external')):typeof define==='function'&&define.amd?define(['external'],f):(g=g||self,g.foo=f(g.x));}(this,(function(x){'use strict';x=x&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;var self=/*#__PURE__*/Object.freeze({__proto__:null,[Symbol.toStringTag]:'Module',get default(){return foo}});console.log(self);
function foo () {
console.log( x );
}
// trailing comment
return foo;})));
return foo;})));
2 changes: 1 addition & 1 deletion test/form/samples/namespace-tostringtag/_expected/amd.js
@@ -1,8 +1,8 @@
define(['exports'], function (exports) { 'use strict';

var self = /*#__PURE__*/Object.freeze({
[Symbol.toStringTag]: 'Module',
__proto__: null,
[Symbol.toStringTag]: 'Module',
get p () { return p; }
});

Expand Down
2 changes: 1 addition & 1 deletion test/form/samples/namespace-tostringtag/_expected/cjs.js
Expand Up @@ -3,8 +3,8 @@
Object.defineProperty(exports, '__esModule', { value: true });

var self = /*#__PURE__*/Object.freeze({
[Symbol.toStringTag]: 'Module',
__proto__: null,
[Symbol.toStringTag]: 'Module',
get p () { return p; }
});

Expand Down

0 comments on commit 8ff2966

Please sign in to comment.