@embroider/compat 0.50.0 → 1.1.0

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embroider/compat",
3
- "version": "0.50.0",
3
+ "version": "1.1.0",
4
4
  "private": false,
5
5
  "description": "Backward compatibility layer for the Embroider build system.",
6
6
  "repository": {
@@ -29,8 +29,8 @@
29
29
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
30
30
  "@babel/preset-env": "^7.14.5",
31
31
  "@babel/traverse": "^7.14.5",
32
- "@embroider/macros": "0.50.0",
33
- "@embroider/shared-internals": "0.50.0",
32
+ "@embroider/macros": "1.1.0",
33
+ "@embroider/shared-internals": "1.1.0",
34
34
  "@types/babel__code-frame": "^7.0.2",
35
35
  "@types/yargs": "^17.0.3",
36
36
  "assert-never": "^1.1.0",
@@ -49,7 +49,6 @@
49
49
  "debug": "^4.3.2",
50
50
  "fs-extra": "^9.1.0",
51
51
  "fs-tree-diff": "^2.0.1",
52
- "heimdalljs": "^0.2.6",
53
52
  "jsdom": "^16.6.0",
54
53
  "lodash": "^4.17.21",
55
54
  "pkg-up": "^3.1.0",
@@ -85,7 +84,7 @@
85
84
  "typescript": "*"
86
85
  },
87
86
  "peerDependencies": {
88
- "@embroider/core": "0.50.0"
87
+ "@embroider/core": "1.1.0"
89
88
  },
90
89
  "engines": {
91
90
  "node": "12.* || 14.* || >= 16"
@@ -7,6 +7,9 @@ let rules = [
7
7
  '-private.js': {
8
8
  dependsOnModules: ['@ember-data/record-data/-private'],
9
9
  },
10
+ '-private/system/core-store.js': {
11
+ dependsOnModules: ['@ember-data/record-data/-private'],
12
+ },
10
13
  },
11
14
  },
12
15
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"ember-data.js","sourceRoot":"","sources":["ember-data.ts"],"names":[],"mappings":";;AAEA,IAAI,KAAK,GAAmB;IAC1B;QACE,OAAO,EAAE,mBAAmB;QAC5B,YAAY,EAAE;YACZ,aAAa,EAAE;gBACb,gBAAgB,EAAE,CAAC,kCAAkC,CAAC;aACvD;SACF;KACF;CACF,CAAC;AAEF,kBAAe,KAAK,CAAC","sourcesContent":["import { PackageRules } from '..';\n\nlet rules: PackageRules[] = [\n {\n package: '@ember-data/store',\n addonModules: {\n '-private.js': {\n dependsOnModules: ['@ember-data/record-data/-private'],\n },\n },\n },\n];\n\nexport default rules;\n"]}
1
+ {"version":3,"file":"ember-data.js","sourceRoot":"","sources":["ember-data.ts"],"names":[],"mappings":";;AAEA,IAAI,KAAK,GAAmB;IAC1B;QACE,OAAO,EAAE,mBAAmB;QAC5B,YAAY,EAAE;YACZ,aAAa,EAAE;gBACb,gBAAgB,EAAE,CAAC,kCAAkC,CAAC;aACvD;YACD,+BAA+B,EAAE;gBAC/B,gBAAgB,EAAE,CAAC,kCAAkC,CAAC;aACvD;SACF;KACF;CACF,CAAC;AAEF,kBAAe,KAAK,CAAC","sourcesContent":["import { PackageRules } from '..';\n\nlet rules: PackageRules[] = [\n {\n package: '@ember-data/store',\n addonModules: {\n '-private.js': {\n dependsOnModules: ['@ember-data/record-data/-private'],\n },\n '-private/system/core-store.js': {\n dependsOnModules: ['@ember-data/record-data/-private'],\n },\n },\n },\n];\n\nexport default rules;\n"]}
@@ -1,4 +1,4 @@
1
1
  import V1InstanceCache from './v1-instance-cache';
2
2
  import { Package } from '@embroider/core';
3
3
  import { Node } from 'broccoli-node-api';
4
- export default function cachedBuildCompatAddon(originalPackage: Package, v1Cache: V1InstanceCache): Node;
4
+ export default function buildCompatAddon(originalPackage: Package, v1Cache: V1InstanceCache): Node;
@@ -5,18 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const smoosh_package_json_1 = __importDefault(require("./smoosh-package-json"));
7
7
  const broccoli_merge_trees_1 = __importDefault(require("broccoli-merge-trees"));
8
- const one_shot_1 = __importDefault(require("./one-shot"));
9
8
  const broccoli_funnel_1 = __importDefault(require("broccoli-funnel"));
10
9
  const broccoli_source_1 = require("broccoli-source");
11
10
  const empty_package_tree_1 = __importDefault(require("./empty-package-tree"));
