Skip to content

Commit a31b512

Browse files
fix: esm conditional imports
fix #791
1 parent 7607b7c commit a31b512

File tree

6 files changed

+110
-12
lines changed

6 files changed

+110
-12
lines changed

rollup.config.ts

Lines changed: 95 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,43 @@ const treeshake = {
1212
unknownGlobalSideEffects: false,
1313
} satisfies RollupOptions["treeshake"];
1414

15-
const classic = {
15+
const classicCJS = {
16+
input: "src/classic.ts",
17+
18+
output: [
19+
{
20+
file: pkg.exports["."].require,
21+
format: "cjs",
22+
sourcemap: false,
23+
},
24+
],
25+
26+
plugins: [
27+
rollupPluginAutoExternal(),
28+
rollupPluginTs({
29+
transpileOnly: true,
30+
tsconfig: {
31+
fileName: "tsconfig.build.json",
32+
hook: (resolvedConfig) => ({
33+
...resolvedConfig,
34+
paths: {
35+
...resolvedConfig.paths,
36+
"#eslint-plugin-functional/conditional-imports/*": [
37+
"src/utils/conditional-imports/cjs/*",
38+
],
39+
},
40+
}),
41+
},
42+
}),
43+
rollupPluginDeassert({
44+
include: ["**/*.{js,ts}"],
45+
}),
46+
],
47+
48+
treeshake,
49+
} satisfies RollupOptions;
50+
51+
const classicESM = {
1652
input: "src/classic.ts",
1753

1854
output: [
@@ -21,8 +57,39 @@ const classic = {
2157
format: "esm",
2258
sourcemap: false,
2359
},
60+
],
61+
62+
plugins: [
63+
rollupPluginAutoExternal(),
64+
rollupPluginTs({
65+
transpileOnly: true,
66+
tsconfig: {
67+
fileName: "tsconfig.build.json",
68+
hook: (resolvedConfig) => ({
69+
...resolvedConfig,
70+
paths: {
71+
...resolvedConfig.paths,
72+
"#eslint-plugin-functional/conditional-imports/*": [
73+
"src/utils/conditional-imports/esm/*",
74+
],
75+
},
76+
}),
77+
},
78+
}),
79+
rollupPluginDeassert({
80+
include: ["**/*.{js,ts}"],
81+
}),
82+
],
83+
84+
treeshake,
85+
} satisfies RollupOptions;
86+
87+
const flatCJS = {
88+
input: "src/flat.ts",
89+
90+
output: [
2491
{
25-
file: pkg.exports["."].require,
92+
file: pkg.exports["./flat"].require,
2693
format: "cjs",
2794
sourcemap: false,
2895
},
@@ -32,7 +99,18 @@ const classic = {
3299
rollupPluginAutoExternal(),
33100
rollupPluginTs({
34101
transpileOnly: true,
35-
tsconfig: "tsconfig.build.json",
102+
tsconfig: {
103+
fileName: "tsconfig.build.json",
104+
hook: (resolvedConfig) => ({
105+
...resolvedConfig,
106+
paths: {
107+
...resolvedConfig.paths,
108+
"#eslint-plugin-functional/conditional-imports/*": [
109+
"src/utils/conditional-imports/cjs/*",
110+
],
111+
},
112+
}),
113+
},
36114
}),
37115
rollupPluginDeassert({
38116
include: ["**/*.{js,ts}"],
@@ -42,7 +120,7 @@ const classic = {
42120
treeshake,
43121
} satisfies RollupOptions;
44122

45-
const flat = {
123+
const flatESM = {
46124
input: "src/flat.ts",
47125

48126
output: [
@@ -51,18 +129,24 @@ const flat = {
51129
format: "esm",
52130
sourcemap: false,
53131
},
54-
{
55-
file: pkg.exports["./flat"].require,
56-
format: "cjs",
57-
sourcemap: false,
58-
},
59132
],
60133

61134
plugins: [
62135
rollupPluginAutoExternal(),
63136
rollupPluginTs({
64137
transpileOnly: true,
65-
tsconfig: "tsconfig.build.json",
138+
tsconfig: {
139+
fileName: "tsconfig.build.json",
140+
hook: (resolvedConfig) => ({
141+
...resolvedConfig,
142+
paths: {
143+
...resolvedConfig.paths,
144+
"#eslint-plugin-functional/conditional-imports/*": [
145+
"src/utils/conditional-imports/esm/*",
146+
],
147+
},
148+
}),
149+
},
66150
}),
67151
rollupPluginDeassert({
68152
include: ["**/*.{js,ts}"],
@@ -72,4 +156,4 @@ const flat = {
72156
treeshake,
73157
} satisfies RollupOptions;
74158

75-
export default [classic, flat];
159+
export default [classicCJS, classicESM, flatCJS, flatESM];
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import type tsApiUtils from "ts-api-utils";
2+
3+
import ts from "#eslint-plugin-functional/conditional-imports/typescript";
4+
5+
export default await ((): Promise<typeof tsApiUtils | undefined> => {
6+
if (ts !== undefined) {
7+
return import("ts-api-utils").catch(() => undefined);
8+
}
9+
return Promise.resolve(undefined);
10+
})();
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// eslint-disable-next-line unicorn/import-style
2+
export default await import("typescript")
3+
.then((module) => module.default)
4+
.catch(() => undefined);

tsconfig.base.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"#eslint-plugin-functional/settings": ["src/settings"],
4141
"#eslint-plugin-functional/utils/*": ["src/utils/*"],
4242
"#eslint-plugin-functional/conditional-imports/*": [
43-
"src/utils/conditional-imports/*"
43+
"src/utils/conditional-imports/cjs/*"
4444
],
4545
"#eslint-plugin-functional/tests/*": ["tests/*"]
4646
}

0 commit comments

Comments
 (0)