diff --git a/broccoli/glimmer-template-compiler.js b/broccoli/glimmer-template-compiler.js index be6361d25f0..f8df7810fdf 100644 --- a/broccoli/glimmer-template-compiler.js +++ b/broccoli/glimmer-template-compiler.js @@ -1,39 +1,4 @@ 'use strict'; -const Filter = require('broccoli-persistent-filter'); -const { stripIndent } = require('common-tags'); - -GlimmerTemplatePrecompiler.prototype = Object.create(Filter.prototype); - -function GlimmerTemplatePrecompiler(inputTree, options) { - if (!(this instanceof GlimmerTemplatePrecompiler)) { - return new GlimmerTemplatePrecompiler(inputTree, options); - } - - Filter.call(this, inputTree, {}); - - this.inputTree = inputTree; - if (!options.glimmer) { - throw new Error('No glimmer option provided!'); - } - this.precompile = options.glimmer.precompile; -} - -GlimmerTemplatePrecompiler.prototype.extensions = ['hbs']; -GlimmerTemplatePrecompiler.prototype.targetExtension = 'js'; - -GlimmerTemplatePrecompiler.prototype.baseDir = function () { - return __dirname; -}; - -GlimmerTemplatePrecompiler.prototype.processString = function (content, relativePath) { - let compiled = this.precompile(content, { - meta: { moduleName: relativePath }, - }); - return stripIndent` - import { templateFactory } from '@glimmer/opcode-compiler'; - export default templateFactory(${compiled}); - `; -}; - -module.exports = GlimmerTemplatePrecompiler; +require('@swc-node/register'); +module.exports = require('../packages/ember-template-compiler/minimal.ts'); diff --git a/broccoli/packages.js b/broccoli/packages.js index 853735e0b54..b017e09746b 100644 --- a/broccoli/packages.js +++ b/broccoli/packages.js @@ -14,7 +14,6 @@ const { VERSION } = require('./version'); const PackageJSONWriter = require('./package-json-writer'); const WriteFile = require('broccoli-file-creator'); const StringReplace = require('broccoli-string-replace'); -const GlimmerTemplatePrecompiler = require('./glimmer-template-compiler'); const VERSION_PLACEHOLDER = /VERSION_STRING_PLACEHOLDER/g; const canaryFeatures = require('./canary-features'); @@ -54,32 +53,21 @@ module.exports.qunit = function _qunit() { module.exports.getPackagesES = function getPackagesES() { let input = new Funnel(`packages`, { - exclude: ['loader/**', 'external-helpers/**'], + exclude: ['loader/**', 'external-helpers/**', '**/node_modules'], destDir: `packages`, }); let debuggedInput = debugTree(input, `get-packages-es:input`); - let compiledTemplatesAndTypescript = new GlimmerTemplatePrecompiler(debuggedInput, { - persist: true, - glimmer: require('@glimmer/compiler'), - annotation: `get-packages-es templates -> es`, - }); - - let debuggedCompiledTemplatesAndTypeScript = debugTree( - compiledTemplatesAndTypescript, - `get-packages-es:templates-output` - ); - let nonTypeScriptContents = debugTree( - new Funnel(debuggedCompiledTemplatesAndTypeScript, { + new Funnel(debuggedInput, { srcDir: 'packages', exclude: ['**/*.ts'], }), 'get-packages-es:js:output' ); - let typescriptContents = new Funnel(debuggedCompiledTemplatesAndTypeScript, { + let typescriptContents = new Funnel(debuggedInput, { include: ['**/*.ts'], }); diff --git a/ember-cli-build.js b/ember-cli-build.js index 164345c7bfb..07ceb34439c 100644 --- a/ember-cli-build.js +++ b/ember-cli-build.js @@ -65,16 +65,21 @@ module.exports = function ({ project }) { let emberBundles = withTargets(project, emberSource.buildEmberBundles.bind(emberSource)); let packages = debugTree( - new MergeTrees([ - // dynamically generated packages - emberVersionES(), + new MergeTrees( + [ + // packages/** (after typescript compilation) + getPackagesES(), - // packages/** (after typescript compilation) - getPackagesES(), + emberVersionES(), - // externalized helpers - babelHelpers(), - ]), + // externalized helpers + babelHelpers(), + ], + { + // we're replacing the ember/verion file with the actual version number + overwrite: true, + } + ), 'packages:initial' ); diff --git a/lib/index.js b/lib/index.js index 7b49cd3e44b..22d4dfdc9ba 100644 --- a/lib/index.js +++ b/lib/index.js @@ -145,6 +145,17 @@ module.exports = { let isEmberSource = this.project.name() === 'ember-source'; let babelHelperPlugin = injectBabelHelpers(isEmberSource); + let compilerPath; + if (isEmberSource) { + // Here we are using the template compiler by directly evaluating it in + // node, because we *are* the build that produces + // ember-template-compiler.js. + compilerPath = path.resolve(__dirname, '../broccoli/glimmer-template-compiler'); + } else { + // When we're building an app, we use the already built template compiler. + compilerPath = path.resolve(__dirname, '../dist/ember-template-compiler.js'); + } + let options = { 'ember-cli-babel': { disableDebugTooling: true, @@ -155,6 +166,7 @@ module.exports = { plugins: [ babelHelperPlugin, buildDebugMacroPlugin(!isProduction), + ['babel-plugin-ember-template-compilation', { compilerPath }], ...vmBabelPlugins({ isDebug: !isProduction }), ], }), diff --git a/package.json b/package.json index b8482863783..46475f65bc8 100644 --- a/package.json +++ b/package.json @@ -111,6 +111,8 @@ "@embroider/shared-internals": "^2.5.0", "@rollup/plugin-babel": "^6.0.3", "@simple-dom/document": "^1.4.0", + "@swc/core": "^1.3.100", + "@swc-node/register": "^1.6.8", "@tsconfig/ember": "^2.0.0", "@types/node": "^18.11.11", "@types/qunit": "^2.19.4", diff --git a/packages/@ember/-internals/glimmer/lib/templates/empty.d.ts b/packages/@ember/-internals/glimmer/lib/templates/empty.d.ts deleted file mode 100644 index 8c0dc88a802..00000000000 --- a/packages/@ember/-internals/glimmer/lib/templates/empty.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { TemplateFactory } from '@glimmer/interfaces'; -declare const TEMPLATE: TemplateFactory; -export default TEMPLATE; diff --git a/packages/@ember/-internals/glimmer/lib/templates/empty.hbs b/packages/@ember/-internals/glimmer/lib/templates/empty.hbs deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/@ember/-internals/glimmer/lib/templates/empty.ts b/packages/@ember/-internals/glimmer/lib/templates/empty.ts new file mode 100644 index 00000000000..a8a8cb394b3 --- /dev/null +++ b/packages/@ember/-internals/glimmer/lib/templates/empty.ts @@ -0,0 +1,4 @@ +import { precompileTemplate } from '@ember/template-compilation'; +export default precompileTemplate('', { + moduleName: 'packages/@ember/-internals/glimmer/lib/templates/empty.hbs', +}); diff --git a/packages/@ember/-internals/glimmer/lib/templates/input.d.ts b/packages/@ember/-internals/glimmer/lib/templates/input.d.ts deleted file mode 100644 index 8c0dc88a802..00000000000 --- a/packages/@ember/-internals/glimmer/lib/templates/input.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { TemplateFactory } from '@glimmer/interfaces'; -declare const TEMPLATE: TemplateFactory; -export default TEMPLATE; diff --git a/packages/@ember/-internals/glimmer/lib/templates/input.hbs b/packages/@ember/-internals/glimmer/lib/templates/input.ts similarity index 61% rename from packages/@ember/-internals/glimmer/lib/templates/input.hbs rename to packages/@ember/-internals/glimmer/lib/templates/input.ts index 917d85a90f5..2620336bcab 100644 --- a/packages/@ember/-internals/glimmer/lib/templates/input.hbs +++ b/packages/@ember/-internals/glimmer/lib/templates/input.ts @@ -1,4 +1,6 @@ - \ No newline at end of file +/>`, + { moduleName: 'packages/@ember/-internals/glimmer/lib/templates/input.hbs' } +); diff --git a/packages/@ember/-internals/glimmer/lib/templates/link-to.d.ts b/packages/@ember/-internals/glimmer/lib/templates/link-to.d.ts deleted file mode 100644 index 8c0dc88a802..00000000000 --- a/packages/@ember/-internals/glimmer/lib/templates/link-to.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { TemplateFactory } from '@glimmer/interfaces'; -declare const TEMPLATE: TemplateFactory; -export default TEMPLATE; diff --git a/packages/@ember/-internals/glimmer/lib/templates/link-to.hbs b/packages/@ember/-internals/glimmer/lib/templates/link-to.ts similarity index 59% rename from packages/@ember/-internals/glimmer/lib/templates/link-to.hbs rename to packages/@ember/-internals/glimmer/lib/templates/link-to.ts index d8618e3668d..40eb24cddf4 100644 --- a/packages/@ember/-internals/glimmer/lib/templates/link-to.hbs +++ b/packages/@ember/-internals/glimmer/lib/templates/link-to.ts @@ -1,4 +1,6 @@ -{{yield}} \ No newline at end of file +>{{yield}}`, + { moduleName: 'packages/@ember/-internals/glimmer/lib/templates/link-to.hbs' } +); diff --git a/packages/@ember/-internals/glimmer/lib/templates/outlet.d.ts b/packages/@ember/-internals/glimmer/lib/templates/outlet.d.ts deleted file mode 100644 index 8c0dc88a802..00000000000 --- a/packages/@ember/-internals/glimmer/lib/templates/outlet.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { TemplateFactory } from '@glimmer/interfaces'; -declare const TEMPLATE: TemplateFactory; -export default TEMPLATE; diff --git a/packages/@ember/-internals/glimmer/lib/templates/outlet.hbs b/packages/@ember/-internals/glimmer/lib/templates/outlet.hbs deleted file mode 100644 index 7a670a61a70..00000000000 --- a/packages/@ember/-internals/glimmer/lib/templates/outlet.hbs +++ /dev/null @@ -1 +0,0 @@ -{{component (-outlet)}} \ No newline at end of file diff --git a/packages/@ember/-internals/glimmer/lib/templates/outlet.ts b/packages/@ember/-internals/glimmer/lib/templates/outlet.ts new file mode 100644 index 00000000000..a186b6229b7 --- /dev/null +++ b/packages/@ember/-internals/glimmer/lib/templates/outlet.ts @@ -0,0 +1,4 @@ +import { precompileTemplate } from '@ember/template-compilation'; +export default precompileTemplate(`{{component (-outlet)}}`, { + moduleName: 'packages/@ember/-internals/glimmer/lib/templates/outlet.hbs', +}); diff --git a/packages/@ember/-internals/glimmer/lib/templates/root.d.ts b/packages/@ember/-internals/glimmer/lib/templates/root.d.ts deleted file mode 100644 index 8c0dc88a802..00000000000 --- a/packages/@ember/-internals/glimmer/lib/templates/root.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { TemplateFactory } from '@glimmer/interfaces'; -declare const TEMPLATE: TemplateFactory; -export default TEMPLATE; diff --git a/packages/@ember/-internals/glimmer/lib/templates/root.hbs b/packages/@ember/-internals/glimmer/lib/templates/root.hbs deleted file mode 100644 index 32371f70828..00000000000 --- a/packages/@ember/-internals/glimmer/lib/templates/root.hbs +++ /dev/null @@ -1 +0,0 @@ -{{component this}} \ No newline at end of file diff --git a/packages/@ember/-internals/glimmer/lib/templates/root.ts b/packages/@ember/-internals/glimmer/lib/templates/root.ts new file mode 100644 index 00000000000..f83924a3faa --- /dev/null +++ b/packages/@ember/-internals/glimmer/lib/templates/root.ts @@ -0,0 +1,4 @@ +import { precompileTemplate } from '@ember/template-compilation'; +export default precompileTemplate(`{{component this}}`, { + moduleName: 'packages/@ember/-internals/glimmer/lib/templates/root.hbs', +}); diff --git a/packages/@ember/-internals/glimmer/lib/templates/textarea.d.ts b/packages/@ember/-internals/glimmer/lib/templates/textarea.d.ts deleted file mode 100644 index 8c0dc88a802..00000000000 --- a/packages/@ember/-internals/glimmer/lib/templates/textarea.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { TemplateFactory } from '@glimmer/interfaces'; -declare const TEMPLATE: TemplateFactory; -export default TEMPLATE; diff --git a/packages/@ember/-internals/glimmer/lib/templates/textarea.hbs b/packages/@ember/-internals/glimmer/lib/templates/textarea.ts similarity index 57% rename from packages/@ember/-internals/glimmer/lib/templates/textarea.hbs rename to packages/@ember/-internals/glimmer/lib/templates/textarea.ts index a47d6bca457..9a9e32d0fd4 100644 --- a/packages/@ember/-internals/glimmer/lib/templates/textarea.hbs +++ b/packages/@ember/-internals/glimmer/lib/templates/textarea.ts @@ -1,4 +1,6 @@ -