12
- function cachedBuildCompatAddon(originalPackage, v1Cache) {
13
- let tree = buildCompatAddon(originalPackage, v1Cache);
14
- if (!originalPackage.mayRebuild) {
15
- tree = one_shot_1.default.create(tree, originalPackage.name);
16
- }
17
- return tree;
18
- }
19
- exports.default = cachedBuildCompatAddon;
20
11
  function buildCompatAddon(originalPackage, v1Cache) {
21
12
  if (originalPackage.isV2Addon()) {
22
13
  // this case is needed when a native-v2 addon depends on a
@@ -53,6 +44,7 @@ function buildCompatAddon(originalPackage, v1Cache) {
53
44
  return oldPackages[0].v2Tree;
54
45
  }
55
46
  }
47
+ exports.default = buildCompatAddon;
56
48
  function withoutNodeModules(originalPackage) {
57
49
  let Klass = originalPackage.mayRebuild ? broccoli_source_1.WatchedDir : broccoli_source_1.UnwatchedDir;
58
50
  return (0, broccoli_funnel_1.default)(new Klass(originalPackage.root), {
@@ -1 +1 @@
1
- {"version":3,"file":"build-compat-addon.js","sourceRoot":"","sources":["build-compat-addon.ts"],"names":[],"mappings":";;;;;AAEA,gFAAsD;AACtD,gFAAsD;AAEtD,0DAAiC;AACjC,sEAA0C;AAC1C,qDAA2D;AAC3D,8EAAoD;AAEpD,SAAwB,sBAAsB,CAAC,eAAwB,EAAE,OAAwB;IAC/F,IAAI,IAAI,GAAG,gBAAgB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;QAC/B,IAAI,GAAG,kBAAO,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;KACnD;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAND,yCAMC;AAED,SAAS,gBAAgB,CAAC,eAAwB,EAAE,OAAwB;IAC1E,IAAI,eAAe,CAAC,SAAS,EAAE,EAAE;QAC/B,0DAA0D;QAC1D,kEAAkE;QAClE,0EAA0E;QAC1E,aAAa;QACb,OAAO,kBAAkB,CAAC,eAAe,CAAC,CAAC;KAC5C;IAED,IAAI,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAE1D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;QAC1B,sEAAsE;QACtE,2EAA2E;QAC3E,+BAA+B;QAC/B,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;KAC3D;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;QAC5B,yEAAyE;QACzE,4EAA4E;QAC5E,kCAAkC;QAClC,EAAE;QACF,yEAAyE;QACzE,gEAAgE;QAChE,0EAA0E;QAC1E,2BAA2B;QAC3B,OAAO,IAAI,4BAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KACnD;IAED,IAAI,cAAc,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5E,IAAI,cAAc,EAAE;QAClB,IAAI,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QACzD,IAAI,QAAQ,GAAG,IAAI,6BAAiB,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;QAClF,OAAO,IAAA,8BAAkB,EAAC,CAAC,GAAG,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;KACtE;SAAM;QACL,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;KAC9B;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,eAAwB;IAClD,IAAI,KAAK,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,4BAAU,CAAC,CAAC,CAAC,8BAAY,CAAC;IACnE,OAAO,IAAA,yBAAW,EAAC,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;QAClD,OAAO,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC","sourcesContent":["import V1InstanceCache from './v1-instance-cache';\nimport { Package } from '@embroider/core';\nimport SmooshPackageJSON from './smoosh-package-json';\nimport broccoliMergeTrees from 'broccoli-merge-trees';\nimport { Node } from 'broccoli-node-api';\nimport OneShot from './one-shot';\nimport buildFunnel from 'broccoli-funnel';\nimport { UnwatchedDir, WatchedDir } from 'broccoli-source';\nimport EmptyPackageTree from './empty-package-tree';\n\nexport default function cachedBuildCompatAddon(originalPackage: Package, v1Cache: V1InstanceCache): Node {\n let tree = buildCompatAddon(originalPackage, v1Cache);\n if (!originalPackage.mayRebuild) {\n tree = OneShot.create(tree, originalPackage.name);\n }\n return tree;\n}\n\nfunction buildCompatAddon(originalPackage: Package, v1Cache: V1InstanceCache): Node {\n if (originalPackage.isV2Addon()) {\n // this case is needed when a native-v2 addon depends on a\n // non-native-v2 addon. (The non-native one will get rewritten and\n // therefore moved, so to continue depending on it the native one needs to\n // move too.)\n return withoutNodeModules(originalPackage);\n }\n\n let oldPackages = v1Cache.getAddons(originalPackage.root);\n\n if (oldPackages.length > 1) {\n // extensibility hook that allows a compat adapter to optimize its own\n // smooshing. We do it early so that if it reduces all the way to zero, the\n // next check will handle that.\n oldPackages = oldPackages[0].reduceInstances(oldPackages);\n }\n\n if (oldPackages.length === 0) {\n // this happens when the v1 addon wasn't actually getting instantiated at\n // all, which can happen if the app uses `addons.blacklist` or another addon\n // uses `shouldIncludeChildAddon`.\n //\n // we still keep a place for this addon in the rewritten addon workspace,\n // because that whole process only depends on looking at all the\n // package.json files on disk -- it can't know which ones are going to end\n // up unused at this point.\n return new EmptyPackageTree(originalPackage.name);\n }\n\n let needsSmooshing = oldPackages.length > 1 && oldPackages[0].hasAnyTrees();\n if (needsSmooshing) {\n let trees = oldPackages.map(pkg => pkg.v2Tree).reverse();\n let smoosher = new SmooshPackageJSON(trees, { annotation: originalPackage.name });\n return broccoliMergeTrees([...trees, smoosher], { overwrite: true });\n } else {\n return oldPackages[0].v2Tree;\n }\n}\n\nfunction withoutNodeModules(originalPackage: Package): Node {\n let Klass = originalPackage.mayRebuild ? WatchedDir : UnwatchedDir;\n return buildFunnel(new Klass(originalPackage.root), {\n exclude: ['node_modules', '*/node_modules'],\n });\n}\n"]}
1
+ {"version":3,"file":"build-compat-addon.js","sourceRoot":"","sources":["build-compat-addon.ts"],"names":[],"mappings":";;;;;AAEA,gFAAsD;AACtD,gFAAsD;AAEtD,sEAA0C;AAC1C,qDAA2D;AAC3D,8EAAoD;AAEpD,SAAwB,gBAAgB,CAAC,eAAwB,EAAE,OAAwB;IACzF,IAAI,eAAe,CAAC,SAAS,EAAE,EAAE;QAC/B,0DAA0D;QAC1D,kEAAkE;QAClE,0EAA0E;QAC1E,aAAa;QACb,OAAO,kBAAkB,CAAC,eAAe,CAAC,CAAC;KAC5C;IAED,IAAI,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAE1D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;QAC1B,sEAAsE;QACtE,2EAA2E;QAC3E,+BAA+B;QAC/B,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;KAC3D;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;QAC5B,yEAAyE;QACzE,4EAA4E;QAC5E,kCAAkC;QAClC,EAAE;QACF,yEAAyE;QACzE,gEAAgE;QAChE,0EAA0E;QAC1E,2BAA2B;QAC3B,OAAO,IAAI,4BAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KACnD;IAED,IAAI,cAAc,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5E,IAAI,cAAc,EAAE;QAClB,IAAI,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QACzD,IAAI,QAAQ,GAAG,IAAI,6BAAiB,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;QAClF,OAAO,IAAA,8BAAkB,EAAC,CAAC,GAAG,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;KACtE;SAAM;QACL,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;KAC9B;AACH,CAAC;AAtCD,mCAsCC;AAED,SAAS,kBAAkB,CAAC,eAAwB;IAClD,IAAI,KAAK,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,4BAAU,CAAC,CAAC,CAAC,8BAAY,CAAC;IACnE,OAAO,IAAA,yBAAW,EAAC,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;QAClD,OAAO,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC","sourcesContent":["import V1InstanceCache from './v1-instance-cache';\nimport { Package } from '@embroider/core';\nimport SmooshPackageJSON from './smoosh-package-json';\nimport broccoliMergeTrees from 'broccoli-merge-trees';\nimport { Node } from 'broccoli-node-api';\nimport buildFunnel from 'broccoli-funnel';\nimport { UnwatchedDir, WatchedDir } from 'broccoli-source';\nimport EmptyPackageTree from './empty-package-tree';\n\nexport default function buildCompatAddon(originalPackage: Package, v1Cache: V1InstanceCache): Node {\n if (originalPackage.isV2Addon()) {\n // this case is needed when a native-v2 addon depends on a\n // non-native-v2 addon. (The non-native one will get rewritten and\n // therefore moved, so to continue depending on it the native one needs to\n // move too.)\n return withoutNodeModules(originalPackage);\n }\n\n let oldPackages = v1Cache.getAddons(originalPackage.root);\n\n if (oldPackages.length > 1) {\n // extensibility hook that allows a compat adapter to optimize its own\n // smooshing. We do it early so that if it reduces all the way to zero, the\n // next check will handle that.\n oldPackages = oldPackages[0].reduceInstances(oldPackages);\n }\n\n if (oldPackages.length === 0) {\n // this happens when the v1 addon wasn't actually getting instantiated at\n // all, which can happen if the app uses `addons.blacklist` or another addon\n // uses `shouldIncludeChildAddon`.\n //\n // we still keep a place for this addon in the rewritten addon workspace,\n // because that whole process only depends on looking at all the\n // package.json files on disk -- it can't know which ones are going to end\n // up unused at this point.\n return new EmptyPackageTree(originalPackage.name);\n }\n\n let needsSmooshing = oldPackages.length > 1 && oldPackages[0].hasAnyTrees();\n if (needsSmooshing) {\n let trees = oldPackages.map(pkg => pkg.v2Tree).reverse();\n let smoosher = new SmooshPackageJSON(trees, { annotation: originalPackage.name });\n return broccoliMergeTrees([...trees, smoosher], { overwrite: true });\n } else {\n return oldPackages[0].v2Tree;\n }\n}\n\nfunction withoutNodeModules(originalPackage: Package): Node {\n let Klass = originalPackage.mayRebuild ? WatchedDir : UnwatchedDir;\n return buildFunnel(new Klass(originalPackage.root), {\n exclude: ['node_modules', '*/node_modules'],\n });\n}\n"]}
@@ -24,7 +24,13 @@ class RedirectToEmber extends broccoli_plugin_1.default {
24
24
  if (!this.didBuild) {
25
25
  (0, fs_extra_1.copyFileSync)((0, path_1.join)(this.inputPaths[0], 'package.json'), (0, path_1.join)(this.outputPath, 'package.json'));
26
26
  (0, fs_extra_1.outputFileSync)((0, path_1.join)(this.outputPath, 'index.js'), `export { tracked } from '@ember/-internals/metal';`);
27
- (0, fs_extra_1.outputFileSync)((0, path_1.join)(this.outputPath, 'primitives', 'cache.js'), `export { createCache, getValue, isConst } from "@ember/-internals/metal";`);
27
+ (0, fs_extra_1.outputFileSync)((0, path_1.join)(this.outputPath, 'primitives', 'cache.js'),
28
+ // Prior to ember-source 4.1, cached didn't exist
29
+ // using this way of importing from metal, cached will be undefined if pre 4.1
30
+ `import * as metal from "@ember/-internals/metal";
31
+ const { cached, createCache, getValue, isConst } = metal;
32
+ export { cached, createCache, getValue, isConst };
33
+ `);
28
34
  this.didBuild = true;
29
35
  }
30
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tracking.js","sourceRoot":"","sources":["tracking.ts"],"names":[],"mappings":";;;;;AAAA,8DAAqC;AACrC,sEAAqC;AACrC,+BAA4B;AAC5B,uCAAwD;AAExD;;;;;;;EAOE;AACF,MAAM,eAAgB,SAAQ,yBAAM;IAApC;;QACU,aAAQ,GAAG,KAAK,CAAC;IAa3B,CAAC;IAXC,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAA,uBAAY,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;YAC9F,IAAA,yBAAc,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,oDAAoD,CAAC,CAAC;YACxG,IAAA,yBAAc,EACZ,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,EAC/C,2EAA2E,CAC5E,CAAC;YACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;SACtB;IACH,CAAC;CACF;AAED,eAAqB,SAAQ,kBAAO;IAClC,IAAI,MAAM;QACR,OAAO,IAAI,eAAe,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7C,CAAC;CACF;AAJD,4BAIC","sourcesContent":["import V1Addon from '../../v1-addon';\nimport Plugin from 'broccoli-plugin';\nimport { join } from 'path';\nimport { outputFileSync, copyFileSync } from 'fs-extra';\n\n/*\n @glimmer/tracking is a real package but it has no working implementation. The\n real implementation is in ember-source.\n\n Since embroider prioritizes real packages, it's best to provide a compat\n adapter here to make it into a valid package. It's easy enough for it to\n reexport the things from ember that are needed.\n*/\nclass RedirectToEmber extends Plugin {\n private didBuild = false;\n\n build() {\n if (!this.didBuild) {\n copyFileSync(join(this.inputPaths[0], 'package.json'), join(this.outputPath, 'package.json'));\n outputFileSync(join(this.outputPath, 'index.js'), `export { tracked } from '@ember/-internals/metal';`);\n outputFileSync(\n join(this.outputPath, 'primitives', 'cache.js'),\n `export { createCache, getValue, isConst } from \"@ember/-internals/metal\";`\n );\n this.didBuild = true;\n }\n }\n}\n\nexport default class extends V1Addon {\n get v2Tree() {\n return new RedirectToEmber([super.v2Tree]);\n }\n}\n"]}
1
+ {"version":3,"file":"tracking.js","sourceRoot":"","sources":["tracking.ts"],"names":[],"mappings":";;;;;AAAA,8DAAqC;AACrC,sEAAqC;AACrC,+BAA4B;AAC5B,uCAAwD;AAExD;;;;;;;EAOE;AACF,MAAM,eAAgB,SAAQ,yBAAM;IAApC;;QACU,aAAQ,GAAG,KAAK,CAAC;IAkB3B,CAAC;IAhBC,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAA,uBAAY,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;YAC9F,IAAA,yBAAc,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,oDAAoD,CAAC,CAAC;YACxG,IAAA,yBAAc,EACZ,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC;YAC/C,iDAAiD;YACjD,8EAA8E;YAC9E;;;CAGP,CACM,CAAC;YACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;SACtB;IACH,CAAC;CACF;AAED,eAAqB,SAAQ,kBAAO;IAClC,IAAI,MAAM;QACR,OAAO,IAAI,eAAe,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7C,CAAC;CACF;AAJD,4BAIC","sourcesContent":["import V1Addon from '../../v1-addon';\nimport Plugin from 'broccoli-plugin';\nimport { join } from 'path';\nimport { outputFileSync, copyFileSync } from 'fs-extra';\n\n/*\n @glimmer/tracking is a real package but it has no working implementation. The\n real implementation is in ember-source.\n\n Since embroider prioritizes real packages, it's best to provide a compat\n adapter here to make it into a valid package. It's easy enough for it to\n reexport the things from ember that are needed.\n*/\nclass RedirectToEmber extends Plugin {\n private didBuild = false;\n\n build() {\n if (!this.didBuild) {\n copyFileSync(join(this.inputPaths[0], 'package.json'), join(this.outputPath, 'package.json'));\n outputFileSync(join(this.outputPath, 'index.js'), `export { tracked } from '@ember/-internals/metal';`);\n outputFileSync(\n join(this.outputPath, 'primitives', 'cache.js'),\n // Prior to ember-source 4.1, cached didn't exist\n // using this way of importing from metal, cached will be undefined if pre 4.1\n `import * as metal from \"@ember/-internals/metal\";\nconst { cached, createCache, getValue, isConst } = metal;\nexport { cached, createCache, getValue, isConst };\n`\n );\n this.didBuild = true;\n }\n }\n}\n\nexport default class extends V1Addon {\n get v2Tree() {\n return new RedirectToEmber([super.v2Tree]);\n }\n}\n"]}
@@ -18,6 +18,16 @@ const build_compat_addon_1 = __importDefault(require("./build-compat-addon"));
18
18
  const options_1 = require("./options");
19
19
  const tree_sync_1 = __importDefault(require("tree-sync"));
20
20
  const broccoli_source_1 = require("broccoli-source");
21
+ // This build stage expects to be run with broccoli memoization enabled in order
22
+ // to get good rebuild performance. We turn it on by default here, but you can
23
+ // still explicitly turn it off by setting the env var to "false".
24
+ //
25
+ // As for safetly mutating process.env: broccoli doesn't read this until a Node
26
+ // executes its build hook, so as far as I can tell there's no way we could set
27
+ // this too late.
28
+ if (typeof process.env.BROCCOLI_ENABLED_MEMOIZE === 'undefined') {
29
+ process.env.BROCCOLI_ENABLED_MEMOIZE = 'true';
30
+ }
21
31
  class CompatAddons {
22
32
  constructor(legacyEmberAppInstance, maybeOptions) {
23
33
  this.didBuild = false;
@@ -28,7 +38,7 @@ class CompatAddons {
28
38
  // benefit from on-disk caching in stage3 packagers.
29
39
  (0, fs_extra_1.ensureDirSync)(options.workspaceDir);
30
40
  this.destDir = (0, fs_extra_1.realpathSync)(options.workspaceDir);
31
- this.packageCache = v1Cache.packageCache.moveAddons(v1Cache.app.root, this.destDir);
41
+ this.packageCache = v1Cache.app.packageCache.moveAddons(this.destDir);
32
42
  this.inputPath = v1Cache.app.root;
33
43
  this.treeSyncMap = new WeakMap();
34
44
  this.v1Cache = v1Cache;
@@ -48,15 +58,15 @@ class CompatAddons {
48
58
  async ready() {
49
59
  await this.deferReady.promise;
50
60
  (0, fs_extra_1.writeJSONSync)((0, path_1.join)(this.destDir, '.embroider-reuse.json'), {
51
- appDestDir: (0, path_1.relative)(this.destDir, this.packageCache.appDestDir),
61
+ appDestDir: (0, path_1.relative)(this.destDir, this.packageCache.appRoot),
52
62
  });
53
63
  return {
54
- outputPath: this.packageCache.appDestDir,
64
+ outputPath: this.packageCache.appRoot,
55
65
  packageCache: this.packageCache,
56
66
  };
57
67
  }
58
68
  get appDestDir() {
59
- return this.packageCache.appDestDir;
69
+ return this.packageCache.appRoot;
60
70
  }
61
71
  get app() {
62
72
  return this.packageCache.app;
@@ -1 +1 @@
1
- {"version":3,"file":"compat-addons.js","sourceRoot":"","sources":["compat-addons.ts"],"names":[],"mappings":"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","sourcesContent":["import { Node } from 'broccoli-node-api';\nimport { join, relative, dirname, isAbsolute } from 'path';\nimport { emptyDirSync, ensureSymlinkSync, ensureDirSync, realpathSync, copySync, writeJSONSync } from 'fs-extra';\nimport { Stage, Package, PackageCache, WaitForTrees, mangledEngineRoot } from '@embroider/core';\nimport V1InstanceCache from './v1-instance-cache';\nimport { MovedPackageCache } from './moved-package-cache';\nimport { Memoize } from 'typescript-memoize';\nimport buildCompatAddon from './build-compat-addon';\nimport Options, { optionsWithDefaults } from './options';\nimport V1App from './v1-app';\nimport TreeSync from 'tree-sync';\nimport { WatchedDir } from 'broccoli-source';\n\nexport default class CompatAddons implements Stage {\n private didBuild = false;\n private destDir: string;\n private packageCache: MovedPackageCache;\n private treeSyncMap: WeakMap<Package, TreeSync>;\n private v1Cache: V1InstanceCache;\n readonly inputPath: string;\n\n constructor(legacyEmberAppInstance: object, maybeOptions?: Options) {\n let options = optionsWithDefaults(maybeOptions);\n let v1Cache = V1InstanceCache.forApp(legacyEmberAppInstance, options);\n\n // we want this to be stable across builds, because it becomes part of the\n // path to all of the files that the stage3 packager sees, and we want to\n // benefit from on-disk caching in stage3 packagers.\n ensureDirSync(options.workspaceDir!);\n this.destDir = realpathSync(options.workspaceDir!);\n\n this.packageCache = v1Cache.packageCache.moveAddons(v1Cache.app.root, this.destDir);\n this.inputPath = v1Cache.app.root;\n this.treeSyncMap = new WeakMap();\n this.v1Cache = v1Cache;\n }\n\n get tree(): Node {\n let movedAddons = [...this.packageCache.moved.keys()].map(oldPkg => buildCompatAddon(oldPkg, this.v1Cache));\n\n // these get watched so that EMBROIDER_REBUILD_ADDONS will still work\n // correctly, even for v2 addons that have no v1 addon deps and therefore\n // don't need to be moved. We don't consume these trees in our build step,\n // we only do this to trigger rebuilds to happen.\n let watchedUnmovedAddons = [...this.packageCache.unmovedAddons]\n .filter(pkg => pkg.mayRebuild)\n .map(pkg => new WatchedDir(pkg.root));\n\n let { synthVendor, synthStyles } = this.getSyntheticPackages(this.v1Cache.app, movedAddons);\n return new WaitForTrees(\n { movedAddons, synthVendor, synthStyles, watchedUnmovedAddons },\n '@embroider/compat/addons',\n this.build.bind(this)\n );\n }\n\n async ready(): Promise<{ outputPath: string; packageCache: PackageCache }> {\n await this.deferReady.promise;\n writeJSONSync(join(this.destDir, '.embroider-reuse.json'), {\n appDestDir: relative(this.destDir, this.packageCache.appDestDir),\n });\n return {\n outputPath: this.packageCache.appDestDir,\n packageCache: this.packageCache,\n };\n }\n\n private get appDestDir(): string {\n return this.packageCache.appDestDir;\n }\n\n private get app(): Package {\n return this.packageCache.app;\n }\n\n private async build(\n {\n movedAddons,\n synthVendor,\n synthStyles,\n }: {\n movedAddons: string[];\n synthVendor: string;\n synthStyles: string;\n },\n changedMap: Map<string, boolean>\n ) {\n // empty the directory only on the first pass\n if (!this.didBuild) {\n emptyDirSync(this.destDir);\n }\n\n [...this.packageCache.moved.entries()].forEach(([oldPkg, newPkg], index) => {\n let treeInstance = this.treeSyncMap.get(newPkg);\n\n // we need to pull metadata off the oldPkg, not the newPkg, because the\n // newPkg doesn't actually have anything in it yet (including\n // package.json)\n let isEngine = oldPkg.isEngine();\n\n // Engines get built not into their real package name, but a mangled one.\n // Their real one needs to be free for us to merge all their dependencies\n // into.\n let destination = isEngine ? mangledEngineRoot(newPkg) : newPkg.root;\n\n if (!treeInstance) {\n let ignore = ['**/node_modules'];\n\n let rel = relative(destination, this.appDestDir);\n if (!rel.startsWith('..') && !isAbsolute(rel)) {\n // the app is inside our addon. We must not copy the app as part of\n // the addon, because that would overwrite the real app build.\n ignore.push(rel);\n\n if (rel === 'tests/dummy') {\n // special case: classic dummy apps are weird because they put the\n // tests (which are truly part of the app, not the addon) inside the\n // addon instead of inside the app.\n ignore.push('tests');\n }\n }\n\n treeInstance = new TreeSync(movedAddons[index], destination, {\n ignore,\n });\n\n this.treeSyncMap.set(newPkg, treeInstance);\n }\n\n if (\n !this.didBuild || // always copy on the first build\n (newPkg.mayRebuild && changedMap.get(movedAddons[index]))\n ) {\n treeInstance.sync();\n if (!this.didBuild && isEngine) {\n // The first time we encounter an engine, we also create the empty\n // shell for its real module namespace.\n copySync(join(destination, 'package.json'), join(newPkg.root, 'package.json'));\n }\n\n // for engines, this isn't the mangled destination (we don't need\n // resolvable node_modules there), this is the empty shell of their real\n // location\n this.linkNonCopiedDeps(newPkg, newPkg.root);\n }\n });\n\n this.linkNonCopiedDeps(this.app, this.appDestDir);\n await this.packageCache.updatePreexistingResolvableSymlinks();\n\n if (changedMap && changedMap.get(synthVendor)) {\n copySync(synthVendor, join(this.appDestDir, 'node_modules', '@embroider', 'synthesized-vendor'), {\n dereference: true,\n overwrite: true,\n });\n }\n\n if (changedMap && changedMap.get(synthStyles)) {\n copySync(synthStyles, join(this.appDestDir, 'node_modules', '@embroider', 'synthesized-styles'), {\n dereference: true,\n overwrite: true,\n });\n }\n\n if (!this.didBuild) {\n this.handleNonResolvableDeps();\n }\n this.didBuild = true;\n this.deferReady.resolve();\n }\n\n private handleNonResolvableDeps() {\n // non-resolvable deps in addons\n for (let [oldPkg, newPkg] of this.packageCache.moved.entries()) {\n if (!oldPkg.nonResolvableDeps) {\n continue;\n }\n for (let dep of oldPkg.nonResolvableDeps.values()) {\n let moved = this.packageCache.moved.get(dep);\n if (moved) {\n dep = moved;\n }\n let target = join(newPkg.root, 'node_modules', dep.name);\n ensureDirSync(dirname(target));\n ensureSymlinkSync(dep.root, target, 'dir');\n }\n }\n // non-resolvable deps in app\n if (this.packageCache.app.nonResolvableDeps) {\n for (let dep of this.packageCache.app.nonResolvableDeps.values()) {\n let moved = this.packageCache.moved.get(dep);\n if (moved) {\n dep = moved;\n }\n let target = join(this.appDestDir, 'node_modules', dep.name);\n ensureDirSync(dirname(target));\n ensureSymlinkSync(dep.root, target, 'dir');\n }\n }\n }\n\n private getSyntheticPackages(v1App: V1App, movedAddons: Node[]): { synthVendor: Node; synthStyles: Node } {\n let index = 0;\n let upgradedAddonTrees = [];\n for (let [oldPkg] of this.packageCache.moved.entries()) {\n if (!oldPkg.isV2Ember()) {\n upgradedAddonTrees.push(movedAddons[index]);\n }\n index++;\n }\n return {\n synthVendor: v1App.synthesizeVendorPackage(upgradedAddonTrees),\n synthStyles: v1App.synthesizeStylesPackage(upgradedAddonTrees),\n };\n }\n\n @Memoize()\n private get deferReady() {\n let resolve: Function;\n let promise: Promise<void> = new Promise(r => (resolve = r));\n return { resolve: resolve!, promise };\n }\n\n @Memoize()\n private isMoved(pkg: Package) {\n for (let candidate of this.packageCache.moved.values()) {\n if (candidate === pkg) {\n return true;\n }\n }\n return false;\n }\n\n private linkNonCopiedDeps(pkg: Package, destRoot: string) {\n for (let dep of pkg.dependencies) {\n if (!this.isMoved(dep)) {\n ensureSymlinkSync(dep.root, join(destRoot, 'node_modules', dep.packageJSON.name));\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"compat-addons.js","sourceRoot":"","sources":["compat-addons.ts"],"names":[],"mappings":"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","sourcesContent":["import { Node } from 'broccoli-node-api';\nimport { join, relative, dirname, isAbsolute } from 'path';\nimport { emptyDirSync, ensureSymlinkSync, ensureDirSync, realpathSync, copySync, writeJSONSync } from 'fs-extra';\nimport { Stage, Package, PackageCache, WaitForTrees, mangledEngineRoot } from '@embroider/core';\nimport V1InstanceCache from './v1-instance-cache';\nimport { MovedPackageCache } from './moved-package-cache';\nimport { Memoize } from 'typescript-memoize';\nimport buildCompatAddon from './build-compat-addon';\nimport Options, { optionsWithDefaults } from './options';\nimport V1App from './v1-app';\nimport TreeSync from 'tree-sync';\nimport { WatchedDir } from 'broccoli-source';\n\n// This build stage expects to be run with broccoli memoization enabled in order\n// to get good rebuild performance. We turn it on by default here, but you can\n// still explicitly turn it off by setting the env var to \"false\".\n//\n// As for safetly mutating process.env: broccoli doesn't read this until a Node\n// executes its build hook, so as far as I can tell there's no way we could set\n// this too late.\nif (typeof process.env.BROCCOLI_ENABLED_MEMOIZE === 'undefined') {\n process.env.BROCCOLI_ENABLED_MEMOIZE = 'true';\n}\n\nexport default class CompatAddons implements Stage {\n private didBuild = false;\n private destDir: string;\n private packageCache: MovedPackageCache;\n private treeSyncMap: WeakMap<Package, TreeSync>;\n private v1Cache: V1InstanceCache;\n readonly inputPath: string;\n\n constructor(legacyEmberAppInstance: object, maybeOptions?: Options) {\n let options = optionsWithDefaults(maybeOptions);\n let v1Cache = V1InstanceCache.forApp(legacyEmberAppInstance, options);\n\n // we want this to be stable across builds, because it becomes part of the\n // path to all of the files that the stage3 packager sees, and we want to\n // benefit from on-disk caching in stage3 packagers.\n ensureDirSync(options.workspaceDir!);\n this.destDir = realpathSync(options.workspaceDir!);\n\n this.packageCache = v1Cache.app.packageCache.moveAddons(this.destDir);\n this.inputPath = v1Cache.app.root;\n this.treeSyncMap = new WeakMap();\n this.v1Cache = v1Cache;\n }\n\n get tree(): Node {\n let movedAddons = [...this.packageCache.moved.keys()].map(oldPkg => buildCompatAddon(oldPkg, this.v1Cache));\n\n // these get watched so that EMBROIDER_REBUILD_ADDONS will still work\n // correctly, even for v2 addons that have no v1 addon deps and therefore\n // don't need to be moved. We don't consume these trees in our build step,\n // we only do this to trigger rebuilds to happen.\n let watchedUnmovedAddons = [...this.packageCache.unmovedAddons]\n .filter(pkg => pkg.mayRebuild)\n .map(pkg => new WatchedDir(pkg.root));\n\n let { synthVendor, synthStyles } = this.getSyntheticPackages(this.v1Cache.app, movedAddons);\n return new WaitForTrees(\n { movedAddons, synthVendor, synthStyles, watchedUnmovedAddons },\n '@embroider/compat/addons',\n this.build.bind(this)\n );\n }\n\n async ready(): Promise<{ outputPath: string; packageCache: PackageCache }> {\n await this.deferReady.promise;\n writeJSONSync(join(this.destDir, '.embroider-reuse.json'), {\n appDestDir: relative(this.destDir, this.packageCache.appRoot),\n });\n return {\n outputPath: this.packageCache.appRoot,\n packageCache: this.packageCache,\n };\n }\n\n private get appDestDir(): string {\n return this.packageCache.appRoot;\n }\n\n private get app(): Package {\n return this.packageCache.app;\n }\n\n private async build(\n {\n movedAddons,\n synthVendor,\n synthStyles,\n }: {\n movedAddons: string[];\n synthVendor: string;\n synthStyles: string;\n },\n changedMap: Map<string, boolean>\n ) {\n // empty the directory only on the first pass\n if (!this.didBuild) {\n emptyDirSync(this.destDir);\n }\n\n [...this.packageCache.moved.entries()].forEach(([oldPkg, newPkg], index) => {\n let treeInstance = this.treeSyncMap.get(newPkg);\n\n // we need to pull metadata off the oldPkg, not the newPkg, because the\n // newPkg doesn't actually have anything in it yet (including\n // package.json)\n let isEngine = oldPkg.isEngine();\n\n // Engines get built not into their real package name, but a mangled one.\n // Their real one needs to be free for us to merge all their dependencies\n // into.\n let destination = isEngine ? mangledEngineRoot(newPkg) : newPkg.root;\n\n if (!treeInstance) {\n let ignore = ['**/node_modules'];\n\n let rel = relative(destination, this.appDestDir);\n if (!rel.startsWith('..') && !isAbsolute(rel)) {\n // the app is inside our addon. We must not copy the app as part of\n // the addon, because that would overwrite the real app build.\n ignore.push(rel);\n\n if (rel === 'tests/dummy') {\n // special case: classic dummy apps are weird because they put the\n // tests (which are truly part of the app, not the addon) inside the\n // addon instead of inside the app.\n ignore.push('tests');\n }\n }\n\n treeInstance = new TreeSync(movedAddons[index], destination, {\n ignore,\n });\n\n this.treeSyncMap.set(newPkg, treeInstance);\n }\n\n if (\n !this.didBuild || // always copy on the first build\n (newPkg.mayRebuild && changedMap.get(movedAddons[index]))\n ) {\n treeInstance.sync();\n if (!this.didBuild && isEngine) {\n // The first time we encounter an engine, we also create the empty\n // shell for its real module namespace.\n copySync(join(destination, 'package.json'), join(newPkg.root, 'package.json'));\n }\n\n // for engines, this isn't the mangled destination (we don't need\n // resolvable node_modules there), this is the empty shell of their real\n // location\n this.linkNonCopiedDeps(newPkg, newPkg.root);\n }\n });\n\n this.linkNonCopiedDeps(this.app, this.appDestDir);\n await this.packageCache.updatePreexistingResolvableSymlinks();\n\n if (changedMap && changedMap.get(synthVendor)) {\n copySync(synthVendor, join(this.appDestDir, 'node_modules', '@embroider', 'synthesized-vendor'), {\n dereference: true,\n overwrite: true,\n });\n }\n\n if (changedMap && changedMap.get(synthStyles)) {\n copySync(synthStyles, join(this.appDestDir, 'node_modules', '@embroider', 'synthesized-styles'), {\n dereference: true,\n overwrite: true,\n });\n }\n\n if (!this.didBuild) {\n this.handleNonResolvableDeps();\n }\n this.didBuild = true;\n this.deferReady.resolve();\n }\n\n private handleNonResolvableDeps() {\n // non-resolvable deps in addons\n for (let [oldPkg, newPkg] of this.packageCache.moved.entries()) {\n if (!oldPkg.nonResolvableDeps) {\n continue;\n }\n for (let dep of oldPkg.nonResolvableDeps.values()) {\n let moved = this.packageCache.moved.get(dep);\n if (moved) {\n dep = moved;\n }\n let target = join(newPkg.root, 'node_modules', dep.name);\n ensureDirSync(dirname(target));\n ensureSymlinkSync(dep.root, target, 'dir');\n }\n }\n // non-resolvable deps in app\n if (this.packageCache.app.nonResolvableDeps) {\n for (let dep of this.packageCache.app.nonResolvableDeps.values()) {\n let moved = this.packageCache.moved.get(dep);\n if (moved) {\n dep = moved;\n }\n let target = join(this.appDestDir, 'node_modules', dep.name);\n ensureDirSync(dirname(target));\n ensureSymlinkSync(dep.root, target, 'dir');\n }\n }\n }\n\n private getSyntheticPackages(v1App: V1App, movedAddons: Node[]): { synthVendor: Node; synthStyles: Node } {\n let index = 0;\n let upgradedAddonTrees = [];\n for (let [oldPkg] of this.packageCache.moved.entries()) {\n if (!oldPkg.isV2Ember()) {\n upgradedAddonTrees.push(movedAddons[index]);\n }\n index++;\n }\n return {\n synthVendor: v1App.synthesizeVendorPackage(upgradedAddonTrees),\n synthStyles: v1App.synthesizeStylesPackage(upgradedAddonTrees),\n };\n }\n\n @Memoize()\n private get deferReady() {\n let resolve: Function;\n let promise: Promise<void> = new Promise(r => (resolve = r));\n return { resolve: resolve!, promise };\n }\n\n @Memoize()\n private isMoved(pkg: Package) {\n for (let candidate of this.packageCache.moved.values()) {\n if (candidate === pkg) {\n return true;\n }\n }\n return false;\n }\n\n private linkNonCopiedDeps(pkg: Package, destRoot: string) {\n for (let dep of pkg.dependencies) {\n if (!this.isMoved(dep)) {\n ensureSymlinkSync(dep.root, join(destRoot, 'node_modules', dep.packageJSON.name));\n }\n }\n }\n}\n"]}
package/src/compat-app.js CHANGED
@@ -49,9 +49,9 @@ function setup(legacyEmberAppInstance, options) {
49
49
  appBootTree,
50
50
  };
51
51
  let instantiate = async (root, appSrcDir, packageCache) => {
52
- let appPackage = packageCache.getApp(appSrcDir);
52
+ let appPackage = packageCache.get(appSrcDir);
53
53
  let adapter = new CompatAppAdapter(root, appPackage, options, oldPackage, configTree, packageCache.get((0, path_1.join)(root, 'node_modules', '@embroider', 'synthesized-vendor')), packageCache.get((0, path_1.join)(root, 'node_modules', '@embroider', 'synthesized-styles')));
54
- return new core_1.AppBuilder(root, appPackage, adapter, options, node_1.MacrosConfig.for(legacyEmberAppInstance));
54
+ return new core_1.AppBuilder(root, appPackage, adapter, options, node_1.MacrosConfig.for(legacyEmberAppInstance, appSrcDir));
55
55
  };
56
56
  return { inTrees, instantiate };
57
57
  }
@@ -303,6 +303,7 @@ class CompatAppAdapter {
303
303
  // persistent caching.
304
304
  externalsDir: (0, path_1.join)(shared_internals_1.tmpdir, 'embroider', 'externals'),
305
305
  emberNeedsModulesPolyfill,
306
+ appRoot: this.root,
306
307
  };
307
308
  }
308
309
  // unlike `templateResolver`, this one brings its own simple TemplateCompiler
@@ -1 +1 @@
1
- {"version":3,"file":"compat-app.js","sourceRoot":"","sources":["compat-app.ts"],"names":[],"mappings":"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","sourcesContent":["import { Node as BroccoliNode } from 'broccoli-node-api';\nimport mergeTrees from 'broccoli-merge-trees';\nimport {\n Stage,\n PackageCache,\n OutputPaths,\n BuildStage,\n Asset,\n EmberAsset,\n AppAdapter,\n AppBuilder,\n EmberENV,\n Package,\n TemplateCompilerPlugins,\n Resolver,\n NodeTemplateCompiler,\n AddonPackage,\n} from '@embroider/core';\nimport V1InstanceCache from './v1-instance-cache';\nimport V1App from './v1-app';\nimport walkSync from 'walk-sync';\nimport { join } from 'path';\nimport { JSDOM } from 'jsdom';\nimport { V1Config } from './v1-config';\nimport { statSync, readdirSync, writeFileSync } from 'fs';\nimport Options, { optionsWithDefaults } from './options';\nimport CompatResolver from './resolver';\nimport { activePackageRules, PackageRules, expandModuleRules } from './dependency-rules';\nimport flatMap from 'lodash/flatMap';\nimport { Memoize } from 'typescript-memoize';\nimport flatten from 'lodash/flatten';\nimport { sync as resolveSync } from 'resolve';\nimport { MacrosConfig } from '@embroider/macros/src/node';\nimport bind from 'bind-decorator';\nimport { pathExistsSync } from 'fs-extra';\nimport { tmpdir } from '@embroider/shared-internals';\nimport { Options as AdjustImportsOptions } from '@embroider/core/src/babel-plugin-adjust-imports';\nimport { getEmberExports } from '@embroider/core/src/load-ember-template-compiler';\n\nimport semver from 'semver';\n\ninterface TreeNames {\n appJS: BroccoliNode;\n htmlTree: BroccoliNode;\n publicTree: BroccoliNode | undefined;\n configTree: BroccoliNode;\n}\n\n// This runs at broccoli-pipeline-construction time, whereas our actual\n// CompatAppAdapter instance only becomes available during tree-building\n// time.\nfunction setup(legacyEmberAppInstance: object, options: Required<Options>) {\n let oldPackage = V1InstanceCache.forApp(legacyEmberAppInstance, options).app;\n\n let { appJS } = oldPackage.processAppJS();\n let htmlTree = oldPackage.htmlTree;\n let publicTree = oldPackage.publicTree;\n let configTree = oldPackage.config;\n let appBootTree = oldPackage.appBoot;\n\n if (options.extraPublicTrees.length > 0) {\n publicTree = mergeTrees([publicTree, ...options.extraPublicTrees].filter(Boolean) as BroccoliNode[]);\n }\n\n let inTrees = {\n appJS,\n htmlTree,\n publicTree,\n configTree,\n appBootTree,\n };\n\n let instantiate = async (root: string, appSrcDir: string, packageCache: PackageCache) => {\n let appPackage = packageCache.getApp(appSrcDir);\n let adapter = new CompatAppAdapter(\n root,\n appPackage,\n options,\n oldPackage,\n configTree,\n packageCache.get(join(root, 'node_modules', '@embroider', 'synthesized-vendor')),\n packageCache.get(join(root, 'node_modules', '@embroider', 'synthesized-styles'))\n );\n\n return new AppBuilder<TreeNames>(root, appPackage, adapter, options, MacrosConfig.for(legacyEmberAppInstance));\n };\n\n return { inTrees, instantiate };\n}\n\nclass CompatAppAdapter implements AppAdapter<TreeNames> {\n constructor(\n private root: string,\n private appPackage: Package,\n private options: Required<Options>,\n private oldPackage: V1App,\n private configTree: V1Config,\n private synthVendor: Package,\n private synthStyles: Package\n ) {}\n\n appJSSrcDir(treePaths: OutputPaths<TreeNames>) {\n return treePaths.appJS;\n }\n\n @Memoize()\n fastbootJSSrcDir(_treePaths: OutputPaths<TreeNames>) {\n let target = join(this.oldPackage.root, 'fastboot');\n if (pathExistsSync(target)) {\n return target;\n }\n }\n\n get env() {\n return this.oldPackage.env;\n }\n\n assets(treePaths: OutputPaths<TreeNames>): Asset[] {\n let assets: Asset[] = [];\n\n // Everything in our traditional public tree is an on-disk asset\n if (treePaths.publicTree) {\n walkSync\n .entries(treePaths.publicTree, {\n directories: false,\n })\n .forEach(entry => {\n assets.push({\n kind: 'on-disk',\n relativePath: entry.relativePath,\n sourcePath: entry.fullPath,\n mtime: entry.mtime as unknown as number, // https://github.com/joliss/node-walk-sync/pull/38\n size: entry.size,\n });\n });\n }\n\n // ember-cli traditionally outputs a dummy testem.js file to prevent\n // spurious errors when running tests under \"ember s\".\n if (this.oldPackage.shouldBuildTests) {\n let testemAsset = this.findTestemAsset();\n if (testemAsset) {\n assets.push(testemAsset);\n }\n }\n\n for (let asset of this.emberEntrypoints(treePaths.htmlTree)) {\n assets.push(asset);\n }\n\n return assets;\n }\n\n @Memoize()\n findTestemAsset(): Asset | undefined {\n let sourcePath;\n try {\n sourcePath = resolveSync('ember-cli/lib/broccoli/testem.js', { basedir: this.root });\n } catch (err) {}\n if (sourcePath) {\n let stat = statSync(sourcePath);\n return {\n kind: 'on-disk',\n relativePath: 'testem.js',\n sourcePath,\n mtime: stat.mtime.getTime(),\n size: stat.size,\n };\n }\n }\n\n developingAddons(): string[] {\n if (this.oldPackage.owningAddon) {\n return [this.oldPackage.owningAddon.root];\n }\n return [];\n }\n\n @Memoize()\n activeAddonChildren(pkg: Package = this.appPackage): AddonPackage[] {\n let result = (pkg.dependencies.filter(this.isActiveAddon) as AddonPackage[]).filter(\n // When looking for child addons, we want to ignore 'peerDependencies' of\n // a given package, to align with how ember-cli resolves addons. So here\n // we only include dependencies that definitely appear in one of the other\n // sections.\n addon => pkg.packageJSON.dependencies?.[addon.name] || pkg.packageJSON.devDependencies?.[addon.name]\n );\n if (pkg === this.appPackage) {\n let extras = [this.synthVendor, this.synthStyles].filter(this.isActiveAddon) as AddonPackage[];\n result = [...result, ...extras];\n }\n return result.sort(this.orderAddons);\n }\n\n @Memoize()\n get allActiveAddons(): AddonPackage[] {\n let result = this.appPackage.findDescendants(this.isActiveAddon) as AddonPackage[];\n let extras = [this.synthVendor, this.synthStyles].filter(this.isActiveAddon) as AddonPackage[];\n let extraDescendants = flatMap(extras, dep => dep.findDescendants(this.isActiveAddon)) as AddonPackage[];\n result = [...result, ...extras, ...extraDescendants];\n return result.sort(this.orderAddons);\n }\n\n @bind\n private isActiveAddon(pkg: Package): boolean {\n // todo: filter by addon-provided hook\n return pkg.isEmberPackage();\n }\n\n @bind\n private orderAddons(depA: Package, depB: Package): number {\n let depAIdx = 0;\n let depBIdx = 0;\n\n if (depA && depA.meta && depA.isV2Addon()) {\n depAIdx = depA.meta['order-index'] || 0;\n }\n if (depB && depB.meta && depB.isV2Addon()) {\n depBIdx = depB.meta['order-index'] || 0;\n }\n\n return depAIdx - depBIdx;\n }\n\n @Memoize()\n private resolvableExtensions(): string[] {\n // webpack's default is ['.wasm', '.mjs', '.js', '.json']. Keeping that\n // subset in that order is sensible, since many third-party libraries will\n // expect it to work that way.\n let extensions = ['.wasm', '.mjs', '.js', '.json', '.hbs'];\n\n // for now, this is hard-coded. If we see ember-cli-typescript, ts files are\n // resolvable. Once we implement a preprocessor-registration build hook,\n // this logic can be pushed down first into `@embroider/compat` (which can\n // generate the appropriate hooks when it upcompiles ember-cli-typescript),\n // and then later into ember-cli-typescript itself (which can ship a v2\n // version with the hook).\n //\n // Typescript is a slightly weird example of a preprocessor because it gets\n // implemented in babel, so all we realy need to do is make the extension\n // resolvable and there's no other \"loader\" or anything to apply.\n if (this.activeAddonChildren().find(pkg => pkg.name === 'ember-cli-typescript')) {\n extensions.unshift('.ts');\n }\n\n return extensions;\n }\n\n private *emberEntrypoints(htmlTreePath: string): IterableIterator<Asset> {\n let classicEntrypoints = [\n { entrypoint: 'index.html', includeTests: false },\n { entrypoint: 'tests/index.html', includeTests: true },\n ];\n if (!this.oldPackage.shouldBuildTests) {\n classicEntrypoints.pop();\n }\n for (let { entrypoint, includeTests } of classicEntrypoints) {\n let sourcePath = join(htmlTreePath, entrypoint);\n let stats = statSync(sourcePath);\n let asset: EmberAsset = {\n kind: 'ember',\n relativePath: entrypoint,\n includeTests,\n sourcePath,\n mtime: stats.mtime.getTime(),\n size: stats.size,\n rootURL: this.rootURL(),\n prepare: (dom: JSDOM) => {\n let scripts = [...dom.window.document.querySelectorAll('script')];\n let styles = [...dom.window.document.querySelectorAll('link[rel=\"stylesheet\"]')] as HTMLLinkElement[];\n\n return {\n javascript: definitelyReplace(dom, this.oldPackage.findAppScript(scripts, entrypoint)),\n styles: definitelyReplace(dom, this.oldPackage.findAppStyles(styles, entrypoint)),\n implicitScripts: definitelyReplace(dom, this.oldPackage.findVendorScript(scripts, entrypoint)),\n implicitStyles: definitelyReplace(dom, this.oldPackage.findVendorStyles(styles, entrypoint)),\n testJavascript: maybeReplace(dom, this.oldPackage.findTestScript(scripts)),\n implicitTestScripts: maybeReplace(dom, this.oldPackage.findTestSupportScript(scripts)),\n implicitTestStyles: maybeReplace(dom, this.oldPackage.findTestSupportStyles(styles)),\n };\n },\n };\n yield asset;\n }\n }\n\n autoRun(): boolean {\n return this.oldPackage.autoRun;\n }\n\n appBoot(): string | undefined {\n return this.oldPackage.appBoot.readAppBoot();\n }\n\n mainModule(): string {\n return 'app';\n }\n\n mainModuleConfig(): unknown {\n return this.configTree.readConfig().APP;\n }\n\n emberENV(): EmberENV {\n return this.configTree.readConfig().EmberENV;\n }\n\n modulePrefix(): string {\n return this.configTree.readConfig().modulePrefix;\n }\n\n podModulePrefix(): string | undefined {\n return this.configTree.readConfig().podModulePrefix;\n }\n\n rootURL(): string {\n return this.configTree.readConfig().rootURL;\n }\n\n templateCompilerPath(): string {\n return 'ember-source/vendor/ember/ember-template-compiler';\n }\n\n strictV2Format() {\n return false;\n }\n\n @Memoize()\n private activeRules() {\n return activePackageRules(this.options.packageRules.concat(defaultAddonPackageRules()), [\n this.appPackage,\n ...this.allActiveAddons.filter(p => p.meta['auto-upgraded']),\n ]);\n }\n\n @Memoize()\n templateResolver(): Resolver {\n return new CompatResolver({\n root: this.root,\n modulePrefix: this.modulePrefix(),\n podModulePrefix: this.podModulePrefix(),\n options: this.options,\n activePackageRules: this.activeRules(),\n adjustImportsOptionsPath: this.adjustImportsOptionsPath(),\n });\n }\n\n @Memoize()\n adjustImportsOptionsPath(): string {\n let file = join(this.root, '_adjust_imports.json');\n writeFileSync(file, JSON.stringify(this.adjustImportsOptions()));\n return file;\n }\n\n @Memoize()\n adjustImportsOptions(): AdjustImportsOptions {\n return this.makeAdjustImportOptions(true);\n }\n\n // this gets serialized out by babel plugin and ast plugin\n private makeAdjustImportOptions(outer: boolean): AdjustImportsOptions {\n let renamePackages = Object.assign({}, ...this.allActiveAddons.map(dep => dep.meta['renamed-packages']));\n let renameModules = Object.assign({}, ...this.allActiveAddons.map(dep => dep.meta['renamed-modules']));\n\n let activeAddons: AdjustImportsOptions['activeAddons'] = {};\n for (let addon of this.allActiveAddons) {\n activeAddons[addon.name] = addon.root;\n }\n\n let emberSource = this.activeAddonChildren().find(a => a.name === 'ember-source')!;\n let emberNeedsModulesPolyfill = semver.satisfies(emberSource.version, '<3.27.0-beta.0', {\n includePrerelease: true,\n });\n\n return {\n activeAddons,\n renameModules,\n renamePackages,\n // \"outer\" here prevents uncontrolled recursion. We can't know our\n // extraImports until after we have the internalTemplateResolver which in\n // turn needs some adjustImportsOptions\n extraImports: outer ? this.extraImports() : [],\n relocatedFiles: {}, // this is the only part we can't completely fill out here. It needs to wait for the AppBuilder to finish smooshing together all appTrees\n resolvableExtensions: this.resolvableExtensions(),\n\n // it's important that this is a persistent location, because we fill it\n // up as a side-effect of babel transpilation, and babel is subject to\n // persistent caching.\n externalsDir: join(tmpdir, 'embroider', 'externals'),\n emberNeedsModulesPolyfill,\n };\n }\n\n // unlike `templateResolver`, this one brings its own simple TemplateCompiler\n // along so it's capable of parsing component snippets in people's module\n // rules.\n @Memoize()\n private internalTemplateResolver(): CompatResolver {\n let resolver = new CompatResolver({\n root: this.root,\n modulePrefix: this.modulePrefix(),\n options: this.options,\n activePackageRules: this.activeRules(),\n adjustImportsOptions: this.makeAdjustImportOptions(false),\n });\n\n const compilerPath = resolveSync(this.templateCompilerPath(), { basedir: this.root });\n const { cacheKey: compilerChecksum } = getEmberExports(compilerPath);\n // It's ok that this isn't a fully configured template compiler. We're only\n // using it to parse component snippets out of rules.\n resolver.astTransformer(\n new NodeTemplateCompiler({\n compilerPath,\n compilerChecksum,\n\n EmberENV: {},\n plugins: {},\n })\n );\n return resolver;\n }\n\n private extraImports() {\n let output: { absPath: string; target: string; runtimeName?: string }[][] = [];\n\n for (let rule of this.activeRules()) {\n if (rule.addonModules) {\n for (let [filename, moduleRules] of Object.entries(rule.addonModules)) {\n for (let root of rule.roots) {\n let absPath = join(root, filename);\n output.push(expandModuleRules(absPath, moduleRules, this.internalTemplateResolver()));\n }\n }\n }\n if (rule.appModules) {\n for (let [filename, moduleRules] of Object.entries(rule.appModules)) {\n let absPath = join(this.root, filename);\n output.push(expandModuleRules(absPath, moduleRules, this.internalTemplateResolver()));\n }\n }\n }\n return flatten(output);\n }\n\n htmlbarsPlugins(): TemplateCompilerPlugins {\n return this.oldPackage.htmlbarsPlugins;\n }\n\n babelMajorVersion() {\n return this.oldPackage.babelMajorVersion();\n }\n\n babelConfig() {\n return this.oldPackage.babelConfig();\n }\n}\n\nexport default class CompatApp extends BuildStage<TreeNames> {\n constructor(legacyEmberAppInstance: object, addons: Stage, options?: Options) {\n let { inTrees, instantiate } = setup(legacyEmberAppInstance, optionsWithDefaults(options));\n super(addons, inTrees, '@embroider/compat/app', instantiate);\n }\n}\n\nfunction maybeReplace(dom: JSDOM, element: Element | undefined): Node | undefined {\n if (element) {\n return definitelyReplace(dom, element);\n }\n}\n\nfunction definitelyReplace(dom: JSDOM, element: Element): Node {\n let placeholder = dom.window.document.createTextNode('');\n element.replaceWith(placeholder);\n return placeholder;\n}\n\nfunction defaultAddonPackageRules(): PackageRules[] {\n return readdirSync(join(__dirname, 'addon-dependency-rules'))\n .map(filename => {\n if (filename.endsWith('.js')) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(join(__dirname, 'addon-dependency-rules', filename)).default;\n }\n })\n .filter(Boolean)\n .reduce((a, b) => a.concat(b), []);\n}\n"]}
1
+ {"version":3,"file":"compat-app.js","sourceRoot":"","sources":["compat-app.ts"],"names":[],"mappings":"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","sourcesContent":["import { Node as BroccoliNode } from 'broccoli-node-api';\nimport mergeTrees from 'broccoli-merge-trees';\nimport {\n Stage,\n PackageCache,\n OutputPaths,\n BuildStage,\n Asset,\n EmberAsset,\n AppAdapter,\n AppBuilder,\n EmberENV,\n Package,\n TemplateCompilerPlugins,\n Resolver,\n NodeTemplateCompiler,\n AddonPackage,\n} from '@embroider/core';\nimport V1InstanceCache from './v1-instance-cache';\nimport V1App from './v1-app';\nimport walkSync from 'walk-sync';\nimport { join } from 'path';\nimport { JSDOM } from 'jsdom';\nimport { V1Config } from './v1-config';\nimport { statSync, readdirSync, writeFileSync } from 'fs';\nimport Options, { optionsWithDefaults } from './options';\nimport CompatResolver from './resolver';\nimport { activePackageRules, PackageRules, expandModuleRules } from './dependency-rules';\nimport flatMap from 'lodash/flatMap';\nimport { Memoize } from 'typescript-memoize';\nimport flatten from 'lodash/flatten';\nimport { sync as resolveSync } from 'resolve';\nimport { MacrosConfig } from '@embroider/macros/src/node';\nimport bind from 'bind-decorator';\nimport { pathExistsSync } from 'fs-extra';\nimport { tmpdir } from '@embroider/shared-internals';\nimport { Options as AdjustImportsOptions } from '@embroider/core/src/babel-plugin-adjust-imports';\nimport { getEmberExports } from '@embroider/core/src/load-ember-template-compiler';\n\nimport semver from 'semver';\n\ninterface TreeNames {\n appJS: BroccoliNode;\n htmlTree: BroccoliNode;\n publicTree: BroccoliNode | undefined;\n configTree: BroccoliNode;\n}\n\n// This runs at broccoli-pipeline-construction time, whereas our actual\n// CompatAppAdapter instance only becomes available during tree-building\n// time.\nfunction setup(legacyEmberAppInstance: object, options: Required<Options>) {\n let oldPackage = V1InstanceCache.forApp(legacyEmberAppInstance, options).app;\n\n let { appJS } = oldPackage.processAppJS();\n let htmlTree = oldPackage.htmlTree;\n let publicTree = oldPackage.publicTree;\n let configTree = oldPackage.config;\n let appBootTree = oldPackage.appBoot;\n\n if (options.extraPublicTrees.length > 0) {\n publicTree = mergeTrees([publicTree, ...options.extraPublicTrees].filter(Boolean) as BroccoliNode[]);\n }\n\n let inTrees = {\n appJS,\n htmlTree,\n publicTree,\n configTree,\n appBootTree,\n };\n\n let instantiate = async (root: string, appSrcDir: string, packageCache: PackageCache) => {\n let appPackage = packageCache.get(appSrcDir);\n let adapter = new CompatAppAdapter(\n root,\n appPackage,\n options,\n oldPackage,\n configTree,\n packageCache.get(join(root, 'node_modules', '@embroider', 'synthesized-vendor')),\n packageCache.get(join(root, 'node_modules', '@embroider', 'synthesized-styles'))\n );\n\n return new AppBuilder<TreeNames>(\n root,\n appPackage,\n adapter,\n options,\n MacrosConfig.for(legacyEmberAppInstance, appSrcDir)\n );\n };\n\n return { inTrees, instantiate };\n}\n\nclass CompatAppAdapter implements AppAdapter<TreeNames> {\n constructor(\n private root: string,\n private appPackage: Package,\n private options: Required<Options>,\n private oldPackage: V1App,\n private configTree: V1Config,\n private synthVendor: Package,\n private synthStyles: Package\n ) {}\n\n appJSSrcDir(treePaths: OutputPaths<TreeNames>) {\n return treePaths.appJS;\n }\n\n @Memoize()\n fastbootJSSrcDir(_treePaths: OutputPaths<TreeNames>) {\n let target = join(this.oldPackage.root, 'fastboot');\n if (pathExistsSync(target)) {\n return target;\n }\n }\n\n get env() {\n return this.oldPackage.env;\n }\n\n assets(treePaths: OutputPaths<TreeNames>): Asset[] {\n let assets: Asset[] = [];\n\n // Everything in our traditional public tree is an on-disk asset\n if (treePaths.publicTree) {\n walkSync\n .entries(treePaths.publicTree, {\n directories: false,\n })\n .forEach(entry => {\n assets.push({\n kind: 'on-disk',\n relativePath: entry.relativePath,\n sourcePath: entry.fullPath,\n mtime: entry.mtime as unknown as number, // https://github.com/joliss/node-walk-sync/pull/38\n size: entry.size,\n });\n });\n }\n\n // ember-cli traditionally outputs a dummy testem.js file to prevent\n // spurious errors when running tests under \"ember s\".\n if (this.oldPackage.shouldBuildTests) {\n let testemAsset = this.findTestemAsset();\n if (testemAsset) {\n assets.push(testemAsset);\n }\n }\n\n for (let asset of this.emberEntrypoints(treePaths.htmlTree)) {\n assets.push(asset);\n }\n\n return assets;\n }\n\n @Memoize()\n findTestemAsset(): Asset | undefined {\n let sourcePath;\n try {\n sourcePath = resolveSync('ember-cli/lib/broccoli/testem.js', { basedir: this.root });\n } catch (err) {}\n if (sourcePath) {\n let stat = statSync(sourcePath);\n return {\n kind: 'on-disk',\n relativePath: 'testem.js',\n sourcePath,\n mtime: stat.mtime.getTime(),\n size: stat.size,\n };\n }\n }\n\n developingAddons(): string[] {\n if (this.oldPackage.owningAddon) {\n return [this.oldPackage.owningAddon.root];\n }\n return [];\n }\n\n @Memoize()\n activeAddonChildren(pkg: Package = this.appPackage): AddonPackage[] {\n let result = (pkg.dependencies.filter(this.isActiveAddon) as AddonPackage[]).filter(\n // When looking for child addons, we want to ignore 'peerDependencies' of\n // a given package, to align with how ember-cli resolves addons. So here\n // we only include dependencies that definitely appear in one of the other\n // sections.\n addon => pkg.packageJSON.dependencies?.[addon.name] || pkg.packageJSON.devDependencies?.[addon.name]\n );\n if (pkg === this.appPackage) {\n let extras = [this.synthVendor, this.synthStyles].filter(this.isActiveAddon) as AddonPackage[];\n result = [...result, ...extras];\n }\n return result.sort(this.orderAddons);\n }\n\n @Memoize()\n get allActiveAddons(): AddonPackage[] {\n let result = this.appPackage.findDescendants(this.isActiveAddon) as AddonPackage[];\n let extras = [this.synthVendor, this.synthStyles].filter(this.isActiveAddon) as AddonPackage[];\n let extraDescendants = flatMap(extras, dep => dep.findDescendants(this.isActiveAddon)) as AddonPackage[];\n result = [...result, ...extras, ...extraDescendants];\n return result.sort(this.orderAddons);\n }\n\n @bind\n private isActiveAddon(pkg: Package): boolean {\n // todo: filter by addon-provided hook\n return pkg.isEmberPackage();\n }\n\n @bind\n private orderAddons(depA: Package, depB: Package): number {\n let depAIdx = 0;\n let depBIdx = 0;\n\n if (depA && depA.meta && depA.isV2Addon()) {\n depAIdx = depA.meta['order-index'] || 0;\n }\n if (depB && depB.meta && depB.isV2Addon()) {\n depBIdx = depB.meta['order-index'] || 0;\n }\n\n return depAIdx - depBIdx;\n }\n\n @Memoize()\n private resolvableExtensions(): string[] {\n // webpack's default is ['.wasm', '.mjs', '.js', '.json']. Keeping that\n // subset in that order is sensible, since many third-party libraries will\n // expect it to work that way.\n let extensions = ['.wasm', '.mjs', '.js', '.json', '.hbs'];\n\n // for now, this is hard-coded. If we see ember-cli-typescript, ts files are\n // resolvable. Once we implement a preprocessor-registration build hook,\n // this logic can be pushed down first into `@embroider/compat` (which can\n // generate the appropriate hooks when it upcompiles ember-cli-typescript),\n // and then later into ember-cli-typescript itself (which can ship a v2\n // version with the hook).\n //\n // Typescript is a slightly weird example of a preprocessor because it gets\n // implemented in babel, so all we realy need to do is make the extension\n // resolvable and there's no other \"loader\" or anything to apply.\n if (this.activeAddonChildren().find(pkg => pkg.name === 'ember-cli-typescript')) {\n extensions.unshift('.ts');\n }\n\n return extensions;\n }\n\n private *emberEntrypoints(htmlTreePath: string): IterableIterator<Asset> {\n let classicEntrypoints = [\n { entrypoint: 'index.html', includeTests: false },\n { entrypoint: 'tests/index.html', includeTests: true },\n ];\n if (!this.oldPackage.shouldBuildTests) {\n classicEntrypoints.pop();\n }\n for (let { entrypoint, includeTests } of classicEntrypoints) {\n let sourcePath = join(htmlTreePath, entrypoint);\n let stats = statSync(sourcePath);\n let asset: EmberAsset = {\n kind: 'ember',\n relativePath: entrypoint,\n includeTests,\n sourcePath,\n mtime: stats.mtime.getTime(),\n size: stats.size,\n rootURL: this.rootURL(),\n prepare: (dom: JSDOM) => {\n let scripts = [...dom.window.document.querySelectorAll('script')];\n let styles = [...dom.window.document.querySelectorAll('link[rel=\"stylesheet\"]')] as HTMLLinkElement[];\n\n return {\n javascript: definitelyReplace(dom, this.oldPackage.findAppScript(scripts, entrypoint)),\n styles: definitelyReplace(dom, this.oldPackage.findAppStyles(styles, entrypoint)),\n implicitScripts: definitelyReplace(dom, this.oldPackage.findVendorScript(scripts, entrypoint)),\n implicitStyles: definitelyReplace(dom, this.oldPackage.findVendorStyles(styles, entrypoint)),\n testJavascript: maybeReplace(dom, this.oldPackage.findTestScript(scripts)),\n implicitTestScripts: maybeReplace(dom, this.oldPackage.findTestSupportScript(scripts)),\n implicitTestStyles: maybeReplace(dom, this.oldPackage.findTestSupportStyles(styles)),\n };\n },\n };\n yield asset;\n }\n }\n\n autoRun(): boolean {\n return this.oldPackage.autoRun;\n }\n\n appBoot(): string | undefined {\n return this.oldPackage.appBoot.readAppBoot();\n }\n\n mainModule(): string {\n return 'app';\n }\n\n mainModuleConfig(): unknown {\n return this.configTree.readConfig().APP;\n }\n\n emberENV(): EmberENV {\n return this.configTree.readConfig().EmberENV;\n }\n\n modulePrefix(): string {\n return this.configTree.readConfig().modulePrefix;\n }\n\n podModulePrefix(): string | undefined {\n return this.configTree.readConfig().podModulePrefix;\n }\n\n rootURL(): string {\n return this.configTree.readConfig().rootURL;\n }\n\n templateCompilerPath(): string {\n return 'ember-source/vendor/ember/ember-template-compiler';\n }\n\n strictV2Format() {\n return false;\n }\n\n @Memoize()\n private activeRules() {\n return activePackageRules(this.options.packageRules.concat(defaultAddonPackageRules()), [\n this.appPackage,\n ...this.allActiveAddons.filter(p => p.meta['auto-upgraded']),\n ]);\n }\n\n @Memoize()\n templateResolver(): Resolver {\n return new CompatResolver({\n root: this.root,\n modulePrefix: this.modulePrefix(),\n podModulePrefix: this.podModulePrefix(),\n options: this.options,\n activePackageRules: this.activeRules(),\n adjustImportsOptionsPath: this.adjustImportsOptionsPath(),\n });\n }\n\n @Memoize()\n adjustImportsOptionsPath(): string {\n let file = join(this.root, '_adjust_imports.json');\n writeFileSync(file, JSON.stringify(this.adjustImportsOptions()));\n return file;\n }\n\n @Memoize()\n adjustImportsOptions(): AdjustImportsOptions {\n return this.makeAdjustImportOptions(true);\n }\n\n // this gets serialized out by babel plugin and ast plugin\n private makeAdjustImportOptions(outer: boolean): AdjustImportsOptions {\n let renamePackages = Object.assign({}, ...this.allActiveAddons.map(dep => dep.meta['renamed-packages']));\n let renameModules = Object.assign({}, ...this.allActiveAddons.map(dep => dep.meta['renamed-modules']));\n\n let activeAddons: AdjustImportsOptions['activeAddons'] = {};\n for (let addon of this.allActiveAddons) {\n activeAddons[addon.name] = addon.root;\n }\n\n let emberSource = this.activeAddonChildren().find(a => a.name === 'ember-source')!;\n let emberNeedsModulesPolyfill = semver.satisfies(emberSource.version, '<3.27.0-beta.0', {\n includePrerelease: true,\n });\n\n return {\n activeAddons,\n renameModules,\n renamePackages,\n // \"outer\" here prevents uncontrolled recursion. We can't know our\n // extraImports until after we have the internalTemplateResolver which in\n // turn needs some adjustImportsOptions\n extraImports: outer ? this.extraImports() : [],\n relocatedFiles: {}, // this is the only part we can't completely fill out here. It needs to wait for the AppBuilder to finish smooshing together all appTrees\n resolvableExtensions: this.resolvableExtensions(),\n\n // it's important that this is a persistent location, because we fill it\n // up as a side-effect of babel transpilation, and babel is subject to\n // persistent caching.\n externalsDir: join(tmpdir, 'embroider', 'externals'),\n emberNeedsModulesPolyfill,\n appRoot: this.root,\n };\n }\n\n // unlike `templateResolver`, this one brings its own simple TemplateCompiler\n // along so it's capable of parsing component snippets in people's module\n // rules.\n @Memoize()\n private internalTemplateResolver(): CompatResolver {\n let resolver = new CompatResolver({\n root: this.root,\n modulePrefix: this.modulePrefix(),\n options: this.options,\n activePackageRules: this.activeRules(),\n adjustImportsOptions: this.makeAdjustImportOptions(false),\n });\n\n const compilerPath = resolveSync(this.templateCompilerPath(), { basedir: this.root });\n const { cacheKey: compilerChecksum } = getEmberExports(compilerPath);\n // It's ok that this isn't a fully configured template compiler. We're only\n // using it to parse component snippets out of rules.\n resolver.astTransformer(\n new NodeTemplateCompiler({\n compilerPath,\n compilerChecksum,\n\n EmberENV: {},\n plugins: {},\n })\n );\n return resolver;\n }\n\n private extraImports() {\n let output: { absPath: string; target: string; runtimeName?: string }[][] = [];\n\n for (let rule of this.activeRules()) {\n if (rule.addonModules) {\n for (let [filename, moduleRules] of Object.entries(rule.addonModules)) {\n for (let root of rule.roots) {\n let absPath = join(root, filename);\n output.push(expandModuleRules(absPath, moduleRules, this.internalTemplateResolver()));\n }\n }\n }\n if (rule.appModules) {\n for (let [filename, moduleRules] of Object.entries(rule.appModules)) {\n let absPath = join(this.root, filename);\n output.push(expandModuleRules(absPath, moduleRules, this.internalTemplateResolver()));\n }\n }\n }\n return flatten(output);\n }\n\n htmlbarsPlugins(): TemplateCompilerPlugins {\n return this.oldPackage.htmlbarsPlugins;\n }\n\n babelMajorVersion() {\n return this.oldPackage.babelMajorVersion();\n }\n\n babelConfig() {\n return this.oldPackage.babelConfig();\n }\n}\n\nexport default class CompatApp extends BuildStage<TreeNames> {\n constructor(legacyEmberAppInstance: object, addons: Stage, options?: Options) {\n let { inTrees, instantiate } = setup(legacyEmberAppInstance, optionsWithDefaults(options));\n super(addons, inTrees, '@embroider/compat/app', instantiate);\n }\n}\n\nfunction maybeReplace(dom: JSDOM, element: Element | undefined): Node | undefined {\n if (element) {\n return definitelyReplace(dom, element);\n }\n}\n\nfunction definitelyReplace(dom: JSDOM, element: Element): Node {\n let placeholder = dom.window.document.createTextNode('');\n element.replaceWith(placeholder);\n return placeholder;\n}\n\nfunction defaultAddonPackageRules(): PackageRules[] {\n return readdirSync(join(__dirname, 'addon-dependency-rules'))\n .map(filename => {\n if (filename.endsWith('.js')) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(join(__dirname, 'addon-dependency-rules', filename)).default;\n }\n })\n .filter(Boolean)\n .reduce((a, b) => a.concat(b), []);\n}\n"]}
@@ -2,15 +2,14 @@ import { PackageCache, Package } from '@embroider/core';
2
2
  import { MacrosConfig } from '@embroider/macros/src/node';
3
3
  export declare class MovablePackageCache extends PackageCache {
4
4
  private macrosConfig;
5
- constructor(macrosConfig: MacrosConfig);
6
- moveAddons(appSrcDir: string, destDir: string): MovedPackageCache;
5
+ constructor(macrosConfig: MacrosConfig, appRoot: string);
6
+ moveAddons(destDir: string): MovedPackageCache;
7
7
  }
8
8
  export declare class MovedPackageCache extends PackageCache {
9
9
  private destDir;
10
10
  private origApp;
11
11
  private macrosConfig;
12
12
  readonly app: Package;
13
- readonly appDestDir: string;
14
13
  private commonSegmentCount;
15
14
  readonly moved: Map<Package, Package>;
16
15
  readonly unmovedAddons: Set<Package>;
@@ -17,13 +17,13 @@ function assertNoTildeExpansion(source, target) {
17
17
  }
18
18
  }
19
19
  class MovablePackageCache extends core_1.PackageCache {
20
- constructor(macrosConfig) {
21
- super();
20
+ constructor(macrosConfig, appRoot) {
21
+ super(appRoot);
22
22
  this.macrosConfig = macrosConfig;
23
23
  }
24
- moveAddons(appSrcDir, destDir) {
24
+ moveAddons(destDir) {
25
25
  // start with the plain old app package
26
- let origApp = this.getApp(appSrcDir);
26
+ let origApp = this.get(this.appRoot);
27
27
  // discover the set of all packages that will need to be moved into the
28
28
  // workspace
29
29
  let movedSet = new MovedSet(origApp);
@@ -33,16 +33,18 @@ class MovablePackageCache extends core_1.PackageCache {
33
33
  exports.MovablePackageCache = MovablePackageCache;
34
34
  class MovedPackageCache extends core_1.PackageCache {
35
35
  constructor(rootCache, resolutionCache, destDir, movedSet, origApp, macrosConfig) {
36
- super();
36
+ // this is the initial appRoot, which we can't know until just below here
37
+ super('not-the-real-root');
37
38
  this.destDir = destDir;
38
39
  this.origApp = origApp;
39
40
  this.macrosConfig = macrosConfig;
40
41
  this.moved = new Map();
41
42
  // that gives us our common segment count, which enables localPath mapping
42
43
  this.commonSegmentCount = movedSet.commonSegmentCount;
43
- // so we can now determine where the app will go inside the workspace
44
- this.appDestDir = this.localPath(origApp.root);
45
- this.macrosConfig.packageMoved(origApp.root, this.appDestDir);
44
+ // so we can now determine where the app will go inside the workspace. THIS
45
+ // is where we fix 'not-the-real-root' from above.
46
+ this.appRoot = this.localPath(origApp.root);
47
+ this.macrosConfig.packageMoved(origApp.root, this.appRoot);
46
48
  for (let originalPkg of movedSet.packages) {
47
49
  // Update our rootCache so we don't need to rediscover moved packages
48
50
  let movedPkg;
@@ -1 +1 @@
1
- {"version":3,"file":"moved-package-cache.js","sourceRoot":"","sources":["moved-package-cache.ts"],"names":[],"mappings":"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","sourcesContent":["import { join, sep, isAbsolute } from 'path';\nimport { ensureSymlinkSync, readdirSync, realpathSync, lstatSync } from 'fs-extra';\nimport { Memoize } from 'typescript-memoize';\nimport { PackageCache, Package, getOrCreate } from '@embroider/core';\nimport { MacrosConfig } from '@embroider/macros/src/node';\n\nfunction assertNoTildeExpansion(source: string, target: string) {\n if (target.includes('~')) {\n throw new Error(\n `The symbolic link: ${source}'s target: ${target} contained a bash expansion '~' which is not supported.`\n );\n }\n}\nexport class MovablePackageCache extends PackageCache {\n constructor(private macrosConfig: MacrosConfig) {\n super();\n }\n\n moveAddons(appSrcDir: string, destDir: string): MovedPackageCache {\n // start with the plain old app package\n let origApp = this.getApp(appSrcDir);\n\n // discover the set of all packages that will need to be moved into the\n // workspace\n let movedSet = new MovedSet(origApp);\n\n return new MovedPackageCache(this.rootCache, this.resolutionCache, destDir, movedSet, origApp, this.macrosConfig);\n }\n}\n\nexport class MovedPackageCache extends PackageCache {\n readonly app!: Package;\n readonly appDestDir: string;\n private commonSegmentCount: number;\n readonly moved: Map<Package, Package> = new Map();\n readonly unmovedAddons: Set<Package>;\n\n constructor(\n rootCache: PackageCache['rootCache'],\n resolutionCache: PackageCache['resolutionCache'],\n private destDir: string,\n movedSet: MovedSet,\n private origApp: Package,\n private macrosConfig: MacrosConfig\n ) {\n super();\n\n // that gives us our common segment count, which enables localPath mapping\n this.commonSegmentCount = movedSet.commonSegmentCount;\n\n // so we can now determine where the app will go inside the workspace\n this.appDestDir = this.localPath(origApp.root);\n this.macrosConfig.packageMoved(origApp.root, this.appDestDir);\n\n for (let originalPkg of movedSet.packages) {\n // Update our rootCache so we don't need to rediscover moved packages\n let movedPkg;\n if (originalPkg === origApp) {\n // this wraps the original app package with one that will use moved\n // dependencies. The app itself hasn't moved yet, which is why a proxy\n // is needed at this level.\n movedPkg = packageProxy(origApp, (pkg: Package) => this.moved.get(pkg) || pkg);\n this.app = movedPkg;\n rootCache.set(movedPkg.root, movedPkg);\n } else {\n movedPkg = this.movedPackage(originalPkg);\n this.moved.set(originalPkg, movedPkg);\n this.macrosConfig.packageMoved(originalPkg.root, movedPkg.root);\n }\n\n // Update our resolutionCache so we still know as much about the moved\n // packages as we did before we moved them, without redoing package\n // resolution.\n let resolutions = new Map();\n for (let dep of originalPkg.dependencies) {\n if (movedSet.packages.has(dep)) {\n resolutions.set(dep.name, this.movedPackage(dep));\n } else {\n resolutions.set(dep.name, dep);\n }\n }\n resolutionCache.set(movedPkg, resolutions);\n }\n this.rootCache = rootCache;\n this.resolutionCache = resolutionCache;\n this.unmovedAddons = movedSet.unmovedAddons;\n }\n\n private movedPackage(originalPkg: Package): Package {\n let newRoot = this.localPath(originalPkg.root);\n return getOrCreate(this.rootCache, newRoot, () => new (originalPkg.constructor as any)(newRoot, this, false));\n }\n\n private localPath(filename: string) {\n return join(this.destDir, ...pathSegments(filename).slice(this.commonSegmentCount));\n }\n\n // hunt for symlinks that may be needed to do node_modules resolution from the\n // given path.\n async updatePreexistingResolvableSymlinks(): Promise<void> {\n let roots = this.originalRoots();\n [...this.candidateDirs()].map(path => {\n let links = symlinksInNodeModules(path);\n for (let { source, target } of links) {\n let pkg = roots.get(target);\n if (pkg) {\n // we found a symlink that points at a package that was copied.\n // Replicate it in the new structure pointing at the new package.\n ensureSymlinkSync(pkg.root, this.localPath(source));\n }\n }\n });\n }\n\n // places that might have symlinks we need to mimic\n private candidateDirs(): Set<string> {\n let candidates = new Set() as Set<string>;\n let originalPackages = [this.origApp, ...this.moved.keys()];\n for (let pkg of originalPackages) {\n let segments = pathSegments(pkg.root);\n\n let candidate = join(pkg.root, 'node_modules');\n candidates.add(candidate);\n\n for (let i = segments.length - 1; i >= this.commonSegmentCount; i--) {\n if (segments[i - 1] !== 'node_modules') {\n let candidate = '/' + join(...segments.slice(0, i), 'node_modules');\n if (candidates.has(candidate)) {\n break;\n }\n candidates.add(candidate);\n }\n }\n }\n return candidates;\n }\n\n private originalRoots(): Map<string, Package> {\n let originalRoots = new Map();\n for (let [originalPackage, movedPackage] of this.moved.entries()) {\n originalRoots.set(originalPackage.root, movedPackage);\n }\n return originalRoots;\n }\n}\n\nfunction maybeReaddirSync(path: string) {\n try {\n return readdirSync(path);\n } catch (err) {\n if (err.code !== 'ENOTDIR' && err.code !== 'ENOENT') {\n throw err;\n }\n return [];\n }\n}\n\nfunction isSymlink(path: string): boolean {\n try {\n let stat = lstatSync(path);\n return stat.isSymbolicLink();\n } catch (err) {\n if (err.code !== 'ENOTDIR' && err.code !== 'ENOENT') {\n throw err;\n }\n\n return false;\n }\n}\n\nfunction symlinksInNodeModules(path: string): { source: string; target: string }[] {\n let results: { source: string; target: string }[] = [];\n\n // handles the full `node_modules` being symlinked (this is uncommon, but sometimes\n // be useful for test harnesses to avoid multiple `npm install` invocations)\n let parentIsSymlink = isSymlink(path);\n\n let names = maybeReaddirSync(path);\n\n names.map(name => {\n let source = join(path, name);\n let stats = lstatSync(source);\n if (parentIsSymlink || stats.isSymbolicLink()) {\n let target = realpathSync(source);\n assertNoTildeExpansion(source, target);\n\n results.push({ source, target });\n } else if (stats.isDirectory() && name.startsWith('@')) {\n // handle symlinked scope names (e.g. symlinking `@myorghere` to a shared location)\n let isSourceSymlink = isSymlink(source);\n let innerNames = maybeReaddirSync(source);\n\n innerNames.map(innerName => {\n let innerSource = join(source, innerName);\n let innerStats = lstatSync(innerSource);\n if (parentIsSymlink || isSourceSymlink || innerStats.isSymbolicLink()) {\n let target = realpathSync(innerSource);\n assertNoTildeExpansion(innerSource, target);\n\n results.push({ source: innerSource, target });\n }\n });\n }\n });\n\n return results;\n}\n\nfunction pathSegments(filename: string) {\n let segments = filename.split(sep);\n if (isAbsolute(filename)) {\n segments.shift();\n }\n return segments;\n}\n\nclass MovedSet {\n private mustMove: Map<Package, boolean> = new Map();\n unmovedAddons: Set<Package> = new Set();\n\n constructor(private app: Package) {\n this.check(app);\n }\n\n private check(pkg: Package): boolean {\n if (this.mustMove.has(pkg)) {\n return this.mustMove.get(pkg)!;\n }\n\n // non-ember packages don't need to move\n if (pkg !== this.app && !pkg.isEmberPackage()) {\n this.mustMove.set(pkg, false);\n return false;\n }\n\n let mustMove =\n // The app always moves (because we need a place to mash all the\n // addon-provided \"app-js\" trees),\n pkg === this.app ||\n // For the same reason, engines need to move (we need a place to mash all\n // their child addon's provided app-js trees into)\n pkg.isEngine() ||\n // any other ember package that isn't native v2 must move because we've\n // got to rewrite them\n !pkg.isV2Ember();\n\n // this is a partial answer. After we check our children, our own `mustMove`\n // may change from false to true. But it's OK that our children see false in\n // that case, because they don't need to move on our behalf.\n //\n // We need to already be in the `this.mustMove` cache at this moment in\n // order to avoid infinite recursion if any of our children end up depending\n // back on us.\n this.mustMove.set(pkg, mustMove);\n\n for (let dep of pkg.dependencies) {\n // or if any of your deps need to move\n mustMove = this.check(dep) || mustMove;\n }\n this.mustMove.set(pkg, mustMove);\n\n if (!mustMove) {\n this.unmovedAddons.add(pkg);\n }\n\n return mustMove;\n }\n\n @Memoize()\n get packages(): Set<Package> {\n let result = new Set() as Set<Package>;\n for (let [pkg, mustMove] of this.mustMove) {\n if (mustMove) {\n result.add(pkg);\n }\n }\n return result;\n }\n\n // the npm structure we're shadowing could have a dependency nearly anywhere\n // on disk. We want to maintain their relations to each other. So we must find\n // the point in the filesystem that contains all of them, which could even be\n // \"/\" (for example, if you npm-linked a dependency that lives in /tmp).\n //\n // The commonSegmentCount is how many leading path segments are shared by all\n // our packages.\n @Memoize()\n get commonSegmentCount(): number {\n return [...this.packages].reduce((longestPrefix, pkg) => {\n let candidate = pathSegments(pkg.root);\n let shorter, longer;\n if (longestPrefix.length > candidate.length) {\n shorter = candidate;\n longer = longestPrefix;\n } else {\n shorter = longestPrefix;\n longer = candidate;\n }\n let i = 0;\n for (; i < shorter.length; i++) {\n if (shorter[i] !== longer[i]) {\n break;\n }\n }\n return shorter.slice(0, i);\n }, pathSegments(this.app.root)).length;\n }\n}\n\nfunction packageProxy(pkg: Package, getMovedPackage: (pkg: Package) => Package) {\n let p: Package = new Proxy(pkg, {\n get(pkg: Package, prop: string | number | symbol) {\n if (prop === 'dependencies') {\n return pkg.dependencies.map(getMovedPackage);\n }\n if (prop === 'nonResolvableDeps') {\n if (!pkg.nonResolvableDeps) {\n return pkg.nonResolvableDeps;\n }\n return new Map([...pkg.nonResolvableDeps.values()].map(dep => [dep.name, getMovedPackage(dep)]));\n }\n if (prop === 'findDescendants') {\n return pkg.findDescendants.bind(p);\n }\n return (pkg as any)[prop];\n },\n });\n return p;\n}\n"]}
1
+ {"version":3,"file":"moved-package-cache.js","sourceRoot":"","sources":["moved-package-cache.ts"],"names":[],"mappings":"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","sourcesContent":["import { join, sep, isAbsolute } from 'path';\nimport { ensureSymlinkSync, readdirSync, realpathSync, lstatSync } from 'fs-extra';\nimport { Memoize } from 'typescript-memoize';\nimport { PackageCache, Package, getOrCreate } from '@embroider/core';\nimport { MacrosConfig } from '@embroider/macros/src/node';\n\nfunction assertNoTildeExpansion(source: string, target: string) {\n if (target.includes('~')) {\n throw new Error(\n `The symbolic link: ${source}'s target: ${target} contained a bash expansion '~' which is not supported.`\n );\n }\n}\nexport class MovablePackageCache extends PackageCache {\n constructor(private macrosConfig: MacrosConfig, appRoot: string) {\n super(appRoot);\n }\n\n moveAddons(destDir: string): MovedPackageCache {\n // start with the plain old app package\n let origApp = this.get(this.appRoot);\n\n // discover the set of all packages that will need to be moved into the\n // workspace\n let movedSet = new MovedSet(origApp);\n\n return new MovedPackageCache(this.rootCache, this.resolutionCache, destDir, movedSet, origApp, this.macrosConfig);\n }\n}\n\nexport class MovedPackageCache extends PackageCache {\n readonly app!: Package;\n private commonSegmentCount: number;\n readonly moved: Map<Package, Package> = new Map();\n readonly unmovedAddons: Set<Package>;\n\n constructor(\n rootCache: PackageCache['rootCache'],\n resolutionCache: PackageCache['resolutionCache'],\n private destDir: string,\n movedSet: MovedSet,\n private origApp: Package,\n private macrosConfig: MacrosConfig\n ) {\n // this is the initial appRoot, which we can't know until just below here\n super('not-the-real-root');\n\n // that gives us our common segment count, which enables localPath mapping\n this.commonSegmentCount = movedSet.commonSegmentCount;\n\n // so we can now determine where the app will go inside the workspace. THIS\n // is where we fix 'not-the-real-root' from above.\n this.appRoot = this.localPath(origApp.root);\n\n this.macrosConfig.packageMoved(origApp.root, this.appRoot);\n\n for (let originalPkg of movedSet.packages) {\n // Update our rootCache so we don't need to rediscover moved packages\n let movedPkg;\n if (originalPkg === origApp) {\n // this wraps the original app package with one that will use moved\n // dependencies. The app itself hasn't moved yet, which is why a proxy\n // is needed at this level.\n movedPkg = packageProxy(origApp, (pkg: Package) => this.moved.get(pkg) || pkg);\n this.app = movedPkg;\n rootCache.set(movedPkg.root, movedPkg);\n } else {\n movedPkg = this.movedPackage(originalPkg);\n this.moved.set(originalPkg, movedPkg);\n this.macrosConfig.packageMoved(originalPkg.root, movedPkg.root);\n }\n\n // Update our resolutionCache so we still know as much about the moved\n // packages as we did before we moved them, without redoing package\n // resolution.\n let resolutions = new Map();\n for (let dep of originalPkg.dependencies) {\n if (movedSet.packages.has(dep)) {\n resolutions.set(dep.name, this.movedPackage(dep));\n } else {\n resolutions.set(dep.name, dep);\n }\n }\n resolutionCache.set(movedPkg, resolutions);\n }\n this.rootCache = rootCache;\n this.resolutionCache = resolutionCache;\n this.unmovedAddons = movedSet.unmovedAddons;\n }\n\n private movedPackage(originalPkg: Package): Package {\n let newRoot = this.localPath(originalPkg.root);\n return getOrCreate(this.rootCache, newRoot, () => new (originalPkg.constructor as any)(newRoot, this, false));\n }\n\n private localPath(filename: string) {\n return join(this.destDir, ...pathSegments(filename).slice(this.commonSegmentCount));\n }\n\n // hunt for symlinks that may be needed to do node_modules resolution from the\n // given path.\n async updatePreexistingResolvableSymlinks(): Promise<void> {\n let roots = this.originalRoots();\n [...this.candidateDirs()].map(path => {\n let links = symlinksInNodeModules(path);\n for (let { source, target } of links) {\n let pkg = roots.get(target);\n if (pkg) {\n // we found a symlink that points at a package that was copied.\n // Replicate it in the new structure pointing at the new package.\n ensureSymlinkSync(pkg.root, this.localPath(source));\n }\n }\n });\n }\n\n // places that might have symlinks we need to mimic\n private candidateDirs(): Set<string> {\n let candidates = new Set() as Set<string>;\n let originalPackages = [this.origApp, ...this.moved.keys()];\n for (let pkg of originalPackages) {\n let segments = pathSegments(pkg.root);\n\n let candidate = join(pkg.root, 'node_modules');\n candidates.add(candidate);\n\n for (let i = segments.length - 1; i >= this.commonSegmentCount; i--) {\n if (segments[i - 1] !== 'node_modules') {\n let candidate = '/' + join(...segments.slice(0, i), 'node_modules');\n if (candidates.has(candidate)) {\n break;\n }\n candidates.add(candidate);\n }\n }\n }\n return candidates;\n }\n\n private originalRoots(): Map<string, Package> {\n let originalRoots = new Map();\n for (let [originalPackage, movedPackage] of this.moved.entries()) {\n originalRoots.set(originalPackage.root, movedPackage);\n }\n return originalRoots;\n }\n}\n\nfunction maybeReaddirSync(path: string) {\n try {\n return readdirSync(path);\n } catch (err) {\n if (err.code !== 'ENOTDIR' && err.code !== 'ENOENT') {\n throw err;\n }\n return [];\n }\n}\n\nfunction isSymlink(path: string): boolean {\n try {\n let stat = lstatSync(path);\n return stat.isSymbolicLink();\n } catch (err) {\n if (err.code !== 'ENOTDIR' && err.code !== 'ENOENT') {\n throw err;\n }\n\n return false;\n }\n}\n\nfunction symlinksInNodeModules(path: string): { source: string; target: string }[] {\n let results: { source: string; target: string }[] = [];\n\n // handles the full `node_modules` being symlinked (this is uncommon, but sometimes\n // be useful for test harnesses to avoid multiple `npm install` invocations)\n let parentIsSymlink = isSymlink(path);\n\n let names = maybeReaddirSync(path);\n\n names.map(name => {\n let source = join(path, name);\n let stats = lstatSync(source);\n if (parentIsSymlink || stats.isSymbolicLink()) {\n let target = realpathSync(source);\n assertNoTildeExpansion(source, target);\n\n results.push({ source, target });\n } else if (stats.isDirectory() && name.startsWith('@')) {\n // handle symlinked scope names (e.g. symlinking `@myorghere` to a shared location)\n let isSourceSymlink = isSymlink(source);\n let innerNames = maybeReaddirSync(source);\n\n innerNames.map(innerName => {\n let innerSource = join(source, innerName);\n let innerStats = lstatSync(innerSource);\n if (parentIsSymlink || isSourceSymlink || innerStats.isSymbolicLink()) {\n let target = realpathSync(innerSource);\n assertNoTildeExpansion(innerSource, target);\n\n results.push({ source: innerSource, target });\n }\n });\n }\n });\n\n return results;\n}\n\nfunction pathSegments(filename: string) {\n let segments = filename.split(sep);\n if (isAbsolute(filename)) {\n segments.shift();\n }\n return segments;\n}\n\nclass MovedSet {\n private mustMove: Map<Package, boolean> = new Map();\n unmovedAddons: Set<Package> = new Set();\n\n constructor(private app: Package) {\n this.check(app);\n }\n\n private check(pkg: Package): boolean {\n if (this.mustMove.has(pkg)) {\n return this.mustMove.get(pkg)!;\n }\n\n // non-ember packages don't need to move\n if (pkg !== this.app && !pkg.isEmberPackage()) {\n this.mustMove.set(pkg, false);\n return false;\n }\n\n let mustMove =\n // The app always moves (because we need a place to mash all the\n // addon-provided \"app-js\" trees),\n pkg === this.app ||\n // For the same reason, engines need to move (we need a place to mash all\n // their child addon's provided app-js trees into)\n pkg.isEngine() ||\n // any other ember package that isn't native v2 must move because we've\n // got to rewrite them\n !pkg.isV2Ember();\n\n // this is a partial answer. After we check our children, our own `mustMove`\n // may change from false to true. But it's OK that our children see false in\n // that case, because they don't need to move on our behalf.\n //\n // We need to already be in the `this.mustMove` cache at this moment in\n // order to avoid infinite recursion if any of our children end up depending\n // back on us.\n this.mustMove.set(pkg, mustMove);\n\n for (let dep of pkg.dependencies) {\n // or if any of your deps need to move\n mustMove = this.check(dep) || mustMove;\n }\n this.mustMove.set(pkg, mustMove);\n\n if (!mustMove) {\n this.unmovedAddons.add(pkg);\n }\n\n return mustMove;\n }\n\n @Memoize()\n get packages(): Set<Package> {\n let result = new Set() as Set<Package>;\n for (let [pkg, mustMove] of this.mustMove) {\n if (mustMove) {\n result.add(pkg);\n }\n }\n return result;\n }\n\n // the npm structure we're shadowing could have a dependency nearly anywhere\n // on disk. We want to maintain their relations to each other. So we must find\n // the point in the filesystem that contains all of them, which could even be\n // \"/\" (for example, if you npm-linked a dependency that lives in /tmp).\n //\n // The commonSegmentCount is how many leading path segments are shared by all\n // our packages.\n @Memoize()\n get commonSegmentCount(): number {\n return [...this.packages].reduce((longestPrefix, pkg) => {\n let candidate = pathSegments(pkg.root);\n let shorter, longer;\n if (longestPrefix.length > candidate.length) {\n shorter = candidate;\n longer = longestPrefix;\n } else {\n shorter = longestPrefix;\n longer = candidate;\n }\n let i = 0;\n for (; i < shorter.length; i++) {\n if (shorter[i] !== longer[i]) {\n break;\n }\n }\n return shorter.slice(0, i);\n }, pathSegments(this.app.root)).length;\n }\n}\n\nfunction packageProxy(pkg: Package, getMovedPackage: (pkg: Package) => Package) {\n let p: Package = new Proxy(pkg, {\n get(pkg: Package, prop: string | number | symbol) {\n if (prop === 'dependencies') {\n return pkg.dependencies.map(getMovedPackage);\n }\n if (prop === 'nonResolvableDeps') {\n if (!pkg.nonResolvableDeps) {\n return pkg.nonResolvableDeps;\n }\n return new Map([...pkg.nonResolvableDeps.values()].map(dep => [dep.name, getMovedPackage(dep)]));\n }\n if (prop === 'findDescendants') {\n return pkg.findDescendants.bind(p);\n }\n return (pkg as any)[prop];\n },\n });\n return p;\n}\n"]}
package/src/one-shot.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import Plugin from 'broccoli-plugin';
2
2
  import { Node } from 'broccoli-node-api';
3
3
  export default class OneShot extends Plugin {
4
+ private inner;
4
5
  private addonName;
5
- private builder;
6
6
  static create(originalTree: Node, privateAddonName: string): Node;
7
7
  private constructor();
8
8
  build(): Promise<void>;