@embroider/core 2.1.0 → 2.1.1-unstable.21eae41

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 (64) hide show
  1. package/package.json +3 -4
  2. package/src/app-files.d.ts +1 -1
  3. package/src/app-files.js.map +1 -1
  4. package/src/app.d.ts +9 -7
  5. package/src/app.js +20 -31
  6. package/src/app.js.map +1 -1
  7. package/src/index.d.ts +3 -0
  8. package/src/index.js +5 -1
  9. package/src/index.js.map +1 -1
  10. package/src/module-resolver.d.ts +60 -22
  11. package/src/module-resolver.js +465 -136
  12. package/src/module-resolver.js.map +1 -1
  13. package/src/virtual-content.d.ts +3 -0
  14. package/src/virtual-content.js +87 -0
  15. package/src/virtual-content.js.map +1 -0
  16. package/src/wait-for-trees.js.map +1 -1
  17. package/src/babel-plugin-adjust-imports.d.ts +0 -31
  18. package/src/babel-plugin-adjust-imports.js +0 -224
  19. package/src/babel-plugin-adjust-imports.js.map +0 -1
  20. package/src/babel-plugin-inline-hbs-deps-node.d.ts +0 -14
  21. package/src/babel-plugin-inline-hbs-deps-node.js +0 -27
  22. package/src/babel-plugin-inline-hbs-deps-node.js.map +0 -1
  23. package/src/babel-plugin-inline-hbs-deps.d.ts +0 -10
  24. package/src/babel-plugin-inline-hbs-deps.js +0 -134
  25. package/src/babel-plugin-inline-hbs-deps.js.map +0 -1
  26. package/src/babel-plugin-inline-hbs-node.d.ts +0 -7
  27. package/src/babel-plugin-inline-hbs-node.js +0 -15
  28. package/src/babel-plugin-inline-hbs-node.js.map +0 -1
  29. package/src/babel-plugin-inline-hbs.d.ts +0 -24
  30. package/src/babel-plugin-inline-hbs.js +0 -142
  31. package/src/babel-plugin-inline-hbs.js.map +0 -1
  32. package/src/babel-plugin-stage1-inline-hbs-node.d.ts +0 -12
  33. package/src/babel-plugin-stage1-inline-hbs-node.js +0 -9
  34. package/src/babel-plugin-stage1-inline-hbs-node.js.map +0 -1
  35. package/src/babel-plugin-stage1-inline-hbs.d.ts +0 -9
  36. package/src/babel-plugin-stage1-inline-hbs.js +0 -96
  37. package/src/babel-plugin-stage1-inline-hbs.js.map +0 -1
  38. package/src/browser-index.d.ts +0 -1
  39. package/src/browser-index.js +0 -6
  40. package/src/browser-index.js.map +0 -1
  41. package/src/ember-template-compiler-types.d.ts +0 -41
  42. package/src/ember-template-compiler-types.js +0 -3
  43. package/src/ember-template-compiler-types.js.map +0 -1
  44. package/src/load-ember-template-compiler.d.ts +0 -6
  45. package/src/load-ember-template-compiler.js +0 -57
  46. package/src/load-ember-template-compiler.js.map +0 -1
  47. package/src/mini-modules-polyfill.d.ts +0 -12
  48. package/src/mini-modules-polyfill.js +0 -80
  49. package/src/mini-modules-polyfill.js.map +0 -1
  50. package/src/patch-template-compiler.d.ts +0 -1
  51. package/src/patch-template-compiler.js +0 -176
  52. package/src/patch-template-compiler.js.map +0 -1
  53. package/src/resolver-plugin.d.ts +0 -3
  54. package/src/resolver-plugin.js +0 -53
  55. package/src/resolver-plugin.js.map +0 -1
  56. package/src/resolver.d.ts +0 -14
  57. package/src/resolver.js +0 -3
  58. package/src/resolver.js.map +0 -1
  59. package/src/template-compiler-common.d.ts +0 -70
  60. package/src/template-compiler-common.js +0 -176
  61. package/src/template-compiler-common.js.map +0 -1
  62. package/src/template-compiler-node.d.ts +0 -17
  63. package/src/template-compiler-node.js +0 -32
  64. package/src/template-compiler-node.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"module-resolver.js","sourceRoot":"","sources":["module-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import { emberVirtualPackages, emberVirtualPeerDeps, packageName as getPackageName } from '@embroider/shared-internals';\nimport { dirname, resolve } from 'path';\nimport { PackageCache, Package, V2Package, explicitRelative } from '@embroider/shared-internals';\nimport { Memoize } from 'typescript-memoize';\n\nexport interface Options {\n renamePackages: {\n [fromName: string]: string;\n };\n renameModules: {\n [fromName: string]: string;\n };\n extraImports: {\n absPath: string;\n target: string;\n runtimeName?: string;\n }[];\n externalsDir: string;\n activeAddons: {\n [packageName: string]: string;\n };\n relocatedFiles: { [relativePath: string]: string };\n resolvableExtensions: string[];\n appRoot: string;\n}\n\nexport type Resolution =\n | { result: 'continue' }\n | { result: 'redirect-to'; specifier: string }\n | { result: 'external'; specifier: string }\n | { result: 'runtime-failure'; specifier: string };\n\nexport class Resolver {\n readonly originalFilename: string;\n\n constructor(readonly filename: string, private options: Options) {\n this.originalFilename = options.relocatedFiles[filename] || filename;\n }\n resolve(specifier: string, isDynamic: boolean): Resolution {\n if (specifier === '@embroider/macros') {\n // the macros package is always handled directly within babel (not\n // necessarily as a real resolvable package), so we should not mess with it.\n // It might not get compiled away until *after* our plugin has run, which is\n // why we need to know about it.\n return { result: 'continue' };\n }\n\n let maybeRenamed = this.handleRenaming(specifier);\n let resolution = this.handleExternal(maybeRenamed, isDynamic);\n if (resolution.result === 'continue' && maybeRenamed !== specifier) {\n return { result: 'redirect-to', specifier: maybeRenamed };\n }\n return resolution;\n }\n\n @Memoize()\n owningPackage(): Package | undefined {\n return PackageCache.shared('embroider-stage3', this.options.appRoot).ownerOfFile(this.originalFilename);\n }\n\n @Memoize()\n private relocatedIntoPackage(): V2Package | undefined {\n if (this.originalFilename !== this.filename) {\n let owning = PackageCache.shared('embroider-stage3', this.options.appRoot).ownerOfFile(this.filename);\n if (owning && !owning.isV2Ember()) {\n throw new Error(`bug: it should only be possible to get relocated into a v2 ember package here`);\n }\n return owning;\n }\n }\n\n private handleRenaming(specifier: string) {\n let packageName = getPackageName(specifier);\n if (!packageName) {\n return specifier;\n }\n\n for (let [candidate, replacement] of Object.entries(this.options.renameModules)) {\n if (candidate === specifier) {\n return replacement;\n }\n for (let extension of this.options.resolvableExtensions) {\n if (candidate === specifier + '/index' + extension) {\n return replacement;\n }\n if (candidate === specifier + extension) {\n return replacement;\n }\n }\n }\n\n if (this.options.renamePackages[packageName]) {\n return specifier.replace(packageName, this.options.renamePackages[packageName]);\n }\n\n let pkg = this.owningPackage();\n if (!pkg || !pkg.isV2Ember()) {\n return specifier;\n }\n\n if (pkg.meta['auto-upgraded'] && pkg.name === packageName) {\n // we found a self-import, make it relative. Only auto-upgraded packages get\n // this help, v2 packages are natively supposed to use relative imports for\n // their own modules, and we want to push them all to do that correctly.\n let fullPath = specifier.replace(packageName, pkg.root);\n return explicitRelative(dirname(this.filename), fullPath);\n }\n\n let relocatedIntoPkg = this.relocatedIntoPackage();\n if (relocatedIntoPkg && pkg.meta['auto-upgraded'] && relocatedIntoPkg.name === packageName) {\n // a file that was relocated into a package does a self-import of that\n // package's name. This can happen when an addon (like ember-cli-mirage)\n // emits files from its own treeForApp that contain imports of the app's own\n // fully qualified name.\n let fullPath = specifier.replace(packageName, relocatedIntoPkg.root);\n return explicitRelative(dirname(this.filename), fullPath);\n }\n\n return specifier;\n }\n\n private handleExternal(specifier: string, isDynamic: boolean): Resolution {\n let pkg = this.owningPackage();\n if (!pkg || !pkg.isV2Ember()) {\n return { result: 'continue' };\n }\n\n let packageName = getPackageName(specifier);\n if (!packageName) {\n // This is a relative import. We don't automatically externalize those\n // because it's rare, and by keeping them static we give better errors. But\n // we do allow them to be explicitly externalized by the package author (or\n // a compat adapter). In the metadata, they would be listed in\n // package-relative form, so we need to convert this specifier to that.\n let absoluteSpecifier = resolve(dirname(this.filename), specifier);\n let packageRelativeSpecifier = explicitRelative(pkg.root, absoluteSpecifier);\n if (isExplicitlyExternal(packageRelativeSpecifier, pkg)) {\n let publicSpecifier = absoluteSpecifier.replace(pkg.root, pkg.name);\n return { result: 'external', specifier: publicSpecifier };\n } else {\n return { result: 'continue' };\n }\n }\n\n // absolute package imports can also be explicitly external based on their\n // full specifier name\n if (isExplicitlyExternal(specifier, pkg)) {\n return { result: 'external', specifier };\n }\n\n if (!pkg.meta['auto-upgraded'] && emberVirtualPeerDeps.has(packageName)) {\n // Native v2 addons are allowed to use the emberVirtualPeerDeps like\n // `@glimmer/component`. And like all v2 addons, it's important that they\n // see those dependencies after those dependencies have been converted to\n // v2.\n //\n // But unlike auto-upgraded addons, native v2 addons are not necessarily\n // copied out of their original place in node_modules. And from that\n // original place they might accidentally resolve the emberVirtualPeerDeps\n // that are present there in v1 format.\n //\n // So before we even check isResolvable, we adjust these imports to point at\n // the app's copies instead.\n if (emberVirtualPeerDeps.has(packageName)) {\n if (!this.options.activeAddons[packageName]) {\n throw new Error(\n `${pkg.name} is trying to import the app's ${packageName} package, but it seems to be missing`\n );\n }\n return {\n result: 'redirect-to',\n specifier: explicitRelative(\n dirname(this.filename),\n specifier.replace(packageName, this.options.activeAddons[packageName])\n ),\n };\n }\n }\n\n let relocatedPkg = this.relocatedIntoPackage();\n if (relocatedPkg) {\n // this file has been moved into another package (presumably the app).\n\n // first try to resolve from the destination package\n if (isResolvable(packageName, relocatedPkg, this.options.appRoot)) {\n // self-imports are legal in the app tree, even for v2 packages.\n if (!pkg.meta['auto-upgraded'] && packageName !== pkg.name) {\n throw new Error(\n `${pkg.name} is trying to import ${packageName} from within its app tree. This is unsafe, because ${pkg.name} can't control which dependencies are resolvable from the app`\n );\n }\n return { result: 'continue' };\n } else {\n // second try to resolve from the source package\n let targetPkg = isResolvable(packageName, pkg, this.options.appRoot);\n if (targetPkg) {\n // self-imports are legal in the app tree, even for v2 packages.\n if (!pkg.meta['auto-upgraded'] && packageName !== pkg.name) {\n throw new Error(\n `${pkg.name} is trying to import ${packageName} from within its app tree. This is unsafe, because ${pkg.name} can't control which dependencies are resolvable from the app`\n );\n }\n // we found it, but we need to rewrite it because it's not really going to\n // resolve from where its sitting\n return {\n result: 'redirect-to',\n specifier: explicitRelative(dirname(this.filename), specifier.replace(packageName, targetPkg.root)),\n };\n }\n }\n } else {\n if (isResolvable(packageName, pkg, this.options.appRoot)) {\n if (!pkg.meta['auto-upgraded'] && !reliablyResolvable(pkg, packageName)) {\n throw new Error(\n `${pkg.name} is trying to import from ${packageName} but that is not one of its explicit dependencies`\n );\n }\n return { result: 'continue' };\n }\n }\n\n // auto-upgraded packages can fall back to the set of known active addons\n //\n // v2 packages can fall back to the set of known active addons only to find\n // themselves (which is needed due to app tree merging)\n if ((pkg.meta['auto-upgraded'] || packageName === pkg.name) && this.options.activeAddons[packageName]) {\n return {\n result: 'redirect-to',\n specifier: explicitRelative(\n dirname(this.filename),\n specifier.replace(packageName, this.options.activeAddons[packageName])\n ),\n };\n }\n\n if (pkg.meta['auto-upgraded']) {\n // auto-upgraded packages can fall back to attempting to find dependencies at\n // runtime. Native v2 packages can only get this behavior in the\n // isExplicitlyExternal case above because they need to explicitly ask for\n // externals.\n return { result: 'external', specifier };\n } else {\n // native v2 packages don't automatically externalize *everything* the way\n // auto-upgraded packages do, but they still externalize known and approved\n // ember virtual packages (like @ember/component)\n if (emberVirtualPackages.has(packageName)) {\n return { result: 'external', specifier };\n }\n }\n\n // non-resolvable imports in dynamic positions become runtime errors, not\n // build-time errors, so we emit the runtime error module here before the\n // stage3 packager has a chance to see the missing module. (Maybe some stage3\n // packagers will have this behavior by default, because it would make sense,\n // but webpack at least does not.)\n if (isDynamic) {\n return { result: 'runtime-failure', specifier };\n }\n\n // this is falling through with the original specifier which was\n // non-resolvable, which will presumably cause a static build error in stage3.\n return { result: 'continue' };\n }\n}\n\nfunction isExplicitlyExternal(specifier: string, fromPkg: V2Package): boolean {\n return Boolean(fromPkg.isV2Addon() && fromPkg.meta['externals'] && fromPkg.meta['externals'].includes(specifier));\n}\n\nfunction isResolvable(packageName: string, fromPkg: V2Package, appRoot: string): false | Package {\n try {\n let dep = PackageCache.shared('embroider-stage3', appRoot).resolve(packageName, fromPkg);\n if (!dep.isEmberPackage() && fromPkg.meta['auto-upgraded'] && !fromPkg.hasDependency('ember-auto-import')) {\n // classic ember addons can only import non-ember dependencies if they\n // have ember-auto-import.\n //\n // whereas native v2 packages can always import any dependency\n return false;\n }\n return dep;\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n return false;\n }\n}\n\n// we don't want to allow things that resolve only by accident that are likely\n// to break in other setups. For example: import your dependencies'\n// dependencies, or importing your own name from within a monorepo (which will\n// work because of the symlinking) without setting up \"exports\" (which makes\n// your own name reliably resolvable)\nfunction reliablyResolvable(pkg: V2Package, packageName: string) {\n if (pkg.hasDependency(packageName)) {\n return true;\n }\n\n if (pkg.name === packageName && pkg.packageJSON.exports) {\n return true;\n }\n\n if (emberVirtualPeerDeps.has(packageName)) {\n return true;\n }\n\n return false;\n}\n"]}
