@embroider/compat 1.8.3 → 2.0.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.
Files changed (36) hide show
  1. package/package.json +7 -8
  2. package/src/audit/capture.d.ts +1 -0
  3. package/src/compat-adapters/ember-cli-fastboot.d.ts +1 -1
  4. package/src/compat-adapters/ember-cli-fastboot.js.map +1 -1
  5. package/src/compat-addons.js +10 -1
  6. package/src/compat-addons.js.map +1 -1
  7. package/src/compat-app.js +12 -38
  8. package/src/compat-app.js.map +1 -1
  9. package/src/dasherize-component-name.d.ts +1 -0
  10. package/src/dasherize-component-name.js +10 -1
  11. package/src/dasherize-component-name.js.map +1 -1
  12. package/src/default-pipeline.js +2 -2
  13. package/src/default-pipeline.js.map +1 -1
  14. package/src/dependency-rules.js +6 -1
  15. package/src/dependency-rules.js.map +1 -1
  16. package/src/{template-compiler-broccoli-plugin.d.ts → hbs-to-js-broccoli-plugin.d.ts} +2 -4
  17. package/src/hbs-to-js-broccoli-plugin.js +39 -0
  18. package/src/hbs-to-js-broccoli-plugin.js.map +1 -0
  19. package/src/moved-package-cache.js +5 -1
  20. package/src/moved-package-cache.js.map +1 -1
  21. package/src/resolver-transform.d.ts +11 -27
  22. package/src/resolver-transform.js +163 -65
  23. package/src/resolver-transform.js.map +1 -1
  24. package/src/resolver.d.ts +26 -27
  25. package/src/resolver.js +125 -169
  26. package/src/resolver.js.map +1 -1
  27. package/src/synthesize-template-only-components.js +8 -8
  28. package/src/synthesize-template-only-components.js.map +1 -1
  29. package/src/v1-addon.d.ts +2 -26
  30. package/src/v1-addon.js +29 -68
  31. package/src/v1-addon.js.map +1 -1
  32. package/src/v1-app.d.ts +3 -2
  33. package/src/v1-app.js +11 -3
  34. package/src/v1-app.js.map +1 -1
  35. package/src/template-compiler-broccoli-plugin.js +0 -28
  36. package/src/template-compiler-broccoli-plugin.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embroider/compat",
3
- "version": "1.8.3",
3
+ "version": "2.0.0",
4
4
  "private": false,
5
5
  "description": "Backward compatibility layer for the Embroider build system.",
6
6
  "repository": {
@@ -20,7 +20,6 @@
20
20
  "embroider-compat-audit": "./src/audit-cli.js"
21
21
  },
22
22
  "scripts": {
23
- "prepare": "tsc",
24
23
  "test": "jest"
25
24
  },
