@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.
- package/package.json +7 -8
- package/src/audit/build.js +5 -1
- package/src/audit/build.js.map +1 -1
- package/src/audit/capture.d.ts +1 -0
- package/src/compat-adapters/ember-cli-fastboot.d.ts +1 -1
- package/src/compat-adapters/ember-cli-fastboot.js.map +1 -1
- package/src/compat-app.js +8 -24
- package/src/compat-app.js.map +1 -1
- package/src/dasherize-component-name.d.ts +1 -0
- package/src/dasherize-component-name.js +10 -1
- package/src/dasherize-component-name.js.map +1 -1
- package/src/default-pipeline.js +2 -2
- package/src/default-pipeline.js.map +1 -1
- package/src/dependency-rules.js +6 -1
- package/src/dependency-rules.js.map +1 -1
- package/src/{template-compiler-broccoli-plugin.d.ts → hbs-to-js-broccoli-plugin.d.ts} +2 -4
- package/src/hbs-to-js-broccoli-plugin.js +39 -0
- package/src/hbs-to-js-broccoli-plugin.js.map +1 -0
- package/src/moved-package-cache.js +5 -1
- package/src/moved-package-cache.js.map +1 -1
- package/src/resolver-transform.d.ts +11 -27
- package/src/resolver-transform.js +163 -65
- package/src/resolver-transform.js.map +1 -1
- package/src/resolver.d.ts +26 -27
- package/src/resolver.js +124 -169
- package/src/resolver.js.map +1 -1
- package/src/synthesize-template-only-components.js +8 -8
- package/src/synthesize-template-only-components.js.map +1 -1
- package/src/v1-addon.d.ts +2 -26
- package/src/v1-addon.js +29 -68
- package/src/v1-addon.js.map +1 -1
- package/src/v1-app.d.ts +3 -2
- package/src/v1-app.js +14 -3
- package/src/v1-app.js.map +1 -1
- package/src/template-compiler-broccoli-plugin.js +0 -28
- 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 {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
10
|
-
|
|
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
|
-
|
|
50
|
-
|
|
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 =
|
|
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
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
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 =
|
|
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.
|
|
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
|