Skip to content

Commit ebe31f3

Browse files
committed
Fix bug in re-exporting all with special paths
1 parent 6e78a6e commit ebe31f3

File tree

5 files changed

+29
-9
lines changed

5 files changed

+29
-9
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "babel-plugin-transform-barrels",
3-
"version": "1.0.18",
3+
"version": "1.0.19",
44
"description": "A Babel plugin that transforms indirect imports through a barrel file (index.js) into direct imports.",
55
"homepage": "https://github.com/FogelAI/babel-plugin-transform-barrels",
66
"main": "src/main.js",

src/ast.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
const fs = require("fs");
22
const parser = require("@babel/parser");
33
const t = require("@babel/types");
4+
const { builtinModules } = require('module');
5+
const pluginOptions = require("./pluginOptions");
6+
const PathFunctions = require("./path");
47

58
class AST {
69
static filenameToAST = (filename) => {
@@ -82,6 +85,18 @@ class AST {
8285
}
8386
return t.objectExpression(objectProperties)
8487
}
88+
89+
static isSpecialImportCases(node) {
90+
const importsPath = node.source.value;
91+
const importsSpecifiers = node.specifiers;
92+
if (!AST.isAnySpecifierExist(importsSpecifiers)) return true;
93+
if (AST.getSpecifierType(importsSpecifiers[0]) === "namespace") return true;
94+
if (pluginOptions.options.executorName === "vite" && importsPath.startsWith("/")) return true;
95+
if (pluginOptions.options.executorName === "webpack" && importsPath.includes("!")) return true;
96+
if (PathFunctions.isSpecialCharInBundlerPathImport(importsPath)) return true;
97+
if (builtinModules.includes(importsPath)) return true;
98+
return false;
99+
}
85100
}
86101

87102
module.exports = AST;

src/barrel.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ class BarrelFile {
181181
}
182182

183183
handleImportDeclaration(node) {
184+
if (AST.isSpecialImportCases(node)) return false;
184185
node.specifiers.forEach((specifier) => {
185186
// import {abc, def} from './abc';
186187
const specifierObj = SpecifierFactory.createSpecifier("import");

src/main.js

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,18 @@
1-
const { builtinModules } = require('module');
21
const generate = require('@babel/generator').default;
32
const AST = require("./ast");
43
const { ExecutorFactory, JestMock } = require("./executorConfig");
54
const resolver = require("./resolver");
65
const BarrelFileManagerFacade = require("./barrel");
76
const pluginOptions = require("./pluginOptions");
87
const logger = require("./logger");
9-
const PathFunctions = require("./path");
108

119
const jestMockFunction = new JestMock();
1210

1311
const importDeclarationVisitor = (path, state) => {
1412
const importsSpecifiers = path.node.specifiers;
15-
if (!AST.isAnySpecifierExist(importsSpecifiers)) return;
16-
if (AST.getSpecifierType(importsSpecifiers[0]) === "namespace") return;
1713
const parsedJSFile = state.filename;
1814
const importsPath = path.node.source.value;
19-
if (pluginOptions.options.executorName === "vite" && importsPath.startsWith("/")) return;
20-
if (pluginOptions.options.executorName === "webpack" && importsPath.includes("!")) return;
21-
if (PathFunctions.isSpecialCharInBundlerPathImport(importsPath)) return;
22-
if (builtinModules.includes(importsPath)) return;
15+
if (AST.isSpecialImportCases(path.node)) return;
2316
logger.log(`Source import line: ${generate(path.node, { comments: false, concise: true }).code}`);
2417
resolver.from = parsedJSFile;
2518
const resolvedPathObject = resolver.resolve(importsPath ,parsedJSFile);

tests/js/local/imports.test.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,3 +220,14 @@ describe("jest mock", () => {
220220
].join("\n").replaceAll("\\","\\\\"));
221221
});
222222
});
223+
224+
describe("special module usecases transformation", () => {
225+
test("transformation of special chars in the path import", () => {
226+
expect(
227+
pluginTransform(
228+
'import async_hooks from "node:async_hooks";',
229+
__filename
230+
)
231+
).toBe(`import async_hooks from \"node:async_hooks";`.replaceAll("\\","\\\\"));
232+
});
233+
});

0 commit comments

Comments
 (0)