From 79be0bd37a08fe75e6576eacd19e182a7a0d3d78 Mon Sep 17 00:00:00 2001 From: Matthew Edwards Date: Tue, 29 Mar 2022 10:18:49 -0700 Subject: [PATCH 1/2] FIX: rollup-hbs-plugin add resolveId hook - In the `load()` hook, `id` isn't a valid property in the returned object. - This assumed that a resolution was created for the intermediate file `*.hbs.js` file. - This created an issue where a babel plugin could not transform `*.hbs.js` files. - Added `resolveId()` hook to create a resolution for `*.hbs` to `*.hbs.js` file. --- packages/addon-dev/src/rollup-hbs-plugin.ts | 37 ++++++++++++++++++--- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/packages/addon-dev/src/rollup-hbs-plugin.ts b/packages/addon-dev/src/rollup-hbs-plugin.ts index 3c62d71e5..3e73b1729 100644 --- a/packages/addon-dev/src/rollup-hbs-plugin.ts +++ b/packages/addon-dev/src/rollup-hbs-plugin.ts @@ -4,19 +4,48 @@ import { readFileSync } from 'fs'; const backtick = '`'; export default function rollupHbsPlugin(): Plugin { - const filter = createFilter('**/*.hbs'); + const templateFilter = createFilter('**/*.hbs'); + const moduleFilter = createFilter('**/*.hbs.js'); return { name: 'rollup-hbs-plugin', + async resolveId(source: string, importer: string | undefined, options) { + const resolution = await this.resolve(source, importer, { + skipSelf: true, + ...options, + }); + + const id = resolution?.id; + + if (!templateFilter(id)) return null; + + // This creates an `*.hbs.js` that we will populate in `load()` hook. + return { + ...resolution, + id: id + '.js', + meta: { + 'rollup-hbs-plugin': { + originalId: id, + }, + }, + }; + }, load(id: string) { - if (!filter(id)) return; - let input = readFileSync(id, 'utf8'); + if (!moduleFilter(id)) return null; + + const meta = this.getModuleInfo(id)?.meta; + const originalId = meta?.['rollup-hbs-plugin']?.originalId; + + if (!originalId) { + return; + } + + let input = readFileSync(originalId, 'utf8'); let code = `import { hbs } from 'ember-cli-htmlbars';\n` + `export default hbs${backtick}${input}${backtick};`; return { code, - id: id + '.js', }; }, }; From 21b94cb1d23cfc8909cee6546b90c1bf0129baf5 Mon Sep 17 00:00:00 2001 From: Matthew Edwards Date: Tue, 29 Mar 2022 16:44:33 -0700 Subject: [PATCH 2/2] Remove secondary filter in load hook --- packages/addon-dev/src/rollup-hbs-plugin.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/addon-dev/src/rollup-hbs-plugin.ts b/packages/addon-dev/src/rollup-hbs-plugin.ts index 3e73b1729..802d6e0c2 100644 --- a/packages/addon-dev/src/rollup-hbs-plugin.ts +++ b/packages/addon-dev/src/rollup-hbs-plugin.ts @@ -4,8 +4,7 @@ import { readFileSync } from 'fs'; const backtick = '`'; export default function rollupHbsPlugin(): Plugin { - const templateFilter = createFilter('**/*.hbs'); - const moduleFilter = createFilter('**/*.hbs.js'); + const filter = createFilter('**/*.hbs'); return { name: 'rollup-hbs-plugin', @@ -17,7 +16,7 @@ export default function rollupHbsPlugin(): Plugin { const id = resolution?.id; - if (!templateFilter(id)) return null; + if (!filter(id)) return null; // This creates an `*.hbs.js` that we will populate in `load()` hook. return { @@ -31,8 +30,6 @@ export default function rollupHbsPlugin(): Plugin { }; }, load(id: string) { - if (!moduleFilter(id)) return null; - const meta = this.getModuleInfo(id)?.meta; const originalId = meta?.['rollup-hbs-plugin']?.originalId;