forked from embroider-build/embroider
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rollup-hbs-plugin.ts
49 lines (42 loc) · 1.21 KB
/
rollup-hbs-plugin.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import { createFilter } from '@rollup/pluginutils';
import type { Plugin } from 'rollup';
import { readFileSync } from 'fs';
const backtick = '`';
export default function rollupHbsPlugin(): Plugin {
const filter = createFilter('**/*.hbs');
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 (!filter(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) {
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,
};
},
};
}