@embroider/compat 1.9.0 → 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/build.js +5 -1
  3. package/src/audit/build.js.map +1 -1
  4. package/src/audit/capture.d.ts +1 -0
  5. package/src/compat-adapters/ember-cli-fastboot.d.ts +1 -1
  6. package/src/compat-adapters/ember-cli-fastboot.js.map +1 -1
  7. package/src/compat-app.js +8 -24
  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 +124 -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 +14 -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hbs-to-js-broccoli-plugin.js","sourceRoot":"","sources":["hbs-to-js-broccoli-plugin.ts"],"names":[],"mappings":";;;;;AACA,4FAAgD;AAChD,0CAA0C;AAC1C,+BAA4B;AAE5B,MAAqB,mBAAoB,SAAQ,oCAAM;IACrD,YAAY,SAAe;QACzB,KAAK,CAAC,SAAS,EAAE;YACf,IAAI,EAAE,mCAAmC;YACzC,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,YAAoB,EAAE,KAA+C;QACnF,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE;YACzC,OAAO,IAAI,CAAC;SACb;QACD,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE;YACrC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,EAAE;gBACrD,2EAA2E;gBAC3E,2EAA2E;gBAC3E,0BAA0B;gBAC1B,OAAO,YAAY,GAAG,KAAK,CAAC;aAC7B;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,YAAoB;QAChD,OAAO,IAAA,cAAO,EAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO;QACL,OAAO,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF;AA9BD,sCA8BC","sourcesContent":["import type { Node } from 'broccoli-node-api';\nimport Filter from 'broccoli-persistent-filter';\nimport { hbsToJS } from '@embroider/core';\nimport { join } from 'path';\n\nexport default class TemplateCompileTree extends Filter {\n constructor(inputTree: Node) {\n super(inputTree, {\n name: `embroider-template-compile-stage1`,\n persist: true,\n extensions: ['hbs', 'handlebars'],\n });\n }\n\n getDestFilePath(relativePath: string, entry: Parameters<Filter['getDestFilePath']>[1]) {\n if (this.isDirectory(relativePath, entry)) {\n return null;\n }\n for (let ext of ['hbs', 'handlebars']) {\n if (relativePath.slice(-ext.length - 1) === '.' + ext) {\n // we deliberately don't chop off the .hbs before appending .js, because if\n // the user has both .js` and .hbs` side-by-side we don't want our new file\n // to collide with theirs.\n return relativePath + '.js';\n }\n }\n return null;\n }\n\n processString(source: string, relativePath: string) {\n return hbsToJS(source, { filename: relativePath });\n }\n baseDir() {\n return join(__dirname, '..');\n }\n}\n"]}
@@ -5,14 +5,18 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
8
11
  Object.defineProperty(exports, "__esModule", { value: true });
9
12
  exports.MovedPackageCache = exports.MovablePackageCache = void 0;
10
13
  const path_1 = require("path");
11
14
  const fs_extra_1 = require("fs-extra");
12
15
  const typescript_memoize_1 = require("typescript-memoize");
13
16
  const core_1 = require("@embroider/core");
17
+ const os_1 = __importDefault(require("os"));
14
18
  function assertNoTildeExpansion(source, target) {
15
- if (target.includes('~')) {
19
+ if (target.includes('~') && os_1.default.platform() !== 'win32') {
16
20
  throw new Error(`The symbolic link: ${source}'s target: ${target} contained a bash expansion '~' which is not supported.`);
17
21
  }
18
22
  }
@@ -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, 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"]}
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';\nimport os from 'os';\n\nfunction assertNoTildeExpansion(source: string, target: string) {\n if (target.includes('~') && os.platform() !== 'win32') {\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"]}
@@ -1,29 +1,13 @@
1
1
  import { default as Resolver } from './resolver';
2
- import type { ASTv1 } from '@glimmer/syntax';
3
- export declare function makeResolverTransform(resolver: Resolver): {
4
- ({ filename, contents }: {
5
- filename: string;
6
- contents: string;
7
- }): {
8
- name: string;
9
- visitor: {
10
- Program: {
11
- enter(node: ASTv1.Program): void;
12
- exit(): void;
13
- };
14
- BlockStatement(node: ASTv1.BlockStatement): void;
15
- SubExpression(node: ASTv1.SubExpression): void;
16
- MustacheStatement(node: ASTv1.MustacheStatement): void;
17
- ElementModifierStatement(node: ASTv1.ElementModifierStatement): void;
18
- ElementNode: {
19
- enter(node: ASTv1.ElementNode): void;
20
- exit(): void;
21
- };
22
- };
23
- };
24
- parallelBabel: {
25
- requireFile: string;
26
- buildUsing: string;
27
- params: typeof Resolver;
28
- };
2
+ import type { ASTPluginBuilder, ASTPluginEnvironment } from '@glimmer/syntax';
3
+ import type { WithJSUtils } from 'babel-plugin-ember-template-compilation';
4
+ declare type Env = WithJSUtils<ASTPluginEnvironment> & {
5
+ filename: string;
6
+ contents: string;
29
7
  };
8
+ export interface Options {
9
+ resolver: Resolver;
10
+ patchHelpersBug: boolean;
11
+ }
12
+ export default function makeResolverTransform({ resolver, patchHelpersBug }: Options): ASTPluginBuilder<Env>;
13
+ export {};
@@ -3,14 +3,65 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.makeResolverTransform = void 0;
7
6
  const resolver_1 = __importDefault(require("./resolver"));
7
+ const assert_never_1 = __importDefault(require("assert-never"));
8
8
  // This is the AST transform that resolves components, helpers and modifiers at build time
9
- // and puts them into `dependencies`.
10
- function makeResolverTransform(resolver) {
11
- function resolverTransform({ filename, contents }) {
12
- resolver.enter(filename, contents);
9
+ function makeResolverTransform({ resolver, patchHelpersBug }) {
10
+ const resolverTransform = ({ filename, contents, meta: { jsutils }, syntax: { builders }, }) => {
13
11
  let scopeStack = new ScopeStack();
12
+ let emittedAMDDeps = new Set();
13
+ function emitAMD(dep) {
14
+ if (dep && !emittedAMDDeps.has(dep.runtimeName)) {
15
+ let parts = dep.runtimeName.split('/');
16
+ let { path, runtimeName } = dep;
17
+ jsutils.emitExpression(context => {
18
+ let identifier = context.import(path, 'default', parts[parts.length - 1]);
19
+ return `window.define("${runtimeName}", () => ${identifier})`;
20
+ });
21
+ emittedAMDDeps.add(dep.runtimeName);
22
+ }
23
+ }
24
+ function emit(parentPath, resolution, setter) {
25
+ switch (resolution === null || resolution === void 0 ? void 0 : resolution.type) {
26
+ case 'error':
27
+ resolver.reportError(resolution, filename, contents);
28
+ return;
29
+ case 'helper':
30
+ if (patchHelpersBug) {
31
+ // lexical invocation of helpers was not reliable before Ember 4.2 due to https://github.com/emberjs/ember.js/pull/19878
32
+ emitAMD(resolution.module);
33
+ }
34
+ else {
35
+ setter(parentPath.node, builders.path(jsutils.bindImport(resolution.module.path, 'default', parentPath, { nameHint: resolution.nameHint })));
36
+ }
37
+ return;
38
+ case 'modifier':
39
+ setter(parentPath.node, builders.path(jsutils.bindImport(resolution.module.path, 'default', parentPath, { nameHint: resolution.nameHint })));
40
+ return;
41
+ case 'component':
42
+ // When people are using octane-style template co-location or
43
+ // polaris-style first-class templates, we see only JS files for their
44
+ // components, because the template association is handled before
45
+ // we're doing any resolving here. In that case, we can safely do
46
+ // component invocation via lexical scope.
47
+ //
48
+ // But when people are using the older non-co-located template style,
49
+ // we can't safely do that -- ember needs to discover both the
50
+ // component and the template in the AMD loader to associate them. In
51
+ // that case, we emit just-in-time AMD definitions for them.
52
+ if (resolution.jsModule && !resolution.hbsModule) {
53
+ setter(parentPath.node, builders.path(jsutils.bindImport(resolution.jsModule.path, 'default', parentPath, { nameHint: resolution.nameHint })));
54
+ }
55
+ else {
56
+ emitAMD(resolution.hbsModule);
57
+ emitAMD(resolution.jsModule);
58
+ }
59
+ case undefined:
60
+ return;
61
+ default:
62
+ (0, assert_never_1.default)(resolution);
63
+ }
64
+ }
14
65
  return {
15
66
  name: 'embroider-build-time-resolver',
16
67
  visitor: {
@@ -22,7 +73,7 @@ function makeResolverTransform(resolver) {
22
73
  scopeStack.pop();
23
74
  },
24
75
  },
25
- BlockStatement(node) {
76
+ BlockStatement(node, path) {
26
77
  if (node.path.type !== 'PathExpression') {
27
78
  return;
28
79
  }
@@ -40,28 +91,38 @@ function makeResolverTransform(resolver) {
40
91
  return;
41
92
  }
42
93
  if (node.path.original === 'component' && node.params.length > 0) {
43
- handleComponentHelper(node.params[0], resolver, filename, scopeStack);
94
+ let resolution = handleComponentHelper(node.params[0], resolver, filename, scopeStack);
95
+ emit(path, resolution, (node, newIdentifier) => {
96
+ node.params[0] = newIdentifier;
97
+ });
44
98
  return;
45
99
  }
46
100
  // a block counts as args from our perpsective (it's enough to prove
47
101
  // this thing must be a component, not content)
48
102
  let hasArgs = true;
49
- const resolution = resolver.resolveMustache(node.path.original, hasArgs, filename, node.path.loc);
50
- if (resolution && resolution.type === 'component') {
103
+ let resolution = resolver.resolveMustache(node.path.original, hasArgs, filename, node.path.loc);
104
+ emit(path, resolution, (node, newId) => {
105
+ node.path = newId;
106
+ });
107
+ if ((resolution === null || resolution === void 0 ? void 0 : resolution.type) === 'component') {
51
108
  scopeStack.enteringComponentBlock(resolution, ({ argumentsAreComponents }) => {
109
+ let pairs = extendPath(extendPath(path, 'hash'), 'pairs');
52
110
  for (let name of argumentsAreComponents) {
53
- let pair = node.hash.pairs.find((pair) => pair.key === name);
111
+ let pair = pairs.find(pair => pair.node.key === name);
54
112
  if (pair) {
55
- handleComponentHelper(pair.value, resolver, filename, scopeStack, {
113
+ let resolution = handleComponentHelper(pair.node.value, resolver, filename, scopeStack, {
56
114
  componentName: node.path.original,
57
115
  argumentName: name,
58
116
  });
117
+ emit(pair, resolution, (node, newId) => {
118
+ node.value = newId;
119
+ });
59
120
  }
60
121
  }
61
122
  });
62
123
  }
63
124
  },
64
- SubExpression(node) {
125
+ SubExpression(node, path) {
65
126
  if (node.path.type !== 'PathExpression') {
66
127
  return;
67
128
  }
@@ -72,7 +133,10 @@ function makeResolverTransform(resolver) {
72
133
  return;
73
134
  }
74
135
  if (node.path.original === 'component' && node.params.length > 0) {
75
- handleComponentHelper(node.params[0], resolver, filename, scopeStack);
136
+ let resolution = handleComponentHelper(node.params[0], resolver, filename, scopeStack);
137
+ emit(path, resolution, (node, newId) => {
138
+ node.params[0] = newId;
139
+ });
76
140
  return;
77
141
  }
78
142
  if (node.path.original === 'helper' && node.params.length > 0) {
@@ -83,48 +147,63 @@ function makeResolverTransform(resolver) {
83
147
  handleDynamicModifier(node.params[0], resolver, filename);
84
148
  return;
85
149
  }
86
- resolver.resolveSubExpression(node.path.original, filename, node.path.loc);
150
+ let resolution = resolver.resolveSubExpression(node.path.original, filename, node.path.loc);
151
+ emit(path, resolution, (node, newId) => {
152
+ node.path = newId;
153
+ });
87
154
  },
88
- MustacheStatement(node) {
89
- if (node.path.type !== 'PathExpression') {
90
- return;
91
- }
92
- if (scopeStack.inScope(node.path.parts[0])) {
93
- return;
94
- }
95
- if (node.path.this === true) {
96
- return;
97
- }
98
- if (node.path.parts.length > 1) {
99
- // paths with a dot in them (which therefore split into more than
100
- // one "part") are classically understood by ember to be contextual
101
- // components, which means there's nothing to resolve at this
102
- // location.
103
- return;
104
- }
105
- if (node.path.original === 'component' && node.params.length > 0) {
106
- handleComponentHelper(node.params[0], resolver, filename, scopeStack);
107
- return;
108
- }
109
- if (node.path.original === 'helper' && node.params.length > 0) {
110
- handleDynamicHelper(node.params[0], resolver, filename);
111
- return;
112
- }
113
- let hasArgs = node.params.length > 0 || node.hash.pairs.length > 0;
114
- let resolution = resolver.resolveMustache(node.path.original, hasArgs, filename, node.path.loc);
115
- if (resolution && resolution.type === 'component') {
116
- for (let name of resolution.argumentsAreComponents) {
117
- let pair = node.hash.pairs.find((pair) => pair.key === name);
118
- if (pair) {
119
- handleComponentHelper(pair.value, resolver, filename, scopeStack, {
120
- componentName: node.path.original,
121
- argumentName: name,
122
- });
155
+ MustacheStatement: {
156
+ enter(node, path) {
157
+ if (node.path.type !== 'PathExpression') {
158
+ return;
159
+ }
160
+ if (scopeStack.inScope(node.path.parts[0])) {
161
+ return;
162
+ }
163
+ if (node.path.this === true) {
164
+ return;
165
+ }
166
+ if (node.path.parts.length > 1) {
167
+ // paths with a dot in them (which therefore split into more than
168
+ // one "part") are classically understood by ember to be contextual
169
+ // components, which means there's nothing to resolve at this
170
+ // location.
171
+ return;
172
+ }
173
+ if (node.path.original === 'component' && node.params.length > 0) {
174
+ let resolution = handleComponentHelper(node.params[0], resolver, filename, scopeStack);
175
+ emit(path, resolution, (node, newId) => {
176
+ node.params[0] = newId;
177
+ });
178
+ return;
179
+ }
180
+ if (node.path.original === 'helper' && node.params.length > 0) {
181
+ handleDynamicHelper(node.params[0], resolver, filename);
182
+ return;
183
+ }
184
+ let hasArgs = node.params.length > 0 || node.hash.pairs.length > 0;
185
+ let resolution = resolver.resolveMustache(node.path.original, hasArgs, filename, node.path.loc);
186
+ emit(path, resolution, (node, newIdentifier) => {
187
+ node.path = newIdentifier;
188
+ });
189
+ if ((resolution === null || resolution === void 0 ? void 0 : resolution.type) === 'component') {
190
+ let pairs = extendPath(extendPath(path, 'hash'), 'pairs');
191
+ for (let name of resolution.argumentsAreComponents) {
192
+ let pair = pairs.find(pair => pair.node.key === name);
193
+ if (pair) {
194
+ let resolution = handleComponentHelper(pair.node.value, resolver, filename, scopeStack, {
195
+ componentName: node.path.original,
196
+ argumentName: name,
197
+ });
198
+ emit(pair, resolution, (node, newId) => {
199
+ node.value = newId;
200
+ });
201
+ }
123
202
  }
124
203
  }
125
- }
204
+ },
126
205
  },
127
- ElementModifierStatement(node) {
206
+ ElementModifierStatement(node, path) {
128
207
  if (node.path.type !== 'PathExpression') {
129
208
  return;
130
209
  }
@@ -145,21 +224,31 @@ function makeResolverTransform(resolver) {
145
224
  // to resolve at this location.
146
225
  return;
147
226
  }
148
- resolver.resolveElementModifierStatement(node.path.original, filename, node.path.loc);
227
+ let resolution = resolver.resolveElementModifierStatement(node.path.original, filename, node.path.loc);
228
+ emit(path, resolution, (node, newId) => {
229
+ node.path = newId;
230
+ });
149
231
  },
150
232
  ElementNode: {
151
- enter(node) {
233
+ enter(node, path) {
152
234
  if (!scopeStack.inScope(node.tag.split('.')[0])) {
153
235
  const resolution = resolver.resolveElement(node.tag, filename, node.loc);
154
- if (resolution && resolution.type === 'component') {
236
+ emit(path, resolution, (node, newId) => {
237
+ node.tag = newId.original;
238
+ });
239
+ if ((resolution === null || resolution === void 0 ? void 0 : resolution.type) === 'component') {
155
240
  scopeStack.enteringComponentBlock(resolution, ({ argumentsAreComponents }) => {
241
+ let attributes = extendPath(path, 'attributes');
156
242
  for (let name of argumentsAreComponents) {
157
- let attr = node.attributes.find((attr) => attr.name === '@' + name);
243
+ let attr = attributes.find(attr => attr.node.name === '@' + name);
158
244
  if (attr) {
159
- handleComponentHelper(attr.value, resolver, filename, scopeStack, {
245
+ let resolution = handleComponentHelper(attr.node.value, resolver, filename, scopeStack, {
160
246
  componentName: node.tag,
161
247
  argumentName: name,
162
248
  });
249
+ emit(attr, resolution, (node, newId) => {
250
+ node.value = builders.mustache(newId);
251
+ });
163
252
  }
164
253
  }
165
254
  });
@@ -173,7 +262,7 @@ function makeResolverTransform(resolver) {
173
262
  },
174
263
  },
175
264
  };
176
- }
265
+ };
177
266
  resolverTransform.parallelBabel = {
178
267
  requireFile: __filename,
179
268
  buildUsing: 'makeResolverTransform',
@@ -181,7 +270,7 @@ function makeResolverTransform(resolver) {
181
270
  };
182
271
  return resolverTransform;
183
272
  }
184
- exports.makeResolverTransform = makeResolverTransform;
273
+ exports.default = makeResolverTransform;
185
274
  class ScopeStack {
186
275
  constructor() {
187
276
  this.stack = [];
@@ -279,12 +368,11 @@ function handleComponentHelper(param, resolver, moduleName, scopeStack, impliedB
279
368
  break;
280
369
  case 'MustacheStatement':
281
370
  if (param.hash.pairs.length === 0 && param.params.length === 0) {
282
- handleComponentHelper(param.path, resolver, moduleName, scopeStack, impliedBecause);
283
- return;
371
+ return handleComponentHelper(param.path, resolver, moduleName, scopeStack, impliedBecause);
284
372
  }
285
373
  else if (param.path.type === 'PathExpression' && param.path.original === 'component') {
286
374
  // safe because we will handle this inner `{{component ...}}` mustache on its own
287
- return;
375
+ return null;
288
376
  }
289
377
  else {
290
378
  locator = { type: 'other' };
@@ -296,11 +384,11 @@ function handleComponentHelper(param, resolver, moduleName, scopeStack, impliedB
296
384
  case 'SubExpression':
297
385
  if (param.path.type === 'PathExpression' && param.path.original === 'component') {
298
386
  // safe because we will handle this inner `(component ...)` subexpression on its own
299
- return;
387
+ return null;
300
388
  }
301
389
  if (param.path.type === 'PathExpression' && param.path.original === 'ensure-safe-component') {
302
390
  // safe because we trust ensure-safe-component
303
- return;
391
+ return null;
304
392
  }
305
393
  locator = { type: 'other' };
306
394
  break;
@@ -308,9 +396,9 @@ function handleComponentHelper(param, resolver, moduleName, scopeStack, impliedB
308
396
  locator = { type: 'other' };
309
397
  }
310
398
  if (locator.type === 'path' && scopeStack.safeComponentInScope(locator.path)) {
311
- return;
399
+ return null;
312
400
  }
313
- resolver.resolveComponentHelper(locator, moduleName, param.loc, impliedBecause);
401
+ return resolver.resolveComponentHelper(locator, moduleName, param.loc, impliedBecause);
314
402
  }
315
403
  function handleDynamicHelper(param, resolver, moduleName) {
316
404
  // We only need to handle StringLiterals since Ember already throws an error if unsupported values
@@ -326,4 +414,14 @@ function handleDynamicModifier(param, resolver, moduleName) {
326
414
  resolver.resolveDynamicModifier({ type: 'literal', path: param.value }, moduleName, param.loc);
327
415
  }
328
416
  }
417
+ function extendPath(path, key) {
418
+ const _WalkerPath = path.constructor;
419
+ let child = path.node[key];
420
+ if (Array.isArray(child)) {
421
+ return child.map(c => new _WalkerPath(c, path, key));
422
+ }
423
+ else {
424
+ return new _WalkerPath(child, path, key);
425
+ }
426
+ }
329
427
  //# sourceMappingURL=resolver-transform.js.map