@rpcbase/test 0.382.0 → 0.383.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.
@@ -2,32 +2,202 @@ import path from "node:path";
2
2
  import fs from "node:fs";
3
3
  import { createRequire } from "node:module";
4
4
  import { defineConfig } from "vitest/config";
5
- const require$1 = createRequire(import.meta.url);
6
5
  function escapeRegex(str) {
7
6
  return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
8
7
  }
9
- function loadTsconfig() {
10
- let ts;
11
- try {
12
- ts = require$1("typescript");
13
- } catch (_err) {
14
- throw new Error("@rpcbase/test: TypeScript is required to resolve path aliases. Please add it as a devDependency.");
8
+ function findTsconfig(startDir) {
9
+ let current = path.resolve(startDir);
10
+ while (true) {
11
+ for (const name of ["tsconfig.json", "tsconfig.base.json"]) {
12
+ const candidate = path.join(current, name);
13
+ if (fs.existsSync(candidate)) {
14
+ return candidate;
15
+ }
16
+ }
17
+ const parent = path.dirname(current);
18
+ if (parent === current) {
19
+ return null;
20
+ }
21
+ current = parent;
15
22
  }
16
- const cwd = process.cwd();
17
- const configPath = ts.findConfigFile(cwd, ts.sys.fileExists, "tsconfig.json") || ts.findConfigFile(cwd, ts.sys.fileExists, "tsconfig.base.json");
18
- if (!configPath) {
19
- throw new Error("@rpcbase/test: no tsconfig found for alias resolution");
23
+ }
24
+ function stripJsonComments(input) {
25
+ let output = "";
26
+ let inString = false;
27
+ let escaped = false;
28
+ let inLineComment = false;
29
+ let inBlockComment = false;
30
+ for (let i = 0; i < input.length; i += 1) {
31
+ const char = input[i];
32
+ const next = input[i + 1];
33
+ if (inLineComment) {
34
+ if (char === "\n" || char === "\r") {
35
+ inLineComment = false;
36
+ output += char;
37
+ }
38
+ continue;
39
+ }
40
+ if (inBlockComment) {
41
+ if (char === "*" && next === "/") {
42
+ inBlockComment = false;
43
+ i += 1;
44
+ continue;
45
+ }
46
+ output += char === "\n" || char === "\r" ? char : " ";
47
+ continue;
48
+ }
49
+ if (inString) {
50
+ output += char;
51
+ if (escaped) {
52
+ escaped = false;
53
+ } else if (char === "\\") {
54
+ escaped = true;
55
+ } else if (char === '"') {
56
+ inString = false;
57
+ }
58
+ continue;
59
+ }
60
+ if (char === "/" && next === "/") {
61
+ inLineComment = true;
62
+ i += 1;
63
+ continue;
64
+ }
65
+ if (char === "/" && next === "*") {
66
+ inBlockComment = true;
67
+ i += 1;
68
+ continue;
69
+ }
70
+ if (char === '"') {
71
+ inString = true;
72
+ }
73
+ output += char;
20
74
  }
21
- const configFile = ts.readConfigFile(configPath, ts.sys.readFile);
22
- if (configFile.error) {
23
- throw new Error(`@rpcbase/test: unable to read tsconfig at ${configPath}`);
75
+ return output;
76
+ }
77
+ function stripTrailingCommas(input) {
78
+ let output = "";
79
+ let inString = false;
80
+ let escaped = false;
81
+ for (let i = 0; i < input.length; i += 1) {
82
+ const char = input[i];
83
+ if (inString) {
84
+ output += char;
85
+ if (escaped) {
86
+ escaped = false;
87
+ } else if (char === "\\") {
88
+ escaped = true;
89
+ } else if (char === '"') {
90
+ inString = false;
91
+ }
92
+ continue;
93
+ }
94
+ if (char === '"') {
95
+ inString = true;
96
+ output += char;
97
+ continue;
98
+ }
99
+ if (char === ",") {
100
+ let nextIndex = i + 1;
101
+ while (/\s/.test(input[nextIndex] ?? "")) {
102
+ nextIndex += 1;
103
+ }
104
+ const next = input[nextIndex];
105
+ if (next === "}" || next === "]") {
106
+ continue;
107
+ }
108
+ }
109
+ output += char;
24
110
  }
25
- const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.dirname(configPath));
26
- return {
27
- path: configPath,
28
- baseUrl: parsed.options?.baseUrl ? path.resolve(path.dirname(configPath), parsed.options.baseUrl) : path.dirname(configPath),
29
- paths: parsed.options?.paths
111
+ return output;
112
+ }
113
+ function parseJsonc(filePath) {
114
+ const raw = fs.readFileSync(filePath, "utf8");
115
+ return JSON.parse(stripTrailingCommas(stripJsonComments(raw)));
116
+ }
117
+ function resolveTsconfigPath(candidate) {
118
+ if (path.extname(candidate) === ".json" && fs.existsSync(candidate) && fs.statSync(candidate).isFile()) {
119
+ return candidate;
120
+ }
121
+ if (path.extname(candidate) === "") {
122
+ const jsonCandidate = `${candidate}.json`;
123
+ if (fs.existsSync(jsonCandidate) && fs.statSync(jsonCandidate).isFile()) {
124
+ return jsonCandidate;
125
+ }
126
+ }
127
+ const directoryCandidate = path.join(candidate, "tsconfig.json");
128
+ if (fs.existsSync(directoryCandidate) && fs.statSync(directoryCandidate).isFile()) {
129
+ return directoryCandidate;
130
+ }
131
+ return null;
132
+ }
133
+ function resolveExtends(specifier, configDir) {
134
+ if (specifier.startsWith(".") || path.isAbsolute(specifier)) {
135
+ const resolved = resolveTsconfigPath(path.resolve(configDir, specifier));
136
+ if (resolved) {
137
+ return resolved;
138
+ }
139
+ } else {
140
+ const localRequire = createRequire(path.join(configDir, "tsconfig.json"));
141
+ try {
142
+ const resolved = localRequire.resolve(specifier);
143
+ if (path.extname(resolved) === ".json") {
144
+ return resolved;
145
+ }
146
+ } catch (_err) {
147
+ }
148
+ try {
149
+ return localRequire.resolve(`${specifier}/tsconfig.json`);
150
+ } catch (_err) {
151
+ const resolved = resolveTsconfigPath(path.resolve(configDir, specifier));
152
+ if (resolved) {
153
+ return resolved;
154
+ }
155
+ }
156
+ }
157
+ throw new Error(`@rpcbase/test: unable to resolve tsconfig extends "${specifier}" from ${configDir}`);
158
+ }
159
+ function normalizePaths(paths) {
160
+ if (!paths || typeof paths !== "object" || Array.isArray(paths)) {
161
+ return void 0;
162
+ }
163
+ const normalized = {};
164
+ for (const [key, value] of Object.entries(paths)) {
165
+ if (Array.isArray(value) && value.every((entry) => typeof entry === "string")) {
166
+ normalized[key] = value;
167
+ }
168
+ }
169
+ return Object.keys(normalized).length > 0 ? normalized : void 0;
170
+ }
171
+ function loadTsconfigFile(configPath, seen = /* @__PURE__ */ new Set()) {
172
+ const normalizedPath = path.resolve(configPath);
173
+ if (seen.has(normalizedPath)) {
174
+ throw new Error(`@rpcbase/test: circular tsconfig extends detected at ${normalizedPath}`);
175
+ }
176
+ seen.add(normalizedPath);
177
+ const configDir = path.dirname(normalizedPath);
178
+ const raw = parseJsonc(normalizedPath);
179
+ const extendsEntries = Array.isArray(raw.extends) ? raw.extends : typeof raw.extends === "string" ? [raw.extends] : [];
180
+ let inherited = {
181
+ baseUrl: configDir
182
+ };
183
+ for (const entry of extendsEntries) {
184
+ inherited = loadTsconfigFile(resolveExtends(entry, configDir), seen);
185
+ }
186
+ const compilerOptions = raw.compilerOptions ?? {};
187
+ const loaded = {
188
+ path: normalizedPath,
189
+ baseUrl: typeof compilerOptions.baseUrl === "string" ? path.resolve(configDir, compilerOptions.baseUrl) : inherited.baseUrl,
190
+ paths: normalizePaths(compilerOptions.paths) ?? inherited.paths
30
191
  };
192
+ seen.delete(normalizedPath);
193
+ return loaded;
194
+ }
195
+ function loadTsconfig() {
196
+ const configPath = findTsconfig(process.cwd());
197
+ if (!configPath) {
198
+ throw new Error("@rpcbase/test: no tsconfig found for alias resolution");
199
+ }
200
+ return loadTsconfigFile(configPath);
31
201
  }
32
202
  function pathsToAlias(tsconfig2) {
33
203
  const paths = tsconfig2?.paths;
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.config.js","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\nconst require = createRequire(import.meta.url)\n\nfunction escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n}\n\ntype TsconfigPaths = Record<string, string[]>\n\nfunction loadTsconfig(): { path: string; baseUrl: string; paths?: TsconfigPaths } {\n let ts\n try {\n ts = require(\"typescript\")\n } catch (_err) {\n throw new Error(\n \"@rpcbase/test: TypeScript is required to resolve path aliases. Please add it as a devDependency.\",\n )\n }\n\n const cwd = process.cwd()\n const configPath =\n ts.findConfigFile(cwd, ts.sys.fileExists, \"tsconfig.json\") ||\n ts.findConfigFile(cwd, ts.sys.fileExists, \"tsconfig.base.json\")\n\n if (!configPath) {\n throw new Error(\"@rpcbase/test: no tsconfig found for alias resolution\")\n }\n\n const configFile = ts.readConfigFile(configPath, ts.sys.readFile)\n if (configFile.error) {\n throw new Error(`@rpcbase/test: unable to read tsconfig at ${configPath}`)\n }\n\n const parsed = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n path.dirname(configPath),\n )\n\n return {\n path: configPath,\n baseUrl: parsed.options?.baseUrl\n ? path.resolve(path.dirname(configPath), parsed.options.baseUrl)\n : path.dirname(configPath),\n paths: parsed.options?.paths,\n }\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 (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"],"names":["require","createRequire","import","url","escapeRegex","str","replace","loadTsconfig","ts","_err","Error","cwd","process","configPath","findConfigFile","sys","fileExists","configFile","readConfigFile","readFile","error","parsed","parseJsonConfigFileContent","config","path","dirname","baseUrl","options","resolve","paths","pathsToAlias","tsconfig","alias","key","targets","Object","entries","Array","isArray","target","includes","wildcardPattern","endsWith","find","RegExp","split","join","groupIndex","replacedTarget","replacement","checkPath","sep","fs","existsSync","push","cleanTarget","defineConfig","test","include","length","undefined"],"mappings":"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"}
1
+ {"version":3,"file":"vitest.config.js","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 (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"],"names":["escapeRegex","str","replace","findTsconfig","startDir","current","path","resolve","name","candidate","join","fs","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","createRequire","_err","Error","normalizePaths","paths","Array","isArray","undefined","normalized","key","value","Object","entries","every","entry","keys","loadTsconfigFile","configPath","seen","Set","normalizedPath","has","add","extendsEntries","extends","inherited","baseUrl","compilerOptions","loaded","delete","loadTsconfig","process","cwd","pathsToAlias","tsconfig","alias","targets","target","includes","wildcardPattern","endsWith","find","RegExp","split","groupIndex","replacedTarget","replacement","checkPath","sep","push","cleanTarget","defineConfig","include"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/test",
3
- "version": "0.382.0",
3
+ "version": "0.383.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"