Skip to content

Commit ce829a1

Browse files
committed
test(config): re-use Vitest resolve.alias utility
1 parent 3f9acab commit ce829a1

File tree

2 files changed

+23
-47
lines changed

2 files changed

+23
-47
lines changed

tests-svelte5/vite.config.ts

Lines changed: 5 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,16 @@
1-
import fs from "node:fs";
2-
import path from "node:path";
3-
import { fileURLToPath } from "node:url";
41
import { svelte } from "@sveltejs/vite-plugin-svelte";
52
import { defineConfig } from "vitest/config";
6-
import pkg from "../package.json";
3+
import { generateAliasesFromExports, getDirname } from "../vite.config";
74

8-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
9-
10-
/**
11-
* Generates Vite aliases from package.json exports for component subpath imports.
12-
* Resolves imports like `carbon-components-svelte/Theme/Theme.svelte` to
13-
* `./src/Theme/Theme.svelte` since these subpaths aren't in package.json
14-
* exports and Vite needs runtime resolution (tsconfig only handles types).
15-
*/
16-
function generateAliasesFromExports() {
17-
const aliases: Record<string, string> = {};
18-
const exports = pkg.exports;
19-
20-
const srcSvelteExport = exports["./src/*.svelte"];
21-
if (!srcSvelteExport) return aliases;
22-
23-
const srcDir = path.resolve(__dirname, "../src");
24-
if (!fs.existsSync(srcDir)) return aliases;
25-
26-
function scanDirectory(dir: string, basePath: string = "") {
27-
const entries = fs.readdirSync(dir, { withFileTypes: true });
28-
29-
for (const entry of entries) {
30-
const fullPath = path.join(dir, entry.name);
31-
const relativePath = path.join(basePath, entry.name);
32-
33-
if (entry.isDirectory()) {
34-
scanDirectory(fullPath, relativePath);
35-
} else if (entry.isFile() && entry.name.endsWith(".svelte")) {
36-
const importPath = relativePath;
37-
const aliasKey = `${pkg.name}/${importPath}`;
38-
aliases[aliasKey] = path.resolve(__dirname, "../src", importPath);
39-
}
40-
}
41-
}
42-
43-
scanDirectory(srcDir);
44-
return aliases;
45-
}
5+
const __dirname = getDirname(import.meta.url);
466

477
export default defineConfig({
48-
plugins: [svelte()],
498
resolve: {
509
conditions: ["browser"],
51-
alias: generateAliasesFromExports(),
10+
alias: generateAliasesFromExports(__dirname, "../src"),
5211
},
12+
// @ts-expect-error
13+
plugins: [svelte()],
5314
server: {
5415
fs: {
5516
allow: [".."],

vite.config.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,35 @@ import pkg from "./package.json";
77

88
const __dirname = path.dirname(fileURLToPath(import.meta.url));
99

10+
/**
11+
* Gets the directory name from import.meta.url (ESM equivalent of __dirname).
12+
* @param url - The import.meta.url from the calling file
13+
* @returns The directory path
14+
*/
15+
export function getDirname(url: string): string {
16+
return path.dirname(fileURLToPath(url));
17+
}
18+
1019
/**
1120
* Generates Vite aliases from package.json exports for component subpath imports.
1221
* Resolves imports like `carbon-components-svelte/Theme/Theme.svelte` to
1322
* `./src/Theme/Theme.svelte` since these subpaths aren't in package.json
1423
* exports and Vite needs runtime resolution (tsconfig only handles types).
24+
*
25+
* @param baseDir - Base directory for resolving src path (defaults to __dirname)
26+
* @param srcRelativePath - Relative path to src directory from baseDir (defaults to "./src")
1527
*/
16-
function generateAliasesFromExports() {
28+
export function generateAliasesFromExports(
29+
baseDir: string = __dirname,
30+
srcRelativePath: string = "./src",
31+
) {
1732
const aliases: Record<string, string> = {};
1833
const exports = pkg.exports;
1934

2035
const srcSvelteExport = exports["./src/*.svelte"];
2136
if (!srcSvelteExport) return aliases;
2237

23-
const srcDir = path.resolve(__dirname, "./src");
38+
const srcDir = path.resolve(baseDir, srcRelativePath);
2439
if (!fs.existsSync(srcDir)) return aliases;
2540

2641
function scanDirectory(dir: string, basePath: string = "") {
@@ -35,7 +50,7 @@ function generateAliasesFromExports() {
3550
} else if (entry.isFile() && entry.name.endsWith(".svelte")) {
3651
const importPath = relativePath;
3752
const aliasKey = `${pkg.name}/${importPath}`;
38-
aliases[aliasKey] = path.resolve(__dirname, "./src", importPath);
53+
aliases[aliasKey] = path.resolve(baseDir, srcRelativePath, importPath);
3954
}
4055
}
4156
}

0 commit comments

Comments
 (0)