Skip to content

Commit 457d419

Browse files
authored
Merge pull request #142 from entwicklerstube/dynamic-import-template-lit-141
2 parents 53cb80b + 906a951 commit 457d419

File tree

2 files changed

+45
-3
lines changed

2 files changed

+45
-3
lines changed

plugin/index.js

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,34 @@ const replacePrefix = (path, opts = [], sourceFile) => {
3333
return path;
3434
};
3535

36+
const replacePrefixStrOrQuasi = (node, opts, sourceFile) => {
37+
// String literal
38+
if (typeof node === 'string') {
39+
return replacePrefix(node, opts, sourceFile);
40+
}
41+
// Template literal quasi
42+
else if (node && typeof node.cooked === 'string') {
43+
return {
44+
...node,
45+
cooked: replacePrefix(node.cooked, opts, sourceFile),
46+
raw: replacePrefix(node.raw, opts, sourceFile),
47+
};
48+
} else {
49+
return node;
50+
}
51+
};
52+
3653
/**
3754
* Recursively traverses binary expressions to find the first `StringLiteral` if any.
3855
* @param {Object} t Babel types
3956
* @param {Node} arg a Babel node
4057
* @return {StringLiteral?}
4158
*/
4259
const traverseExpression = (t, arg) => {
60+
if (t.isTemplateLiteral(arg)) {
61+
return arg.quasis[0];
62+
}
63+
4364
if (t.isStringLiteral(arg)) {
4465
return arg;
4566
}
@@ -67,7 +88,7 @@ export default ({ types: t }) => {
6788
const firstArg = traverseExpression(t, args[0]);
6889

6990
if (firstArg) {
70-
firstArg.value = replacePrefix(
91+
firstArg.value = replacePrefixStrOrQuasi(
7192
firstArg.value,
7293
state.opts,
7394
state.file.opts.filename,

test/plugin.spec.js

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ describe('Babel Root Import - Plugin', () => {
3131
});
3232

3333
it('transforms for import() syntax', () => {
34-
const targetRequire = slash(`/some/example.js`);
34+
const targetRequire = slash(`"./some/example.js"`);
3535
const transformed = babelTransform(
36-
"var SomeExample = import('~/some/example.js');",
36+
'var SomeExample = import("~/some/example.js");',
3737
{
3838
plugins: [importSyntaxPlugin, BabelRootImportPlugin],
3939
},
@@ -42,6 +42,27 @@ describe('Babel Root Import - Plugin', () => {
4242
expect(transformed.code).to.contain(targetRequire);
4343
});
4444

45+
it('transforms for import() syntax with template literal', () => {
46+
const targetRequire = slash('`./some/${foo}`');
47+
const transformed = babelTransform('var SomeExample = import(`~/some/${foo}`);', {
48+
plugins: [importSyntaxPlugin, BabelRootImportPlugin],
49+
});
50+
51+
expect(transformed.code).to.contain(targetRequire);
52+
});
53+
54+
it('transforms for require() with template literal', () => {
55+
const targetRequire = slash('`./some/${foo}`');
56+
const transformed = babelTransform(
57+
'var SomeExample = require(`~/some/${foo}`);',
58+
{
59+
plugins: [BabelRootImportPlugin],
60+
},
61+
);
62+
63+
expect(transformed.code).to.contain(targetRequire);
64+
});
65+
4566
it('transforms for custom functions', () => {
4667
const targetRequire = slash(`/some/example.js`);
4768
const transformed = babelTransform(

0 commit comments

Comments
 (0)