@embroider/core 2.1.1-unstable.73213f2a → 2.1.1-unstable.936fd63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,224 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isDefineExpression = exports.isDynamicImportExpression = exports.isImportSyncExpression = void 0;
7
- const path_1 = require("path");
8
- const babel_import_util_1 = require("babel-import-util");
9
- const crypto_1 = require("crypto");
10
- const fs_extra_1 = require("fs-extra");
11
- const shared_internals_1 = require("@embroider/shared-internals");
12
- const js_handlebars_1 = require("./js-handlebars");
13
- const module_resolver_1 = require("./module-resolver");
14
- const assert_never_1 = __importDefault(require("assert-never"));
15
- function isImportSyncExpression(t, path) {
16
- if (!path ||
17
- !path.isCallExpression() ||
18
- path.node.callee.type !== 'Identifier' ||
19
- !path.get('callee').referencesImport('@embroider/macros', 'importSync')) {
20
- return false;
21
- }
22
- const args = path.node.arguments;
23
- return Array.isArray(args) && args.length === 1 && t.isStringLiteral(args[0]);
24
- }
25
- exports.isImportSyncExpression = isImportSyncExpression;
26
- function isDynamicImportExpression(t, path) {
27
- if (!path || !path.isCallExpression() || path.node.callee.type !== 'Import') {
28
- return false;
29
- }
30
- const args = path.node.arguments;
31
- return Array.isArray(args) && args.length === 1 && t.isStringLiteral(args[0]);
32
- }
33
- exports.isDynamicImportExpression = isDynamicImportExpression;
34
- function isDefineExpression(t, path) {
35
- // should we allow nested defines, or stop at the top level?
36
- if (!path.isCallExpression() || path.node.callee.type !== 'Identifier' || path.node.callee.name !== 'define') {
37
- return false;
38
- }
39
- const args = path.node.arguments;
40
- // only match define with 3 arguments define(name: string, deps: string[], cb: Function);
41
- return (Array.isArray(args) &&
42
- args.length === 3 &&
43
- t.isStringLiteral(args[0]) &&
44
- t.isArrayExpression(args[1]) &&
45
- t.isFunction(args[2]));
46
- }
47
- exports.isDefineExpression = isDefineExpression;
48
- function main(babel) {
49
- let t = babel.types;
50
- return {
51
- visitor: {
52
- Program: {
53
- enter(path, state) {
54
- let opts = ensureOpts(state);
55
- state.resolver = new module_resolver_1.Resolver(path.hub.file.opts.filename, opts);
56
- let adder = new babel_import_util_1.ImportUtil(t, path);
57
- addExtraImports(adder, t, path, opts.extraImports);
58
- },
59
- exit(path, state) {
60
- for (let child of path.get('body')) {
61
- if (child.isImportDeclaration() || child.isExportNamedDeclaration() || child.isExportAllDeclaration()) {
62
- rewriteTopLevelImport(child, state);
63
- }
64
- }
65
- },
66
- },
67
- CallExpression(path, state) {
68
- if (isImportSyncExpression(t, path) || isDynamicImportExpression(t, path)) {
69
- const [source] = path.get('arguments');
70
- resolve(source.node.value, true, state, newSpecifier => {
71
- source.replaceWith(t.stringLiteral(newSpecifier));
72
- });
73
- return;
74
- }
75
- // Should/can we make this early exit when the first define was found?
76
- if (!isDefineExpression(t, path)) {
77
- return;
78
- }
79
- let pkg = state.resolver.owningPackage();
80
- if (pkg && pkg.isV2Ember() && !pkg.meta['auto-upgraded']) {
81
- throw new Error(`The file ${state.resolver.originalFilename} in package ${pkg.name} tried to use AMD define. Native V2 Ember addons are forbidden from using AMD define, they must use ECMA export only.`);
82
- }
83
- const dependencies = path.node.arguments[1];
84
- const specifiers = dependencies.elements.slice();
85
- specifiers.push(path.node.arguments[0]);
86
- for (const source of specifiers) {
87
- if (!source) {
88
- continue;
89
- }
90
- if (source.type !== 'StringLiteral') {
91
- throw path.buildCodeFrameError(`expected only string literal arguments`);
92
- }
93
- if (source.value === 'exports' || source.value === 'require') {
94
- // skip "special" AMD dependencies
95
- continue;
96
- }
97
- resolve(source.value, false, state, newSpecifier => {
98
- source.value = newSpecifier;
99
- });
100
- }
101
- },
102
- },
103
- };
104
- }
105
- exports.default = main;
106
- function rewriteTopLevelImport(path, state) {
107
- const { source } = path.node;
108
- if (source === null || source === undefined) {
109
- return;
110
- }
111
- resolve(source.value, false, state, newSpecifier => {
112
- source.value = newSpecifier;
113
- });
114
- }
115
- main.baseDir = function () {
116
- return (0, path_1.join)(__dirname, '..');
117
- };
118
- function addExtraImports(adder, t, path, extraImports) {
119
- for (let { absPath, target, runtimeName } of extraImports) {
120
- if (absPath === path.hub.file.opts.filename) {
121
- if (runtimeName) {
122
- path.node.body.unshift(amdDefine(t, adder, path, target, runtimeName));
123
- }
124
- else {
125
- adder.importForSideEffect(target);
126
- }
127
- }
128
- }
129
- }
130
- function amdDefine(t, adder, path, target, runtimeName) {
131
- let value = t.callExpression(adder.import(path, '@embroider/macros', 'importSync'), [t.stringLiteral(target)]);
132
- return t.expressionStatement(t.callExpression(t.memberExpression(t.identifier('window'), t.identifier('define')), [
133
- t.stringLiteral(runtimeName),
134
- t.functionExpression(null, [], t.blockStatement([t.returnStatement(value)])),
135
- ]));
136
- }
137
- function ensureOpts(state) {
138
- let { opts } = state;
139
- if ('adjustImportsOptionsPath' in opts) {
140
- // eslint-disable-next-line @typescript-eslint/no-require-imports
141
- return (state.opts = { ...require(opts.adjustImportsOptionsPath), ...require(opts.relocatedFilesPath) });
142
- }
143
- return opts;
144
- }
145
- function makeExternal(specifier, sourceFile, opts) {
146
- let target = (0, path_1.join)(opts.externalsDir, specifier + '.js');
147
- atomicWrite(target, externalTemplate({
148
- runtimeName: specifier,
149
- }));
150
- return (0, shared_internals_1.explicitRelative)((0, path_1.dirname)(sourceFile), target.slice(0, -3));
151
- }
152
- function atomicWrite(path, content) {
153
- if ((0, fs_extra_1.pathExistsSync)(path)) {
154
- return;
155
- }
156
- let suffix = (0, crypto_1.randomBytes)(8).toString('hex');
157
- (0, fs_extra_1.outputFileSync)(path + suffix, content);
158
- try {
159
- (0, fs_extra_1.renameSync)(path + suffix, path);
160
- }
161
- catch (err) {
162
- // windows throws EPERM for concurrent access. For us it's not an error
163
- // condition because the other thread is writing the exact same value we
164
- // would have.
165
- if (err.code !== 'EPERM') {
166
- throw err;
167
- }
168
- }
169
- }
170
- function makeMissingModule(specifier, sourceFile, opts) {
171
- let target = (0, path_1.join)(opts.externalsDir, 'missing', specifier + '.js');
172
- atomicWrite(target, dynamicMissingModule({
173
- moduleName: specifier,
174
- }));
175
- return (0, shared_internals_1.explicitRelative)((0, path_1.dirname)(sourceFile), target.slice(0, -3));
176
- }
177
- const dynamicMissingModule = (0, js_handlebars_1.compile)(`
178
- throw new Error('Could not find module \`{{{js-string-escape moduleName}}}\`');
179
- `);
180
- const externalTemplate = (0, js_handlebars_1.compile)(`
181
- {{#if (eq runtimeName "require")}}
182
- const m = window.requirejs;
183
- {{else}}
184
- const m = window.require("{{{js-string-escape runtimeName}}}");
185
- {{/if}}
186
- {{!-
187
- There are plenty of hand-written AMD defines floating around
188
- that lack this, and they will break when other build systems
189
- encounter them.
190
-
191
- As far as I can tell, Ember's loader was already treating this
192
- case as a module, so in theory we aren't breaking anything by
193
- marking it as such when other packagers come looking.
194
-
195
- todo: get review on this part.
196
- -}}
197
- if (m.default && !m.__esModule) {
198
- m.__esModule = true;
199
- }
200
- module.exports = m;
201
- `);
202
- function resolve(specifier, isDynamic, state, setter) {
203
- let resolution = state.resolver.resolve(specifier, isDynamic);
204
- let newSpecifier;
205
- switch (resolution.result) {
206
- case 'continue':
207
- return;
208
- case 'external':
209
- newSpecifier = makeExternal(resolution.specifier, state.resolver.filename, ensureOpts(state));
210
- break;
211
- case 'redirect-to':
212
- newSpecifier = resolution.specifier;
213
- break;
214
- case 'runtime-failure':
215
- newSpecifier = makeMissingModule(resolution.specifier, state.resolver.filename, ensureOpts(state));
216
- break;
217
- default:
218
- throw (0, assert_never_1.default)(resolution);
219
- }
220
- if (newSpecifier) {
221
- setter(newSpecifier);
222
- }
223
- }
224
- //# sourceMappingURL=babel-plugin-adjust-imports.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"babel-plugin-adjust-imports.js","sourceRoot":"","sources":["babel-plugin-adjust-imports.ts"],"names":[],"mappings":"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","sourcesContent":["import { join, dirname } from 'path';\nimport type { NodePath } from '@babel/traverse';\nimport type * as Babel from '@babel/core';\nimport type { types as t } from '@babel/core';\nimport { ImportUtil } from 'babel-import-util';\nimport { randomBytes } from 'crypto';\nimport { outputFileSync, pathExistsSync, renameSync } from 'fs-extra';\nimport { explicitRelative } from '@embroider/shared-internals';\nimport { compile } from './js-handlebars';\nimport { Options, Resolver } from './module-resolver';\nimport assertNever from 'assert-never';\n\ninterface State {\n resolver: Resolver;\n opts: Options | DeflatedOptions;\n}\n\nexport { Options };\n\nexport interface DeflatedOptions {\n adjustImportsOptionsPath: string;\n relocatedFilesPath: string;\n}\n\ntype BabelTypes = typeof t;\n\ntype DefineExpressionPath = NodePath<t.CallExpression> & {\n node: t.CallExpression & {\n arguments: [t.StringLiteral, t.ArrayExpression, Function];\n };\n};\n\nexport function isImportSyncExpression(t: BabelTypes, path: NodePath<any>) {\n if (\n !path ||\n !path.isCallExpression() ||\n path.node.callee.type !== 'Identifier' ||\n !path.get('callee').referencesImport('@embroider/macros', 'importSync')\n ) {\n return false;\n }\n\n const args = path.node.arguments;\n return Array.isArray(args) && args.length === 1 && t.isStringLiteral(args[0]);\n}\n\nexport function isDynamicImportExpression(t: BabelTypes, path: NodePath<any>) {\n if (!path || !path.isCallExpression() || path.node.callee.type !== 'Import') {\n return false;\n }\n\n const args = path.node.arguments;\n return Array.isArray(args) && args.length === 1 && t.isStringLiteral(args[0]);\n}\n\nexport function isDefineExpression(t: BabelTypes, path: NodePath<any>): path is DefineExpressionPath {\n // should we allow nested defines, or stop at the top level?\n if (!path.isCallExpression() || path.node.callee.type !== 'Identifier' || path.node.callee.name !== 'define') {\n return false;\n }\n\n const args = path.node.arguments;\n\n // only match define with 3 arguments define(name: string, deps: string[], cb: Function);\n return (\n Array.isArray(args) &&\n args.length === 3 &&\n t.isStringLiteral(args[0]) &&\n t.isArrayExpression(args[1]) &&\n t.isFunction(args[2])\n );\n}\n\nexport default function main(babel: typeof Babel) {\n let t = babel.types;\n return {\n visitor: {\n Program: {\n enter(path: NodePath<t.Program>, state: State) {\n let opts = ensureOpts(state);\n state.resolver = new Resolver(path.hub.file.opts.filename, opts);\n let adder = new ImportUtil(t, path);\n addExtraImports(adder, t, path, opts.extraImports);\n },\n exit(path: NodePath<t.Program>, state: State) {\n for (let child of path.get('body')) {\n if (child.isImportDeclaration() || child.isExportNamedDeclaration() || child.isExportAllDeclaration()) {\n rewriteTopLevelImport(child, state);\n }\n }\n },\n },\n CallExpression(path: NodePath<t.CallExpression>, state: State) {\n if (isImportSyncExpression(t, path) || isDynamicImportExpression(t, path)) {\n const [source] = path.get('arguments');\n resolve((source.node as any).value, true, state, newSpecifier => {\n source.replaceWith(t.stringLiteral(newSpecifier));\n });\n return;\n }\n\n // Should/can we make this early exit when the first define was found?\n if (!isDefineExpression(t, path)) {\n return;\n }\n\n let pkg = state.resolver.owningPackage();\n if (pkg && pkg.isV2Ember() && !pkg.meta['auto-upgraded']) {\n throw new Error(\n `The file ${state.resolver.originalFilename} in package ${pkg.name} tried to use AMD define. Native V2 Ember addons are forbidden from using AMD define, they must use ECMA export only.`\n );\n }\n\n const dependencies = path.node.arguments[1];\n\n const specifiers = dependencies.elements.slice();\n specifiers.push(path.node.arguments[0]);\n\n for (const source of specifiers) {\n if (!source) {\n continue;\n }\n\n if (source.type !== 'StringLiteral') {\n throw path.buildCodeFrameError(`expected only string literal arguments`);\n }\n\n if (source.value === 'exports' || source.value === 'require') {\n // skip \"special\" AMD dependencies\n continue;\n }\n\n resolve(source.value, false, state, newSpecifier => {\n source.value = newSpecifier;\n });\n }\n },\n },\n };\n}\n\nfunction rewriteTopLevelImport(\n path: NodePath<t.ImportDeclaration | t.ExportNamedDeclaration | t.ExportAllDeclaration>,\n state: State\n) {\n const { source } = path.node;\n if (source === null || source === undefined) {\n return;\n }\n\n resolve(source.value, false, state, newSpecifier => {\n source.value = newSpecifier;\n });\n}\n\n(main as any).baseDir = function () {\n return join(__dirname, '..');\n};\n\nfunction addExtraImports(\n adder: ImportUtil,\n t: BabelTypes,\n path: NodePath<t.Program>,\n extraImports: Required<Options>['extraImports']\n) {\n for (let { absPath, target, runtimeName } of extraImports) {\n if (absPath === path.hub.file.opts.filename) {\n if (runtimeName) {\n path.node.body.unshift(amdDefine(t, adder, path, target, runtimeName));\n } else {\n adder.importForSideEffect(target);\n }\n }\n }\n}\n\nfunction amdDefine(t: BabelTypes, adder: ImportUtil, path: NodePath<t.Program>, target: string, runtimeName: string) {\n let value = t.callExpression(adder.import(path, '@embroider/macros', 'importSync'), [t.stringLiteral(target)]);\n return t.expressionStatement(\n t.callExpression(t.memberExpression(t.identifier('window'), t.identifier('define')), [\n t.stringLiteral(runtimeName),\n t.functionExpression(null, [], t.blockStatement([t.returnStatement(value)])),\n ])\n );\n}\n\nfunction ensureOpts(state: State): Options {\n let { opts } = state;\n if ('adjustImportsOptionsPath' in opts) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return (state.opts = { ...require(opts.adjustImportsOptionsPath), ...require(opts.relocatedFilesPath) });\n }\n return opts;\n}\n\nfunction makeExternal(specifier: string, sourceFile: string, opts: Options): string {\n let target = join(opts.externalsDir, specifier + '.js');\n atomicWrite(\n target,\n externalTemplate({\n runtimeName: specifier,\n })\n );\n return explicitRelative(dirname(sourceFile), target.slice(0, -3));\n}\n\nfunction atomicWrite(path: string, content: string) {\n if (pathExistsSync(path)) {\n return;\n }\n let suffix = randomBytes(8).toString('hex');\n outputFileSync(path + suffix, content);\n try {\n renameSync(path + suffix, path);\n } catch (err: any) {\n // windows throws EPERM for concurrent access. For us it's not an error\n // condition because the other thread is writing the exact same value we\n // would have.\n if (err.code !== 'EPERM') {\n throw err;\n }\n }\n}\n\nfunction makeMissingModule(specifier: string, sourceFile: string, opts: Options): string {\n let target = join(opts.externalsDir, 'missing', specifier + '.js');\n atomicWrite(\n target,\n dynamicMissingModule({\n moduleName: specifier,\n })\n );\n return explicitRelative(dirname(sourceFile), target.slice(0, -3));\n}\n\nconst dynamicMissingModule = compile(`\n throw new Error('Could not find module \\`{{{js-string-escape moduleName}}}\\`');\n`) as (params: { moduleName: string }) => string;\n\nconst externalTemplate = compile(`\n{{#if (eq runtimeName \"require\")}}\nconst m = window.requirejs;\n{{else}}\nconst m = window.require(\"{{{js-string-escape runtimeName}}}\");\n{{/if}}\n{{!-\n There are plenty of hand-written AMD defines floating around\n that lack this, and they will break when other build systems\n encounter them.\n\n As far as I can tell, Ember's loader was already treating this\n case as a module, so in theory we aren't breaking anything by\n marking it as such when other packagers come looking.\n\n todo: get review on this part.\n-}}\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n`) as (params: { runtimeName: string }) => string;\n\nfunction resolve(specifier: string, isDynamic: boolean, state: State, setter: (specifier: string) => void) {\n let resolution = state.resolver.resolve(specifier, isDynamic);\n let newSpecifier: string | undefined;\n switch (resolution.result) {\n case 'continue':\n return;\n case 'external':\n newSpecifier = makeExternal(resolution.specifier, state.resolver.filename, ensureOpts(state));\n break;\n case 'redirect-to':\n newSpecifier = resolution.specifier;\n break;\n case 'runtime-failure':\n newSpecifier = makeMissingModule(resolution.specifier, state.resolver.filename, ensureOpts(state));\n break;\n default:\n throw assertNever(resolution);\n }\n if (newSpecifier) {\n setter(newSpecifier);\n }\n}\n"]}
package/src/example.d.ts DELETED
@@ -1,2 +0,0 @@
1
- declare const compatPattern: RegExp;
2
- declare const compatPattern2: RegExp;
package/src/example.js DELETED
@@ -1,20 +0,0 @@
1
- "use strict";
2
- const compatPattern = /#embroider_compat\/(?:(?<type>(?:components|helpers|modifiers))\/(?<path>.*))|(?:(?<typeA>ambiguous)\/(?<hasArgs>[^/]+)\/(?<pathA>.*))/;
3
- const compatPattern2 = /#embroider_compat\/(?:(?<type>ambiguous)\/(?<hasArgs>[^/]+)\/(?<path>.*))/;
4
- for (let test of [
5
- '#embroider_compat/components/foo/bar/baz',
6
- '#embroider_compat/helpers/foo/bar/baz',
7
- '#embroider_compat/modifiers/foo/bar/baz',
8
- '#embroider_compat/ambiguous/0/foo/bar/baz',
9
- ]) {
10
- let m = compatPattern.exec(test);
11
- if (m) {
12
- console.log(`${test}: ${Object.entries(m.groups)
13
- .map(([k, v]) => k + '=' + v)
14
- .join(', ')}`);
15
- }
16
- else {
17
- console.log(`${test}: no match`);
18
- }
19
- }
20
- //# sourceMappingURL=example.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"example.js","sourceRoot":"","sources":["example.ts"],"names":[],"mappings":";AAAA,MAAM,aAAa,GACjB,wIAAwI,CAAC;AAE3I,MAAM,cAAc,GAAG,2EAA2E,CAAC;AAEnG,KAAK,IAAI,IAAI,IAAI;IACf,0CAA0C;IAC1C,uCAAuC;IACvC,yCAAyC;IACzC,2CAA2C;CAC5C,EAAE;IACD,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,GAAG,CACT,GAAG,IAAI,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAO,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;aAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;KACH;SAAM;QACL,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC;KAClC;CACF","sourcesContent":["const compatPattern =\n /#embroider_compat\\/(?:(?<type>(?:components|helpers|modifiers))\\/(?<path>.*))|(?:(?<typeA>ambiguous)\\/(?<hasArgs>[^/]+)\\/(?<pathA>.*))/;\n\nconst compatPattern2 = /#embroider_compat\\/(?:(?<type>ambiguous)\\/(?<hasArgs>[^/]+)\\/(?<path>.*))/;\n\nfor (let test of [\n '#embroider_compat/components/foo/bar/baz',\n '#embroider_compat/helpers/foo/bar/baz',\n '#embroider_compat/modifiers/foo/bar/baz',\n '#embroider_compat/ambiguous/0/foo/bar/baz',\n]) {\n let m = compatPattern.exec(test);\n if (m) {\n console.log(\n `${test}: ${Object.entries(m.groups!)\n .map(([k, v]) => k + '=' + v)\n .join(', ')}`\n );\n } else {\n console.log(`${test}: no match`);\n }\n}\n"]}