1
+ {"version":3,"file":"module-resolver.js","sourceRoot":"","sources":["module-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n emberVirtualPackages,\n emberVirtualPeerDeps,\n extensionsPattern,\n packageName as getPackageName,\n} from '@embroider/shared-internals';\nimport { dirname, resolve } from 'path';\nimport { PackageCache, Package, V2Package, explicitRelative } from '@embroider/shared-internals';\nimport makeDebug from 'debug';\nimport assertNever from 'assert-never';\nimport resolveModule from 'resolve';\nimport { virtualExternalModule, virtualPairComponent, virtualContent } from './virtual-content';\n\nconst debug = makeDebug('embroider:resolver');\nfunction logTransition<R extends ModuleRequest>(reason: string, before: R, after: R = before): R {\n if (after.isVirtual) {\n debug(`virtualized %s in %s because %s`, before.specifier, before.fromFile, reason);\n } else if (before.specifier !== after.specifier) {\n if (before.fromFile !== after.fromFile) {\n debug(\n `aliased and rehomed: %s to %s, from %s to %s because %s`,\n before.specifier,\n after.specifier,\n before.fromFile,\n after.fromFile,\n reason\n );\n } else {\n debug(`aliased: %s to %s in %s because`, before.specifier, after.specifier, before.fromFile, reason);\n }\n } else if (before.fromFile !== after.fromFile) {\n debug(`rehomed: %s from %s to %s because`, before.specifier, before.fromFile, after.fromFile, reason);\n } else {\n debug(`unchanged: %s in %s because %s`, before.specifier, before.fromFile, reason);\n }\n return after;\n}\n\nexport interface Options {\n renamePackages: {\n [fromName: string]: string;\n };\n renameModules: {\n [fromName: string]: string;\n };\n activeAddons: {\n [packageName: string]: string;\n };\n relocatedFiles: { [relativePath: string]: string };\n resolvableExtensions: string[];\n appRoot: string;\n engines: EngineConfig[];\n modulePrefix: string;\n podModulePrefix?: string;\n}\n\ninterface EngineConfig {\n packageName: string;\n activeAddons: { name: string; root: string }[];\n root: string;\n}\n\nconst compatPattern = /#embroider_compat\\/(?<type>[^\\/]+)\\/(?<rest>.*)/;\n\nexport interface ModuleRequest {\n specifier: string;\n fromFile: string;\n isVirtual: boolean;\n alias(newSpecifier: string): this;\n rehome(newFromFile: string): this;\n virtualize(virtualFilename: string): this;\n}\n\nclass NodeModuleRequest implements ModuleRequest {\n constructor(readonly specifier: string, readonly fromFile: string, readonly isVirtual = false) {}\n alias(specifier: string): this {\n return new NodeModuleRequest(specifier, this.fromFile) as this;\n }\n rehome(fromFile: string): this {\n return new NodeModuleRequest(this.specifier, fromFile) as this;\n }\n virtualize(filename: string) {\n return new NodeModuleRequest(filename, this.fromFile, true) as this;\n }\n}\n\n// This is generic because different build systems have different ways of\n// representing a found module, and we just pass those values through.\nexport type Resolution<T = unknown, E = unknown> = { type: 'found'; result: T } | { type: 'not_found'; err: E };\n\nexport type ResolverFunction<R extends ModuleRequest = ModuleRequest, Res extends Resolution = Resolution> = (\n request: R\n) => Promise<Res>;\n\nexport type SyncResolverFunction<R extends ModuleRequest = ModuleRequest, Res extends Resolution = Resolution> = (\n request: R\n) => Res;\n\nexport class Resolver {\n constructor(private options: Options) {}\n\n beforeResolve<R extends ModuleRequest>(request: R): R {\n if (request.specifier === '@embroider/macros') {\n // the macros package is always handled directly within babel (not\n // necessarily as a real resolvable package), so we should not mess with it.\n // It might not get compiled away until *after* our plugin has run, which is\n // why we need to know about it.\n return logTransition('early exit', request);\n }\n\n request = this.handleGlobalsCompat(request);\n request = this.handleRenaming(request);\n return this.preHandleExternal(request);\n }\n\n // This encapsulates the whole resolving process. Given a `defaultResolve`\n // that calls your build system's normal module resolver, this does both pre-\n // and post-resolution adjustments as needed to implement our compatibility\n // rules.\n //\n // Depending on the plugin architecture you're working in, it may be easier to\n // call beforeResolve and fallbackResolve directly, in which case matching the\n // details of the recursion to what this method does are your responsibility.\n async resolve<Req extends ModuleRequest, Res extends Resolution>(\n request: Req,\n defaultResolve: ResolverFunction<Req, Res>\n ): Promise<Res> {\n let gen = this.internalResolve<Req, Res, Promise<Res>>(request, defaultResolve);\n let out = gen.next();\n while (!out.done) {\n out = gen.next(await out.value);\n }\n return out.value;\n }\n\n // synchronous alternative to resolve() above. Because our own internals are\n // all synchronous, you can use this if your defaultResolve function is\n // synchronous. At present, we need this for the case where we are compiling\n // non-strict templates and doing component resolutions inside the template\n // compiler inside babel, which is a synchronous context.\n resolveSync<Req extends ModuleRequest, Res extends Resolution>(\n request: Req,\n defaultResolve: SyncResolverFunction<Req, Res>\n ): Res {\n let gen = this.internalResolve<Req, Res, Res>(request, defaultResolve);\n let out = gen.next();\n while (!out.done) {\n out = gen.next(out.value);\n }\n return out.value;\n }\n\n // Our core implementation is a generator so it can power both resolve() and\n // resolveSync()\n private *internalResolve<Req extends ModuleRequest, Res extends Resolution, Yielded>(\n request: Req,\n defaultResolve: (req: Req) => Yielded\n ): Generator<Yielded, Res, Res> {\n request = this.beforeResolve(request);\n let resolution = yield defaultResolve(request);\n\n switch (resolution.type) {\n case 'found':\n return resolution;\n case 'not_found':\n break;\n default:\n throw assertNever(resolution);\n }\n let nextRequest = this.fallbackResolve(request);\n if (nextRequest === request) {\n // no additional fallback is available.\n return resolution;\n }\n if (nextRequest.isVirtual) {\n // virtual requests are terminal, there is no more beforeResolve or\n // fallbackResolve around them. The defaultResolve is expected to know how\n // to implement them.\n return yield defaultResolve(nextRequest);\n }\n return yield* this.internalResolve(nextRequest, defaultResolve);\n }\n\n // Use standard NodeJS resolving, with our required compatibility rules on\n // top. This is a convenience method for calling resolveSync with the\n // defaultResolve already configured to be \"do the normal node thing\".\n nodeResolve(\n specifier: string,\n fromFile: string\n ):\n | { type: 'virtual'; filename: string; content: string }\n | { type: 'real'; filename: string }\n | { type: 'not_found'; err: Error } {\n let resolution = this.resolveSync(new NodeModuleRequest(specifier, fromFile), request => {\n if (request.isVirtual) {\n return {\n type: 'found',\n result: {\n type: 'virtual' as 'virtual',\n content: virtualContent(request.specifier),\n filename: request.specifier,\n },\n };\n }\n try {\n let filename = resolveModule.sync(request.specifier, {\n basedir: dirname(request.fromFile),\n extensions: this.options.resolvableExtensions,\n });\n return { type: 'found', result: { type: 'real' as 'real', filename } };\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n return { type: 'not_found', err };\n }\n });\n switch (resolution.type) {\n case 'not_found':\n return resolution;\n case 'found':\n return resolution.result;\n default:\n throw assertNever(resolution);\n }\n }\n\n owningPackage(fromFile: string): Package | undefined {\n return PackageCache.shared('embroider-stage3', this.options.appRoot).ownerOfFile(fromFile);\n }\n\n private originalPackage(fromFile: string): V2Package | undefined {\n let originalFile = this.options.relocatedFiles[fromFile];\n if (originalFile) {\n let owning = PackageCache.shared('embroider-stage3', this.options.appRoot).ownerOfFile(originalFile);\n if (owning && !owning.isV2Ember()) {\n throw new Error(`bug: it should only be possible for a v2 ember package to own relocated files`);\n }\n return owning;\n }\n }\n\n private handleGlobalsCompat<R extends ModuleRequest>(request: R): R {\n let match = compatPattern.exec(request.specifier);\n if (!match) {\n return request;\n }\n let { type, rest } = match.groups!;\n let fromPkg = this.owningPackage(request.fromFile);\n if (!fromPkg?.isV2Ember()) {\n return request;\n }\n let engine = this.owningEngine(fromPkg);\n\n switch (type) {\n case 'helpers':\n return this.resolveHelper(rest, engine, request);\n case 'components':\n return this.resolveComponent(rest, engine, request);\n case 'modifiers':\n return this.resolveModifier(rest, engine, request);\n case 'ambiguous':\n return this.resolveHelperOrComponent(rest, engine, request);\n default:\n throw new Error(`bug: unexepected #embroider_compat specifier: ${request.specifier}`);\n }\n }\n\n private resolveHelper<R extends ModuleRequest>(path: string, inEngine: EngineConfig, request: R): R {\n let target = this.parseGlobalPath(path, inEngine);\n return request\n .alias(`${target.packageName}/helpers/${target.memberName}`)\n .rehome(resolve(inEngine.root, 'package.json'));\n }\n\n private resolveComponent<R extends ModuleRequest>(path: string, inEngine: EngineConfig, request: R): R {\n let target = this.parseGlobalPath(path, inEngine);\n\n let hbsModule: string | null = null;\n let jsModule: string | null = null;\n\n // first, the various places our template might be.\n for (let candidate of this.componentTemplateCandidates(target.packageName)) {\n let resolution = this.nodeResolve(\n `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`,\n target.from\n );\n if (resolution.type === 'real') {\n hbsModule = resolution.filename;\n break;\n }\n }\n\n // then the various places our javascript might be.\n for (let candidate of this.componentJSCandidates(target.packageName)) {\n let resolution = this.nodeResolve(\n `${target.packageName}${candidate.prefix}${target.memberName}${candidate.suffix}`,\n target.from\n );\n // .hbs is a resolvable extension for us, so we need to exclude it here.\n // It matches as a priority lower than .js, so finding an .hbs means\n // there's definitely not a .js.\n if (resolution.type === 'real' && !resolution.filename.endsWith('.hbs')) {\n jsModule = resolution.filename;\n break;\n }\n }\n\n if (hbsModule) {\n return logTransition(\n `resolveComponent found legacy HBS`,\n request,\n request.virtualize(virtualPairComponent(hbsModule, jsModule))\n );\n } else if (jsModule) {\n return logTransition(`resolveComponent found only JS`, request, request.alias(jsModule).rehome(target.from));\n } else {\n return logTransition(`resolveComponent failed`, request);\n }\n }\n\n private resolveHelperOrComponent<R extends ModuleRequest>(path: string, inEngine: EngineConfig, request: R): R {\n // resolveHelper just rewrites our request to one that should target the\n // component, so here to resolve the ambiguity we need to actually resolve\n // that candidate to see if it works.\n let helperCandidate = this.resolveHelper(path, inEngine, request);\n let helperMatch = this.nodeResolve(helperCandidate.specifier, helperCandidate.fromFile);\n if (helperMatch.type === 'real') {\n return helperCandidate;\n }\n\n // unlike resolveHelper, resolveComponent already does pre-resolution in\n // order to deal with its own internal ambiguity around JS vs HBS vs\n // colocation.≥\n let componentMatch = this.resolveComponent(path, inEngine, request);\n if (componentMatch !== request) {\n return componentMatch;\n }\n\n // this is the hard failure case -- we were supposed to find something and\n // didn't. Let the normal resolution process progress so the user gets a\n // normal build error.\n return request;\n }\n\n private resolveModifier<R extends ModuleRequest>(path: string, inEngine: EngineConfig, request: R): R {\n let target = this.parseGlobalPath(path, inEngine);\n return request\n .alias(`${target.packageName}/modifiers/${target.memberName}`)\n .rehome(resolve(inEngine.root, 'package.json'));\n }\n\n private *componentTemplateCandidates(inPackageName: string) {\n yield { prefix: '/templates/components/', suffix: '' };\n yield { prefix: '/components/', suffix: '/template' };\n\n let pods = this.podPrefix(inPackageName);\n if (pods) {\n yield { prefix: `${pods}/components/`, suffix: '/template' };\n }\n }\n\n private *componentJSCandidates(inPackageName: string) {\n yield { prefix: '/components/', suffix: '' };\n yield { prefix: '/components/', suffix: '/component' };\n\n let pods = this.podPrefix(inPackageName);\n if (pods) {\n yield { prefix: `${pods}/components/`, suffix: '/component' };\n }\n }\n\n private podPrefix(targetPackageName: string) {\n if (targetPackageName === this.options.modulePrefix && this.options.podModulePrefix) {\n if (!this.options.podModulePrefix.startsWith(this.options.modulePrefix)) {\n throw new Error(\n `Your podModulePrefix (${this.options.podModulePrefix}) does not start with your app module prefix (${this.options.modulePrefix}). Not gonna support that silliness.`\n );\n }\n return this.options.podModulePrefix.slice(this.options.modulePrefix.length);\n }\n }\n\n // for paths that come from non-strict templates\n private parseGlobalPath(path: string, inEngine: EngineConfig) {\n let parts = path.split('@');\n if (parts.length > 1 && parts[0].length > 0) {\n return { packageName: parts[0], memberName: parts[1], from: resolve(inEngine.root, 'pacakge.json') };\n } else {\n return { packageName: inEngine.packageName, memberName: path, from: resolve(inEngine.root, 'pacakge.json') };\n }\n }\n\n owningEngine(pkg: Package) {\n if (pkg.root === this.options.appRoot) {\n // the app is always the first engine\n return this.options.engines[0];\n }\n let owningEngine = this.options.engines.find(e => e.activeAddons.find(a => a.root === pkg.root));\n if (!owningEngine) {\n throw new Error(\n `bug in @embroider/core/src/module-resolver: cannot figure out the owning engine for ${pkg.root}`\n );\n }\n return owningEngine;\n }\n\n private handleRenaming<R extends ModuleRequest>(request: R): R {\n if (request.isVirtual) {\n return request;\n }\n let packageName = getPackageName(request.specifier);\n if (!packageName) {\n return request;\n }\n\n for (let [candidate, replacement] of Object.entries(this.options.renameModules)) {\n if (candidate === request.specifier) {\n return logTransition(`renameModules`, request, request.alias(replacement));\n }\n for (let extension of this.options.resolvableExtensions) {\n if (candidate === request.specifier + '/index' + extension) {\n return logTransition(`renameModules`, request, request.alias(replacement));\n }\n if (candidate === request.specifier + extension) {\n return logTransition(`renameModules`, request, request.alias(replacement));\n }\n }\n }\n\n if (this.options.renamePackages[packageName]) {\n return logTransition(\n `renamePackages`,\n request,\n request.alias(request.specifier.replace(packageName, this.options.renamePackages[packageName]))\n );\n }\n\n let pkg = this.owningPackage(request.fromFile);\n if (!pkg || !pkg.isV2Ember()) {\n return request;\n }\n\n if (pkg.meta['auto-upgraded'] && pkg.name === packageName) {\n // we found a self-import, resolve it for them. Only auto-upgraded\n // packages get this help, v2 packages are natively supposed to make their\n // own modules resolvable, and we want to push them all to do that\n // correctly.\n return logTransition(`v1 self-import`, request, this.resolveWithinPackage(request, pkg));\n }\n\n let originalPkg = this.originalPackage(request.fromFile);\n if (originalPkg && pkg.meta['auto-upgraded'] && originalPkg.name === packageName) {\n // A file that was relocated out of a package is importing that package's\n // name, it should find its own original copy.\n return logTransition(`self-import in app-js`, request, this.resolveWithinPackage(request, originalPkg));\n }\n\n return request;\n }\n\n private resolveWithinPackage<R extends ModuleRequest>(request: R, pkg: Package): R {\n if ('exports' in pkg.packageJSON) {\n // this is the easy case -- a package that uses exports can safely resolve\n // its own name, so it's enough to let it resolve the (self-targeting)\n // specifier from its own package root.\n return request.rehome(resolve(pkg.root, 'package.json'));\n } else {\n // otherwise we need to just assume that internal naming is simple\n return request.alias(request.specifier.replace(pkg.name, '.')).rehome(resolve(pkg.root, 'package.json'));\n }\n }\n\n private preHandleExternal<R extends ModuleRequest>(request: R): R {\n if (request.isVirtual) {\n return request;\n }\n let { specifier, fromFile } = request;\n let pkg = this.owningPackage(fromFile);\n if (!pkg || !pkg.isV2Ember()) {\n return request;\n }\n\n let packageName = getPackageName(specifier);\n if (!packageName) {\n // This is a relative import. We don't automatically externalize those\n // because it's rare, and by keeping them static we give better errors. But\n // we do allow them to be explicitly externalized by the package author (or\n // a compat adapter). In the metadata, they would be listed in\n // package-relative form, so we need to convert this specifier to that.\n let absoluteSpecifier = resolve(dirname(fromFile), specifier);\n let packageRelativeSpecifier = explicitRelative(pkg.root, absoluteSpecifier);\n if (isExplicitlyExternal(packageRelativeSpecifier, pkg)) {\n let publicSpecifier = absoluteSpecifier.replace(pkg.root, pkg.name);\n return external('beforeResolve', request, publicSpecifier);\n } else {\n return request;\n }\n }\n\n // absolute package imports can also be explicitly external based on their\n // full specifier name\n if (isExplicitlyExternal(specifier, pkg)) {\n return external('beforeResolve', request, specifier);\n }\n\n if (!pkg.meta['auto-upgraded'] && emberVirtualPeerDeps.has(packageName)) {\n // Native v2 addons are allowed to use the emberVirtualPeerDeps like\n // `@glimmer/component`. And like all v2 addons, it's important that they\n // see those dependencies after those dependencies have been converted to\n // v2.\n //\n // But unlike auto-upgraded addons, native v2 addons are not necessarily\n // copied out of their original place in node_modules. And from that\n // original place they might accidentally resolve the emberVirtualPeerDeps\n // that are present there in v1 format.\n //\n // So before we let normal resolving happen, we adjust these imports to\n // point at the app's copies instead.\n if (!this.options.activeAddons[packageName]) {\n throw new Error(`${pkg.name} is trying to import the app's ${packageName} package, but it seems to be missing`);\n }\n let newHome = resolve(this.options.appRoot, 'package.json');\n return logTransition(`emberVirtualPeerDeps in v2 addon`, request, request.rehome(newHome));\n }\n\n if (pkg.meta['auto-upgraded'] && !pkg.hasDependency('ember-auto-import')) {\n try {\n let dep = PackageCache.shared('embroider-stage3', this.options.appRoot).resolve(packageName, pkg);\n if (!dep.isEmberPackage()) {\n // classic ember addons can only import non-ember dependencies if they\n // have ember-auto-import.\n return external('v1 package without auto-import', request, specifier);\n }\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n }\n }\n\n // assertions on what native v2 addons can import\n if (!pkg.meta['auto-upgraded']) {\n let originalPkg = this.originalPackage(fromFile);\n if (originalPkg) {\n // this file has been moved into another package (presumably the app).\n if (packageName !== pkg.name) {\n // the only thing that native v2 addons are allowed to import from\n // within the app tree is their own name.\n throw new Error(\n `${pkg.name} is trying to import ${packageName} from within its app tree. This is unsafe, because ${pkg.name} can't control which dependencies are resolvable from the app`\n );\n }\n } else {\n // this file has not been moved. The normal case.\n if (!pkg.meta['auto-upgraded'] && !reliablyResolvable(pkg, packageName)) {\n throw new Error(\n `${pkg.name} is trying to import from ${packageName} but that is not one of its explicit dependencies`\n );\n }\n }\n }\n return request;\n }\n\n fallbackResolve<R extends ModuleRequest>(request: R): R {\n let { specifier, fromFile } = request;\n\n if (compatPattern.test(specifier)) {\n // Some kinds of compat requests get rewritten into other things\n // deterministically. For example, \"#embroider_compat/helpers/whatever\"\n // means only \"the-current-engine/helpers/whatever\", and if that doesn't\n // actually exist it's that path that will show up as a missing import.\n //\n // But others have an ambiguous meaning. For example,\n // #embroider_compat/components/whatever can mean several different\n // things. If we're unable to find any of them, the actual\n // \"#embroider_compat\" request will fall through all the way to here.\n //\n // In that case, we don't want to externalize that failure. We know it's\n // not a classic runtime thing. It's better to let it be a build error\n // here.\n return request;\n }\n\n let pkg = this.owningPackage(fromFile);\n if (!pkg || !pkg.isV2Ember()) {\n return request;\n }\n\n let packageName = getPackageName(specifier);\n if (!packageName) {\n // this is a relative import, we have nothing more to for it.\n return request;\n }\n\n let originalPkg = this.originalPackage(fromFile);\n if (originalPkg) {\n // we didn't find it from the original package, so try from the relocated\n // package\n return logTransition(`relocation fallback`, request, request.rehome(resolve(originalPkg.root, 'package.json')));\n }\n\n // auto-upgraded packages can fall back to the set of known active addons\n //\n // v2 packages can fall back to the set of known active addons only to find\n // themselves (which is needed due to app tree merging)\n if ((pkg.meta['auto-upgraded'] || packageName === pkg.name) && this.options.activeAddons[packageName]) {\n return logTransition(\n `activeAddons`,\n request,\n this.resolveWithinPackage(\n request,\n PackageCache.shared('embroider-stage3', this.options.appRoot).get(this.options.activeAddons[packageName])\n )\n );\n }\n\n if (pkg.meta['auto-upgraded']) {\n // auto-upgraded packages can fall back to attempting to find dependencies at\n // runtime. Native v2 packages can only get this behavior in the\n // isExplicitlyExternal case above because they need to explicitly ask for\n // externals.\n return external('v1 catch-all fallback', request, specifier);\n } else {\n // native v2 packages don't automatically externalize *everything* the way\n // auto-upgraded packages do, but they still externalize known and approved\n // ember virtual packages (like @ember/component)\n if (emberVirtualPackages.has(packageName)) {\n return external('emberVirtualPackages', request, specifier);\n }\n }\n\n // this is falling through with the original specifier which was\n // non-resolvable, which will presumably cause a static build error in stage3.\n return request;\n }\n\n // check whether the given file with the given owningPackage is an addon's\n // appTree, and if so return the notional location within the app (or owning\n // engine) that it \"logically\" lives at.\n private reverseSearchAppTree(owningPackage: Package, fromFile: string) {\n // if the requesting file is in an addon's app-js, the request should\n // really be understood as a request for a module in the containing engine\n if (owningPackage.isV2Addon()) {\n let appJS = owningPackage.meta['app-js'];\n if (appJS) {\n let fromPackageRelativePath = explicitRelative(owningPackage.root, fromFile);\n for (let [inAppName, inAddonName] of Object.entries(appJS)) {\n if (inAddonName === fromPackageRelativePath) {\n return { owningEngine: this.owningEngine(owningPackage), inAppName };\n }\n }\n }\n }\n }\n\n // check if this file is resolvable as a global component, and if so return\n // its dasherized name\n reverseComponentLookup(filename: string): string | undefined {\n const owningPackage = this.owningPackage(filename);\n if (!owningPackage?.isV2Ember()) {\n return;\n }\n let engineConfig = this.options.engines.find(e => e.root === owningPackage.root);\n if (engineConfig) {\n // we're directly inside an engine, so we're potentially resolvable as a\n // global component\n\n // this kind of mapping is not true in general for all packages, but it\n // *is* true for all classical engines (which includes apps) since they\n // don't support package.json `exports`. As for a future v2 engine or app:\n // this whole method is only relevant for implementing packageRules, which\n // should only be for classic stuff. v2 packages should do the right\n // things from the beginning and not need packageRules about themselves.\n let inAppName = explicitRelative(engineConfig.root, filename);\n\n return this.tryReverseComponent(engineConfig.packageName, inAppName);\n }\n\n let engineInfo = this.reverseSearchAppTree(owningPackage, filename);\n if (engineInfo) {\n // we're in some addon's app tree, so we're potentially resolvable as a\n // global component\n return this.tryReverseComponent(engineInfo.owningEngine.packageName, engineInfo.inAppName);\n }\n }\n\n private tryReverseComponent(inEngineName: string, relativePath: string): string | undefined {\n let extensionless = relativePath.replace(extensionsPattern(this.options.resolvableExtensions), '');\n let candidates = [...this.componentJSCandidates(inEngineName), ...this.componentTemplateCandidates(inEngineName)];\n for (let candidate of candidates) {\n if (extensionless.startsWith(`.${candidate.prefix}`) && extensionless.endsWith(candidate.suffix)) {\n return extensionless.slice(candidate.prefix.length + 1, extensionless.length - candidate.suffix.length);\n }\n }\n return undefined;\n }\n}\n\nfunction isExplicitlyExternal(specifier: string, fromPkg: V2Package): boolean {\n return Boolean(fromPkg.isV2Addon() && fromPkg.meta['externals'] && fromPkg.meta['externals'].includes(specifier));\n}\n\n// we don't want to allow things that resolve only by accident that are likely\n// to break in other setups. For example: import your dependencies'\n// dependencies, or importing your own name from within a monorepo (which will\n// work because of the symlinking) without setting up \"exports\" (which makes\n// your own name reliably resolvable)\nfunction reliablyResolvable(pkg: V2Package, packageName: string) {\n if (pkg.hasDependency(packageName)) {\n return true;\n }\n\n if (pkg.name === packageName && pkg.packageJSON.exports) {\n return true;\n }\n\n if (emberVirtualPeerDeps.has(packageName) || emberVirtualPackages.has(packageName)) {\n return true;\n }\n\n return false;\n}\n\nfunction external<R extends ModuleRequest>(label: string, request: R, specifier: string): R {\n let filename = virtualExternalModule(specifier);\n return logTransition(label, request, request.virtualize(filename));\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export declare function virtualContent(filename: string): string;
2
+ export declare function virtualExternalModule(specifier: string): string;
3
+ export declare function virtualPairComponent(hbsModule: string, jsModule: string | null): string;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.virtualPairComponent = exports.virtualExternalModule = exports.virtualContent = void 0;
4
+ const path_1 = require("path");
5
+ const _1 = require(".");
6
+ const js_handlebars_1 = require("./js-handlebars");
7
+ const externalPrefix = '/@embroider/external/';
8
+ // Given a filename that was passed to your ModuleRequest's `virtualize()`,
9
+ // this produces the corresponding contents. It's a static, stateless function
10
+ // because we recognize that that process that did resolution might not be the
11
+ // same one that loads the content.
12
+ function virtualContent(filename) {
13
+ if (filename.startsWith(externalPrefix)) {
14
+ return externalShim({ moduleName: filename.slice(externalPrefix.length) });
15
+ }
16
+ let match = decodeVirtualPairComponent(filename);
17
+ if (match) {
18
+ return pairedComponentShim(match);
19
+ }
20
+ throw new Error(`not an @embroider/core virtual file: ${filename}`);
21
+ }
22
+ exports.virtualContent = virtualContent;
23
+ const externalShim = (0, js_handlebars_1.compile)(`
24
+ {{#if (eq moduleName "require")}}
25
+ const m = window.requirejs;
26
+ {{else}}
27
+ const m = window.require("{{{js-string-escape moduleName}}}");
28
+ {{/if}}
29
+ {{!-
30
+ There are plenty of hand-written AMD defines floating around
31
+ that lack this, and they will break when other build systems
32
+ encounter them.
33
+
34
+ As far as I can tell, Ember's loader was already treating this
35
+ case as a module, so in theory we aren't breaking anything by
36
+ marking it as such when other packagers come looking.
37
+
38
+ todo: get review on this part.
39
+ -}}
40
+ if (m.default && !m.__esModule) {
41
+ m.__esModule = true;
42
+ }
43
+ module.exports = m;
44
+ `);
45
+ const pairedComponentShim = (0, js_handlebars_1.compile)(`
46
+ import { setComponentTemplate } from "@ember/component";
47
+ import template from "{{{js-string-escape relativeHBSModule}}}";
48
+ {{#if relativeJSModule}}
49
+ import component from "{{{js-string-escape relativeJSModule}}}";
50
+ export default setComponentTemplate(template, component);
51
+ {{else}}
52
+ import templateOnlyComponent from "@ember/component/template-only";
53
+ export default setComponentTemplate(template, templateOnlyComponent(undefined, "{{{js-string-escape debugName}}}"));
54
+ {{/if}}
55
+ `);
56
+ function virtualExternalModule(specifier) {
57
+ return externalPrefix + specifier;
58
+ }
59
+ exports.virtualExternalModule = virtualExternalModule;
60
+ const pairComponentMarker = '/embroider-pair-component';
61
+ const pairComponentPattern = /^(?<hbsModule>.*)\/(?<jsModule>[^\/]*)\/embroider-pair-component$/;
62
+ function virtualPairComponent(hbsModule, jsModule) {
63
+ let relativeJSModule = '';
64
+ if (jsModule) {
65
+ // The '/j/' here represents the relativeJSModule itself that we're about to
66
+ // use to create the complete filename. It's there to get the right number
67
+ // of `..` in our relative path.
68
+ relativeJSModule = (0, _1.explicitRelative)(hbsModule + '/j/', jsModule);
69
+ }
70
+ return `${hbsModule}/${encodeURIComponent(relativeJSModule)}${pairComponentMarker}`;
71
+ }
72
+ exports.virtualPairComponent = virtualPairComponent;
73
+ function decodeVirtualPairComponent(filename) {
74
+ let match = pairComponentPattern.exec(filename);
75
+ if (!match) {
76
+ return null;
77
+ }
78
+ let { hbsModule, jsModule } = match.groups;
79
+ // target our real hbs module from our virtual module
80
+ let relativeHBSModule = (0, _1.explicitRelative)((0, path_1.dirname)(filename), hbsModule);
81
+ return {
82
+ relativeHBSModule,
83
+ relativeJSModule: decodeURIComponent(jsModule) || null,
84
+ debugName: (0, path_1.basename)(relativeHBSModule).replace(/\.(js|hbs)$/, ''),
85
+ };
86
+ }
87
+ //# sourceMappingURL=virtual-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-content.js","sourceRoot":"","sources":["virtual-content.ts"],"names":[],"mappings":";;;AAAA,+BAAyC;AACzC,wBAAqC;AACrC,mDAA0C;AAE1C,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAE/C,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,mCAAmC;AACnC,SAAgB,cAAc,CAAC,QAAgB;IAC7C,IAAI,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;QACvC,OAAO,YAAY,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KAC5E;IACD,IAAI,KAAK,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,KAAK,EAAE;QACT,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;KACnC;IACD,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;AACtE,CAAC;AATD,wCASC;AAED,MAAM,YAAY,GAAG,IAAA,uBAAO,EAAC;;;;;;;;;;;;;;;;;;;;;CAqB5B,CAA+C,CAAC;AAEjD,MAAM,mBAAmB,GAAG,IAAA,uBAAO,EAAC;;;;;;;;;;CAUnC,CAA0G,CAAC;AAE5G,SAAgB,qBAAqB,CAAC,SAAiB;IACrD,OAAO,cAAc,GAAG,SAAS,CAAC;AACpC,CAAC;AAFD,sDAEC;AAED,MAAM,mBAAmB,GAAG,2BAA2B,CAAC;AACxD,MAAM,oBAAoB,GAAG,mEAAmE,CAAC;AAEjG,SAAgB,oBAAoB,CAAC,SAAiB,EAAE,QAAuB;IAC7E,IAAI,gBAAgB,GAAG,EAAE,CAAC;IAC1B,IAAI,QAAQ,EAAE;QACZ,4EAA4E;QAC5E,0EAA0E;QAC1E,gCAAgC;QAChC,gBAAgB,GAAG,IAAA,mBAAgB,EAAC,SAAS,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC;KAClE;IACD,OAAO,GAAG,SAAS,IAAI,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,mBAAmB,EAAE,CAAC;AACtF,CAAC;AATD,oDASC;AAED,SAAS,0BAA0B,CACjC,QAAgB;IAEhB,IAAI,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,IAAI,CAAC;KACb;IACD,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,MAAkD,CAAC;IACvF,qDAAqD;IACrD,IAAI,iBAAiB,GAAG,IAAA,mBAAgB,EAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;IACvE,OAAO;QACL,iBAAiB;QACjB,gBAAgB,EAAE,kBAAkB,CAAC,QAAQ,CAAC,IAAI,IAAI;QACtD,SAAS,EAAE,IAAA,eAAQ,EAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;KAClE,CAAC;AACJ,CAAC","sourcesContent":["import { dirname, basename } from 'path';\nimport { explicitRelative } from '.';\nimport { compile } from './js-handlebars';\n\nconst externalPrefix = '/@embroider/external/';\n\n// Given a filename that was passed to your ModuleRequest's `virtualize()`,\n// this produces the corresponding contents. It's a static, stateless function\n// because we recognize that that process that did resolution might not be the\n// same one that loads the content.\nexport function virtualContent(filename: string): string {\n if (filename.startsWith(externalPrefix)) {\n return externalShim({ moduleName: filename.slice(externalPrefix.length) });\n }\n let match = decodeVirtualPairComponent(filename);\n if (match) {\n return pairedComponentShim(match);\n }\n throw new Error(`not an @embroider/core virtual file: ${filename}`);\n}\n\nconst externalShim = compile(`\n{{#if (eq moduleName \"require\")}}\nconst m = window.requirejs;\n{{else}}\nconst m = window.require(\"{{{js-string-escape moduleName}}}\");\n{{/if}}\n{{!-\n There are plenty of hand-written AMD defines floating around\n that lack this, and they will break when other build systems\n encounter them.\n\n As far as I can tell, Ember's loader was already treating this\n case as a module, so in theory we aren't breaking anything by\n marking it as such when other packagers come looking.\n\n todo: get review on this part.\n-}}\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n`) as (params: { moduleName: string }) => string;\n\nconst pairedComponentShim = compile(`\nimport { setComponentTemplate } from \"@ember/component\";\nimport template from \"{{{js-string-escape relativeHBSModule}}}\";\n{{#if relativeJSModule}}\nimport component from \"{{{js-string-escape relativeJSModule}}}\";\nexport default setComponentTemplate(template, component);\n{{else}}\nimport templateOnlyComponent from \"@ember/component/template-only\";\nexport default setComponentTemplate(template, templateOnlyComponent(undefined, \"{{{js-string-escape debugName}}}\"));\n{{/if}}\n`) as (params: { relativeHBSModule: string; relativeJSModule: string | null; debugName: string }) => string;\n\nexport function virtualExternalModule(specifier: string): string {\n return externalPrefix + specifier;\n}\n\nconst pairComponentMarker = '/embroider-pair-component';\nconst pairComponentPattern = /^(?<hbsModule>.*)\\/(?<jsModule>[^\\/]*)\\/embroider-pair-component$/;\n\nexport function virtualPairComponent(hbsModule: string, jsModule: string | null): string {\n let relativeJSModule = '';\n if (jsModule) {\n // The '/j/' here represents the relativeJSModule itself that we're about to\n // use to create the complete filename. It's there to get the right number\n // of `..` in our relative path.\n relativeJSModule = explicitRelative(hbsModule + '/j/', jsModule);\n }\n return `${hbsModule}/${encodeURIComponent(relativeJSModule)}${pairComponentMarker}`;\n}\n\nfunction decodeVirtualPairComponent(\n filename: string\n): { relativeHBSModule: string; relativeJSModule: string | null; debugName: string } | null {\n let match = pairComponentPattern.exec(filename);\n if (!match) {\n return null;\n }\n let { hbsModule, jsModule } = match.groups! as { hbsModule: string; jsModule: string };\n // target our real hbs module from our virtual module\n let relativeHBSModule = explicitRelative(dirname(filename), hbsModule);\n return {\n relativeHBSModule,\n relativeJSModule: decodeURIComponent(jsModule) || null,\n debugName: basename(relativeHBSModule).replace(/\\.(js|hbs)$/, ''),\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"wait-for-trees.js","sourceRoot":"","sources":["wait-for-trees.ts"],"names":[],"mappings":"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","sourcesContent":["import BroccoliPlugin from 'broccoli-plugin';\nimport { Node } from 'broccoli-node-api';\n\n/*\n Takes some named broccoli trees and/or lists of broccoli trees and gives you\n the resulting inputPaths once those trees are built. Example:\n\n import { Node } from 'broccoli-node-api';;\n\n interface MyInputs<T> {\n codeFromMyApp: T,\n codeFromMyAddons: T[]\n }\n\n function(trees: MyInputs<Node>): Node {\n return WaitForTrees(trees, build);\n }\n\n async function build(paths: MyInputs<string>) {\n // paths.someTree is a string\n // paths.otherTrees is a string[]\n }\n\n*/\nexport default class WaitForTrees<NamedTrees> extends BroccoliPlugin {\n constructor(\n private trees: NamedTrees,\n annotation: string,\n private buildHook: (trees: OutputPaths<NamedTrees>, changed: Map<string, boolean>) => Promise<void>\n ) {\n super(flatTrees(trees), {\n persistentOutput: true,\n needsCache: false,\n annotation: annotation,\n trackInputChanges: true,\n });\n }\n\n async build(detail?: { changedNodes: boolean[] }) {\n let result: { [treeName: string]: string | string[] } = {};\n let changedMap = new Map();\n\n let inputPathCounter = 0;\n for (let entry of findTrees(this.trees)) {\n if (entry.single) {\n result[entry.name] = this.inputPaths[inputPathCounter];\n let didChange = detail ? detail.changedNodes[inputPathCounter] : true;\n changedMap.set(this.inputPaths[inputPathCounter], didChange);\n inputPathCounter += 1;\n } else if (entry.multi) {\n let sliced = this.inputPaths.slice(inputPathCounter, inputPathCounter + entry.multi.length);\n\n result[entry.name] = sliced.map(slice => {\n let didChange = detail ? detail.changedNodes[inputPathCounter] : true;\n changedMap.set(slice, didChange);\n inputPathCounter++;\n return slice;\n });\n }\n }\n return this.buildHook(result as unknown as OutputPaths<NamedTrees>, changedMap);\n }\n}\n\nexport type OutputPaths<NamedTrees> = {\n [P in keyof NamedTrees]: NamedTrees[P] extends Node ? string : NamedTrees[P] extends Node[] ? string[] : never;\n};\n\nfunction isTree(x: any): x is Node {\n return x && typeof x.__broccoliGetInfo__ === 'function';\n}\n\nfunction* findTrees<NamedTrees>(trees: NamedTrees): IterableIterator<{ name: string; single?: Node; multi?: Node[] }> {\n for (let [name, value] of Object.entries(trees)) {\n if (Array.isArray(value)) {\n let stringTrees = value.filter(t => typeof t === 'string');\n if (stringTrees.length > 0) {\n throw new Error(`found strings instead of broccoli trees for ${name}: ${value}`);\n }\n yield { name, multi: value.filter(isTree) };\n } else if (isTree(value)) {\n yield { name, single: value };\n } else if (typeof value === 'string') {\n throw new Error(`found a string when we expected a broccoli tree for ${name}: ${value}`);\n }\n }\n}\n\nfunction flatTrees<NamedTrees>(trees: NamedTrees) {\n let output: Node[] = [];\n for (let value of findTrees(trees)) {\n if (value.multi) {\n output = output.concat(value.multi);\n } else if (value.single) {\n output.push(value.single);\n }\n }\n return output;\n}\n"]}
1
+ {"version":3,"file":"wait-for-trees.js","sourceRoot":"","sources":["wait-for-trees.ts"],"names":[],"mappings":"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","sourcesContent":["import BroccoliPlugin from 'broccoli-plugin';\nimport { Node } from 'broccoli-node-api';\n\n/*\n Takes some named broccoli trees and/or lists of broccoli trees and gives you\n the resulting inputPaths once those trees are built. Example:\n\n import { Node } from 'broccoli-node-api';;\n\n interface MyInputs<T> {\n codeFromMyApp: T,\n codeFromMyAddons: T[]\n }\n\n function(trees: MyInputs<Node>): Node {\n return WaitForTrees(trees, build);\n }\n\n async function build(paths: MyInputs<string>) {\n // paths.someTree is a string\n // paths.otherTrees is a string[]\n }\n\n*/\nexport default class WaitForTrees<NamedTrees> extends BroccoliPlugin {\n constructor(\n private trees: NamedTrees,\n annotation: string,\n private buildHook: (trees: OutputPaths<NamedTrees>, changed: Map<string, boolean>) => Promise<void>\n ) {\n super(flatTrees(trees), {\n persistentOutput: true,\n needsCache: false,\n annotation: annotation,\n trackInputChanges: true,\n });\n }\n\n async build(detail?: { changedNodes: boolean[] }) {\n let result: { [treeName: string]: string | string[] } = {};\n let changedMap = new Map();\n\n let inputPathCounter = 0;\n for (let entry of findTrees(this.trees)) {\n if (entry.single) {\n result[entry.name] = this.inputPaths[inputPathCounter];\n let didChange = detail ? detail.changedNodes[inputPathCounter] : true;\n changedMap.set(this.inputPaths[inputPathCounter], didChange);\n inputPathCounter += 1;\n } else if (entry.multi) {\n let sliced = this.inputPaths.slice(inputPathCounter, inputPathCounter + entry.multi.length);\n\n result[entry.name] = sliced.map(slice => {\n let didChange = detail ? detail.changedNodes[inputPathCounter] : true;\n changedMap.set(slice, didChange);\n inputPathCounter++;\n return slice;\n });\n }\n }\n return this.buildHook(result as unknown as OutputPaths<NamedTrees>, changedMap);\n }\n}\n\nexport type OutputPaths<NamedTrees> = {\n [P in keyof NamedTrees]: NamedTrees[P] extends Node ? string : NamedTrees[P] extends Node[] ? string[] : never;\n};\n\nfunction isTree(x: any): x is Node {\n return x && typeof x.__broccoliGetInfo__ === 'function';\n}\n\nfunction* findTrees<NamedTrees>(trees: NamedTrees): IterableIterator<{ name: string; single?: Node; multi?: Node[] }> {\n for (let [name, value] of Object.entries(trees as Record<string, unknown>)) {\n if (Array.isArray(value)) {\n let stringTrees = value.filter(t => typeof t === 'string');\n if (stringTrees.length > 0) {\n throw new Error(`found strings instead of broccoli trees for ${name}: ${value}`);\n }\n yield { name, multi: value.filter(isTree) };\n } else if (isTree(value)) {\n yield { name, single: value };\n } else if (typeof value === 'string') {\n throw new Error(`found a string when we expected a broccoli tree for ${name}: ${value}`);\n }\n }\n}\n\nfunction flatTrees<NamedTrees>(trees: NamedTrees) {\n let output: Node[] = [];\n for (let value of findTrees(trees)) {\n if (value.multi) {\n output = output.concat(value.multi);\n } else if (value.single) {\n output.push(value.single);\n }\n }\n return output;\n}\n"]}
@@ -1,31 +0,0 @@
1
- import type { NodePath } from '@babel/traverse';
2
- import type * as Babel from '@babel/core';
3
- import type { types as t } from '@babel/core';
4
- import { Options, Resolver } from './module-resolver';
5
- interface State {
6
- resolver: Resolver;
7
- opts: Options | DeflatedOptions;
8
- }
9
- export { Options };
10
- export interface DeflatedOptions {
11
- adjustImportsOptionsPath: string;
12
- relocatedFilesPath: string;
13
- }
14
- declare type BabelTypes = typeof t;
15
- declare type DefineExpressionPath = NodePath<t.CallExpression> & {
16
- node: t.CallExpression & {
17
- arguments: [t.StringLiteral, t.ArrayExpression, Function];
18
- };
19
- };
20
- export declare function isImportSyncExpression(t: BabelTypes, path: NodePath<any>): boolean;
21
- export declare function isDynamicImportExpression(t: BabelTypes, path: NodePath<any>): boolean;
22
- export declare function isDefineExpression(t: BabelTypes, path: NodePath<any>): path is DefineExpressionPath;
23
- export default function main(babel: typeof Babel): {
24
- visitor: {
25
- Program: {
26
- enter(path: NodePath<Babel.types.Program>, state: State): void;
27
- exit(path: NodePath<Babel.types.Program>, state: State): void;
28
- };
29
- CallExpression(path: NodePath<Babel.types.CallExpression>, state: State): void;
30
- };
31
- };
@@ -1,224 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isDefineExpression = exports.isDynamicImportExpression = exports.isImportSyncExpression = void 0;
7
- const path_1 = require("path");
8
- const babel_import_util_1 = require("babel-import-util");
9
- const crypto_1 = require("crypto");
10
- const fs_extra_1 = require("fs-extra");
11
- const shared_internals_1 = require("@embroider/shared-internals");
12
- const js_handlebars_1 = require("./js-handlebars");
13
- const module_resolver_1 = require("./module-resolver");
14
- const assert_never_1 = __importDefault(require("assert-never"));
15
- function isImportSyncExpression(t, path) {
16
- if (!path ||
17
- !path.isCallExpression() ||
18
- path.node.callee.type !== 'Identifier' ||
19
- !path.get('callee').referencesImport('@embroider/macros', 'importSync')) {
20
- return false;
21
- }
22
- const args = path.node.arguments;
23
- return Array.isArray(args) && args.length === 1 && t.isStringLiteral(args[0]);
24
- }
25
- exports.isImportSyncExpression = isImportSyncExpression;
26
- function isDynamicImportExpression(t, path) {
27
- if (!path || !path.isCallExpression() || path.node.callee.type !== 'Import') {
28
- return false;
29
- }
30
- const args = path.node.arguments;
31
- return Array.isArray(args) && args.length === 1 && t.isStringLiteral(args[0]);
32
- }
33
- exports.isDynamicImportExpression = isDynamicImportExpression;
34
- function isDefineExpression(t, path) {
35
- // should we allow nested defines, or stop at the top level?
36
- if (!path.isCallExpression() || path.node.callee.type !== 'Identifier' || path.node.callee.name !== 'define') {
37
- return false;
38
- }
39
- const args = path.node.arguments;
40
- // only match define with 3 arguments define(name: string, deps: string[], cb: Function);
41
- return (Array.isArray(args) &&
42
- args.length === 3 &&
43
- t.isStringLiteral(args[0]) &&
44
- t.isArrayExpression(args[1]) &&
45
- t.isFunction(args[2]));
46
- }
47
- exports.isDefineExpression = isDefineExpression;
48
- function main(babel) {
49
- let t = babel.types;
50
- return {
51
- visitor: {
52
- Program: {
53
- enter(path, state) {
54
- let opts = ensureOpts(state);
55
- state.resolver = new module_resolver_1.Resolver(path.hub.file.opts.filename, opts);
56
- let adder = new babel_import_util_1.ImportUtil(t, path);
57
- addExtraImports(adder, t, path, opts.extraImports);
58
- },
59
- exit(path, state) {
60
- for (let child of path.get('body')) {
61
- if (child.isImportDeclaration() || child.isExportNamedDeclaration() || child.isExportAllDeclaration()) {
62
- rewriteTopLevelImport(child, state);
63
- }
64
- }
65
- },
66
- },
67
- CallExpression(path, state) {
68
- if (isImportSyncExpression(t, path) || isDynamicImportExpression(t, path)) {
69
- const [source] = path.get('arguments');
70
- resolve(source.node.value, true, state, newSpecifier => {
71
- source.replaceWith(t.stringLiteral(newSpecifier));
72
- });
73
- return;
74
- }
75
- // Should/can we make this early exit when the first define was found?
76
- if (!isDefineExpression(t, path)) {
77
- return;
78
- }
79
- let pkg = state.resolver.owningPackage();
80
- if (pkg && pkg.isV2Ember() && !pkg.meta['auto-upgraded']) {
81
- throw new Error(`The file ${state.resolver.originalFilename} in package ${pkg.name} tried to use AMD define. Native V2 Ember addons are forbidden from using AMD define, they must use ECMA export only.`);
82
- }
83
- const dependencies = path.node.arguments[1];
84
- const specifiers = dependencies.elements.slice();
85
- specifiers.push(path.node.arguments[0]);
86
- for (const source of specifiers) {
87
- if (!source) {
88
- continue;
89
- }
90
- if (source.type !== 'StringLiteral') {
91
- throw path.buildCodeFrameError(`expected only string literal arguments`);
92
- }
93
- if (source.value === 'exports' || source.value === 'require') {
94
- // skip "special" AMD dependencies
95
- continue;
96
- }
97
- resolve(source.value, false, state, newSpecifier => {
98
- source.value = newSpecifier;
99
- });
100
- }
101
- },
102
- },
103
- };
104
- }
105
- exports.default = main;
106
- function rewriteTopLevelImport(path, state) {
107
- const { source } = path.node;
108
- if (source === null || source === undefined) {
109
- return;
110
- }
111
- resolve(source.value, false, state, newSpecifier => {
112
- source.value = newSpecifier;
113
- });
114
- }
115
- main.baseDir = function () {
116
- return (0, path_1.join)(__dirname, '..');
117
- };
118
- function addExtraImports(adder, t, path, extraImports) {
119
- for (let { absPath, target, runtimeName } of extraImports) {
120
- if (absPath === path.hub.file.opts.filename) {
121
- if (runtimeName) {
122
- path.node.body.unshift(amdDefine(t, adder, path, target, runtimeName));
123
- }
124
- else {
125
- adder.importForSideEffect(target);
126
- }
127
- }
128
- }
129
- }
130
- function amdDefine(t, adder, path, target, runtimeName) {
131
- let value = t.callExpression(adder.import(path, '@embroider/macros', 'importSync'), [t.stringLiteral(target)]);
132
- return t.expressionStatement(t.callExpression(t.memberExpression(t.identifier('window'), t.identifier('define')), [
133
- t.stringLiteral(runtimeName),
134
- t.functionExpression(null, [], t.blockStatement([t.returnStatement(value)])),
135
- ]));
136
- }
137
- function ensureOpts(state) {
138
- let { opts } = state;
139
- if ('adjustImportsOptionsPath' in opts) {
140
- // eslint-disable-next-line @typescript-eslint/no-require-imports
141
- return (state.opts = { ...require(opts.adjustImportsOptionsPath), ...require(opts.relocatedFilesPath) });
142
- }
143
- return opts;
144
- }
145
- function makeExternal(specifier, sourceFile, opts) {
146
- let target = (0, path_1.join)(opts.externalsDir, specifier + '.js');
147
- atomicWrite(target, externalTemplate({
148
- runtimeName: specifier,
149
- }));
150
- return (0, shared_internals_1.explicitRelative)((0, path_1.dirname)(sourceFile), target.slice(0, -3));
151
- }
152
- function atomicWrite(path, content) {
153
- if ((0, fs_extra_1.pathExistsSync)(path)) {
154
- return;
155
- }
156
- let suffix = (0, crypto_1.randomBytes)(8).toString('hex');
157
- (0, fs_extra_1.outputFileSync)(path + suffix, content);
158
- try {
159
- (0, fs_extra_1.renameSync)(path + suffix, path);
160
- }
161
- catch (err) {
162
- // windows throws EPERM for concurrent access. For us it's not an error
163
- // condition because the other thread is writing the exact same value we
164
- // would have.
165
- if (err.code !== 'EPERM') {
166
- throw err;
167
- }
168
- }
169
- }
170
- function makeMissingModule(specifier, sourceFile, opts) {
171
- let target = (0, path_1.join)(opts.externalsDir, 'missing', specifier + '.js');
172
- atomicWrite(target, dynamicMissingModule({
173
- moduleName: specifier,
174
- }));
175
- return (0, shared_internals_1.explicitRelative)((0, path_1.dirname)(sourceFile), target.slice(0, -3));
176
- }
177
- const dynamicMissingModule = (0, js_handlebars_1.compile)(`
178
- throw new Error('Could not find module \`{{{js-string-escape moduleName}}}\`');
179
- `);
180
- const externalTemplate = (0, js_handlebars_1.compile)(`
181
- {{#if (eq runtimeName "require")}}
182
- const m = window.requirejs;
183
- {{else}}
184
- const m = window.require("{{{js-string-escape runtimeName}}}");
185
- {{/if}}
186
- {{!-
187
- There are plenty of hand-written AMD defines floating around
188
- that lack this, and they will break when other build systems
189
- encounter them.
190
-
191
- As far as I can tell, Ember's loader was already treating this
192
- case as a module, so in theory we aren't breaking anything by
193
- marking it as such when other packagers come looking.
194
-
195
- todo: get review on this part.
196
- -}}
197
- if (m.default && !m.__esModule) {
198
- m.__esModule = true;
199
- }
200
- module.exports = m;
201
- `);
202
- function resolve(specifier, isDynamic, state, setter) {
203
- let resolution = state.resolver.resolve(specifier, isDynamic);
204
- let newSpecifier;
205
- switch (resolution.result) {
206
- case 'continue':
207
- return;
208
- case 'external':
209
- newSpecifier = makeExternal(resolution.specifier, state.resolver.filename, ensureOpts(state));
210
- break;
211
- case 'redirect-to':
212
- newSpecifier = resolution.specifier;
213
- break;
214
- case 'runtime-failure':
215
- newSpecifier = makeMissingModule(resolution.specifier, state.resolver.filename, ensureOpts(state));
216
- break;
217
- default:
218
- throw (0, assert_never_1.default)(resolution);
219
- }
220
- if (newSpecifier) {
221
- setter(newSpecifier);
222
- }
223
- }
224
- //# sourceMappingURL=babel-plugin-adjust-imports.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"babel-plugin-adjust-imports.js","sourceRoot":"","sources":["babel-plugin-adjust-imports.ts"],"names":[],"mappings":"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","sourcesContent":["import { join, dirname } from 'path';\nimport type { NodePath } from '@babel/traverse';\nimport type * as Babel from '@babel/core';\nimport type { types as t } from '@babel/core';\nimport { ImportUtil } from 'babel-import-util';\nimport { randomBytes } from 'crypto';\nimport { outputFileSync, pathExistsSync, renameSync } from 'fs-extra';\nimport { explicitRelative } from '@embroider/shared-internals';\nimport { compile } from './js-handlebars';\nimport { Options, Resolver } from './module-resolver';\nimport assertNever from 'assert-never';\n\ninterface State {\n resolver: Resolver;\n opts: Options | DeflatedOptions;\n}\n\nexport { Options };\n\nexport interface DeflatedOptions {\n adjustImportsOptionsPath: string;\n relocatedFilesPath: string;\n}\n\ntype BabelTypes = typeof t;\n\ntype DefineExpressionPath = NodePath<t.CallExpression> & {\n node: t.CallExpression & {\n arguments: [t.StringLiteral, t.ArrayExpression, Function];\n };\n};\n\nexport function isImportSyncExpression(t: BabelTypes, path: NodePath<any>) {\n if (\n !path ||\n !path.isCallExpression() ||\n path.node.callee.type !== 'Identifier' ||\n !path.get('callee').referencesImport('@embroider/macros', 'importSync')\n ) {\n return false;\n }\n\n const args = path.node.arguments;\n return Array.isArray(args) && args.length === 1 && t.isStringLiteral(args[0]);\n}\n\nexport function isDynamicImportExpression(t: BabelTypes, path: NodePath<any>) {\n if (!path || !path.isCallExpression() || path.node.callee.type !== 'Import') {\n return false;\n }\n\n const args = path.node.arguments;\n return Array.isArray(args) && args.length === 1 && t.isStringLiteral(args[0]);\n}\n\nexport function isDefineExpression(t: BabelTypes, path: NodePath<any>): path is DefineExpressionPath {\n // should we allow nested defines, or stop at the top level?\n if (!path.isCallExpression() || path.node.callee.type !== 'Identifier' || path.node.callee.name !== 'define') {\n return false;\n }\n\n const args = path.node.arguments;\n\n // only match define with 3 arguments define(name: string, deps: string[], cb: Function);\n return (\n Array.isArray(args) &&\n args.length === 3 &&\n t.isStringLiteral(args[0]) &&\n t.isArrayExpression(args[1]) &&\n t.isFunction(args[2])\n );\n}\n\nexport default function main(babel: typeof Babel) {\n let t = babel.types;\n return {\n visitor: {\n Program: {\n enter(path: NodePath<t.Program>, state: State) {\n let opts = ensureOpts(state);\n state.resolver = new Resolver(path.hub.file.opts.filename, opts);\n let adder = new ImportUtil(t, path);\n addExtraImports(adder, t, path, opts.extraImports);\n },\n exit(path: NodePath<t.Program>, state: State) {\n for (let child of path.get('body')) {\n if (child.isImportDeclaration() || child.isExportNamedDeclaration() || child.isExportAllDeclaration()) {\n rewriteTopLevelImport(child, state);\n }\n }\n },\n },\n CallExpression(path: NodePath<t.CallExpression>, state: State) {\n if (isImportSyncExpression(t, path) || isDynamicImportExpression(t, path)) {\n const [source] = path.get('arguments');\n resolve((source.node as any).value, true, state, newSpecifier => {\n source.replaceWith(t.stringLiteral(newSpecifier));\n });\n return;\n }\n\n // Should/can we make this early exit when the first define was found?\n if (!isDefineExpression(t, path)) {\n return;\n }\n\n let pkg = state.resolver.owningPackage();\n if (pkg && pkg.isV2Ember() && !pkg.meta['auto-upgraded']) {\n throw new Error(\n `The file ${state.resolver.originalFilename} in package ${pkg.name} tried to use AMD define. Native V2 Ember addons are forbidden from using AMD define, they must use ECMA export only.`\n );\n }\n\n const dependencies = path.node.arguments[1];\n\n const specifiers = dependencies.elements.slice();\n specifiers.push(path.node.arguments[0]);\n\n for (const source of specifiers) {\n if (!source) {\n continue;\n }\n\n if (source.type !== 'StringLiteral') {\n throw path.buildCodeFrameError(`expected only string literal arguments`);\n }\n\n if (source.value === 'exports' || source.value === 'require') {\n // skip \"special\" AMD dependencies\n continue;\n }\n\n resolve(source.value, false, state, newSpecifier => {\n source.value = newSpecifier;\n });\n }\n },\n },\n };\n}\n\nfunction rewriteTopLevelImport(\n path: NodePath<t.ImportDeclaration | t.ExportNamedDeclaration | t.ExportAllDeclaration>,\n state: State\n) {\n const { source } = path.node;\n if (source === null || source === undefined) {\n return;\n }\n\n resolve(source.value, false, state, newSpecifier => {\n source.value = newSpecifier;\n });\n}\n\n(main as any).baseDir = function () {\n return join(__dirname, '..');\n};\n\nfunction addExtraImports(\n adder: ImportUtil,\n t: BabelTypes,\n path: NodePath<t.Program>,\n extraImports: Required<Options>['extraImports']\n) {\n for (let { absPath, target, runtimeName } of extraImports) {\n if (absPath === path.hub.file.opts.filename) {\n if (runtimeName) {\n path.node.body.unshift(amdDefine(t, adder, path, target, runtimeName));\n } else {\n adder.importForSideEffect(target);\n }\n }\n }\n}\n\nfunction amdDefine(t: BabelTypes, adder: ImportUtil, path: NodePath<t.Program>, target: string, runtimeName: string) {\n let value = t.callExpression(adder.import(path, '@embroider/macros', 'importSync'), [t.stringLiteral(target)]);\n return t.expressionStatement(\n t.callExpression(t.memberExpression(t.identifier('window'), t.identifier('define')), [\n t.stringLiteral(runtimeName),\n t.functionExpression(null, [], t.blockStatement([t.returnStatement(value)])),\n ])\n );\n}\n\nfunction ensureOpts(state: State): Options {\n let { opts } = state;\n if ('adjustImportsOptionsPath' in opts) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return (state.opts = { ...require(opts.adjustImportsOptionsPath), ...require(opts.relocatedFilesPath) });\n }\n return opts;\n}\n\nfunction makeExternal(specifier: string, sourceFile: string, opts: Options): string {\n let target = join(opts.externalsDir, specifier + '.js');\n atomicWrite(\n target,\n externalTemplate({\n runtimeName: specifier,\n })\n );\n return explicitRelative(dirname(sourceFile), target.slice(0, -3));\n}\n\nfunction atomicWrite(path: string, content: string) {\n if (pathExistsSync(path)) {\n return;\n }\n let suffix = randomBytes(8).toString('hex');\n outputFileSync(path + suffix, content);\n try {\n renameSync(path + suffix, path);\n } catch (err: any) {\n // windows throws EPERM for concurrent access. For us it's not an error\n // condition because the other thread is writing the exact same value we\n // would have.\n if (err.code !== 'EPERM') {\n throw err;\n }\n }\n}\n\nfunction makeMissingModule(specifier: string, sourceFile: string, opts: Options): string {\n let target = join(opts.externalsDir, 'missing', specifier + '.js');\n atomicWrite(\n target,\n dynamicMissingModule({\n moduleName: specifier,\n })\n );\n return explicitRelative(dirname(sourceFile), target.slice(0, -3));\n}\n\nconst dynamicMissingModule = compile(`\n throw new Error('Could not find module \\`{{{js-string-escape moduleName}}}\\`');\n`) as (params: { moduleName: string }) => string;\n\nconst externalTemplate = compile(`\n{{#if (eq runtimeName \"require\")}}\nconst m = window.requirejs;\n{{else}}\nconst m = window.require(\"{{{js-string-escape runtimeName}}}\");\n{{/if}}\n{{!-\n There are plenty of hand-written AMD defines floating around\n that lack this, and they will break when other build systems\n encounter them.\n\n As far as I can tell, Ember's loader was already treating this\n case as a module, so in theory we aren't breaking anything by\n marking it as such when other packagers come looking.\n\n todo: get review on this part.\n-}}\nif (m.default && !m.__esModule) {\n m.__esModule = true;\n}\nmodule.exports = m;\n`) as (params: { runtimeName: string }) => string;\n\nfunction resolve(specifier: string, isDynamic: boolean, state: State, setter: (specifier: string) => void) {\n let resolution = state.resolver.resolve(specifier, isDynamic);\n let newSpecifier: string | undefined;\n switch (resolution.result) {\n case 'continue':\n return;\n case 'external':\n newSpecifier = makeExternal(resolution.specifier, state.resolver.filename, ensureOpts(state));\n break;\n case 'redirect-to':\n newSpecifier = resolution.specifier;\n break;\n case 'runtime-failure':\n newSpecifier = makeMissingModule(resolution.specifier, state.resolver.filename, ensureOpts(state));\n break;\n default:\n throw assertNever(resolution);\n }\n if (newSpecifier) {\n setter(newSpecifier);\n }\n}\n"]}
@@ -1,14 +0,0 @@
1
- import { NodeTemplateCompilerParams } from './template-compiler-node';
2
- import { precompile } from './babel-plugin-inline-hbs-deps';
3
- export interface Params {
4
- templateCompiler: NodeTemplateCompilerParams;
5
- }
6
- declare const _default: {
7
- (babel: typeof import("@babel/core")): unknown;
8
- _parallelBabel: {
9
- requireFile: string;
10
- };
11
- baseDir(): string;
12
- };
13
- export default _default;
14
- export { precompile };