Skip to content

Commit f18ac91

Browse files
committed
fix(optimize-imports): use optimistic paths for components
Fixes #97
1 parent 0603a18 commit f18ac91

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

src/preprocessors/optimize-imports.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,13 @@ export const optimizeImports: SveltePreprocessor<"script"> = () => {
4343
switch (import_name) {
4444
case CarbonSvelte.Components:
4545
rewriteImport(s, node, ({ imported, local }) => {
46+
// Use index if available for backwards compatibility with special paths, like .js files.
47+
// Otherwise, use optimistic path for new components.
4648
const import_path = components[imported.name]?.path;
47-
if (!import_path) return "";
49+
if (!import_path) {
50+
return `import ${local.name} from "${import_name}/src/${imported.name}/${imported.name}.svelte";`;
51+
}
52+
4853
return `import ${local.name} from "${import_path}";`;
4954
});
5055
break;

tests/optimize-imports.test.ts

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,14 @@ import Airplane2 from "carbon-pictograms-svelte/lib/Airplane.svelte";
5353
import Airplane3 from "carbon-pictograms-svelte/lib/Airplane.svelte";`);
5454
});
5555

56-
test("invalid imports should fail open", () => {
56+
test("invalid imports should be optimistic", () => {
5757
expect(
5858
preprocess({
5959
content: "import { NonExistent } from 'carbon-components-svelte'",
6060
}),
61-
).toEqual("import { NonExistent } from 'carbon-components-svelte'");
61+
).toEqual(
62+
'import NonExistent from "carbon-components-svelte/src/NonExistent/NonExistent.svelte";',
63+
);
6264
});
6365

6466
test("mixed imports should be handled correctly", () => {
@@ -152,4 +154,25 @@ import Analytics from "carbon-pictograms-svelte/lib/Analytics.svelte";`);
152154
import type { CarbonTheme } from "carbon-components-svelte/src/Theme/Theme.svelte";
153155
`);
154156
});
157+
158+
test("backward compatibility with various export patterns", () => {
159+
expect(
160+
preprocess({
161+
content: `import { Accordion, AccordionItem, AccordionSkeleton } from "carbon-components-svelte";
162+
import { breakpointObserver, breakpoints } from "carbon-components-svelte";
163+
import { ContainedList, ContainedListItem } from "carbon-components-svelte";
164+
import { filterTreeNodes, toHierarchy } from "carbon-components-svelte";
165+
import { NewComponent } from "carbon-components-svelte";`,
166+
}),
167+
).toEqual(`import Accordion from "carbon-components-svelte/src/Accordion/Accordion.svelte";
168+
import AccordionItem from "carbon-components-svelte/src/Accordion/AccordionItem.svelte";
169+
import AccordionSkeleton from "carbon-components-svelte/src/Accordion/AccordionSkeleton.svelte";
170+
import breakpointObserver from "carbon-components-svelte/src/Breakpoint/breakpointObserver.js";
171+
import breakpoints from "carbon-components-svelte/src/Breakpoint/breakpoints.js";
172+
import ContainedList from "carbon-components-svelte/src/ContainedList/ContainedList.svelte";
173+
import ContainedListItem from "carbon-components-svelte/src/ContainedList/ContainedListItem.svelte";
174+
import filterTreeNodes from "carbon-components-svelte/src/utils/filterTreeNodes.js";
175+
import toHierarchy from "carbon-components-svelte/src/utils/toHierarchy.js";
176+
import NewComponent from "carbon-components-svelte/src/NewComponent/NewComponent.svelte";`);
177+
});
155178
});

0 commit comments

Comments
 (0)