26
25
  "dependencies": {
@@ -29,11 +28,11 @@
29
28
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
30
29
  "@babel/preset-env": "^7.14.5",
31
30
  "@babel/traverse": "^7.14.5",
32
- "@embroider/macros": "1.8.3",
33
- "@embroider/shared-internals": "1.8.3",
31
+ "@embroider/macros": "1.10.0",
34
32
  "@types/babel__code-frame": "^7.0.2",
35
33
  "@types/yargs": "^17.0.3",
36
34
  "assert-never": "^1.1.0",
35
+ "babel-plugin-ember-template-compilation": "^2.0.0",
37
36
  "babel-plugin-syntax-dynamic-import": "^6.18.0",
38
37
  "babylon": "^6.18.0",
39
38
  "bind-decorator": "^1.0.11",
@@ -64,7 +63,7 @@
64
63
  "devDependencies": {
65
64
  "@embroider/sample-transforms": "0.0.0",
66
65
  "@embroider/test-support": "0.36.0",
67
- "@glimmer/syntax": "0.80.0",
66
+ "@glimmer/syntax": "^0.84.2",
68
67
  "@types/babel__core": "^7.1.14",
69
68
  "@types/babel__generator": "^7.6.2",
70
69
  "@types/babel__template": "^7.4.0",
@@ -77,15 +76,15 @@
77
76
  "@types/node": "^15.12.2",
78
77
  "@types/resolve": "^1.20.0",
79
78
  "@types/semver": "^7.3.6",
80
- "@types/strip-bom": "^4.0.1",
81
- "broccoli-stew": "^3.0.0",
79
+ "code-equality-assertions": "^0.7.0",
82
80
  "ember-cli-htmlbars-3": "npm:ember-cli-htmlbars@3",
83
81
  "ember-cli-htmlbars-inline-precompile": "^2.1.0",
84
82
  "ember-engines": "^0.8.19",
83
+ "scenario-tester": "^2.0.1",
85
84
  "typescript": "*"
86
85
  },
87
86
  "peerDependencies": {
88
- "@embroider/core": "1.8.3"
87
+ "@embroider/core": "^2.0.0"
89
88
  },
90
89
  "engines": {
91
90
  "node": "12.* || 14.* || >= 16"
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node" />
2
3
  import { Writable } from 'stream';
3
4
  export declare class CaptureStream extends Writable {
4
5
  private gather;
@@ -1,6 +1,6 @@
1
1
  import V1Addon from '../v1-addon';
2
2
  import { Node } from 'broccoli-node-api';
3
- import { AddonMeta } from '@embroider/shared-internals';
3
+ import { AddonMeta } from '@embroider/core';
4
4
  export default class EmberCliFastboot extends V1Addon {
5
5
  customizes(...trees: string[]): boolean;
6
6
  get v2Trees(): Node[];
@@ -1 +1 @@
1
- {"version":3,"file":"ember-cli-fastboot.js","sourceRoot":"","sources":["ember-cli-fastboot.ts"],"names":[],"mappings":"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","sourcesContent":["import V1Addon from '../v1-addon';\nimport Plugin from 'broccoli-plugin';\nimport { Node } from 'broccoli-node-api';\nimport { readJSONSync, outputJSONSync } from 'fs-extra';\nimport { join } from 'path';\nimport writeFile from 'broccoli-file-creator';\nimport { Memoize } from 'typescript-memoize';\nimport bind from 'bind-decorator';\nimport { AddonMeta } from '@embroider/shared-internals';\n\nexport default class EmberCliFastboot extends V1Addon {\n customizes(...trees: string[]): boolean {\n return trees.some(tree => {\n if (tree === 'treeForPublic') {\n // This is an optimization. It means we won't bother running\n // ember-cli-fastboot's custom treeForPublic at all. We don't actually\n // want *most* of what's in there, because embroider natively\n // understands how to build each addon's treeForFastboot.\n //\n // But we do want *some*, so we handle those specific bits below in\n // v2Trees.\n return false;\n } else {\n return super.customizes(tree);\n }\n });\n }\n get v2Trees() {\n let trees = super.v2Trees;\n\n // We want to grab the fastboot config and rewrite it. We're going to strip\n // out the expectedFiles that we know are already accounted for, and we're\n // going to add app-factory.js which we know is not.\n trees.push(\n new RewriteManifest(this.addonInstance._buildFastbootConfigTree(this.rootTree), this.scriptFilter, [\n 'ember-cli-fastboot/app-factory.js',\n ])\n );\n\n // We also still need to emit the fastboot app factory module. This emits\n // the actual file into our package.\n trees.push(writeFile('public/app-factory.js', this.appFactoryModule));\n\n return trees;\n }\n\n get packageMeta() {\n let meta = super.packageMeta;\n if (!meta['public-assets']) {\n meta['public-assets'] = {};\n }\n // we need to list app-factory.js as a public asset so it will make it's way\n // into the app's final dist.\n meta['public-assets']['./public/app-factory.js'] = 'ember-cli-fastboot/app-factory.js';\n return meta;\n }\n\n // these are the default files that ember-cli-fastbot includes in its appFiles\n // and vendorFiles that we know are already accounted for by the standard\n // embroider build\n @Memoize()\n private expectedFiles(): string[] {\n let outputPaths = this.addonInstance.app.options.outputPaths;\n function stripLeadingSlash(filePath: string) {\n return filePath.replace(/^\\//, '');\n }\n let appFilePath = stripLeadingSlash(outputPaths.app.js);\n let appFastbootFilePath = appFilePath.replace(/\\.js$/, '') + '-fastboot.js';\n let vendorFilePath = stripLeadingSlash(outputPaths.vendor.js);\n\n // ember-auto-import emits this into the fastboot manifest. But embroider\n // subsumes all of ember-auto-import, so we take responsibility for this\n // stuff directly.\n let autoImportPath = 'assets/auto-import-fastboot.js';\n\n // the compat adapter for ember-asset-loader has already removed the code\n // that reads from this file. And this file fails to get generated because\n // we don't run ember-asset-loader's \"all\" postprocess tree. So we need to\n // remove it here so it doesn't try to load.\n let nodeAssetManifest = 'assets/node-asset-manifest.js';\n\n return [appFilePath, appFastbootFilePath, vendorFilePath, autoImportPath, nodeAssetManifest];\n }\n\n @bind\n private scriptFilter(file: string): boolean {\n // we can drop all of engines-dist here because engines are handled natively\n // by embroider (the engine code is part of the regular module graph)\n return !this.expectedFiles().includes(file) && !file.startsWith('engines-dist/');\n }\n\n @Memoize()\n private get appFactoryModule() {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const fastbootAppFactoryModule = require(join(this.root, 'lib/utilities/fastboot-app-factory-module.js'));\n return fastbootAppFactoryModule(this.addonInstance._name, false);\n }\n}\n\nclass RewriteManifest extends Plugin {\n constructor(tree: Node, private scriptFilter: (file: string) => boolean, private extraAppFiles: string[]) {\n super([tree], {\n annotation: 'embroider-compat-adapter-ember-cli-fastboot',\n persistentOutput: true,\n needsCache: false,\n });\n }\n build() {\n let json = readJSONSync(join(this.inputPaths[0], 'package.json'));\n\n let extraAppFiles = (json.fastboot.manifest.appFiles as string[]).filter(this.scriptFilter);\n\n for (let file of this.extraAppFiles) {\n extraAppFiles.push(file);\n }\n\n let extraVendorFiles = (json.fastboot.manifest.vendorFiles as string[]).filter(this.scriptFilter);\n\n // we're using our own new style of fastboot manifest that loads everything\n // via the HTML. HTML is better understood by tools beyond Ember and\n // Fastboot, so it's more robust to going through third-party bundlers\n // without breaking. We can get by with only a very small extension over\n // purely standards-compliant HTML.\n json.fastboot = {\n schemaVersion: 5,\n htmlEntrypoint: 'index.html',\n moduleWhitelist: json.fastboot.moduleWhitelist,\n hostWhitelist: json.fastboot.hostWhitelist,\n };\n\n // this is a message to Embroider stage2 (in app.ts), because we need it to\n // arrange the one special extension to HTML that we need: fastboot-only\n // script tags.\n //\n // Fastboot only javascript *modules* don't need any magic, because our\n // macro system can guard them. That is the preferred way to have\n // fastboot-only code. But for backward compatibility, we also support\n // fastboot-only *scripts*, and those do need a bit of magic, in the form of\n // <fastboot-script> tags.\n json['embroider-fastboot'] = {\n extraAppFiles,\n extraVendorFiles,\n };\n\n // because we contain a subdir with its own package.json, that subdir\n // becomes a \"package\" from emroider's perspective, and if we want it to get\n // treated as ember code it needs to have v2 addon metadata\n json.keywords = [...(json.keywords ?? []), 'ember-addon'];\n let meta: AddonMeta = {\n type: 'addon',\n version: 2,\n 'auto-upgraded': true,\n };\n json['ember-addon'] = meta;\n\n outputJSONSync(join(this.outputPath, '_fastboot_', 'package.json'), json, { spaces: 2 });\n }\n}\n"]}
1
+ {"version":3,"file":"ember-cli-fastboot.js","sourceRoot":"","sources":["ember-cli-fastboot.ts"],"names":[],"mappings":"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","sourcesContent":["import V1Addon from '../v1-addon';\nimport Plugin from 'broccoli-plugin';\nimport { Node } from 'broccoli-node-api';\nimport { readJSONSync, outputJSONSync } from 'fs-extra';\nimport { join } from 'path';\nimport writeFile from 'broccoli-file-creator';\nimport { Memoize } from 'typescript-memoize';\nimport bind from 'bind-decorator';\nimport { AddonMeta } from '@embroider/core';\n\nexport default class EmberCliFastboot extends V1Addon {\n customizes(...trees: string[]): boolean {\n return trees.some(tree => {\n if (tree === 'treeForPublic') {\n // This is an optimization. It means we won't bother running\n // ember-cli-fastboot's custom treeForPublic at all. We don't actually\n // want *most* of what's in there, because embroider natively\n // understands how to build each addon's treeForFastboot.\n //\n // But we do want *some*, so we handle those specific bits below in\n // v2Trees.\n return false;\n } else {\n return super.customizes(tree);\n }\n });\n }\n get v2Trees() {\n let trees = super.v2Trees;\n\n // We want to grab the fastboot config and rewrite it. We're going to strip\n // out the expectedFiles that we know are already accounted for, and we're\n // going to add app-factory.js which we know is not.\n trees.push(\n new RewriteManifest(this.addonInstance._buildFastbootConfigTree(this.rootTree), this.scriptFilter, [\n 'ember-cli-fastboot/app-factory.js',\n ])\n );\n\n // We also still need to emit the fastboot app factory module. This emits\n // the actual file into our package.\n trees.push(writeFile('public/app-factory.js', this.appFactoryModule));\n\n return trees;\n }\n\n get packageMeta() {\n let meta = super.packageMeta;\n if (!meta['public-assets']) {\n meta['public-assets'] = {};\n }\n // we need to list app-factory.js as a public asset so it will make it's way\n // into the app's final dist.\n meta['public-assets']['./public/app-factory.js'] = 'ember-cli-fastboot/app-factory.js';\n return meta;\n }\n\n // these are the default files that ember-cli-fastbot includes in its appFiles\n // and vendorFiles that we know are already accounted for by the standard\n // embroider build\n @Memoize()\n private expectedFiles(): string[] {\n let outputPaths = this.addonInstance.app.options.outputPaths;\n function stripLeadingSlash(filePath: string) {\n return filePath.replace(/^\\//, '');\n }\n let appFilePath = stripLeadingSlash(outputPaths.app.js);\n let appFastbootFilePath = appFilePath.replace(/\\.js$/, '') + '-fastboot.js';\n let vendorFilePath = stripLeadingSlash(outputPaths.vendor.js);\n\n // ember-auto-import emits this into the fastboot manifest. But embroider\n // subsumes all of ember-auto-import, so we take responsibility for this\n // stuff directly.\n let autoImportPath = 'assets/auto-import-fastboot.js';\n\n // the compat adapter for ember-asset-loader has already removed the code\n // that reads from this file. And this file fails to get generated because\n // we don't run ember-asset-loader's \"all\" postprocess tree. So we need to\n // remove it here so it doesn't try to load.\n let nodeAssetManifest = 'assets/node-asset-manifest.js';\n\n return [appFilePath, appFastbootFilePath, vendorFilePath, autoImportPath, nodeAssetManifest];\n }\n\n @bind\n private scriptFilter(file: string): boolean {\n // we can drop all of engines-dist here because engines are handled natively\n // by embroider (the engine code is part of the regular module graph)\n return !this.expectedFiles().includes(file) && !file.startsWith('engines-dist/');\n }\n\n @Memoize()\n private get appFactoryModule() {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const fastbootAppFactoryModule = require(join(this.root, 'lib/utilities/fastboot-app-factory-module.js'));\n return fastbootAppFactoryModule(this.addonInstance._name, false);\n }\n}\n\nclass RewriteManifest extends Plugin {\n constructor(tree: Node, private scriptFilter: (file: string) => boolean, private extraAppFiles: string[]) {\n super([tree], {\n annotation: 'embroider-compat-adapter-ember-cli-fastboot',\n persistentOutput: true,\n needsCache: false,\n });\n }\n build() {\n let json = readJSONSync(join(this.inputPaths[0], 'package.json'));\n\n let extraAppFiles = (json.fastboot.manifest.appFiles as string[]).filter(this.scriptFilter);\n\n for (let file of this.extraAppFiles) {\n extraAppFiles.push(file);\n }\n\n let extraVendorFiles = (json.fastboot.manifest.vendorFiles as string[]).filter(this.scriptFilter);\n\n // we're using our own new style of fastboot manifest that loads everything\n // via the HTML. HTML is better understood by tools beyond Ember and\n // Fastboot, so it's more robust to going through third-party bundlers\n // without breaking. We can get by with only a very small extension over\n // purely standards-compliant HTML.\n json.fastboot = {\n schemaVersion: 5,\n htmlEntrypoint: 'index.html',\n moduleWhitelist: json.fastboot.moduleWhitelist,\n hostWhitelist: json.fastboot.hostWhitelist,\n };\n\n // this is a message to Embroider stage2 (in app.ts), because we need it to\n // arrange the one special extension to HTML that we need: fastboot-only\n // script tags.\n //\n // Fastboot only javascript *modules* don't need any magic, because our\n // macro system can guard them. That is the preferred way to have\n // fastboot-only code. But for backward compatibility, we also support\n // fastboot-only *scripts*, and those do need a bit of magic, in the form of\n // <fastboot-script> tags.\n json['embroider-fastboot'] = {\n extraAppFiles,\n extraVendorFiles,\n };\n\n // because we contain a subdir with its own package.json, that subdir\n // becomes a \"package\" from emroider's perspective, and if we want it to get\n // treated as ember code it needs to have v2 addon metadata\n json.keywords = [...(json.keywords ?? []), 'ember-addon'];\n let meta: AddonMeta = {\n type: 'addon',\n version: 2,\n 'auto-upgraded': true,\n };\n json['ember-addon'] = meta;\n\n outputJSONSync(join(this.outputPath, '_fastboot_', 'package.json'), json, { spaces: 2 });\n }\n}\n"]}
@@ -93,7 +93,7 @@ class CompatAddons {
93
93
  // the app is inside our addon. We must not copy the app as part of
94
94
  // the addon, because that would overwrite the real app build.
95
95
  ignore.push(rel);
96
- if (rel === 'tests/dummy') {
96
+ if (rel === `tests${path_1.sep}dummy`) {
97
97
  // special case: classic dummy apps are weird because they put the
98
98
  // tests (which are truly part of the app, not the addon) inside the
99
99
  // addon instead of inside the app.
@@ -113,6 +113,15 @@ class CompatAddons {
113
113
  // shell for its real module namespace.
114
114
  (0, fs_extra_1.copySync)((0, path_1.join)(destination, 'package.json'), (0, path_1.join)(newPkg.root, 'package.json'));
115
115
  }
116
+ }
117
+ });
118
+ // this has to be a separate pass over the packages because
119
+ // linkNonCopiedDeps resolves dependencies, so we want all the packages
120
+ // already in their new places before they start trying to resolve each
121
+ // other.
122
+ [...this.packageCache.moved.values()].forEach((newPkg, index) => {
123
+ if (!this.didBuild || // always copy on the first build
124
+ (newPkg.mayRebuild && changedMap.get(movedAddons[index]))) {
116
125
  // for engines, this isn't the mangled destination (we don't need
117
126
  // resolvable node_modules there), this is the empty shell of their real
118
127
  // location
@@ -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\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"]}
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, sep } 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${sep}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 });\n\n // this has to be a separate pass over the packages because\n // linkNonCopiedDeps resolves dependencies, so we want all the packages\n // already in their new places before they start trying to resolve each\n // other.\n [...this.packageCache.moved.values()].forEach((newPkg, index) => {\n if (\n !this.didBuild || // always copy on the first build\n (newPkg.mayRebuild && changedMap.get(movedAddons[index]))\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
@@ -25,9 +25,7 @@ const resolve_1 = require("resolve");
25
25
  const node_1 = require("@embroider/macros/src/node");
26
26
  const bind_decorator_1 = __importDefault(require("bind-decorator"));
27
27
  const fs_extra_1 = require("fs-extra");
28
- const shared_internals_1 = require("@embroider/shared-internals");
29
- const load_ember_template_compiler_1 = require("@embroider/core/src/load-ember-template-compiler");
30
- const semver_1 = __importDefault(require("semver"));
28
+ const core_2 = require("@embroider/core");
31
29
  // This runs at broccoli-pipeline-construction time, whereas our actual
32
30
  // CompatAppAdapter instance only becomes available during tree-building
33
31
  // time.
@@ -170,21 +168,11 @@ class CompatAppAdapter {
170
168
  // webpack's default is ['.wasm', '.mjs', '.js', '.json']. Keeping that
171
169
  // subset in that order is sensible, since many third-party libraries will
172
170
  // expect it to work that way.
173
- let extensions = ['.wasm', '.mjs', '.js', '.json', '.hbs'];
174
- // for now, this is hard-coded. If we see ember-cli-typescript, ts files are
175
- // resolvable. Once we implement a preprocessor-registration build hook,
176
- // this logic can be pushed down first into `@embroider/compat` (which can
177
- // generate the appropriate hooks when it upcompiles ember-cli-typescript),
178
- // and then later into ember-cli-typescript itself (which can ship a v2
179
- // version with the hook).
180
171
  //
181
- // Typescript is a slightly weird example of a preprocessor because it gets
182
- // implemented in babel, so all we realy need to do is make the extension
183
- // resolvable and there's no other "loader" or anything to apply.
184
- if (this.activeAddonChildren().find(pkg => pkg.name === 'ember-cli-typescript')) {
185
- extensions.unshift('.ts');
186
- }
187
- return extensions;
172
+ // For TS, we defer to ember-cli-babel, and the setting for
173
+ // "enableTypescriptTransform" can be set with and without
174
+ // ember-cli-typescript
175
+ return ['.wasm', '.mjs', '.js', '.json', '.hbs', '.ts'];
188
176
  }
189
177
  *emberEntrypoints(htmlTreePath) {
190
178
  let classicEntrypoints = [
@@ -258,15 +246,16 @@ class CompatAppAdapter {
258
246
  ...this.allActiveAddons.filter(p => p.meta['auto-upgraded']),
259
247
  ]);
260
248
  }
261
- templateResolver() {
249
+ resolverTransform() {
262
250
  return new resolver_1.default({
251
+ emberVersion: this.activeAddonChildren().find(a => a.name === 'ember-source').packageJSON.version,
263
252
  root: this.root,
264
253
  modulePrefix: this.modulePrefix(),
265
254
  podModulePrefix: this.podModulePrefix(),
266
255
  options: this.options,
267
256
  activePackageRules: this.activeRules(),
268
257
  adjustImportsOptionsPath: this.adjustImportsOptionsPath(),
269
- });
258
+ }).astTransformer();
270
259
  }
271
260
  adjustImportsOptionsPath() {
272
261
  let file = (0, path_1.join)(this.root, '_adjust_imports.json');
@@ -284,10 +273,6 @@ class CompatAppAdapter {
284
273
  for (let addon of this.allActiveAddons) {
285
274
  activeAddons[addon.name] = addon.root;
286
275
  }
287
- let emberSource = this.activeAddonChildren().find(a => a.name === 'ember-source');
288
- let emberNeedsModulesPolyfill = semver_1.default.satisfies(emberSource.version, '<3.27.0-beta.0', {
289
- includePrerelease: true,
290
- });
291
276
  return {
292
277
  activeAddons,
293
278
  renameModules,
@@ -301,8 +286,7 @@ class CompatAppAdapter {
301
286
  // it's important that this is a persistent location, because we fill it
302
287
  // up as a side-effect of babel transpilation, and babel is subject to
303
288
  // persistent caching.
304
- externalsDir: (0, path_1.join)(shared_internals_1.tmpdir, 'embroider', 'externals'),
305
- emberNeedsModulesPolyfill,
289
+ externalsDir: (0, path_1.join)(core_2.tmpdir, 'embroider', 'externals'),
306
290
  appRoot: this.root,
307
291
  };
308
292
  }
@@ -310,24 +294,14 @@ class CompatAppAdapter {
310
294
  // along so it's capable of parsing component snippets in people's module
311
295
  // rules.
312
296
  internalTemplateResolver() {
313
- let resolver = new resolver_1.default({
297
+ return new resolver_1.default({
298
+ emberVersion: this.activeAddonChildren().find(a => a.name === 'ember-source').packageJSON.version,
314
299
  root: this.root,
315
300
  modulePrefix: this.modulePrefix(),
316
301
  options: this.options,
317
302
  activePackageRules: this.activeRules(),
318
303
  adjustImportsOptions: this.makeAdjustImportOptions(false),
319
304
  });
320
- const compilerPath = (0, resolve_1.sync)(this.templateCompilerPath(), { basedir: this.root });
321
- const { cacheKey: compilerChecksum } = (0, load_ember_template_compiler_1.getEmberExports)(compilerPath);
322
- // It's ok that this isn't a fully configured template compiler. We're only
323
- // using it to parse component snippets out of rules.
324
- resolver.astTransformer(new core_1.NodeTemplateCompiler({
325
- compilerPath,
326
- compilerChecksum,
327
- EmberENV: {},
328
- plugins: {},
329
- }));
330
- return resolver;
331
305
  }
332
306
  extraImports() {
333
307
  let output = [];
@@ -385,7 +359,7 @@ __decorate([
385
359
  ], CompatAppAdapter.prototype, "activeRules", null);
386
360
  __decorate([
387
361
  (0, typescript_memoize_1.Memoize)()
388
- ], CompatAppAdapter.prototype, "templateResolver", null);
362
+ ], CompatAppAdapter.prototype, "resolverTransform", null);
389
363
  __decorate([
390
364
  (0, typescript_memoize_1.Memoize)()
391
365
  ], CompatAppAdapter.prototype, "adjustImportsOptionsPath", null);
@@ -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.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"]}
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 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/core';\nimport { Options as AdjustImportsOptions } from '@embroider/core/src/babel-plugin-adjust-imports';\nimport type { Transform } from 'babel-plugin-ember-template-compilation';\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 //\n // For TS, we defer to ember-cli-babel, and the setting for\n // \"enableTypescriptTransform\" can be set with and without\n // ember-cli-typescript\n return ['.wasm', '.mjs', '.js', '.json', '.hbs', '.ts'];\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 resolverTransform(): Transform | undefined {\n return new CompatResolver({\n emberVersion: this.activeAddonChildren().find(a => a.name === 'ember-source')!.packageJSON.version,\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 }).astTransformer();\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 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 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 return new CompatResolver({\n emberVersion: this.activeAddonChildren().find(a => a.name === 'ember-source')!.packageJSON.version,\n root: this.root,\n modulePrefix: this.modulePrefix(),\n options: this.options,\n activePackageRules: this.activeRules(),\n adjustImportsOptions: this.makeAdjustImportOptions(false),\n });\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(): Transform[] {\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 +1,2 @@
1
1
  export declare function dasherize(key: string): string;
2
+ export declare function snippetToDasherizedName(snippet: string): string | undefined;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // copied from https://github.com/emberjs/ember.js/blob/978cf6773d6eea3e656d0da797980305061186cf/packages/ember-template-compiler/lib/system/dasherize-component-name.ts
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.dasherize = void 0;
4
+ exports.snippetToDasherizedName = exports.dasherize = void 0;
5
5
  const SIMPLE_DASHERIZE_REGEXP = /[A-Z]|::/g;
6
6
  const ALPHA = /[A-Za-z0-9]/;
7
7
  function dasherize(key) {
@@ -17,4 +17,13 @@ function dasherize(key) {
17
17
  return name;
18
18
  }
19
19
  exports.dasherize = dasherize;
20
+ const NAME_FROM_SNIPPET = /<(?:([^\s/]+).*>)|(?:{{\s?component\s+['"]([^'"]+)['"])|(?:\{\{([^\s]+).*\}\})/;
21
+ function snippetToDasherizedName(snippet) {
22
+ var _a, _b;
23
+ let result = NAME_FROM_SNIPPET.exec(snippet);
24
+ if (result) {
25
+ return dasherize((_b = (_a = result[1]) !== null && _a !== void 0 ? _a : result[2]) !== null && _b !== void 0 ? _b : result[3]);
26
+ }
27
+ }
28
+ exports.snippetToDasherizedName = snippetToDasherizedName;
20
29
  //# sourceMappingURL=dasherize-component-name.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dasherize-component-name.js","sourceRoot":"","sources":["dasherize-component-name.ts"],"names":[],"mappings":";AAAA,wKAAwK;;;AAExK,MAAM,uBAAuB,GAAG,WAAW,CAAC;AAC5C,MAAM,KAAK,GAAG,aAAa,CAAC;AAE5B,SAAgB,SAAS,CAAC,GAAW;IACnC,IAAI,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC9D,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,OAAO,GAAG,CAAC;SACZ;QAED,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE;YAC9C,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;SAC3B;QAED,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAdD,8BAcC","sourcesContent":["// copied from https://github.com/emberjs/ember.js/blob/978cf6773d6eea3e656d0da797980305061186cf/packages/ember-template-compiler/lib/system/dasherize-component-name.ts\n\nconst SIMPLE_DASHERIZE_REGEXP = /[A-Z]|::/g;\nconst ALPHA = /[A-Za-z0-9]/;\n\nexport function dasherize(key: string) {\n let name = key.replace(SIMPLE_DASHERIZE_REGEXP, (char, index) => {\n if (char === '::') {\n return '/';\n }\n\n if (index === 0 || !ALPHA.test(key[index - 1])) {\n return char.toLowerCase();\n }\n\n return `-${char.toLowerCase()}`;\n });\n\n return name;\n}\n"]}
1
+ {"version":3,"file":"dasherize-component-name.js","sourceRoot":"","sources":["dasherize-component-name.ts"],"names":[],"mappings":";AAAA,wKAAwK;;;AAExK,MAAM,uBAAuB,GAAG,WAAW,CAAC;AAC5C,MAAM,KAAK,GAAG,aAAa,CAAC;AAE5B,SAAgB,SAAS,CAAC,GAAW;IACnC,IAAI,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC9D,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,OAAO,GAAG,CAAC;SACZ;QAED,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE;YAC9C,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;SAC3B;QAED,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAdD,8BAcC;AAED,MAAM,iBAAiB,GAAG,gFAAgF,CAAC;AAC3G,SAAgB,uBAAuB,CAAC,OAAe;;IACrD,IAAI,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,MAAM,EAAE;QACV,OAAO,SAAS,CAAC,MAAA,MAAA,MAAM,CAAC,CAAC,CAAC,mCAAI,MAAM,CAAC,CAAC,CAAC,mCAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KACvD;AACH,CAAC;AALD,0DAKC","sourcesContent":["// copied from https://github.com/emberjs/ember.js/blob/978cf6773d6eea3e656d0da797980305061186cf/packages/ember-template-compiler/lib/system/dasherize-component-name.ts\n\nconst SIMPLE_DASHERIZE_REGEXP = /[A-Z]|::/g;\nconst ALPHA = /[A-Za-z0-9]/;\n\nexport function dasherize(key: string) {\n let name = key.replace(SIMPLE_DASHERIZE_REGEXP, (char, index) => {\n if (char === '::') {\n return '/';\n }\n\n if (index === 0 || !ALPHA.test(key[index - 1])) {\n return char.toLowerCase();\n }\n\n return `-${char.toLowerCase()}`;\n });\n\n return name;\n}\n\nconst NAME_FROM_SNIPPET = /<(?:([^\\s/]+).*>)|(?:{{\\s?component\\s+['\"]([^'\"]+)['\"])|(?:\\{\\{([^\\s]+).*\\}\\})/;\nexport function snippetToDasherizedName(snippet: string): string | undefined {\n let result = NAME_FROM_SNIPPET.exec(snippet);\n if (result) {\n return dasherize(result[1] ?? result[2] ?? result[3]);\n }\n}\n"]}
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.stableWorkspaceDir = void 0;
7
7
  const _1 = require(".");
8
8
  const core_1 = require("@embroider/core");
9
- const shared_internals_1 = require("@embroider/shared-internals");
9
+ const core_2 = require("@embroider/core");
10
10
  const broccoli_file_creator_1 = __importDefault(require("broccoli-file-creator"));
11
11
  const broccoli_merge_trees_1 = __importDefault(require("broccoli-merge-trees"));
12
12
  const crypto_1 = require("crypto");
@@ -15,7 +15,7 @@ const pkg_up_1 = require("pkg-up");
15
15
  function stableWorkspaceDir(appRoot) {
16
16
  let hash = (0, crypto_1.createHash)('md5');
17
17
  hash.update((0, path_1.dirname)((0, pkg_up_1.sync)({ cwd: appRoot })));
18
- return (0, path_1.join)(shared_internals_1.tmpdir, 'embroider', hash.digest('hex').slice(0, 6));
18
+ return (0, path_1.join)(core_2.tmpdir, 'embroider', hash.digest('hex').slice(0, 6));
19
19
  }
20
20
  exports.stableWorkspaceDir = stableWorkspaceDir;
21
21
  function defaultPipeline(emberApp, packager, options = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"default-pipeline.js","sourceRoot":"","sources":["default-pipeline.ts"],"names":[],"mappings":"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","sourcesContent":["import { App, Addons as CompatAddons, Options, PrebuiltAddons } from '.';\nimport { toBroccoliPlugin, PackagerConstructor, Variant, EmberAppInstance } from '@embroider/core';\nimport { tmpdir } from '@embroider/shared-internals';\nimport { Node } from 'broccoli-node-api';\nimport writeFile from 'broccoli-file-creator';\nimport mergeTrees from 'broccoli-merge-trees';\nimport { createHash } from 'crypto';\nimport { join, dirname } from 'path';\nimport { sync as pkgUpSync } from 'pkg-up';\n\nexport interface PipelineOptions<PackagerOptions> extends Options {\n packagerOptions?: PackagerOptions;\n onOutputPath?: (outputPath: string) => void;\n variants?: Variant[];\n}\n\nexport function stableWorkspaceDir(appRoot: string) {\n let hash = createHash('md5');\n hash.update(dirname(pkgUpSync({ cwd: appRoot })!));\n return join(tmpdir, 'embroider', hash.digest('hex').slice(0, 6));\n}\n\nexport default function defaultPipeline<PackagerOptions>(\n emberApp: EmberAppInstance,\n packager?: PackagerConstructor<PackagerOptions>,\n options: PipelineOptions<PackagerOptions> = {}\n): Node {\n let outputPath: string;\n let addons;\n\n if (process.env.REUSE_WORKSPACE) {\n addons = new PrebuiltAddons(emberApp, options, process.env.REUSE_WORKSPACE);\n } else {\n if (process.env.SAVE_WORKSPACE) {\n options.workspaceDir = process.env.SAVE_WORKSPACE;\n } else {\n options.workspaceDir = stableWorkspaceDir(emberApp.project.root);\n }\n\n emberApp.project.ui.write(`Building into ${options.workspaceDir}\\n`);\n addons = new CompatAddons(emberApp, options);\n addons.ready().then(result => {\n outputPath = result.outputPath;\n });\n }\n\n if (process.env.STAGE1_ONLY) {\n return mergeTrees([addons.tree, writeFile('.stage1-output', () => outputPath)]);\n }\n\n let embroiderApp = new App(emberApp, addons, options);\n\n if (process.env.STAGE2_ONLY || !packager) {\n return mergeTrees([embroiderApp.tree, writeFile('.stage2-output', () => outputPath)]);\n }\n\n let BroccoliPackager = toBroccoliPlugin(packager);\n let variants = (options && options.variants) || defaultVariants(emberApp);\n return new BroccoliPackager(embroiderApp, variants, options && options.packagerOptions);\n}\n\nfunction hasFastboot(emberApp: EmberAppInstance | EmberAppInstance) {\n return emberApp.project.addons.find(a => a.name === 'ember-cli-fastboot');\n}\n\nfunction defaultVariants(emberApp: EmberAppInstance): Variant[] {\n let variants: Variant[] = [];\n if (emberApp.env === 'production') {\n variants.push({\n name: 'browser',\n runtime: 'browser',\n optimizeForProduction: true,\n });\n if (hasFastboot(emberApp)) {\n variants.push({\n name: 'fastboot',\n runtime: 'fastboot',\n optimizeForProduction: true,\n });\n }\n } else {\n variants.push({\n name: 'dev',\n runtime: hasFastboot(emberApp) ? 'all' : 'browser',\n optimizeForProduction: false,\n });\n }\n return variants;\n}\n"]}
1
+ {"version":3,"file":"default-pipeline.js","sourceRoot":"","sources":["default-pipeline.ts"],"names":[],"mappings":"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","sourcesContent":["import { App, Addons as CompatAddons, Options, PrebuiltAddons } from '.';\nimport { toBroccoliPlugin, PackagerConstructor, Variant, EmberAppInstance } from '@embroider/core';\nimport { tmpdir } from '@embroider/core';\nimport { Node } from 'broccoli-node-api';\nimport writeFile from 'broccoli-file-creator';\nimport mergeTrees from 'broccoli-merge-trees';\nimport { createHash } from 'crypto';\nimport { join, dirname } from 'path';\nimport { sync as pkgUpSync } from 'pkg-up';\n\nexport interface PipelineOptions<PackagerOptions> extends Options {\n packagerOptions?: PackagerOptions;\n onOutputPath?: (outputPath: string) => void;\n variants?: Variant[];\n}\n\nexport function stableWorkspaceDir(appRoot: string) {\n let hash = createHash('md5');\n hash.update(dirname(pkgUpSync({ cwd: appRoot })!));\n return join(tmpdir, 'embroider', hash.digest('hex').slice(0, 6));\n}\n\nexport default function defaultPipeline<PackagerOptions>(\n emberApp: EmberAppInstance,\n packager?: PackagerConstructor<PackagerOptions>,\n options: PipelineOptions<PackagerOptions> = {}\n): Node {\n let outputPath: string;\n let addons;\n\n if (process.env.REUSE_WORKSPACE) {\n addons = new PrebuiltAddons(emberApp, options, process.env.REUSE_WORKSPACE);\n } else {\n if (process.env.SAVE_WORKSPACE) {\n options.workspaceDir = process.env.SAVE_WORKSPACE;\n } else {\n options.workspaceDir = stableWorkspaceDir(emberApp.project.root);\n }\n\n emberApp.project.ui.write(`Building into ${options.workspaceDir}\\n`);\n addons = new CompatAddons(emberApp, options);\n addons.ready().then(result => {\n outputPath = result.outputPath;\n });\n }\n\n if (process.env.STAGE1_ONLY) {\n return mergeTrees([addons.tree, writeFile('.stage1-output', () => outputPath)]);\n }\n\n let embroiderApp = new App(emberApp, addons, options);\n\n if (process.env.STAGE2_ONLY || !packager) {\n return mergeTrees([embroiderApp.tree, writeFile('.stage2-output', () => outputPath)]);\n }\n\n let BroccoliPackager = toBroccoliPlugin(packager);\n let variants = (options && options.variants) || defaultVariants(emberApp);\n return new BroccoliPackager(embroiderApp, variants, options && options.packagerOptions);\n}\n\nfunction hasFastboot(emberApp: EmberAppInstance | EmberAppInstance) {\n return emberApp.project.addons.find(a => a.name === 'ember-cli-fastboot');\n}\n\nfunction defaultVariants(emberApp: EmberAppInstance): Variant[] {\n let variants: Variant[] = [];\n if (emberApp.env === 'production') {\n variants.push({\n name: 'browser',\n runtime: 'browser',\n optimizeForProduction: true,\n });\n if (hasFastboot(emberApp)) {\n variants.push({\n name: 'fastboot',\n runtime: 'fastboot',\n optimizeForProduction: true,\n });\n }\n } else {\n variants.push({\n name: 'dev',\n runtime: hasFastboot(emberApp) ? 'all' : 'browser',\n optimizeForProduction: false,\n });\n }\n return variants;\n}\n"]}
@@ -82,7 +82,12 @@ function expandModuleRules(absPath, moduleRules, resolver) {
82
82
  if (moduleRules.dependsOnComponents) {
83
83
  for (let snippet of moduleRules.dependsOnComponents) {
84
84
  let found = resolver.resolveComponentSnippet(snippet, moduleRules);
85
- for (let { absPath: target, runtimeName } of found.modules) {
85
+ if (found.jsModule) {
86
+ let { absPath: target, runtimeName } = found.jsModule;
87
+ output.push({ absPath, target: (0, core_1.explicitRelative)((0, path_1.dirname)(absPath), target), runtimeName });
88
+ }
89
+ if (found.hbsModule) {
90
+ let { absPath: target, runtimeName } = found.hbsModule;
86
91
  output.push({ absPath, target: (0, core_1.explicitRelative)((0, path_1.dirname)(absPath), target), runtimeName });
87
92
  }
88
93
  }