From c61c6ff43ac5dc3913b582bf542786e841bdf33e Mon Sep 17 00:00:00 2001 From: Edward Faulkner Date: Tue, 5 Nov 2024 14:04:16 -0500 Subject: [PATCH] Support v2 ember-source These minor compatibility tweaks are needed to support an upcoming ember-source release that declares itself as a v2 addon. --- packages/compat/src/compat-app-builder.ts | 2 +- packages/compat/src/compat-app.ts | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/compat/src/compat-app-builder.ts b/packages/compat/src/compat-app-builder.ts index abf1335a9..7589c4628 100644 --- a/packages/compat/src/compat-app-builder.ts +++ b/packages/compat/src/compat-app-builder.ts @@ -1036,7 +1036,7 @@ export class CompatAppBuilder { let resolver = new Resolver(resolverConfig); let resolution = resolver.nodeResolve( - 'ember-source/vendor/ember/ember-template-compiler', + 'ember-source/dist/ember-template-compiler', resolvePath(this.root, 'package.json') ); if (resolution.type !== 'real') { diff --git a/packages/compat/src/compat-app.ts b/packages/compat/src/compat-app.ts index 9cfd8c425..3146c8c0f 100644 --- a/packages/compat/src/compat-app.ts +++ b/packages/compat/src/compat-app.ts @@ -28,6 +28,7 @@ import { readFileSync } from 'fs'; import semver from 'semver'; import type { Transform } from 'babel-plugin-ember-template-compilation'; import { CompatAppBuilder } from './compat-app-builder'; +import writeFile from 'broccoli-file-creator'; interface Group { outputFiles: OutputFileToInputFileMap; @@ -346,6 +347,23 @@ export default class CompatApp { destDir: 'vendor', }) ); + + let emberSource = this.legacyEmberAppInstance.project.addons.find(a => a.name === 'ember-source'); + if (emberSource && (emberSource.pkg['ember-addon']?.['version'] ?? 1) >= 2) { + // there's stuff in the ecosystem that assumes these files will always be + // present in the vendor tree. But when ember-source is V2, it cannot put + // them there, so @embroider/compat will fill in defaults. The bundles are + // empty because we're just trying to keep the build from blowing up, the + // actual ember modules get loaded as modules instead. + // + // The template compiler is still here so that apps using a V2 ember can + // still app.import the traditional runtime template compiler. + trees.push(writeFile('vendor/ember/ember.js', () => '')); + trees.push(writeFile('vendor/ember/ember-testing.js', () => '')); + const templateCompilerSrc = readFileSync(join(emberSource.root, 'dist/ember-template-compiler.js'), 'utf8'); + trees.push(writeFile('vendor/ember/ember-testing.js', () => templateCompilerSrc)); + } + if (this.vendorTree) { trees.push( buildFunnel(this.vendorTree, {