@rpcbase/test 0.388.0 → 0.389.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/vitest.config.js
CHANGED
|
@@ -142,10 +142,11 @@ function loadTsconfigFile(configPath, seen = /* @__PURE__ */ new Set()) {
|
|
|
142
142
|
let inherited = { baseUrl: configDir };
|
|
143
143
|
for (const entry of extendsEntries) inherited = loadTsconfigFile(resolveExtends(entry, configDir), seen);
|
|
144
144
|
const compilerOptions = raw.compilerOptions ?? {};
|
|
145
|
+
const paths = normalizePaths(compilerOptions.paths);
|
|
145
146
|
const loaded = {
|
|
146
147
|
path: normalizedPath,
|
|
147
|
-
baseUrl: typeof compilerOptions.baseUrl === "string" ? path.resolve(configDir, compilerOptions.baseUrl) : inherited.baseUrl,
|
|
148
|
-
paths:
|
|
148
|
+
baseUrl: typeof compilerOptions.baseUrl === "string" ? path.resolve(configDir, compilerOptions.baseUrl) : paths ? configDir : inherited.baseUrl,
|
|
149
|
+
paths: paths ?? inherited.paths
|
|
149
150
|
};
|
|
150
151
|
seen.delete(normalizedPath);
|
|
151
152
|
return loaded;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.config.js","names":["path","fs","createRequire","defineConfig","escapeRegex","str","replace","TsconfigPaths","Record","RawTsconfig","extends","compilerOptions","baseUrl","paths","findTsconfig","startDir","current","resolve","name","candidate","join","existsSync","parent","dirname","stripJsonComments","input","output","inString","escaped","inLineComment","inBlockComment","i","length","char","next","stripTrailingCommas","nextIndex","test","parseJsonc","filePath","raw","readFileSync","JSON","parse","resolveTsconfigPath","extname","statSync","isFile","jsonCandidate","directoryCandidate","resolveExtends","specifier","configDir","startsWith","isAbsolute","resolved","localRequire","_err","Error","normalizePaths","Array","isArray","undefined","normalized","key","value","Object","entries","every","entry","keys","loadTsconfigFile","configPath","seen","Set","normalizedPath","has","add","extendsEntries","inherited","loaded","delete","loadTsconfig","process","cwd","ViteAliasEntry","find","RegExp","replacement","pathsToAlias","tsconfig","alias","targets","target","includes","wildcardPattern","endsWith","split","groupIndex","replacedTarget","checkPath","sep","push","cleanTarget","include"],"sources":["../src/vitest.config.ts"],"sourcesContent":["import path from \"node:path\"\nimport fs from \"node:fs\"\nimport { createRequire } from \"node:module\"\n\nimport { defineConfig } from \"vitest/config\"\n\n\nfunction escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n}\n\ntype TsconfigPaths = Record<string, string[]>\ntype RawTsconfig = {\n extends?: string | string[]\n compilerOptions?: {\n baseUrl?: string\n paths?: unknown\n }\n}\n\nfunction findTsconfig(startDir: string): string | null {\n let current = path.resolve(startDir)\n\n while (true) {\n for (const name of [\"tsconfig.json\", \"tsconfig.base.json\"]) {\n const candidate = path.join(current, name)\n if (fs.existsSync(candidate)) {\n return candidate\n }\n }\n\n const parent = path.dirname(current)\n if (parent === current) {\n return null\n }\n current = parent\n }\n}\n\nfunction stripJsonComments(input: string): string {\n let output = \"\"\n let inString = false\n let escaped = false\n let inLineComment = false\n let inBlockComment = false\n\n for (let i = 0; i < input.length; i += 1) {\n const char = input[i]\n const next = input[i + 1]\n\n if (inLineComment) {\n if (char === \"\\n\" || char === \"\\r\") {\n inLineComment = false\n output += char\n }\n continue\n }\n\n if (inBlockComment) {\n if (char === \"*\" && next === \"/\") {\n inBlockComment = false\n i += 1\n continue\n }\n output += char === \"\\n\" || char === \"\\r\" ? char : \" \"\n continue\n }\n\n if (inString) {\n output += char\n if (escaped) {\n escaped = false\n } else if (char === \"\\\\\") {\n escaped = true\n } else if (char === \"\\\"\") {\n inString = false\n }\n continue\n }\n\n if (char === \"/\" && next === \"/\") {\n inLineComment = true\n i += 1\n continue\n }\n\n if (char === \"/\" && next === \"*\") {\n inBlockComment = true\n i += 1\n continue\n }\n\n if (char === \"\\\"\") {\n inString = true\n }\n output += char\n }\n\n return output\n}\n\nfunction stripTrailingCommas(input: string): string {\n let output = \"\"\n let inString = false\n let escaped = false\n\n for (let i = 0; i < input.length; i += 1) {\n const char = input[i]\n\n if (inString) {\n output += char\n if (escaped) {\n escaped = false\n } else if (char === \"\\\\\") {\n escaped = true\n } else if (char === \"\\\"\") {\n inString = false\n }\n continue\n }\n\n if (char === \"\\\"\") {\n inString = true\n output += char\n continue\n }\n\n if (char === \",\") {\n let nextIndex = i + 1\n while (/\\s/.test(input[nextIndex] ?? \"\")) {\n nextIndex += 1\n }\n const next = input[nextIndex]\n if (next === \"}\" || next === \"]\") {\n continue\n }\n }\n\n output += char\n }\n\n return output\n}\n\nfunction parseJsonc(filePath: string): RawTsconfig {\n const raw = fs.readFileSync(filePath, \"utf8\")\n return JSON.parse(stripTrailingCommas(stripJsonComments(raw))) as RawTsconfig\n}\n\nfunction resolveTsconfigPath(candidate: string): string | null {\n if (path.extname(candidate) === \".json\" && fs.existsSync(candidate) && fs.statSync(candidate).isFile()) {\n return candidate\n }\n\n if (path.extname(candidate) === \"\") {\n const jsonCandidate = `${candidate}.json`\n if (fs.existsSync(jsonCandidate) && fs.statSync(jsonCandidate).isFile()) {\n return jsonCandidate\n }\n }\n\n const directoryCandidate = path.join(candidate, \"tsconfig.json\")\n if (fs.existsSync(directoryCandidate) && fs.statSync(directoryCandidate).isFile()) {\n return directoryCandidate\n }\n\n return null\n}\n\nfunction resolveExtends(specifier: string, configDir: string): string {\n if (specifier.startsWith(\".\") || path.isAbsolute(specifier)) {\n const resolved = resolveTsconfigPath(path.resolve(configDir, specifier))\n if (resolved) {\n return resolved\n }\n } else {\n const localRequire = createRequire(path.join(configDir, \"tsconfig.json\"))\n try {\n const resolved = localRequire.resolve(specifier)\n if (path.extname(resolved) === \".json\") {\n return resolved\n }\n } catch (_err) {\n // Fall through to tsconfig-style package resolution.\n }\n\n try {\n return localRequire.resolve(`${specifier}/tsconfig.json`)\n } catch (_err) {\n const resolved = resolveTsconfigPath(path.resolve(configDir, specifier))\n if (resolved) {\n return resolved\n }\n }\n }\n\n throw new Error(`@rpcbase/test: unable to resolve tsconfig extends \"${specifier}\" from ${configDir}`)\n}\n\nfunction normalizePaths(paths: unknown): TsconfigPaths | undefined {\n if (!paths || typeof paths !== \"object\" || Array.isArray(paths)) {\n return undefined\n }\n\n const normalized: TsconfigPaths = {}\n for (const [key, value] of Object.entries(paths)) {\n if (Array.isArray(value) && value.every((entry) => typeof entry === \"string\")) {\n normalized[key] = value\n }\n }\n\n return Object.keys(normalized).length > 0 ? normalized : undefined\n}\n\nfunction loadTsconfigFile(configPath: string, seen = new Set<string>()): { path: string; baseUrl: string; paths?: TsconfigPaths } {\n const normalizedPath = path.resolve(configPath)\n if (seen.has(normalizedPath)) {\n throw new Error(`@rpcbase/test: circular tsconfig extends detected at ${normalizedPath}`)\n }\n seen.add(normalizedPath)\n\n const configDir = path.dirname(normalizedPath)\n const raw = parseJsonc(normalizedPath)\n const extendsEntries = Array.isArray(raw.extends)\n ? raw.extends\n : typeof raw.extends === \"string\"\n ? [raw.extends]\n : []\n\n let inherited: { baseUrl: string; paths?: TsconfigPaths } = {\n baseUrl: configDir,\n }\n\n for (const entry of extendsEntries) {\n inherited = loadTsconfigFile(resolveExtends(entry, configDir), seen)\n }\n\n const compilerOptions = raw.compilerOptions ?? {}\n const loaded = {\n path: normalizedPath,\n baseUrl: typeof compilerOptions.baseUrl === \"string\"\n ? path.resolve(configDir, compilerOptions.baseUrl)\n : inherited.baseUrl,\n paths: normalizePaths(compilerOptions.paths) ?? inherited.paths,\n }\n\n seen.delete(normalizedPath)\n return loaded\n}\n\nfunction loadTsconfig(): { path: string; baseUrl: string; paths?: TsconfigPaths } {\n const configPath = findTsconfig(process.cwd())\n if (!configPath) {\n throw new Error(\"@rpcbase/test: no tsconfig found for alias resolution\")\n }\n\n return loadTsconfigFile(configPath)\n}\n\ntype ViteAliasEntry = { find: string | RegExp; replacement: string }\n\nfunction pathsToAlias(tsconfig: { path: string; baseUrl: string; paths?: TsconfigPaths }): ViteAliasEntry[] {\n const paths = tsconfig?.paths\n if (!paths) return []\n\n const baseUrl = tsconfig.baseUrl || path.dirname(tsconfig.path)\n const alias: ViteAliasEntry[] = []\n\n for (const [key, targets] of Object.entries(paths)) {\n if (!Array.isArray(targets)) continue\n\n for (const target of targets) {\n if (/\\.d\\.[cm]?ts$/.test(target)) continue\n\n if (key.includes(\"*\") && target.includes(\"*\")) {\n const wildcardPattern = target.endsWith(\"*\") ? \"(.+)\" : \"([^/]+)\"\n const find = new RegExp(\n `^${escapeRegex(key).split(\"\\\\*\").join(wildcardPattern)}$`,\n )\n let groupIndex = 0\n const replacedTarget = target.replace(/\\*/g, () => `$${++groupIndex}`)\n const replacement = path.resolve(baseUrl, replacedTarget)\n const checkPath = replacement.replace(/\\$\\\\d+/g, \"\")\n if (\n checkPath.includes(`${path.sep}node_modules${path.sep}`) &&\n !fs.existsSync(checkPath)\n ) {\n continue\n }\n alias.push({ find, replacement })\n continue\n }\n\n const find = key.replace(/\\*$/, \"\")\n const cleanTarget = target.replace(/\\*$/, \"\")\n const replacement = path.resolve(baseUrl, cleanTarget)\n if (\n replacement.includes(`${path.sep}node_modules${path.sep}`) &&\n !fs.existsSync(replacement)\n ) {\n continue\n }\n alias.push({ find, replacement })\n }\n }\n\n return alias\n}\n\nconst tsconfig = loadTsconfig()\nconst alias = pathsToAlias(tsconfig)\n\nexport default defineConfig({\n test: {\n include: [\"{src,lib}/**/*.test.{js,ts,tsx}\"],\n },\n resolve: alias.length > 0 ? { alias } : undefined,\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vitest.config.js","names":["path","fs","createRequire","defineConfig","escapeRegex","str","replace","TsconfigPaths","Record","RawTsconfig","extends","compilerOptions","baseUrl","paths","findTsconfig","startDir","current","resolve","name","candidate","join","existsSync","parent","dirname","stripJsonComments","input","output","inString","escaped","inLineComment","inBlockComment","i","length","char","next","stripTrailingCommas","nextIndex","test","parseJsonc","filePath","raw","readFileSync","JSON","parse","resolveTsconfigPath","extname","statSync","isFile","jsonCandidate","directoryCandidate","resolveExtends","specifier","configDir","startsWith","isAbsolute","resolved","localRequire","_err","Error","normalizePaths","Array","isArray","undefined","normalized","key","value","Object","entries","every","entry","keys","loadTsconfigFile","configPath","seen","Set","normalizedPath","has","add","extendsEntries","inherited","loaded","delete","loadTsconfig","process","cwd","ViteAliasEntry","find","RegExp","replacement","pathsToAlias","tsconfig","alias","targets","target","includes","wildcardPattern","endsWith","split","groupIndex","replacedTarget","checkPath","sep","push","cleanTarget","include"],"sources":["../src/vitest.config.ts"],"sourcesContent":["import path from \"node:path\"\nimport fs from \"node:fs\"\nimport { createRequire } from \"node:module\"\n\nimport { defineConfig } from \"vitest/config\"\n\n\nfunction escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n}\n\ntype TsconfigPaths = Record<string, string[]>\ntype RawTsconfig = {\n extends?: string | string[]\n compilerOptions?: {\n baseUrl?: string\n paths?: unknown\n }\n}\n\nfunction findTsconfig(startDir: string): string | null {\n let current = path.resolve(startDir)\n\n while (true) {\n for (const name of [\"tsconfig.json\", \"tsconfig.base.json\"]) {\n const candidate = path.join(current, name)\n if (fs.existsSync(candidate)) {\n return candidate\n }\n }\n\n const parent = path.dirname(current)\n if (parent === current) {\n return null\n }\n current = parent\n }\n}\n\nfunction stripJsonComments(input: string): string {\n let output = \"\"\n let inString = false\n let escaped = false\n let inLineComment = false\n let inBlockComment = false\n\n for (let i = 0; i < input.length; i += 1) {\n const char = input[i]\n const next = input[i + 1]\n\n if (inLineComment) {\n if (char === \"\\n\" || char === \"\\r\") {\n inLineComment = false\n output += char\n }\n continue\n }\n\n if (inBlockComment) {\n if (char === \"*\" && next === \"/\") {\n inBlockComment = false\n i += 1\n continue\n }\n output += char === \"\\n\" || char === \"\\r\" ? char : \" \"\n continue\n }\n\n if (inString) {\n output += char\n if (escaped) {\n escaped = false\n } else if (char === \"\\\\\") {\n escaped = true\n } else if (char === \"\\\"\") {\n inString = false\n }\n continue\n }\n\n if (char === \"/\" && next === \"/\") {\n inLineComment = true\n i += 1\n continue\n }\n\n if (char === \"/\" && next === \"*\") {\n inBlockComment = true\n i += 1\n continue\n }\n\n if (char === \"\\\"\") {\n inString = true\n }\n output += char\n }\n\n return output\n}\n\nfunction stripTrailingCommas(input: string): string {\n let output = \"\"\n let inString = false\n let escaped = false\n\n for (let i = 0; i < input.length; i += 1) {\n const char = input[i]\n\n if (inString) {\n output += char\n if (escaped) {\n escaped = false\n } else if (char === \"\\\\\") {\n escaped = true\n } else if (char === \"\\\"\") {\n inString = false\n }\n continue\n }\n\n if (char === \"\\\"\") {\n inString = true\n output += char\n continue\n }\n\n if (char === \",\") {\n let nextIndex = i + 1\n while (/\\s/.test(input[nextIndex] ?? \"\")) {\n nextIndex += 1\n }\n const next = input[nextIndex]\n if (next === \"}\" || next === \"]\") {\n continue\n }\n }\n\n output += char\n }\n\n return output\n}\n\nfunction parseJsonc(filePath: string): RawTsconfig {\n const raw = fs.readFileSync(filePath, \"utf8\")\n return JSON.parse(stripTrailingCommas(stripJsonComments(raw))) as RawTsconfig\n}\n\nfunction resolveTsconfigPath(candidate: string): string | null {\n if (path.extname(candidate) === \".json\" && fs.existsSync(candidate) && fs.statSync(candidate).isFile()) {\n return candidate\n }\n\n if (path.extname(candidate) === \"\") {\n const jsonCandidate = `${candidate}.json`\n if (fs.existsSync(jsonCandidate) && fs.statSync(jsonCandidate).isFile()) {\n return jsonCandidate\n }\n }\n\n const directoryCandidate = path.join(candidate, \"tsconfig.json\")\n if (fs.existsSync(directoryCandidate) && fs.statSync(directoryCandidate).isFile()) {\n return directoryCandidate\n }\n\n return null\n}\n\nfunction resolveExtends(specifier: string, configDir: string): string {\n if (specifier.startsWith(\".\") || path.isAbsolute(specifier)) {\n const resolved = resolveTsconfigPath(path.resolve(configDir, specifier))\n if (resolved) {\n return resolved\n }\n } else {\n const localRequire = createRequire(path.join(configDir, \"tsconfig.json\"))\n try {\n const resolved = localRequire.resolve(specifier)\n if (path.extname(resolved) === \".json\") {\n return resolved\n }\n } catch (_err) {\n // Fall through to tsconfig-style package resolution.\n }\n\n try {\n return localRequire.resolve(`${specifier}/tsconfig.json`)\n } catch (_err) {\n const resolved = resolveTsconfigPath(path.resolve(configDir, specifier))\n if (resolved) {\n return resolved\n }\n }\n }\n\n throw new Error(`@rpcbase/test: unable to resolve tsconfig extends \"${specifier}\" from ${configDir}`)\n}\n\nfunction normalizePaths(paths: unknown): TsconfigPaths | undefined {\n if (!paths || typeof paths !== \"object\" || Array.isArray(paths)) {\n return undefined\n }\n\n const normalized: TsconfigPaths = {}\n for (const [key, value] of Object.entries(paths)) {\n if (Array.isArray(value) && value.every((entry) => typeof entry === \"string\")) {\n normalized[key] = value\n }\n }\n\n return Object.keys(normalized).length > 0 ? normalized : undefined\n}\n\nfunction loadTsconfigFile(configPath: string, seen = new Set<string>()): { path: string; baseUrl: string; paths?: TsconfigPaths } {\n const normalizedPath = path.resolve(configPath)\n if (seen.has(normalizedPath)) {\n throw new Error(`@rpcbase/test: circular tsconfig extends detected at ${normalizedPath}`)\n }\n seen.add(normalizedPath)\n\n const configDir = path.dirname(normalizedPath)\n const raw = parseJsonc(normalizedPath)\n const extendsEntries = Array.isArray(raw.extends)\n ? raw.extends\n : typeof raw.extends === \"string\"\n ? [raw.extends]\n : []\n\n let inherited: { baseUrl: string; paths?: TsconfigPaths } = {\n baseUrl: configDir,\n }\n\n for (const entry of extendsEntries) {\n inherited = loadTsconfigFile(resolveExtends(entry, configDir), seen)\n }\n\n const compilerOptions = raw.compilerOptions ?? {}\n const paths = normalizePaths(compilerOptions.paths)\n const loaded = {\n path: normalizedPath,\n baseUrl: typeof compilerOptions.baseUrl === \"string\"\n ? path.resolve(configDir, compilerOptions.baseUrl)\n : paths\n ? configDir\n : inherited.baseUrl,\n paths: paths ?? inherited.paths,\n }\n\n seen.delete(normalizedPath)\n return loaded\n}\n\nfunction loadTsconfig(): { path: string; baseUrl: string; paths?: TsconfigPaths } {\n const configPath = findTsconfig(process.cwd())\n if (!configPath) {\n throw new Error(\"@rpcbase/test: no tsconfig found for alias resolution\")\n }\n\n return loadTsconfigFile(configPath)\n}\n\ntype ViteAliasEntry = { find: string | RegExp; replacement: string }\n\nfunction pathsToAlias(tsconfig: { path: string; baseUrl: string; paths?: TsconfigPaths }): ViteAliasEntry[] {\n const paths = tsconfig?.paths\n if (!paths) return []\n\n const baseUrl = tsconfig.baseUrl || path.dirname(tsconfig.path)\n const alias: ViteAliasEntry[] = []\n\n for (const [key, targets] of Object.entries(paths)) {\n if (!Array.isArray(targets)) continue\n\n for (const target of targets) {\n if (/\\.d\\.[cm]?ts$/.test(target)) continue\n\n if (key.includes(\"*\") && target.includes(\"*\")) {\n const wildcardPattern = target.endsWith(\"*\") ? \"(.+)\" : \"([^/]+)\"\n const find = new RegExp(\n `^${escapeRegex(key).split(\"\\\\*\").join(wildcardPattern)}$`,\n )\n let groupIndex = 0\n const replacedTarget = target.replace(/\\*/g, () => `$${++groupIndex}`)\n const replacement = path.resolve(baseUrl, replacedTarget)\n const checkPath = replacement.replace(/\\$\\\\d+/g, \"\")\n if (\n checkPath.includes(`${path.sep}node_modules${path.sep}`) &&\n !fs.existsSync(checkPath)\n ) {\n continue\n }\n alias.push({ find, replacement })\n continue\n }\n\n const find = key.replace(/\\*$/, \"\")\n const cleanTarget = target.replace(/\\*$/, \"\")\n const replacement = path.resolve(baseUrl, cleanTarget)\n if (\n replacement.includes(`${path.sep}node_modules${path.sep}`) &&\n !fs.existsSync(replacement)\n ) {\n continue\n }\n alias.push({ find, replacement })\n }\n }\n\n return alias\n}\n\nconst tsconfig = loadTsconfig()\nconst alias = pathsToAlias(tsconfig)\n\nexport default defineConfig({\n test: {\n include: [\"{src,lib}/**/*.test.{js,ts,tsx}\"],\n },\n resolve: alias.length > 0 ? { alias } : undefined,\n})\n"],"mappings":"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"}
|