@rpcbase/test 0.403.0 → 0.405.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.
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.js","names":["fs","fsPromises","path","createRequire","fileURLToPath","isInsideAnyRoot","resolveCollectCoverageRoots","CoverageConfig","spawnWithLogs","withRegisterShim","SpawnLauncher","require","import","meta","url","moduleDir","dirname","CoverageState","config","enabled","runVitest","coverage","combinedConfig","userArgs","disableCoverage","Promise","vitestArgs","vitestConfig","resolveVitestConfig","hasCustomConfig","some","arg","startsWith","push","launcher","resolveVitestLauncher","env","process","RB_DISABLE_COVERAGE","nodeCoverageDir","resolveNodeCoverageDir","mkdir","recursive","NODE_V8_COVERAGE","name","args","successMessage","failureMessage","convertNodeCoverage","join","rootDir","searchRoots","cwd","base","pkgPath","resolve","paths","pkgDir","pkgJson","JSON","parse","readFileSync","binPath","bin","vitest","command","execPath","_error","localBin","existsSync","userConfig","findVitestConfig","bundledConfig","baseDir","candidates","file","fullPath","entries","readdir","catch","scripts","scriptRoots","collectCoverageFrom","entry","endsWith","payload","readJson","results","Array","isArray","result","script","normalized","normalizeNodeScriptUrl","isNodeModulesPath","absolutePath","source","readFile","relativePath","functions","length","outDir","outputFile","coverageFileName","writeFile","stringify","testId","filePath","raw","rawUrl","_err","isAbsolute","normalize","relative","String","split","sep","includes"],"sources":["../../src/runners/vitest.ts"],"sourcesContent":["import fs from \"node:fs\"\nimport fsPromises from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { createRequire } from \"node:module\"\nimport { fileURLToPath } from \"node:url\"\n\nimport { isInsideAnyRoot, resolveCollectCoverageRoots } from \"../coverage/collect\"\nimport type { CoverageConfig } from \"../coverage/types\"\nimport { spawnWithLogs, withRegisterShim, type SpawnLauncher } from \"./process\"\n\n\nconst require = createRequire(import.meta.url)\nconst moduleDir = path.dirname(fileURLToPath(import.meta.url))\n\ntype CoverageState = { config: CoverageConfig; enabled: boolean } | null\n\nexport async function runVitest(\n coverage: CoverageState,\n combinedConfig: CoverageConfig | null,\n userArgs: string[],\n { disableCoverage = false }: { disableCoverage?: boolean } = {},\n): Promise<void> {\n const vitestArgs = [\"run\", \"--passWithNoTests\"]\n const vitestConfig = resolveVitestConfig()\n\n const hasCustomConfig = userArgs.some((arg) => {\n if (arg === \"--config\" || arg === \"-c\") {\n return true\n }\n return arg.startsWith(\"--config=\")\n })\n\n if (vitestConfig && !hasCustomConfig) {\n vitestArgs.push(\"--config\", vitestConfig)\n }\n vitestArgs.push(...userArgs)\n\n const launcher = resolveVitestLauncher()\n const env = withRegisterShim(process.env)\n\n if (disableCoverage) {\n env.RB_DISABLE_COVERAGE = \"1\"\n }\n\n if (coverage?.enabled && !disableCoverage) {\n const nodeCoverageDir = resolveNodeCoverageDir(combinedConfig ?? coverage.config)\n await fsPromises.mkdir(nodeCoverageDir, { recursive: true })\n env.NODE_V8_COVERAGE = nodeCoverageDir\n }\n\n await spawnWithLogs({\n name: \"Vitest\",\n launcher,\n args: vitestArgs,\n env,\n successMessage: \"Vitest suite passed!\",\n failureMessage: \"Vitest failed\",\n })\n\n if (coverage?.enabled && !disableCoverage) {\n await convertNodeCoverage({\n config: combinedConfig ?? coverage.config,\n nodeCoverageDir: resolveNodeCoverageDir(combinedConfig ?? coverage.config),\n })\n }\n}\n\nexport function resolveNodeCoverageDir(config: CoverageConfig): string {\n return path.join(config.rootDir, \"build\", \"vitest\", \"test-results\", \"node-coverage\")\n}\n\nfunction resolveVitestLauncher(): SpawnLauncher {\n const searchRoots = [process.cwd(), moduleDir]\n\n for (const base of searchRoots) {\n try {\n const pkgPath = require.resolve(\"vitest/package.json\", { paths: [base] })\n const pkgDir = path.dirname(pkgPath)\n const pkgJson = JSON.parse(fs.readFileSync(pkgPath, \"utf8\"))\n const binPath = typeof pkgJson.bin === \"string\" ? pkgJson.bin : pkgJson.bin?.vitest\n if (binPath) {\n return {\n command: process.execPath,\n args: [path.join(pkgDir, binPath)],\n }\n }\n } catch (_error) {\n // Continue searching for a usable vitest launcher.\n }\n }\n\n const localBin = path.resolve(process.cwd(), \"node_modules/.bin/vitest\")\n if (fs.existsSync(localBin)) {\n return {\n command: localBin,\n args: [],\n }\n }\n\n return {\n command: \"vitest\",\n args: [],\n }\n}\n\nfunction resolveVitestConfig(): string | null {\n const userConfig = findVitestConfig(process.cwd())\n if (userConfig) {\n return userConfig\n }\n\n const bundledConfig = path.join(moduleDir, \"..\", \"vitest.config.js\")\n return fs.existsSync(bundledConfig) ? bundledConfig : null\n}\n\nfunction findVitestConfig(baseDir: string): string | null {\n const candidates = [\n \"vitest.config.ts\",\n \"vitest.config.js\",\n \"vitest.config.mjs\",\n ]\n\n for (const file of candidates) {\n const fullPath = path.join(baseDir, file)\n if (fs.existsSync(fullPath)) {\n return fullPath\n }\n }\n\n return null\n}\n\nasync function convertNodeCoverage(coverage: { config: CoverageConfig; nodeCoverageDir: string }): Promise<void> {\n const { config, nodeCoverageDir } = coverage\n\n const entries = await fsPromises.readdir(nodeCoverageDir).catch(() => [])\n const scripts = []\n const scriptRoots = resolveCollectCoverageRoots(config.collectCoverageFrom, config.rootDir)\n\n for (const entry of entries) {\n if (!entry.endsWith(\".json\")) {\n continue\n }\n\n const fullPath = path.join(nodeCoverageDir, entry)\n const payload = await readJson(fullPath)\n const results = Array.isArray(payload?.result) ? payload.result : []\n\n for (const script of results) {\n const normalized = normalizeNodeScriptUrl(script.url, config.rootDir)\n if (!normalized) {\n continue\n }\n\n if (isNodeModulesPath(normalized.absolutePath)) {\n continue\n }\n\n if (!isInsideAnyRoot(normalized.absolutePath, scriptRoots)) {\n continue\n }\n\n const source = await fsPromises.readFile(normalized.absolutePath, \"utf8\").catch(() => \"\")\n\n scripts.push({\n absolutePath: normalized.absolutePath,\n relativePath: normalized.relativePath,\n source,\n functions: script.functions ?? [],\n url: script.url,\n })\n }\n }\n\n if (scripts.length === 0) {\n return\n }\n\n const outDir = path.join(config.rootDir, \"build\", \"vitest\", \"coverage\")\n await fsPromises.mkdir(outDir, { recursive: true })\n const outputFile = path.join(outDir, config.coverageFileName)\n await fsPromises.writeFile(outputFile, JSON.stringify({ testId: \"vitest\", scripts }, null, 2), \"utf8\")\n}\n\nasync function readJson(filePath: string): Promise<any | null> {\n try {\n const raw = await fsPromises.readFile(filePath, \"utf8\")\n return JSON.parse(raw)\n } catch {\n return null\n }\n}\n\nfunction normalizeNodeScriptUrl(\n rawUrl: string,\n rootDir: string,\n): { absolutePath: string; relativePath: string } | null {\n if (!rawUrl || rawUrl.startsWith(\"node:\")) {\n return null\n }\n\n let absolutePath = null\n\n try {\n if (rawUrl.startsWith(\"file://\")) {\n absolutePath = fileURLToPath(rawUrl)\n }\n } catch (_err) {\n // Ignore invalid file URLs in raw coverage payloads.\n }\n\n if (!absolutePath && path.isAbsolute(rawUrl)) {\n absolutePath = rawUrl\n }\n\n if (!absolutePath) {\n return null\n }\n\n const normalized = path.normalize(absolutePath)\n\n return {\n absolutePath: normalized,\n relativePath: path.relative(rootDir, normalized),\n }\n}\n\nfunction isNodeModulesPath(filePath: unknown): boolean {\n return path\n .normalize(String(filePath ?? \"\"))\n .split(path.sep)\n .includes(\"node_modules\")\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"vitest.js","names":[],"sources":["../../src/runners/vitest.ts"],"sourcesContent":["import fs from \"node:fs\"\nimport fsPromises from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { createRequire } from \"node:module\"\nimport { fileURLToPath } from \"node:url\"\n\nimport { isInsideAnyRoot, resolveCollectCoverageRoots } from \"../coverage/collect\"\nimport type { CoverageConfig } from \"../coverage/types\"\nimport { spawnWithLogs, withRegisterShim, type SpawnLauncher } from \"./process\"\n\n\nconst require = createRequire(import.meta.url)\nconst moduleDir = path.dirname(fileURLToPath(import.meta.url))\n\ntype CoverageState = { config: CoverageConfig; enabled: boolean } | null\n\nexport async function runVitest(\n coverage: CoverageState,\n combinedConfig: CoverageConfig | null,\n userArgs: string[],\n { disableCoverage = false }: { disableCoverage?: boolean } = {},\n): Promise<void> {\n const vitestArgs = [\"run\", \"--passWithNoTests\"]\n const vitestConfig = resolveVitestConfig()\n\n const hasCustomConfig = userArgs.some((arg) => {\n if (arg === \"--config\" || arg === \"-c\") {\n return true\n }\n return arg.startsWith(\"--config=\")\n })\n\n if (vitestConfig && !hasCustomConfig) {\n vitestArgs.push(\"--config\", vitestConfig)\n }\n vitestArgs.push(...userArgs)\n\n const launcher = resolveVitestLauncher()\n const env = withRegisterShim(process.env)\n\n if (disableCoverage) {\n env.RB_DISABLE_COVERAGE = \"1\"\n }\n\n if (coverage?.enabled && !disableCoverage) {\n const nodeCoverageDir = resolveNodeCoverageDir(combinedConfig ?? coverage.config)\n await fsPromises.mkdir(nodeCoverageDir, { recursive: true })\n env.NODE_V8_COVERAGE = nodeCoverageDir\n }\n\n await spawnWithLogs({\n name: \"Vitest\",\n launcher,\n args: vitestArgs,\n env,\n successMessage: \"Vitest suite passed!\",\n failureMessage: \"Vitest failed\",\n })\n\n if (coverage?.enabled && !disableCoverage) {\n await convertNodeCoverage({\n config: combinedConfig ?? coverage.config,\n nodeCoverageDir: resolveNodeCoverageDir(combinedConfig ?? coverage.config),\n })\n }\n}\n\nexport function resolveNodeCoverageDir(config: CoverageConfig): string {\n return path.join(config.rootDir, \"build\", \"vitest\", \"test-results\", \"node-coverage\")\n}\n\nfunction resolveVitestLauncher(): SpawnLauncher {\n const searchRoots = [process.cwd(), moduleDir]\n\n for (const base of searchRoots) {\n try {\n const pkgPath = require.resolve(\"vitest/package.json\", { paths: [base] })\n const pkgDir = path.dirname(pkgPath)\n const pkgJson = JSON.parse(fs.readFileSync(pkgPath, \"utf8\"))\n const binPath = typeof pkgJson.bin === \"string\" ? pkgJson.bin : pkgJson.bin?.vitest\n if (binPath) {\n return {\n command: process.execPath,\n args: [path.join(pkgDir, binPath)],\n }\n }\n } catch (_error) {\n // Continue searching for a usable vitest launcher.\n }\n }\n\n const localBin = path.resolve(process.cwd(), \"node_modules/.bin/vitest\")\n if (fs.existsSync(localBin)) {\n return {\n command: localBin,\n args: [],\n }\n }\n\n return {\n command: \"vitest\",\n args: [],\n }\n}\n\nfunction resolveVitestConfig(): string | null {\n const userConfig = findVitestConfig(process.cwd())\n if (userConfig) {\n return userConfig\n }\n\n const bundledConfig = path.join(moduleDir, \"..\", \"vitest.config.js\")\n return fs.existsSync(bundledConfig) ? bundledConfig : null\n}\n\nfunction findVitestConfig(baseDir: string): string | null {\n const candidates = [\n \"vitest.config.ts\",\n \"vitest.config.js\",\n \"vitest.config.mjs\",\n ]\n\n for (const file of candidates) {\n const fullPath = path.join(baseDir, file)\n if (fs.existsSync(fullPath)) {\n return fullPath\n }\n }\n\n return null\n}\n\nasync function convertNodeCoverage(coverage: { config: CoverageConfig; nodeCoverageDir: string }): Promise<void> {\n const { config, nodeCoverageDir } = coverage\n\n const entries = await fsPromises.readdir(nodeCoverageDir).catch(() => [])\n const scripts = []\n const scriptRoots = resolveCollectCoverageRoots(config.collectCoverageFrom, config.rootDir)\n\n for (const entry of entries) {\n if (!entry.endsWith(\".json\")) {\n continue\n }\n\n const fullPath = path.join(nodeCoverageDir, entry)\n const payload = await readJson(fullPath)\n const results = Array.isArray(payload?.result) ? payload.result : []\n\n for (const script of results) {\n const normalized = normalizeNodeScriptUrl(script.url, config.rootDir)\n if (!normalized) {\n continue\n }\n\n if (isNodeModulesPath(normalized.absolutePath)) {\n continue\n }\n\n if (!isInsideAnyRoot(normalized.absolutePath, scriptRoots)) {\n continue\n }\n\n const source = await fsPromises.readFile(normalized.absolutePath, \"utf8\").catch(() => \"\")\n\n scripts.push({\n absolutePath: normalized.absolutePath,\n relativePath: normalized.relativePath,\n source,\n functions: script.functions ?? [],\n url: script.url,\n })\n }\n }\n\n if (scripts.length === 0) {\n return\n }\n\n const outDir = path.join(config.rootDir, \"build\", \"vitest\", \"coverage\")\n await fsPromises.mkdir(outDir, { recursive: true })\n const outputFile = path.join(outDir, config.coverageFileName)\n await fsPromises.writeFile(outputFile, JSON.stringify({ testId: \"vitest\", scripts }, null, 2), \"utf8\")\n}\n\nasync function readJson(filePath: string): Promise<any | null> {\n try {\n const raw = await fsPromises.readFile(filePath, \"utf8\")\n return JSON.parse(raw)\n } catch {\n return null\n }\n}\n\nfunction normalizeNodeScriptUrl(\n rawUrl: string,\n rootDir: string,\n): { absolutePath: string; relativePath: string } | null {\n if (!rawUrl || rawUrl.startsWith(\"node:\")) {\n return null\n }\n\n let absolutePath = null\n\n try {\n if (rawUrl.startsWith(\"file://\")) {\n absolutePath = fileURLToPath(rawUrl)\n }\n } catch (_err) {\n // Ignore invalid file URLs in raw coverage payloads.\n }\n\n if (!absolutePath && path.isAbsolute(rawUrl)) {\n absolutePath = rawUrl\n }\n\n if (!absolutePath) {\n return null\n }\n\n const normalized = path.normalize(absolutePath)\n\n return {\n absolutePath: normalized,\n relativePath: path.relative(rootDir, normalized),\n }\n}\n\nfunction isNodeModulesPath(filePath: unknown): boolean {\n return path\n .normalize(String(filePath ?? \"\"))\n .split(path.sep)\n .includes(\"node_modules\")\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"serverCoverage.js","names":["FullConfig","SetupServerCoverageOptions","baseURL","strict","setupServerCoverage","config","options","Promise","process","env","RB_DISABLE_COVERAGE","resolveBaseURL","startResponse","fetch","method","ok","body","text","catch","Error","status","stopCoverage","stopResponse","raw","projects","use","PORT","trim","replace"],"sources":["../src/serverCoverage.ts"],"sourcesContent":["import type { FullConfig } from \"@playwright/test\"\n\n\ntype SetupServerCoverageOptions = {\n baseURL?: string\n strict?: boolean\n}\n\nexport async function setupServerCoverage(\n config: FullConfig,\n options: SetupServerCoverageOptions = {},\n): Promise<() => Promise<void>> {\n if (process.env.RB_DISABLE_COVERAGE === \"1\") {\n return async () => {}\n }\n\n const strict = options.strict ?? true\n const baseURL = resolveBaseURL(config, options, strict)\n if (!baseURL) {\n return async () => {}\n }\n\n const startResponse = await fetch(`${baseURL}/api/dev/coverage/start`, { method: \"POST\" })\n if (!startResponse.ok) {\n const body = await startResponse.text().catch(() => \"\")\n if (!strict) {\n return async () => {}\n }\n throw new Error(`Failed to start server coverage: ${startResponse.status} ${body}`)\n }\n\n return async function stopCoverage(): Promise<void> {\n const stopResponse = await fetch(`${baseURL}/api/dev/coverage/stop`, { method: \"POST\" })\n if (!stopResponse.ok) {\n const body = await stopResponse.text().catch(() => \"\")\n throw new Error(`Failed to stop server coverage: ${stopResponse.status} ${body}`)\n }\n }\n}\n\nfunction resolveBaseURL(config: FullConfig, options: SetupServerCoverageOptions, strict: boolean): string | null {\n const raw = options.baseURL ?? (config.projects?.[0]?.use as any)?.baseURL\n ?? (process.env.PORT ? `http://localhost:${process.env.PORT}` : null)\n\n if (typeof raw !== \"string\" || !raw.trim()) {\n if (!strict) {\n return null\n }\n throw new Error(\"Cannot resolve Playwright baseURL (missing config.projects[0].use.baseURL and PORT)\")\n }\n\n return raw.replace(/\\/$/, \"\")\n}\n"],"mappings":";AAQA,eAAsBI,oBACpBC,QACAC,UAAsC,CAAC,GACT;CAC9B,IAAIE,QAAQC,IAAIC,wBAAwB,KACtC,OAAO,YAAY,CAAC;CAGtB,MAAMP,SAASG,QAAQH,UAAU;CACjC,MAAMD,UAAUS,eAAeN,QAAQC,SAASH,MAAM;CACtD,IAAI,CAACD,SACH,OAAO,YAAY,CAAC;CAGtB,MAAMU,gBAAgB,MAAMC,MAAM,GAAGX,QAAO,0BAA2B,EAAEY,QAAQ,OAAO,CAAC;CACzF,IAAI,CAACF,cAAcG,IAAI;EACrB,MAAMC,OAAO,MAAMJ,cAAcK,KAAK,CAAC,CAACC,YAAY,EAAE;EACtD,IAAI,CAACf,QACH,OAAO,YAAY,CAAC;EAEtB,MAAM,IAAIgB,MAAM,oCAAoCP,cAAcQ,OAAM,GAAIJ,MAAM;CACpF;CAEA,OAAO,eAAeK,eAA8B;EAClD,MAAMC,eAAe,MAAMT,MAAM,GAAGX,QAAO,yBAA0B,EAAEY,QAAQ,OAAO,CAAC;EACvF,IAAI,CAACQ,aAAaP,IAAI;GACpB,MAAMC,OAAO,MAAMM,aAAaL,KAAK,CAAC,CAACC,YAAY,EAAE;GACrD,MAAM,IAAIC,MAAM,mCAAmCG,aAAaF,OAAM,GAAIJ,MAAM;EAClF;CACF;AACF;AAEA,SAASL,eAAeN,QAAoBC,SAAqCH,QAAgC;CAC/G,MAAMoB,MAAMjB,QAAQJ,YAAYG,OAAOmB,WAAW,EAAE,EAAEC,IAAAA,EAAavB,YAC7DM,QAAQC,IAAIiB,OAAO,oBAAoBlB,QAAQC,IAAIiB,SAAS;CAElE,IAAI,OAAOH,QAAQ,YAAY,CAACA,IAAII,KAAK,GAAG;EAC1C,IAAI,CAACxB,QACH,OAAO;EAET,MAAM,IAAIgB,MAAM,qFAAqF;CACvG;CAEA,OAAOI,IAAIK,QAAQ,OAAO,EAAE;AAC9B"}
1
+ {"version":3,"file":"serverCoverage.js","names":[],"sources":["../src/serverCoverage.ts"],"sourcesContent":["import type { FullConfig } from \"@playwright/test\"\n\n\ntype SetupServerCoverageOptions = {\n baseURL?: string\n strict?: boolean\n}\n\nexport async function setupServerCoverage(\n config: FullConfig,\n options: SetupServerCoverageOptions = {},\n): Promise<() => Promise<void>> {\n if (process.env.RB_DISABLE_COVERAGE === \"1\") {\n return async () => {}\n }\n\n const strict = options.strict ?? true\n const baseURL = resolveBaseURL(config, options, strict)\n if (!baseURL) {\n return async () => {}\n }\n\n const startResponse = await fetch(`${baseURL}/api/dev/coverage/start`, { method: \"POST\" })\n if (!startResponse.ok) {\n const body = await startResponse.text().catch(() => \"\")\n if (!strict) {\n return async () => {}\n }\n throw new Error(`Failed to start server coverage: ${startResponse.status} ${body}`)\n }\n\n return async function stopCoverage(): Promise<void> {\n const stopResponse = await fetch(`${baseURL}/api/dev/coverage/stop`, { method: \"POST\" })\n if (!stopResponse.ok) {\n const body = await stopResponse.text().catch(() => \"\")\n throw new Error(`Failed to stop server coverage: ${stopResponse.status} ${body}`)\n }\n }\n}\n\nfunction resolveBaseURL(config: FullConfig, options: SetupServerCoverageOptions, strict: boolean): string | null {\n const raw = options.baseURL ?? (config.projects?.[0]?.use as any)?.baseURL\n ?? (process.env.PORT ? `http://localhost:${process.env.PORT}` : null)\n\n if (typeof raw !== \"string\" || !raw.trim()) {\n if (!strict) {\n return null\n }\n throw new Error(\"Cannot resolve Playwright baseURL (missing config.projects[0].use.baseURL and PORT)\")\n }\n\n return raw.replace(/\\/$/, \"\")\n}\n"],"mappings":";AAQA,eAAsB,oBACpB,QACA,UAAsC,CAAC,GACT;CAC9B,IAAI,QAAQ,IAAI,wBAAwB,KACtC,OAAO,YAAY,CAAC;CAGtB,MAAM,SAAS,QAAQ,UAAU;CACjC,MAAM,UAAU,eAAe,QAAQ,SAAS,MAAM;CACtD,IAAI,CAAC,SACH,OAAO,YAAY,CAAC;CAGtB,MAAM,gBAAgB,MAAM,MAAM,GAAG,QAAQ,0BAA0B,EAAE,QAAQ,OAAO,CAAC;CACzF,IAAI,CAAC,cAAc,IAAI;EACrB,MAAM,OAAO,MAAM,cAAc,KAAK,CAAC,CAAC,YAAY,EAAE;EACtD,IAAI,CAAC,QACH,OAAO,YAAY,CAAC;EAEtB,MAAM,IAAI,MAAM,oCAAoC,cAAc,OAAO,GAAG,MAAM;CACpF;CAEA,OAAO,eAAe,eAA8B;EAClD,MAAM,eAAe,MAAM,MAAM,GAAG,QAAQ,yBAAyB,EAAE,QAAQ,OAAO,CAAC;EACvF,IAAI,CAAC,aAAa,IAAI;GACpB,MAAM,OAAO,MAAM,aAAa,KAAK,CAAC,CAAC,YAAY,EAAE;GACrD,MAAM,IAAI,MAAM,mCAAmC,aAAa,OAAO,GAAG,MAAM;EAClF;CACF;AACF;AAEA,SAAS,eAAe,QAAoB,SAAqC,QAAgC;CAC/G,MAAM,MAAM,QAAQ,YAAY,OAAO,WAAW,EAAE,EAAE,IAAA,EAAa,YAC7D,QAAQ,IAAI,OAAO,oBAAoB,QAAQ,IAAI,SAAS;CAElE,IAAI,OAAO,QAAQ,YAAY,CAAC,IAAI,KAAK,GAAG;EAC1C,IAAI,CAAC,QACH,OAAO;EAET,MAAM,IAAI,MAAM,qFAAqF;CACvG;CAEA,OAAO,IAAI,QAAQ,OAAO,EAAE;AAC9B"}
@@ -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 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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"}
1
+ {"version":3,"file":"vitest.config.js","names":[],"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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/test",
3
- "version": "0.403.0",
3
+ "version": "0.405.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -69,17 +69,17 @@
69
69
  "mongoose": "^9"
70
70
  },
71
71
  "dependencies": {
72
- "@playwright/test": "1.61.1",
73
- "esbuild": "0.28.1",
72
+ "@playwright/test": "1.62.1",
73
+ "esbuild": "0.28.2",
74
74
  "fast-glob": "3.3.3",
75
75
  "istanbul-lib-coverage": "3.2.2",
76
76
  "istanbul-lib-instrument": "6.0.3",
77
77
  "istanbul-lib-report": "3.0.1",
78
78
  "istanbul-reports": "3.2.0",
79
79
  "lodash": "4.18.1",
80
- "picomatch": "4.0.4",
80
+ "picomatch": "4.0.7",
81
81
  "v8-to-istanbul": "9.3.0",
82
- "vitest": "4.1.9",
83
- "yargs": "18.0.0"
82
+ "vitest": "4.1.11",
83
+ "yargs": "18.1.0"
84
84
  }
85
85
  }