Skip to content

Commit b7dfdf6

Browse files
committed
Merge branch 'fix/unremoved-multiline-named-import-issue'
2 parents 92fa26b + 24de60f commit b7dfdf6

File tree

3 files changed

+85
-4
lines changed

3 files changed

+85
-4
lines changed

src/core/transpile.ts

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
import { transpile as tsTranspile } from "typescript";
2-
3-
function removeImports(code: string) {
4-
return code.replace(/^import\s.+\sfrom\s.+;?$/gm, "").trim();
5-
}
2+
import removeImports from "~/utils/removeImports";
63

74
function fixExports(code: string) {
85
const validMethods = ["GET", "POST", "PUT", "PATCH", "DELETE"];

src/utils/removeImports.test.ts

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import { describe, expect, it } from "@jest/globals";
2+
import removeImports from "./removeImports";
3+
4+
describe("removeImports", () => {
5+
it("removes a default import", () => {
6+
const code = 'import defaultExport from "module-name";';
7+
expect(removeImports(code)).toBe("");
8+
});
9+
10+
it("removes a namespace import", () => {
11+
const code = 'import * as name from "module-name";';
12+
expect(removeImports(code)).toBe("");
13+
});
14+
15+
it("removes a named import", () => {
16+
const code = 'import { export1 } from "module-name";';
17+
expect(removeImports(code)).toBe("");
18+
});
19+
20+
it("removes a named import with alias", () => {
21+
const code = 'import { export1 as alias1 } from "module-name";';
22+
expect(removeImports(code)).toBe("");
23+
});
24+
25+
it("removes a default import with alias", () => {
26+
const code = 'import { default as alias } from "module-name";';
27+
expect(removeImports(code)).toBe("");
28+
});
29+
30+
it("removes multiple named imports", () => {
31+
const code = 'import { export1, export2 } from "module-name";';
32+
expect(removeImports(code)).toBe("");
33+
});
34+
35+
it("removes multiple named imports with alias", () => {
36+
const code = 'import { export1, export2 as alias2 } from "module-name";';
37+
expect(removeImports(code)).toBe("");
38+
});
39+
40+
it("removes a named import with a string alias", () => {
41+
const code = 'import { "string name" as alias } from "module-name";';
42+
expect(removeImports(code)).toBe("");
43+
});
44+
45+
it("removes a combined default and named import", () => {
46+
const code = 'import defaultExport, { export1 } from "module-name";';
47+
expect(removeImports(code)).toBe("");
48+
});
49+
50+
it("removes a combined default and namespace import", () => {
51+
const code = 'import defaultExport, * as name from "module-name";';
52+
expect(removeImports(code)).toBe("");
53+
});
54+
55+
it("removes a side-effect only import", () => {
56+
const code = 'import "module-name";';
57+
expect(removeImports(code)).toBe("");
58+
});
59+
60+
it("removes a default import with single quotes", () => {
61+
const code = "import defaultExport from 'module-name';";
62+
expect(removeImports(code)).toBe("");
63+
});
64+
65+
it("removes a default import missing semicolon", () => {
66+
const code = 'import defaultExport from "module-name"';
67+
expect(removeImports(code)).toBe("");
68+
});
69+
70+
it("removes a multiline named import", () => {
71+
const code = [
72+
"import {",
73+
" myAwesomeFunction",
74+
'} from "my-awesome-module";',
75+
];
76+
expect(removeImports(code.join("\n"))).toBe("");
77+
});
78+
});

src/utils/removeImports.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export default function removeImports(code: string) {
2+
return code
3+
.replace(/(^import\s+[^;]+;?$|^import\s+[^;]*\sfrom\s.+;?$)/gm, "") // matches single-line imports and side-effect imports
4+
.replace(/(^import\s+{[\s\S]+?}\s+from\s+["'][^"']+["'];?)/gm, "") // matches multiline named imports
5+
.trim();
6+
}

0 commit comments

Comments
 (0)