@embroider/core 3.4.19 → 3.4.20-unstable.449a68c
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.
- package/package.json +18 -8
- package/src/app-files.d.ts +3 -5
- package/src/app-files.js +25 -8
- package/src/app-files.js.map +1 -1
- package/src/index.d.ts +2 -2
- package/src/index.js.map +1 -1
- package/src/measure-concat.js +1 -2
- package/src/measure-concat.js.map +1 -1
- package/src/module-resolver-options.d.ts +42 -0
- package/src/module-resolver-options.js +164 -0
- package/src/module-resolver-options.js.map +1 -0
- package/src/module-resolver.d.ts +28 -44
- package/src/module-resolver.js +430 -304
- package/src/module-resolver.js.map +1 -1
- package/src/node-resolve.d.ts +33 -0
- package/src/node-resolve.js +131 -0
- package/src/node-resolve.js.map +1 -0
- package/src/options.d.ts +0 -7
- package/src/options.js +0 -1
- package/src/options.js.map +1 -1
- package/src/resolver-loader.js +8 -1
- package/src/resolver-loader.js.map +1 -1
- package/src/virtual-content.d.ts +6 -4
- package/src/virtual-content.js +67 -99
- package/src/virtual-content.js.map +1 -1
- package/src/virtual-entrypoint.d.ts +19 -0
- package/src/virtual-entrypoint.js +289 -0
- package/src/virtual-entrypoint.js.map +1 -0
- package/src/virtual-route-entrypoint.d.ts +15 -0
- package/src/virtual-route-entrypoint.js +94 -0
- package/src/virtual-route-entrypoint.js.map +1 -0
- package/src/virtual-test-support-styles.d.ts +4 -0
- package/src/virtual-test-support-styles.js +64 -0
- package/src/virtual-test-support-styles.js.map +1 -0
- package/src/virtual-test-support.d.ts +4 -0
- package/src/virtual-test-support.js +68 -0
- package/src/virtual-test-support.js.map +1 -0
- package/src/virtual-vendor-styles.d.ts +4 -0
- package/src/virtual-vendor-styles.js +82 -0
- package/src/virtual-vendor-styles.js.map +1 -0
- package/src/virtual-vendor.d.ts +4 -0
- package/src/virtual-vendor.js +57 -0
- package/src/virtual-vendor.js.map +1 -0
- package/types/virtual/index.d.ts +9 -0
- package/types/virtual/index.js +3 -0
- package/src/asset.d.ts +0 -32
- package/src/asset.js +0 -3
- package/src/asset.js.map +0 -1
- package/src/ember-html.d.ts +0 -43
- package/src/ember-html.js +0 -110
- package/src/ember-html.js.map +0 -1
- package/src/portable-babel-config.d.ts +0 -11
- package/src/portable-babel-config.js +0 -132
- package/src/portable-babel-config.js.map +0 -1
- package/src/portable-babel-launcher.d.ts +0 -6
- package/src/portable-babel-launcher.js +0 -75
- package/src/portable-babel-launcher.js.map +0 -1
@@ -0,0 +1,82 @@
|
|
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.decodeVirtualVendorStyles = decodeVirtualVendorStyles;
|
7
|
+
exports.renderVendorStyles = renderVendorStyles;
|
8
|
+
const fs_1 = require("fs");
|
9
|
+
const lodash_1 = require("lodash");
|
10
|
+
const resolve_1 = __importDefault(require("resolve"));
|
11
|
+
function decodeVirtualVendorStyles(filename) {
|
12
|
+
return filename.endsWith('-embroider-vendor-styles.css');
|
13
|
+
}
|
14
|
+
function renderVendorStyles(filename, resolver) {
|
15
|
+
const owner = resolver.packageCache.ownerOfFile(filename);
|
16
|
+
if (!owner) {
|
17
|
+
throw new Error(`Failed to find a valid owner for ${filename}`);
|
18
|
+
}
|
19
|
+
return { src: getVendorStyles(owner, resolver), watches: [] };
|
20
|
+
}
|
21
|
+
function getVendorStyles(owner, resolver) {
|
22
|
+
let engineConfig = resolver.owningEngine(owner);
|
23
|
+
let engine = {
|
24
|
+
package: owner,
|
25
|
+
addons: new Map(engineConfig.activeAddons.map(addon => [
|
26
|
+
resolver.packageCache.get(addon.root),
|
27
|
+
addon.canResolveFromFile,
|
28
|
+
])),
|
29
|
+
isApp: engineConfig.root === resolver.options.engines[0].root,
|
30
|
+
modulePrefix: resolver.options.modulePrefix,
|
31
|
+
appRelativePath: 'NOT_USED_DELETE_ME',
|
32
|
+
};
|
33
|
+
return generateVendorStyles(engine);
|
34
|
+
}
|
35
|
+
function generateVendorStyles(engine) {
|
36
|
+
let result = impliedAddonVendorStyles(engine).map(sourcePath => (0, fs_1.readFileSync)(sourcePath, 'utf-8'));
|
37
|
+
// add the engines own styles but only if it is not the top-level app, that is provided by @embroider/synthesized-styles
|
38
|
+
if (!engine.isApp) {
|
39
|
+
let engineStyles = [];
|
40
|
+
engineStyles = getAddonImplicitStyles(engine.package).map(sourcePath => (0, fs_1.readFileSync)(sourcePath, 'utf-8'));
|
41
|
+
// add engine's own implicit styles after all vendor styles
|
42
|
+
if (engineStyles.length) {
|
43
|
+
result = [...result, ...engineStyles];
|
44
|
+
}
|
45
|
+
}
|
46
|
+
return result.join('');
|
47
|
+
}
|
48
|
+
function impliedAddonVendorStyles(engine) {
|
49
|
+
let result = [];
|
50
|
+
for (let addon of (0, lodash_1.sortBy)(Array.from(engine.addons.keys()), pkg => {
|
51
|
+
switch (pkg.name) {
|
52
|
+
case 'loader.js':
|
53
|
+
return 0;
|
54
|
+
case 'ember-source':
|
55
|
+
return 10;
|
56
|
+
default:
|
57
|
+
return 1000;
|
58
|
+
}
|
59
|
+
})) {
|
60
|
+
// exclude lazy engines because they will handle their own css importation
|
61
|
+
if (addon.isLazyEngine()) {
|
62
|
+
continue;
|
63
|
+
}
|
64
|
+
let styles = getAddonImplicitStyles(addon);
|
65
|
+
if (styles.length) {
|
66
|
+
result = [...styles, ...result];
|
67
|
+
}
|
68
|
+
}
|
69
|
+
return result;
|
70
|
+
}
|
71
|
+
function getAddonImplicitStyles(pkg) {
|
72
|
+
let implicitStyles = pkg.meta['implicit-styles'];
|
73
|
+
let styles = [];
|
74
|
+
if (implicitStyles) {
|
75
|
+
let options = { basedir: pkg.root };
|
76
|
+
for (let mod of implicitStyles) {
|
77
|
+
styles.push(resolve_1.default.sync(mod, options));
|
78
|
+
}
|
79
|
+
}
|
80
|
+
return styles;
|
81
|
+
}
|
82
|
+
//# sourceMappingURL=virtual-vendor-styles.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"virtual-vendor-styles.js","sourceRoot":"","sources":["virtual-vendor-styles.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Package } from '@embroider/shared-internals';\nimport type { V2AddonPackage } from '@embroider/shared-internals/src/package';\nimport { readFileSync } from 'fs';\nimport { sortBy } from 'lodash';\nimport resolve from 'resolve';\nimport type { Resolver } from './module-resolver';\nimport type { VirtualContentResult } from './virtual-content';\nimport type { Engine } from './app-files';\n\nexport function decodeVirtualVendorStyles(filename: string): boolean {\n return filename.endsWith('-embroider-vendor-styles.css');\n}\n\nexport function renderVendorStyles(filename: string, resolver: Resolver): VirtualContentResult {\n const owner = resolver.packageCache.ownerOfFile(filename);\n if (!owner) {\n throw new Error(`Failed to find a valid owner for ${filename}`);\n }\n return { src: getVendorStyles(owner, resolver), watches: [] };\n}\n\nfunction getVendorStyles(owner: Package, resolver: Resolver): string {\n let engineConfig = resolver.owningEngine(owner);\n let engine: Engine = {\n package: owner,\n addons: new Map(\n engineConfig.activeAddons.map(addon => [\n resolver.packageCache.get(addon.root) as V2AddonPackage,\n addon.canResolveFromFile,\n ])\n ),\n isApp: engineConfig.root === resolver.options.engines[0].root,\n modulePrefix: resolver.options.modulePrefix,\n appRelativePath: 'NOT_USED_DELETE_ME',\n };\n\n return generateVendorStyles(engine);\n}\n\nfunction generateVendorStyles(engine: Engine): string {\n let result: string[] = impliedAddonVendorStyles(engine).map(sourcePath => readFileSync(sourcePath, 'utf-8'));\n\n // add the engines own styles but only if it is not the top-level app, that is provided by @embroider/synthesized-styles\n if (!engine.isApp) {\n let engineStyles = [];\n\n engineStyles = getAddonImplicitStyles(engine.package as V2AddonPackage).map(sourcePath =>\n readFileSync(sourcePath, 'utf-8')\n );\n\n // add engine's own implicit styles after all vendor styles\n if (engineStyles.length) {\n result = [...result, ...engineStyles];\n }\n }\n\n return result.join('') as string;\n}\n\nfunction impliedAddonVendorStyles(engine: Engine): string[] {\n let result: Array<string> = [];\n for (let addon of sortBy(Array.from(engine.addons.keys()), pkg => {\n switch (pkg.name) {\n case 'loader.js':\n return 0;\n case 'ember-source':\n return 10;\n default:\n return 1000;\n }\n })) {\n // exclude lazy engines because they will handle their own css importation\n if (addon.isLazyEngine()) {\n continue;\n }\n\n let styles = getAddonImplicitStyles(addon);\n\n if (styles.length) {\n result = [...styles, ...result];\n }\n }\n return result;\n}\n\nfunction getAddonImplicitStyles(pkg: V2AddonPackage): string[] {\n let implicitStyles = pkg.meta['implicit-styles'];\n let styles = [];\n if (implicitStyles) {\n let options = { basedir: pkg.root };\n for (let mod of implicitStyles) {\n styles.push(resolve.sync(mod, options));\n }\n }\n return styles;\n}\n"]}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
import type { Resolver } from './module-resolver';
|
2
|
+
import type { VirtualContentResult } from './virtual-content';
|
3
|
+
export declare function decodeVirtualVendor(filename: string): boolean;
|
4
|
+
export declare function renderVendor(filename: string, resolver: Resolver): VirtualContentResult;
|
@@ -0,0 +1,57 @@
|
|
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.decodeVirtualVendor = decodeVirtualVendor;
|
7
|
+
exports.renderVendor = renderVendor;
|
8
|
+
const shared_internals_1 = require("@embroider/shared-internals");
|
9
|
+
const fs_extra_1 = require("fs-extra");
|
10
|
+
const path_1 = require("path");
|
11
|
+
const resolve_1 = __importDefault(require("resolve"));
|
12
|
+
function decodeVirtualVendor(filename) {
|
13
|
+
return filename.endsWith('-embroider-vendor.js');
|
14
|
+
}
|
15
|
+
function renderVendor(filename, resolver) {
|
16
|
+
const owner = resolver.packageCache.ownerOfFile(filename);
|
17
|
+
if (!owner) {
|
18
|
+
throw new Error(`Failed to find a valid owner for ${filename}`);
|
19
|
+
}
|
20
|
+
return { src: getVendor(owner, resolver, filename), watches: [] };
|
21
|
+
}
|
22
|
+
function getVendor(owner, resolver, filename) {
|
23
|
+
let engineConfig = resolver.owningEngine(owner);
|
24
|
+
let addons = engineConfig.activeAddons.map(addon => resolver.packageCache.get(addon.root));
|
25
|
+
let path = (0, path_1.join)((0, shared_internals_1.locateEmbroiderWorkingDir)(resolver.options.appRoot), 'ember-env.json');
|
26
|
+
if (!(0, fs_extra_1.lstatSync)(path).isFile()) {
|
27
|
+
throw new Error(`Failed to read the ember-env.json when generating content for ${filename}`);
|
28
|
+
}
|
29
|
+
let emberENV = (0, fs_extra_1.readJSONSync)(path);
|
30
|
+
return generateVendor(addons, emberENV);
|
31
|
+
}
|
32
|
+
function generateVendor(addons, emberENV) {
|
33
|
+
// Add addons implicit-scripts
|
34
|
+
let vendor = impliedAddonVendors(addons).map((sourcePath) => {
|
35
|
+
let source = (0, fs_extra_1.readFileSync)(sourcePath);
|
36
|
+
return `${source}`;
|
37
|
+
});
|
38
|
+
// Add _testing_prefix_.js
|
39
|
+
vendor.unshift(`var runningTests=false;`);
|
40
|
+
// Add _ember_env_.js
|
41
|
+
vendor.unshift(`window.EmberENV={ ...(window.EmberENV || {}), ...${JSON.stringify(emberENV, null, 2)} };`);
|
42
|
+
return vendor.join('');
|
43
|
+
}
|
44
|
+
function impliedAddonVendors(addons) {
|
45
|
+
let result = [];
|
46
|
+
for (let addon of addons) {
|
47
|
+
let implicitScripts = addon.meta['implicit-scripts'];
|
48
|
+
if (implicitScripts) {
|
49
|
+
let options = { basedir: addon.root };
|
50
|
+
for (let mod of implicitScripts) {
|
51
|
+
result.push(resolve_1.default.sync(mod, options));
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}
|
55
|
+
return result;
|
56
|
+
}
|
57
|
+
//# sourceMappingURL=virtual-vendor.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"virtual-vendor.js","sourceRoot":"","sources":["virtual-vendor.ts"],"names":[],"mappings":";;;;;AAQA,kDAEC;AAED,oCAMC;AAlBD,kEAAsF;AAEtF,uCAAiE;AACjE,+BAA4B;AAC5B,sDAA8B;AAI9B,SAAgB,mBAAmB,CAAC,QAAgB;IAClD,OAAO,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,YAAY,CAAC,QAAgB,EAAE,QAAkB;IAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,QAAkB,EAAE,QAAgB;IACrE,IAAI,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC,CAAC;IAE7G,IAAI,IAAI,GAAG,IAAA,WAAI,EAAC,IAAA,4CAAyB,EAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACvF,IAAI,CAAC,IAAA,oBAAS,EAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,iEAAiE,QAAQ,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,QAAQ,GAAG,IAAA,uBAAY,EAAC,IAAI,CAAC,CAAC;IAElC,OAAO,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,cAAc,CAAC,MAAwB,EAAE,QAAkB;IAClE,8BAA8B;IAC9B,IAAI,MAAM,GAAa,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,UAAkB,EAAU,EAAE;QACpF,IAAI,MAAM,GAAG,IAAA,uBAAY,EAAC,UAAU,CAAC,CAAC;QACtC,OAAO,GAAG,MAAM,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IACH,0BAA0B;IAC1B,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC1C,qBAAqB;IACrB,MAAM,CAAC,OAAO,CAAC,oDAAoD,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAE3G,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAW,CAAC;AACnC,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAwB;IACnD,IAAI,MAAM,GAAkB,EAAE,CAAC;IAC/B,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACrD,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;YACtC,KAAK,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,iBAAO,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { type Package, locateEmbroiderWorkingDir } from '@embroider/shared-internals';\nimport type { V2AddonPackage } from '@embroider/shared-internals/src/package';\nimport { lstatSync, readFileSync, readJSONSync } from 'fs-extra';\nimport { join } from 'path';\nimport resolve from 'resolve';\nimport type { Resolver } from './module-resolver';\nimport type { VirtualContentResult } from './virtual-content';\n\nexport function decodeVirtualVendor(filename: string): boolean {\n return filename.endsWith('-embroider-vendor.js');\n}\n\nexport function renderVendor(filename: string, resolver: Resolver): VirtualContentResult {\n const owner = resolver.packageCache.ownerOfFile(filename);\n if (!owner) {\n throw new Error(`Failed to find a valid owner for ${filename}`);\n }\n return { src: getVendor(owner, resolver, filename), watches: [] };\n}\n\nfunction getVendor(owner: Package, resolver: Resolver, filename: string): string {\n let engineConfig = resolver.owningEngine(owner);\n let addons = engineConfig.activeAddons.map(addon => resolver.packageCache.get(addon.root) as V2AddonPackage);\n\n let path = join(locateEmbroiderWorkingDir(resolver.options.appRoot), 'ember-env.json');\n if (!lstatSync(path).isFile()) {\n throw new Error(`Failed to read the ember-env.json when generating content for ${filename}`);\n }\n let emberENV = readJSONSync(path);\n\n return generateVendor(addons, emberENV);\n}\n\nfunction generateVendor(addons: V2AddonPackage[], emberENV?: unknown): string {\n // Add addons implicit-scripts\n let vendor: string[] = impliedAddonVendors(addons).map((sourcePath: string): string => {\n let source = readFileSync(sourcePath);\n return `${source}`;\n });\n // Add _testing_prefix_.js\n vendor.unshift(`var runningTests=false;`);\n // Add _ember_env_.js\n vendor.unshift(`window.EmberENV={ ...(window.EmberENV || {}), ...${JSON.stringify(emberENV, null, 2)} };`);\n\n return vendor.join('') as string;\n}\n\nfunction impliedAddonVendors(addons: V2AddonPackage[]): string[] {\n let result: Array<string> = [];\n for (let addon of addons) {\n let implicitScripts = addon.meta['implicit-scripts'];\n if (implicitScripts) {\n let options = { basedir: addon.root };\n for (let mod of implicitScripts) {\n result.push(resolve.sync(mod, options));\n }\n }\n }\n return result;\n}\n"]}
|
package/src/asset.d.ts
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
import type { JSDOM } from 'jsdom';
|
2
|
-
import type { EmberHTML } from './ember-html';
|
3
|
-
export interface ImplicitAssetPaths {
|
4
|
-
'implicit-scripts': string[];
|
5
|
-
'implicit-test-scripts': string[];
|
6
|
-
'implicit-styles': string[];
|
7
|
-
'implicit-test-styles': string[];
|
8
|
-
}
|
9
|
-
interface BaseAsset {
|
10
|
-
relativePath: string;
|
11
|
-
}
|
12
|
-
export interface OnDiskAsset extends BaseAsset {
|
13
|
-
kind: 'on-disk';
|
14
|
-
sourcePath: string;
|
15
|
-
mtime: number;
|
16
|
-
size: number;
|
17
|
-
}
|
18
|
-
export interface InMemoryAsset extends BaseAsset {
|
19
|
-
kind: 'in-memory';
|
20
|
-
source: string | Buffer;
|
21
|
-
}
|
22
|
-
export interface EmberAsset extends BaseAsset {
|
23
|
-
kind: 'ember';
|
24
|
-
sourcePath: string;
|
25
|
-
mtime: number;
|
26
|
-
size: number;
|
27
|
-
includeTests: boolean;
|
28
|
-
rootURL: string;
|
29
|
-
prepare(dom: JSDOM): EmberHTML;
|
30
|
-
}
|
31
|
-
export type Asset = OnDiskAsset | InMemoryAsset | EmberAsset;
|
32
|
-
export {};
|
package/src/asset.js
DELETED
package/src/asset.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"asset.js","sourceRoot":"","sources":["asset.ts"],"names":[],"mappings":"","sourcesContent":["import type { JSDOM } from 'jsdom';\nimport type { EmberHTML } from './ember-html';\n\nexport interface ImplicitAssetPaths {\n 'implicit-scripts': string[];\n 'implicit-test-scripts': string[];\n 'implicit-styles': string[];\n 'implicit-test-styles': string[];\n}\n\ninterface BaseAsset {\n // where this asset should be placed, relative to the app's root\n relativePath: string;\n}\n\nexport interface OnDiskAsset extends BaseAsset {\n kind: 'on-disk';\n\n // absolute path to where we will find it\n sourcePath: string;\n mtime: number;\n size: number;\n}\n\nexport interface InMemoryAsset extends BaseAsset {\n kind: 'in-memory';\n\n // the actual bits\n source: string | Buffer;\n}\n\n// This represents an HTML entrypoint to the Ember app\nexport interface EmberAsset extends BaseAsset {\n kind: 'ember';\n\n // absolute path to where we will find the html file\n sourcePath: string;\n\n // these describe the file at sourcePath so we can avoid rebuilding when it\n // hasn't changed\n mtime: number;\n size: number;\n\n // whether we should include the test suite (in addition to the ember app)\n includeTests: boolean;\n\n // the rootURL at which this Ember app expects to be hosted.\n rootURL: string;\n\n // This will receive the parsed document. It may optionally modify the\n // document. And it must return a description of the locations where we're\n // supposed to insert the parts of the Ember app.\n prepare(dom: JSDOM): EmberHTML;\n}\n\nexport type Asset = OnDiskAsset | InMemoryAsset | EmberAsset;\n"]}
|
package/src/ember-html.d.ts
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
import { JSDOM } from 'jsdom';
|
2
|
-
import type { EmberAsset } from './asset';
|
3
|
-
export interface EmberHTML {
|
4
|
-
javascript: Node;
|
5
|
-
styles: Node;
|
6
|
-
implicitScripts: Node;
|
7
|
-
implicitStyles: Node;
|
8
|
-
testJavascript?: Node;
|
9
|
-
implicitTestScripts?: Node;
|
10
|
-
implicitTestStyles?: Node;
|
11
|
-
}
|
12
|
-
declare class Placeholder {
|
13
|
-
readonly start: Node;
|
14
|
-
readonly end: Node;
|
15
|
-
readonly reference: Node;
|
16
|
-
static replacing(node: Node): Placeholder;
|
17
|
-
static immediatelyAfter(node: Node): Placeholder;
|
18
|
-
readonly parent: HTMLElement;
|
19
|
-
constructor(start: Node, end: Node, reference: Node);
|
20
|
-
clear(): void;
|
21
|
-
insert(node: Node): void;
|
22
|
-
}
|
23
|
-
export declare class PreparedEmberHTML {
|
24
|
-
private asset;
|
25
|
-
dom: JSDOM;
|
26
|
-
javascript: Placeholder;
|
27
|
-
styles: Placeholder;
|
28
|
-
implicitScripts: Placeholder;
|
29
|
-
implicitStyles: Placeholder;
|
30
|
-
testJavascript: Placeholder;
|
31
|
-
implicitTestScripts: Placeholder;
|
32
|
-
implicitTestStyles: Placeholder;
|
33
|
-
constructor(asset: EmberAsset);
|
34
|
-
private placeholders;
|
35
|
-
clear(): void;
|
36
|
-
insertScriptTag(placeholder: Placeholder, relativeSrc: string, { type, tag }?: {
|
37
|
-
type?: string;
|
38
|
-
tag?: string;
|
39
|
-
}): void;
|
40
|
-
insertStyleLink(placeholder: Placeholder, relativeHref: string): void;
|
41
|
-
}
|
42
|
-
export declare function insertNewline(at: Node): void;
|
43
|
-
export {};
|
package/src/ember-html.js
DELETED
@@ -1,110 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.PreparedEmberHTML = void 0;
|
4
|
-
exports.insertNewline = insertNewline;
|
5
|
-
const jsdom_1 = require("jsdom");
|
6
|
-
const fs_1 = require("fs");
|
7
|
-
const html_placeholder_1 = require("./html-placeholder");
|
8
|
-
class Placeholder {
|
9
|
-
static replacing(node) {
|
10
|
-
let placeholder = this.immediatelyAfter(node);
|
11
|
-
node.parentElement.removeChild(node);
|
12
|
-
return placeholder;
|
13
|
-
}
|
14
|
-
static immediatelyAfter(node) {
|
15
|
-
let document = node.ownerDocument;
|
16
|
-
let parent = node.parentElement;
|
17
|
-
if (!document || !parent) {
|
18
|
-
throw new Error('Cannot make Placeholder out of detached node');
|
19
|
-
}
|
20
|
-
let nextSibling = node.nextSibling;
|
21
|
-
let start = document.createTextNode('');
|
22
|
-
let end = document.createTextNode('');
|
23
|
-
parent.insertBefore(start, nextSibling);
|
24
|
-
parent.insertBefore(end, nextSibling);
|
25
|
-
return new Placeholder(start, end, node);
|
26
|
-
}
|
27
|
-
constructor(start, end, reference) {
|
28
|
-
this.start = start;
|
29
|
-
this.end = end;
|
30
|
-
this.reference = reference;
|
31
|
-
if (start.parentElement && start.parentElement === end.parentElement) {
|
32
|
-
this.parent = start.parentElement;
|
33
|
-
}
|
34
|
-
else {
|
35
|
-
throw new Error('Cannot make Placeholder out of detached node');
|
36
|
-
}
|
37
|
-
}
|
38
|
-
clear() {
|
39
|
-
let { start, end, parent } = this;
|
40
|
-
while (start.nextSibling && start.nextSibling !== end) {
|
41
|
-
parent.removeChild(start.nextSibling);
|
42
|
-
}
|
43
|
-
}
|
44
|
-
insert(node) {
|
45
|
-
this.parent.insertBefore(node, this.end);
|
46
|
-
}
|
47
|
-
}
|
48
|
-
class PreparedEmberHTML {
|
49
|
-
constructor(asset) {
|
50
|
-
this.asset = asset;
|
51
|
-
this.dom = new jsdom_1.JSDOM((0, fs_1.readFileSync)(asset.sourcePath, 'utf8'));
|
52
|
-
let html = asset.prepare(this.dom);
|
53
|
-
this.javascript = Placeholder.replacing(html.javascript);
|
54
|
-
this.styles = Placeholder.replacing(html.styles);
|
55
|
-
this.implicitScripts = Placeholder.replacing(html.implicitScripts);
|
56
|
-
this.implicitStyles = Placeholder.replacing(html.implicitStyles);
|
57
|
-
this.testJavascript = html.testJavascript
|
58
|
-
? Placeholder.replacing(html.testJavascript)
|
59
|
-
: Placeholder.immediatelyAfter(this.javascript.end);
|
60
|
-
this.implicitTestScripts = html.implicitTestScripts
|
61
|
-
? Placeholder.replacing(html.implicitTestScripts)
|
62
|
-
: Placeholder.immediatelyAfter(this.implicitScripts.end);
|
63
|
-
this.implicitTestStyles = html.implicitTestStyles
|
64
|
-
? Placeholder.replacing(html.implicitTestStyles)
|
65
|
-
: Placeholder.immediatelyAfter(this.implicitStyles.end);
|
66
|
-
}
|
67
|
-
placeholders() {
|
68
|
-
return [
|
69
|
-
this.javascript,
|
70
|
-
this.styles,
|
71
|
-
this.implicitScripts,
|
72
|
-
this.implicitStyles,
|
73
|
-
this.implicitTestScripts,
|
74
|
-
this.implicitTestStyles,
|
75
|
-
this.testJavascript,
|
76
|
-
];
|
77
|
-
}
|
78
|
-
clear() {
|
79
|
-
for (let range of this.placeholders()) {
|
80
|
-
range.clear();
|
81
|
-
}
|
82
|
-
}
|
83
|
-
// this takes the src relative to the application root, we adjust it so it's
|
84
|
-
// root-relative via the configured rootURL
|
85
|
-
insertScriptTag(placeholder, relativeSrc, { type, tag = 'script' } = {}) {
|
86
|
-
let document = this.dom.window.document;
|
87
|
-
let from = placeholder.reference.nodeType === 1 ? placeholder.reference : undefined;
|
88
|
-
let src = this.asset.rootURL + relativeSrc;
|
89
|
-
let attributes = type ? { src, type } : { src };
|
90
|
-
let newTag = (0, html_placeholder_1.makeTag)(document, { from, tag, attributes });
|
91
|
-
placeholder.insert(this.dom.window.document.createTextNode('\n'));
|
92
|
-
placeholder.insert(newTag);
|
93
|
-
}
|
94
|
-
// this takes the href relative to the application root, we adjust it so it's
|
95
|
-
// root-relative via the configured rootURL
|
96
|
-
insertStyleLink(placeholder, relativeHref) {
|
97
|
-
let document = this.dom.window.document;
|
98
|
-
let from = placeholder.reference.nodeType === 1 ? placeholder.reference : undefined;
|
99
|
-
let href = this.asset.rootURL + relativeHref;
|
100
|
-
let newTag = (0, html_placeholder_1.makeTag)(document, { from, tag: 'link', attributes: { href } });
|
101
|
-
(0, html_placeholder_1.normalizeStyleLink)(newTag);
|
102
|
-
placeholder.insert(this.dom.window.document.createTextNode('\n'));
|
103
|
-
placeholder.insert(newTag);
|
104
|
-
}
|
105
|
-
}
|
106
|
-
exports.PreparedEmberHTML = PreparedEmberHTML;
|
107
|
-
function insertNewline(at) {
|
108
|
-
at.parentElement.insertBefore(at.ownerDocument.createTextNode('\n'), at);
|
109
|
-
}
|
110
|
-
//# sourceMappingURL=ember-html.js.map
|
package/src/ember-html.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"ember-html.js","sourceRoot":"","sources":["ember-html.ts"],"names":[],"mappings":"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","sourcesContent":["import { JSDOM } from 'jsdom';\nimport { readFileSync } from 'fs';\nimport type { EmberAsset } from './asset';\nimport { makeTag, normalizeStyleLink } from './html-placeholder';\n\nexport interface EmberHTML {\n // each of the Nodes in here points at where we should insert the\n // corresponding parts of the ember app. The Nodes themselves will be\n // replaced, so provide placeholders.\n\n // these are mandatory, the Ember app may need to put things into them.\n javascript: Node;\n styles: Node;\n implicitScripts: Node;\n implicitStyles: Node;\n\n // these are optional because you *may* choose to stick your implicit test\n // things into specific locations (which we need for backward-compat). But you\n // can leave these off and we will simply put them in the same places as the\n // non-test things.\n //\n // Do not confuse these with controlling whether or not we will insert tests.\n // That is separately controlled via `includeTests`.\n testJavascript?: Node;\n implicitTestScripts?: Node;\n implicitTestStyles?: Node;\n}\n\nclass Placeholder {\n static replacing(node: Node): Placeholder {\n let placeholder = this.immediatelyAfter(node);\n node.parentElement!.removeChild(node);\n return placeholder;\n }\n\n static immediatelyAfter(node: Node): Placeholder {\n let document = node.ownerDocument;\n let parent = node.parentElement;\n\n if (!document || !parent) {\n throw new Error('Cannot make Placeholder out of detached node');\n }\n\n let nextSibling = node.nextSibling;\n let start = document.createTextNode('');\n let end = document.createTextNode('');\n\n parent.insertBefore(start, nextSibling);\n parent.insertBefore(end, nextSibling);\n return new Placeholder(start, end, node);\n }\n\n readonly parent: HTMLElement;\n\n constructor(readonly start: Node, readonly end: Node, readonly reference: Node) {\n if (start.parentElement && start.parentElement === end.parentElement) {\n this.parent = start.parentElement;\n } else {\n throw new Error('Cannot make Placeholder out of detached node');\n }\n }\n\n clear() {\n let { start, end, parent } = this;\n while (start.nextSibling && start.nextSibling !== end) {\n parent.removeChild(start.nextSibling);\n }\n }\n\n insert(node: Node) {\n this.parent.insertBefore(node, this.end);\n }\n}\n\nexport class PreparedEmberHTML {\n dom: JSDOM;\n javascript: Placeholder;\n styles: Placeholder;\n implicitScripts: Placeholder;\n implicitStyles: Placeholder;\n testJavascript: Placeholder;\n implicitTestScripts: Placeholder;\n implicitTestStyles: Placeholder;\n\n constructor(private asset: EmberAsset) {\n this.dom = new JSDOM(readFileSync(asset.sourcePath, 'utf8'));\n let html = asset.prepare(this.dom);\n this.javascript = Placeholder.replacing(html.javascript);\n this.styles = Placeholder.replacing(html.styles);\n this.implicitScripts = Placeholder.replacing(html.implicitScripts);\n this.implicitStyles = Placeholder.replacing(html.implicitStyles);\n this.testJavascript = html.testJavascript\n ? Placeholder.replacing(html.testJavascript)\n : Placeholder.immediatelyAfter(this.javascript.end);\n this.implicitTestScripts = html.implicitTestScripts\n ? Placeholder.replacing(html.implicitTestScripts)\n : Placeholder.immediatelyAfter(this.implicitScripts.end);\n this.implicitTestStyles = html.implicitTestStyles\n ? Placeholder.replacing(html.implicitTestStyles)\n : Placeholder.immediatelyAfter(this.implicitStyles.end);\n }\n\n private placeholders(): Placeholder[] {\n return [\n this.javascript,\n this.styles,\n this.implicitScripts,\n this.implicitStyles,\n this.implicitTestScripts,\n this.implicitTestStyles,\n this.testJavascript,\n ];\n }\n\n clear() {\n for (let range of this.placeholders()) {\n range.clear();\n }\n }\n\n // this takes the src relative to the application root, we adjust it so it's\n // root-relative via the configured rootURL\n insertScriptTag(\n placeholder: Placeholder,\n relativeSrc: string,\n { type, tag = 'script' }: { type?: string; tag?: string } = {}\n ) {\n let document = this.dom.window.document;\n let from = placeholder.reference.nodeType === 1 ? (placeholder.reference as HTMLElement) : undefined;\n let src = this.asset.rootURL + relativeSrc;\n let attributes: Record<string, string> = type ? { src, type } : { src };\n let newTag = makeTag(document, { from, tag, attributes });\n placeholder.insert(this.dom.window.document.createTextNode('\\n'));\n placeholder.insert(newTag);\n }\n\n // this takes the href relative to the application root, we adjust it so it's\n // root-relative via the configured rootURL\n insertStyleLink(placeholder: Placeholder, relativeHref: string) {\n let document = this.dom.window.document;\n let from = placeholder.reference.nodeType === 1 ? (placeholder.reference as HTMLElement) : undefined;\n let href = this.asset.rootURL + relativeHref;\n let newTag = makeTag(document, { from, tag: 'link', attributes: { href } });\n normalizeStyleLink(newTag);\n placeholder.insert(this.dom.window.document.createTextNode('\\n'));\n placeholder.insert(newTag);\n }\n}\n\nexport function insertNewline(at: Node) {\n at.parentElement!.insertBefore(at.ownerDocument!.createTextNode('\\n'), at);\n}\n"]}
|
@@ -1,11 +0,0 @@
|
|
1
|
-
import type { TransformOptions } from '@babel/core';
|
2
|
-
import type { PortableHint } from './portable';
|
3
|
-
export type ResolveOptions = {
|
4
|
-
basedir: string;
|
5
|
-
} | {
|
6
|
-
resolve: (name: string) => any;
|
7
|
-
};
|
8
|
-
export declare function makePortable(config: TransformOptions, resolveOptions: ResolveOptions, hints: PortableHint[]): {
|
9
|
-
config: TransformOptions;
|
10
|
-
isParallelSafe: boolean;
|
11
|
-
};
|
@@ -1,132 +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.makePortable = makePortable;
|
7
|
-
const path_1 = require("path");
|
8
|
-
const resolve_1 = __importDefault(require("resolve"));
|
9
|
-
const portable_1 = require("./portable");
|
10
|
-
function makePortable(config, resolveOptions, hints) {
|
11
|
-
return new PortableBabelConfig(resolveOptions, hints).convert(config);
|
12
|
-
}
|
13
|
-
class PortableBabelConfig {
|
14
|
-
constructor(resolveOptions, hints) {
|
15
|
-
this.hints = hints;
|
16
|
-
if ('resolve' in resolveOptions) {
|
17
|
-
this.resolve = resolveOptions.resolve;
|
18
|
-
}
|
19
|
-
else {
|
20
|
-
this.basedir = resolveOptions.basedir;
|
21
|
-
this.resolve = (name) => resolve_1.default.sync(name, { basedir: resolveOptions.basedir });
|
22
|
-
}
|
23
|
-
}
|
24
|
-
convert(config) {
|
25
|
-
let portable = new portable_1.Portable({
|
26
|
-
hints: this.hints,
|
27
|
-
dehydrate: (value, accessPath) => {
|
28
|
-
// this custom dehydrate hook handles babel plugins & presets. If we're
|
29
|
-
// not looking at plugins or presets, continue with stock Portable
|
30
|
-
// behavior
|
31
|
-
if (accessPath.length !== 2 || (accessPath[0] !== 'plugins' && accessPath[0] !== 'presets')) {
|
32
|
-
return undefined;
|
33
|
-
}
|
34
|
-
// standardize to always handle an array
|
35
|
-
if (!Array.isArray(value)) {
|
36
|
-
value = [value];
|
37
|
-
}
|
38
|
-
let [plugin, argument, asName] = value;
|
39
|
-
// string plugins need to get resolved correctly into absolute paths,
|
40
|
-
// so they will really be portable
|
41
|
-
if (typeof plugin === 'string') {
|
42
|
-
plugin = this.resolveBabelPlugin(plugin);
|
43
|
-
}
|
44
|
-
// next we deal with serializability. Our Portable system already
|
45
|
-
// understands the protocol used by ember-cli-babel to identify plugin
|
46
|
-
// classes and get back to their serializable forms, so this will
|
47
|
-
// handle that case.
|
48
|
-
let dehydrated = portable.dehydrate([plugin, argument, asName], accessPath.concat('_internal'));
|
49
|
-
if (dehydrated.needsHydrate) {
|
50
|
-
// we can eliminate the need for rehydration by going through our own
|
51
|
-
// portable babel launcher
|
52
|
-
return {
|
53
|
-
value: [
|
54
|
-
(0, path_1.join)(__dirname, 'portable-babel-launcher.js'),
|
55
|
-
{ module: dehydrated.value[0], arg: dehydrated.value[1], hints: this.hints },
|
56
|
-
dehydrated.value[2] || `portable-babel-launcher-${accessPath[1]}`,
|
57
|
-
],
|
58
|
-
needsHydrate: false,
|
59
|
-
isParallelSafe: dehydrated.isParallelSafe,
|
60
|
-
};
|
61
|
-
}
|
62
|
-
else {
|
63
|
-
// trim back down our array, because trailing undefined will get
|
64
|
-
// converted into null via json.stringify, and babel will complain
|
65
|
-
// about that.
|
66
|
-
while (dehydrated.value.length > 0 && dehydrated.value[dehydrated.value.length - 1] == null) {
|
67
|
-
dehydrated.value.pop();
|
68
|
-
}
|
69
|
-
if (dehydrated.value.length === 1) {
|
70
|
-
dehydrated.value = dehydrated.value[0];
|
71
|
-
}
|
72
|
-
return {
|
73
|
-
value: dehydrated.value,
|
74
|
-
needsHydrate: dehydrated.needsHydrate,
|
75
|
-
isParallelSafe: dehydrated.isParallelSafe,
|
76
|
-
};
|
77
|
-
}
|
78
|
-
},
|
79
|
-
});
|
80
|
-
let result = portable.dehydrate(config);
|
81
|
-
if (result.needsHydrate) {
|
82
|
-
throw new Error(`bug: portable babel configs aren't supposed to need hydration`);
|
83
|
-
}
|
84
|
-
return { config: result.value, isParallelSafe: result.isParallelSafe };
|
85
|
-
}
|
86
|
-
// babel lets you use relative paths, absolute paths, package names, and
|
87
|
-
// package name shorthands.
|
88
|
-
//
|
89
|
-
// my-plugin -> my-plugin
|
90
|
-
// my-plugin -> babel-plugin-my-plugin
|
91
|
-
// @me/thing -> @me/thing
|
92
|
-
// @me/thing -> @me/babel-plugin-thing
|
93
|
-
// ./here -> /your/app/here
|
94
|
-
// /tmp/there -> /tmp/there
|
95
|
-
//
|
96
|
-
resolveBabelPlugin(name) {
|
97
|
-
try {
|
98
|
-
return this.resolve(name);
|
99
|
-
}
|
100
|
-
catch (err) {
|
101
|
-
if (err.code !== 'MODULE_NOT_FOUND') {
|
102
|
-
throw err;
|
103
|
-
}
|
104
|
-
if (name.startsWith('.') || name.startsWith('/')) {
|
105
|
-
throw err;
|
106
|
-
}
|
107
|
-
try {
|
108
|
-
let expanded;
|
109
|
-
if (name.startsWith('@')) {
|
110
|
-
let [space, pkg, ...rest] = name.split('/');
|
111
|
-
expanded = [space, `babel-plugin-${pkg}`, ...rest].join('/');
|
112
|
-
}
|
113
|
-
else {
|
114
|
-
expanded = `babel-plugin-${name}`;
|
115
|
-
}
|
116
|
-
return this.resolve(expanded);
|
117
|
-
}
|
118
|
-
catch (err2) {
|
119
|
-
if (err2.code !== 'MODULE_NOT_FOUND') {
|
120
|
-
throw err2;
|
121
|
-
}
|
122
|
-
if (this.basedir) {
|
123
|
-
throw new Error(`unable to resolve babel plugin ${name} from ${this.basedir}`);
|
124
|
-
}
|
125
|
-
else {
|
126
|
-
throw new Error(`unable to resolve babel plugin ${name}`);
|
127
|
-
}
|
128
|
-
}
|
129
|
-
}
|
130
|
-
}
|
131
|
-
}
|
132
|
-
//# sourceMappingURL=portable-babel-config.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"portable-babel-config.js","sourceRoot":"","sources":["portable-babel-config.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TransformOptions } from '@babel/core';\nimport { join } from 'path';\nimport resolve from 'resolve';\nimport type { PortableHint } from './portable';\nimport { Portable } from './portable';\n\nexport type ResolveOptions = { basedir: string } | { resolve: (name: string) => any };\n\nexport function makePortable(\n config: TransformOptions,\n resolveOptions: ResolveOptions,\n hints: PortableHint[]\n): { config: TransformOptions; isParallelSafe: boolean } {\n return new PortableBabelConfig(resolveOptions, hints).convert(config);\n}\n\nclass PortableBabelConfig {\n private resolve: (name: string) => any;\n private basedir: string | undefined;\n\n constructor(resolveOptions: ResolveOptions, private hints: PortableHint[]) {\n if ('resolve' in resolveOptions) {\n this.resolve = resolveOptions.resolve;\n } else {\n this.basedir = resolveOptions.basedir;\n this.resolve = (name: string) => resolve.sync(name, { basedir: resolveOptions.basedir });\n }\n }\n\n convert(config: TransformOptions): { config: TransformOptions; isParallelSafe: boolean } {\n let portable: Portable = new Portable({\n hints: this.hints,\n dehydrate: (value: any, accessPath: string[]) => {\n // this custom dehydrate hook handles babel plugins & presets. If we're\n // not looking at plugins or presets, continue with stock Portable\n // behavior\n if (accessPath.length !== 2 || (accessPath[0] !== 'plugins' && accessPath[0] !== 'presets')) {\n return undefined;\n }\n\n // standardize to always handle an array\n if (!Array.isArray(value)) {\n value = [value];\n }\n\n let [plugin, argument, asName] = value;\n\n // string plugins need to get resolved correctly into absolute paths,\n // so they will really be portable\n if (typeof plugin === 'string') {\n plugin = this.resolveBabelPlugin(plugin);\n }\n\n // next we deal with serializability. Our Portable system already\n // understands the protocol used by ember-cli-babel to identify plugin\n // classes and get back to their serializable forms, so this will\n // handle that case.\n let dehydrated = portable.dehydrate([plugin, argument, asName], accessPath.concat('_internal'));\n\n if (dehydrated.needsHydrate) {\n // we can eliminate the need for rehydration by going through our own\n // portable babel launcher\n return {\n value: [\n join(__dirname, 'portable-babel-launcher.js'),\n { module: dehydrated.value[0], arg: dehydrated.value[1], hints: this.hints },\n dehydrated.value[2] || `portable-babel-launcher-${accessPath[1]}`,\n ],\n needsHydrate: false,\n isParallelSafe: dehydrated.isParallelSafe,\n };\n } else {\n // trim back down our array, because trailing undefined will get\n // converted into null via json.stringify, and babel will complain\n // about that.\n while (dehydrated.value.length > 0 && dehydrated.value[dehydrated.value.length - 1] == null) {\n dehydrated.value.pop();\n }\n if (dehydrated.value.length === 1) {\n dehydrated.value = dehydrated.value[0];\n }\n return {\n value: dehydrated.value,\n needsHydrate: dehydrated.needsHydrate,\n isParallelSafe: dehydrated.isParallelSafe,\n };\n }\n },\n });\n let result = portable.dehydrate(config);\n if (result.needsHydrate) {\n throw new Error(`bug: portable babel configs aren't supposed to need hydration`);\n }\n return { config: result.value, isParallelSafe: result.isParallelSafe };\n }\n\n // babel lets you use relative paths, absolute paths, package names, and\n // package name shorthands.\n //\n // my-plugin -> my-plugin\n // my-plugin -> babel-plugin-my-plugin\n // @me/thing -> @me/thing\n // @me/thing -> @me/babel-plugin-thing\n // ./here -> /your/app/here\n // /tmp/there -> /tmp/there\n //\n private resolveBabelPlugin(name: string) {\n try {\n return this.resolve(name);\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n if (name.startsWith('.') || name.startsWith('/')) {\n throw err;\n }\n try {\n let expanded;\n if (name.startsWith('@')) {\n let [space, pkg, ...rest] = name.split('/');\n expanded = [space, `babel-plugin-${pkg}`, ...rest].join('/');\n } else {\n expanded = `babel-plugin-${name}`;\n }\n return this.resolve(expanded);\n } catch (err2) {\n if (err2.code !== 'MODULE_NOT_FOUND') {\n throw err2;\n }\n if (this.basedir) {\n throw new Error(`unable to resolve babel plugin ${name} from ${this.basedir}`);\n } else {\n throw new Error(`unable to resolve babel plugin ${name}`);\n }\n }\n }\n }\n}\n"]}
|