@rpcbase/test 0.369.0 → 0.371.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,11 +1,11 @@
1
- import fs$1 from "node:fs/promises";
2
- import fs from "node:fs";
1
+ import fs from "node:fs/promises";
2
+ import fs$1 from "node:fs";
3
3
  import path from "node:path";
4
4
  import os from "node:os";
5
5
  import crypto from "node:crypto";
6
6
  import { createRequire } from "node:module";
7
7
  import { pathToFileURL } from "node:url";
8
- import { buildSync, build } from "esbuild";
8
+ import { build, buildSync } from "esbuild";
9
9
  const require$1 = createRequire(import.meta.url);
10
10
  const DEFAULT_COVERAGE_CANDIDATES = ["spec/coverage.config.ts", "spec/coverage.config.js", "spec/coverage.config.mjs", "spec/coverage.config.cjs", "spec/coverage.config.json"];
11
11
  const LEGACY_COVERAGE_CANDIDATES = ["spec/coverage.ts", "spec/coverage.js", "spec/coverage.mjs", "spec/coverage.cjs", "spec/coverage.json"];
@@ -61,7 +61,7 @@ async function findCoverageFile(root, candidates) {
61
61
  for (const relative of candidates) {
62
62
  const candidate = path.resolve(root, relative);
63
63
  try {
64
- await fs$1.access(candidate);
64
+ await fs.access(candidate);
65
65
  return candidate;
66
66
  } catch {
67
67
  }
@@ -72,7 +72,7 @@ function findCoverageFileSync(root, candidates) {
72
72
  for (const relative of candidates) {
73
73
  const candidate = path.resolve(root, relative);
74
74
  try {
75
- fs.accessSync(candidate);
75
+ fs$1.accessSync(candidate);
76
76
  return candidate;
77
77
  } catch {
78
78
  }
@@ -82,7 +82,7 @@ function findCoverageFileSync(root, candidates) {
82
82
  async function importCoverageModule(filePath) {
83
83
  const ext = path.extname(filePath);
84
84
  if (ext === ".json") {
85
- const raw = await fs$1.readFile(filePath, "utf8");
85
+ const raw = await fs.readFile(filePath, "utf8");
86
86
  return JSON.parse(raw);
87
87
  }
88
88
  if (ext === ".ts") {
@@ -95,7 +95,7 @@ async function importCoverageModule(filePath) {
95
95
  function importCoverageModuleSync(filePath) {
96
96
  const ext = path.extname(filePath);
97
97
  if (ext === ".json") {
98
- const raw = fs.readFileSync(filePath, "utf8");
98
+ const raw = fs$1.readFileSync(filePath, "utf8");
99
99
  return JSON.parse(raw);
100
100
  }
101
101
  if (ext === ".cjs") {
@@ -105,10 +105,10 @@ function importCoverageModuleSync(filePath) {
105
105
  return loadModuleSync(compiledPath);
106
106
  }
107
107
  async function compileTsModule(filePath) {
108
- const stat = await fs$1.stat(filePath);
108
+ const stat = await fs.stat(filePath);
109
109
  const hash = crypto.createHash("sha1").update(filePath).update(String(stat.mtimeMs)).digest("hex");
110
110
  const outDir = path.join(os.tmpdir(), "rpcbase-test");
111
- await fs$1.mkdir(outDir, {
111
+ await fs.mkdir(outDir, {
112
112
  recursive: true
113
113
  });
114
114
  const outfile = path.join(outDir, `coverage-${hash}.mjs`);
@@ -124,10 +124,10 @@ async function compileTsModule(filePath) {
124
124
  return pathToFileURL(outfile).href;
125
125
  }
126
126
  function compileCjsModuleSync(filePath) {
127
- const stat = fs.statSync(filePath);
127
+ const stat = fs$1.statSync(filePath);
128
128
  const hash = crypto.createHash("sha1").update(filePath).update(String(stat.mtimeMs)).digest("hex");
129
129
  const outDir = path.join(os.tmpdir(), "rpcbase-test");
130
- fs.mkdirSync(outDir, {
130
+ fs$1.mkdirSync(outDir, {
131
131
  recursive: true
132
132
  });
133
133
  const outfile = path.join(outDir, `coverage-${hash}.cjs`);
@@ -218,7 +218,7 @@ function withDefaultExcludes(patterns) {
218
218
  }
219
219
  async function isDirectory(filePath) {
220
220
  try {
221
- const stat = await fs$1.stat(filePath);
221
+ const stat = await fs.stat(filePath);
222
222
  return stat.isDirectory();
223
223
  } catch {
224
224
  return false;
@@ -226,7 +226,7 @@ async function isDirectory(filePath) {
226
226
  }
227
227
  function isDirectorySync(filePath) {
228
228
  try {
229
- const stat = fs.statSync(filePath);
229
+ const stat = fs$1.statSync(filePath);
230
230
  return stat.isDirectory();
231
231
  } catch {
232
232
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.js","sources":["../../src/coverage/config-loader.ts"],"sourcesContent":["import fs from \"node:fs/promises\"\nimport fsSync from \"node:fs\"\nimport path from \"node:path\"\nimport os from \"node:os\"\nimport crypto from \"node:crypto\"\nimport { createRequire } from \"node:module\"\nimport { pathToFileURL } from \"node:url\"\n\nimport { build, buildSync } from \"esbuild\"\n\nimport type { CoverageHarnessOptions } from \"./types\"\n\n\nconst require = createRequire(import.meta.url)\n\ntype LoadCoverageOptionsArgs = {\n optional?: boolean\n candidates?: string[]\n}\n\nconst DEFAULT_COVERAGE_CANDIDATES = [\n \"spec/coverage.config.ts\",\n \"spec/coverage.config.js\",\n \"spec/coverage.config.mjs\",\n \"spec/coverage.config.cjs\",\n \"spec/coverage.config.json\",\n]\n\nconst LEGACY_COVERAGE_CANDIDATES = [\n \"spec/coverage.ts\",\n \"spec/coverage.js\",\n \"spec/coverage.mjs\",\n \"spec/coverage.cjs\",\n \"spec/coverage.json\",\n]\n\nexport async function loadCoverageOptions({\n optional = false,\n candidates = DEFAULT_COVERAGE_CANDIDATES,\n}: LoadCoverageOptionsArgs = {}): Promise<CoverageHarnessOptions | null> {\n const projectRoot = process.cwd()\n const legacy = await findCoverageFile(projectRoot, LEGACY_COVERAGE_CANDIDATES)\n if (legacy) {\n const ext = path.extname(legacy)\n const suggested = path.join(\"spec\", `coverage.config${ext}`)\n throw new Error(\n `Legacy coverage config detected (${path.relative(projectRoot, legacy)}). Rename it to ${suggested}.`,\n )\n }\n\n const resolved = await findCoverageFile(projectRoot, candidates)\n\n if (!resolved) {\n if (optional) {\n return null\n }\n throw new Error(\n \"Coverage config not found. Create `spec/coverage.config.{ts,js,json}` with your coverage settings.\",\n )\n }\n\n const raw = await importCoverageModule(resolved)\n if (!raw || typeof raw !== \"object\") {\n throw new Error(`Coverage config at ${resolved} must export an object.`)\n }\n\n return await normalizeOptions(raw, resolved)\n}\n\nexport function loadCoverageOptionsSync({\n optional = false,\n candidates = DEFAULT_COVERAGE_CANDIDATES,\n}: LoadCoverageOptionsArgs = {}): CoverageHarnessOptions | null {\n const projectRoot = process.cwd()\n const legacy = findCoverageFileSync(projectRoot, LEGACY_COVERAGE_CANDIDATES)\n if (legacy) {\n const ext = path.extname(legacy)\n const suggested = path.join(\"spec\", `coverage.config${ext}`)\n throw new Error(\n `Legacy coverage config detected (${path.relative(projectRoot, legacy)}). Rename it to ${suggested}.`,\n )\n }\n\n const resolved = findCoverageFileSync(projectRoot, candidates)\n\n if (!resolved) {\n if (optional) {\n return null\n }\n throw new Error(\n \"Coverage config not found. Create `spec/coverage.config.{ts,js,json}` with your coverage settings.\",\n )\n }\n\n const raw = importCoverageModuleSync(resolved)\n if (!raw || typeof raw !== \"object\") {\n throw new Error(`Coverage config at ${resolved} must export an object.`)\n }\n\n return normalizeOptionsSync(raw, resolved)\n}\n\nasync function findCoverageFile(root: string, candidates: string[]): Promise<string | null> {\n for (const relative of candidates) {\n const candidate = path.resolve(root, relative)\n try {\n await fs.access(candidate)\n return candidate\n } catch {\n // continue\n }\n }\n return null\n}\n\nfunction findCoverageFileSync(root: string, candidates: string[]): string | null {\n for (const relative of candidates) {\n const candidate = path.resolve(root, relative)\n try {\n fsSync.accessSync(candidate)\n return candidate\n } catch {\n // continue\n }\n }\n return null\n}\n\nasync function importCoverageModule(filePath: string): Promise<unknown> {\n const ext = path.extname(filePath)\n\n if (ext === \".json\") {\n const raw = await fs.readFile(filePath, \"utf8\")\n return JSON.parse(raw)\n }\n\n if (ext === \".ts\") {\n const compiledUrl = await compileTsModule(filePath)\n return loadModule(compiledUrl)\n }\n\n const moduleUrl = pathToFileURL(filePath).href\n return loadModule(moduleUrl)\n}\n\nfunction importCoverageModuleSync(filePath: string): unknown {\n const ext = path.extname(filePath)\n\n if (ext === \".json\") {\n const raw = fsSync.readFileSync(filePath, \"utf8\")\n return JSON.parse(raw)\n }\n\n if (ext === \".cjs\") {\n return loadModuleSync(filePath)\n }\n\n const compiledPath = compileCjsModuleSync(filePath)\n return loadModuleSync(compiledPath)\n}\n\nasync function compileTsModule(filePath: string): Promise<string> {\n const stat = await fs.stat(filePath)\n const hash = crypto\n .createHash(\"sha1\")\n .update(filePath)\n .update(String(stat.mtimeMs))\n .digest(\"hex\")\n\n const outDir = path.join(os.tmpdir(), \"rpcbase-test\")\n await fs.mkdir(outDir, { recursive: true })\n const outfile = path.join(outDir, `coverage-${hash}.mjs`)\n\n await build({\n entryPoints: [filePath],\n outfile,\n platform: \"node\",\n format: \"esm\",\n bundle: false,\n sourcemap: \"inline\",\n logLevel: \"silent\",\n })\n\n return pathToFileURL(outfile).href\n}\n\nfunction compileCjsModuleSync(filePath: string): string {\n const stat = fsSync.statSync(filePath)\n const hash = crypto\n .createHash(\"sha1\")\n .update(filePath)\n .update(String(stat.mtimeMs))\n .digest(\"hex\")\n\n const outDir = path.join(os.tmpdir(), \"rpcbase-test\")\n fsSync.mkdirSync(outDir, { recursive: true })\n const outfile = path.join(outDir, `coverage-${hash}.cjs`)\n\n buildSync({\n entryPoints: [filePath],\n outfile,\n platform: \"node\",\n format: \"cjs\",\n bundle: false,\n sourcemap: \"inline\",\n logLevel: \"silent\",\n })\n\n return outfile\n}\n\nasync function loadModule(url: string): Promise<unknown> {\n const imported = await import(url)\n if (imported && typeof imported.default === \"object\") {\n return imported.default\n }\n return imported\n}\n\nfunction loadModuleSync(modulePath: string): unknown {\n const imported = require(modulePath)\n if (imported && typeof imported.default === \"object\") {\n return imported.default\n }\n return imported\n}\n\nconst DEFAULT_COLLECT_COVERAGE_EXTENSIONS = \"ts,tsx,js,jsx,mjs,cjs\"\nconst DEFAULT_COLLECT_COVERAGE_TEST_EXCLUDE = `!**/*.test.{${DEFAULT_COLLECT_COVERAGE_EXTENSIONS}}`\n\nasync function resolveCollectCoverageFrom(rawPatterns: unknown, rootDir: string): Promise<string[]> {\n const resolvedRootDir = path.resolve(String(rootDir ?? \"\"))\n\n const normalized = Array.isArray(rawPatterns)\n ? rawPatterns\n .map((pattern) => String(pattern ?? \"\").trim())\n .filter((pattern) => pattern.length > 0)\n : []\n\n const excludes = normalized.filter((pattern) => pattern.startsWith(\"!\"))\n const hasIncludes = normalized.some((pattern) => !pattern.startsWith(\"!\"))\n if (hasIncludes) {\n return withDefaultExcludes(normalized)\n }\n\n const defaults = await inferDefaultCollectCoverageFrom(resolvedRootDir)\n if (defaults.length === 0) {\n throw new Error(\n \"Coverage config: couldn't infer a default `collectCoverageFrom` (src/ directory missing). Provide `collectCoverageFrom` with at least one positive glob pattern.\",\n )\n }\n\n return withDefaultExcludes([...defaults, ...excludes])\n}\n\nfunction resolveCollectCoverageFromSync(rawPatterns: unknown, rootDir: string): string[] {\n const resolvedRootDir = path.resolve(String(rootDir ?? \"\"))\n\n const normalized = Array.isArray(rawPatterns)\n ? rawPatterns\n .map((pattern) => String(pattern ?? \"\").trim())\n .filter((pattern) => pattern.length > 0)\n : []\n\n const excludes = normalized.filter((pattern) => pattern.startsWith(\"!\"))\n const hasIncludes = normalized.some((pattern) => !pattern.startsWith(\"!\"))\n if (hasIncludes) {\n return withDefaultExcludes(normalized)\n }\n\n const defaults = inferDefaultCollectCoverageFromSync(resolvedRootDir)\n if (defaults.length === 0) {\n throw new Error(\n \"Coverage config: couldn't infer a default `collectCoverageFrom` (src/ directory missing). Provide `collectCoverageFrom` with at least one positive glob pattern.\",\n )\n }\n\n return withDefaultExcludes([...defaults, ...excludes])\n}\n\nasync function inferDefaultCollectCoverageFrom(rootDir: string): Promise<string[]> {\n const srcDir = path.join(rootDir, \"src\")\n if (await isDirectory(srcDir)) {\n return [`src/**/*.{${DEFAULT_COLLECT_COVERAGE_EXTENSIONS}}`]\n }\n\n return []\n}\n\nfunction inferDefaultCollectCoverageFromSync(rootDir: string): string[] {\n const srcDir = path.join(rootDir, \"src\")\n if (isDirectorySync(srcDir)) {\n return [`src/**/*.{${DEFAULT_COLLECT_COVERAGE_EXTENSIONS}}`]\n }\n\n return []\n}\n\nfunction withDefaultExcludes(patterns: string[]): string[] {\n if (!Array.isArray(patterns) || patterns.length === 0) {\n return patterns\n }\n\n const hasTestExclude = patterns.some((pattern) => {\n const raw = String(pattern ?? \"\")\n if (!raw.startsWith(\"!\")) {\n return false\n }\n return /\\.test(?:\\.|\\{|$)/.test(raw.slice(1))\n })\n if (hasTestExclude) {\n return patterns\n }\n\n return [...patterns, DEFAULT_COLLECT_COVERAGE_TEST_EXCLUDE]\n}\n\nasync function isDirectory(filePath: string): Promise<boolean> {\n try {\n const stat = await fs.stat(filePath)\n return stat.isDirectory()\n } catch {\n return false\n }\n}\n\nfunction isDirectorySync(filePath: string): boolean {\n try {\n const stat = fsSync.statSync(filePath)\n return stat.isDirectory()\n } catch {\n return false\n }\n}\n\nasync function normalizeOptions(\n rawOptions: any,\n filePath: string,\n): Promise<CoverageHarnessOptions> {\n const options = { ...rawOptions }\n const configDir = path.dirname(filePath)\n const rootDir = path.resolve(configDir, \"..\")\n\n const collectCoverageFrom = await resolveCollectCoverageFrom(options.collectCoverageFrom, rootDir)\n\n return {\n rootDir,\n collectCoverageFrom,\n coverageFileName: options.coverageFileName ?? \"v8-coverage.json\",\n includeAllFiles: options.includeAllFiles,\n thresholds: options.thresholds ?? {},\n }\n}\n\nfunction normalizeOptionsSync(\n rawOptions: any,\n filePath: string,\n): CoverageHarnessOptions {\n const options = { ...rawOptions }\n const configDir = path.dirname(filePath)\n const rootDir = path.resolve(configDir, \"..\")\n\n const collectCoverageFrom = resolveCollectCoverageFromSync(options.collectCoverageFrom, rootDir)\n\n return {\n rootDir,\n collectCoverageFrom,\n coverageFileName: options.coverageFileName ?? \"v8-coverage.json\",\n includeAllFiles: options.includeAllFiles,\n thresholds: options.thresholds ?? {},\n }\n}\n\nexport { DEFAULT_COVERAGE_CANDIDATES }\n"],"names":["require","createRequire","import","url","DEFAULT_COVERAGE_CANDIDATES","LEGACY_COVERAGE_CANDIDATES","loadCoverageOptions","optional","candidates","projectRoot","process","cwd","legacy","findCoverageFile","ext","path","extname","suggested","join","Error","relative","resolved","raw","importCoverageModule","normalizeOptions","loadCoverageOptionsSync","findCoverageFileSync","importCoverageModuleSync","normalizeOptionsSync","root","candidate","resolve","fs","access","fsSync","accessSync","filePath","readFile","JSON","parse","compiledUrl","compileTsModule","loadModule","moduleUrl","pathToFileURL","href","readFileSync","loadModuleSync","compiledPath","compileCjsModuleSync","stat","hash","crypto","createHash","update","String","mtimeMs","digest","outDir","os","tmpdir","mkdir","recursive","outfile","build","entryPoints","platform","format","bundle","sourcemap","logLevel","statSync","mkdirSync","buildSync","imported","default","modulePath","DEFAULT_COLLECT_COVERAGE_EXTENSIONS","DEFAULT_COLLECT_COVERAGE_TEST_EXCLUDE","resolveCollectCoverageFrom","rawPatterns","rootDir","resolvedRootDir","normalized","Array","isArray","map","pattern","trim","filter","length","excludes","startsWith","hasIncludes","some","withDefaultExcludes","defaults","inferDefaultCollectCoverageFrom","resolveCollectCoverageFromSync","inferDefaultCollectCoverageFromSync","srcDir","isDirectory","isDirectorySync","patterns","hasTestExclude","test","slice","rawOptions","options","configDir","dirname","collectCoverageFrom","coverageFileName","includeAllFiles","thresholds"],"mappings":"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"}
1
+ {"version":3,"file":"config-loader.js","sources":["../../src/coverage/config-loader.ts"],"sourcesContent":["import fs from \"node:fs/promises\"\nimport fsSync from \"node:fs\"\nimport path from \"node:path\"\nimport os from \"node:os\"\nimport crypto from \"node:crypto\"\nimport { createRequire } from \"node:module\"\nimport { pathToFileURL } from \"node:url\"\n\nimport { build, buildSync } from \"esbuild\"\n\nimport type { CoverageHarnessOptions } from \"./types\"\n\n\nconst require = createRequire(import.meta.url)\n\ntype LoadCoverageOptionsArgs = {\n optional?: boolean\n candidates?: string[]\n}\n\nconst DEFAULT_COVERAGE_CANDIDATES = [\n \"spec/coverage.config.ts\",\n \"spec/coverage.config.js\",\n \"spec/coverage.config.mjs\",\n \"spec/coverage.config.cjs\",\n \"spec/coverage.config.json\",\n]\n\nconst LEGACY_COVERAGE_CANDIDATES = [\n \"spec/coverage.ts\",\n \"spec/coverage.js\",\n \"spec/coverage.mjs\",\n \"spec/coverage.cjs\",\n \"spec/coverage.json\",\n]\n\nexport async function loadCoverageOptions({\n optional = false,\n candidates = DEFAULT_COVERAGE_CANDIDATES,\n}: LoadCoverageOptionsArgs = {}): Promise<CoverageHarnessOptions | null> {\n const projectRoot = process.cwd()\n const legacy = await findCoverageFile(projectRoot, LEGACY_COVERAGE_CANDIDATES)\n if (legacy) {\n const ext = path.extname(legacy)\n const suggested = path.join(\"spec\", `coverage.config${ext}`)\n throw new Error(\n `Legacy coverage config detected (${path.relative(projectRoot, legacy)}). Rename it to ${suggested}.`,\n )\n }\n\n const resolved = await findCoverageFile(projectRoot, candidates)\n\n if (!resolved) {\n if (optional) {\n return null\n }\n throw new Error(\n \"Coverage config not found. Create `spec/coverage.config.{ts,js,json}` with your coverage settings.\",\n )\n }\n\n const raw = await importCoverageModule(resolved)\n if (!raw || typeof raw !== \"object\") {\n throw new Error(`Coverage config at ${resolved} must export an object.`)\n }\n\n return await normalizeOptions(raw, resolved)\n}\n\nexport function loadCoverageOptionsSync({\n optional = false,\n candidates = DEFAULT_COVERAGE_CANDIDATES,\n}: LoadCoverageOptionsArgs = {}): CoverageHarnessOptions | null {\n const projectRoot = process.cwd()\n const legacy = findCoverageFileSync(projectRoot, LEGACY_COVERAGE_CANDIDATES)\n if (legacy) {\n const ext = path.extname(legacy)\n const suggested = path.join(\"spec\", `coverage.config${ext}`)\n throw new Error(\n `Legacy coverage config detected (${path.relative(projectRoot, legacy)}). Rename it to ${suggested}.`,\n )\n }\n\n const resolved = findCoverageFileSync(projectRoot, candidates)\n\n if (!resolved) {\n if (optional) {\n return null\n }\n throw new Error(\n \"Coverage config not found. Create `spec/coverage.config.{ts,js,json}` with your coverage settings.\",\n )\n }\n\n const raw = importCoverageModuleSync(resolved)\n if (!raw || typeof raw !== \"object\") {\n throw new Error(`Coverage config at ${resolved} must export an object.`)\n }\n\n return normalizeOptionsSync(raw, resolved)\n}\n\nasync function findCoverageFile(root: string, candidates: string[]): Promise<string | null> {\n for (const relative of candidates) {\n const candidate = path.resolve(root, relative)\n try {\n await fs.access(candidate)\n return candidate\n } catch {\n // continue\n }\n }\n return null\n}\n\nfunction findCoverageFileSync(root: string, candidates: string[]): string | null {\n for (const relative of candidates) {\n const candidate = path.resolve(root, relative)\n try {\n fsSync.accessSync(candidate)\n return candidate\n } catch {\n // continue\n }\n }\n return null\n}\n\nasync function importCoverageModule(filePath: string): Promise<unknown> {\n const ext = path.extname(filePath)\n\n if (ext === \".json\") {\n const raw = await fs.readFile(filePath, \"utf8\")\n return JSON.parse(raw)\n }\n\n if (ext === \".ts\") {\n const compiledUrl = await compileTsModule(filePath)\n return loadModule(compiledUrl)\n }\n\n const moduleUrl = pathToFileURL(filePath).href\n return loadModule(moduleUrl)\n}\n\nfunction importCoverageModuleSync(filePath: string): unknown {\n const ext = path.extname(filePath)\n\n if (ext === \".json\") {\n const raw = fsSync.readFileSync(filePath, \"utf8\")\n return JSON.parse(raw)\n }\n\n if (ext === \".cjs\") {\n return loadModuleSync(filePath)\n }\n\n const compiledPath = compileCjsModuleSync(filePath)\n return loadModuleSync(compiledPath)\n}\n\nasync function compileTsModule(filePath: string): Promise<string> {\n const stat = await fs.stat(filePath)\n const hash = crypto\n .createHash(\"sha1\")\n .update(filePath)\n .update(String(stat.mtimeMs))\n .digest(\"hex\")\n\n const outDir = path.join(os.tmpdir(), \"rpcbase-test\")\n await fs.mkdir(outDir, { recursive: true })\n const outfile = path.join(outDir, `coverage-${hash}.mjs`)\n\n await build({\n entryPoints: [filePath],\n outfile,\n platform: \"node\",\n format: \"esm\",\n bundle: false,\n sourcemap: \"inline\",\n logLevel: \"silent\",\n })\n\n return pathToFileURL(outfile).href\n}\n\nfunction compileCjsModuleSync(filePath: string): string {\n const stat = fsSync.statSync(filePath)\n const hash = crypto\n .createHash(\"sha1\")\n .update(filePath)\n .update(String(stat.mtimeMs))\n .digest(\"hex\")\n\n const outDir = path.join(os.tmpdir(), \"rpcbase-test\")\n fsSync.mkdirSync(outDir, { recursive: true })\n const outfile = path.join(outDir, `coverage-${hash}.cjs`)\n\n buildSync({\n entryPoints: [filePath],\n outfile,\n platform: \"node\",\n format: \"cjs\",\n bundle: false,\n sourcemap: \"inline\",\n logLevel: \"silent\",\n })\n\n return outfile\n}\n\nasync function loadModule(url: string): Promise<unknown> {\n const imported = await import(url)\n if (imported && typeof imported.default === \"object\") {\n return imported.default\n }\n return imported\n}\n\nfunction loadModuleSync(modulePath: string): unknown {\n const imported = require(modulePath)\n if (imported && typeof imported.default === \"object\") {\n return imported.default\n }\n return imported\n}\n\nconst DEFAULT_COLLECT_COVERAGE_EXTENSIONS = \"ts,tsx,js,jsx,mjs,cjs\"\nconst DEFAULT_COLLECT_COVERAGE_TEST_EXCLUDE = `!**/*.test.{${DEFAULT_COLLECT_COVERAGE_EXTENSIONS}}`\n\nasync function resolveCollectCoverageFrom(rawPatterns: unknown, rootDir: string): Promise<string[]> {\n const resolvedRootDir = path.resolve(String(rootDir ?? \"\"))\n\n const normalized = Array.isArray(rawPatterns)\n ? rawPatterns\n .map((pattern) => String(pattern ?? \"\").trim())\n .filter((pattern) => pattern.length > 0)\n : []\n\n const excludes = normalized.filter((pattern) => pattern.startsWith(\"!\"))\n const hasIncludes = normalized.some((pattern) => !pattern.startsWith(\"!\"))\n if (hasIncludes) {\n return withDefaultExcludes(normalized)\n }\n\n const defaults = await inferDefaultCollectCoverageFrom(resolvedRootDir)\n if (defaults.length === 0) {\n throw new Error(\n \"Coverage config: couldn't infer a default `collectCoverageFrom` (src/ directory missing). Provide `collectCoverageFrom` with at least one positive glob pattern.\",\n )\n }\n\n return withDefaultExcludes([...defaults, ...excludes])\n}\n\nfunction resolveCollectCoverageFromSync(rawPatterns: unknown, rootDir: string): string[] {\n const resolvedRootDir = path.resolve(String(rootDir ?? \"\"))\n\n const normalized = Array.isArray(rawPatterns)\n ? rawPatterns\n .map((pattern) => String(pattern ?? \"\").trim())\n .filter((pattern) => pattern.length > 0)\n : []\n\n const excludes = normalized.filter((pattern) => pattern.startsWith(\"!\"))\n const hasIncludes = normalized.some((pattern) => !pattern.startsWith(\"!\"))\n if (hasIncludes) {\n return withDefaultExcludes(normalized)\n }\n\n const defaults = inferDefaultCollectCoverageFromSync(resolvedRootDir)\n if (defaults.length === 0) {\n throw new Error(\n \"Coverage config: couldn't infer a default `collectCoverageFrom` (src/ directory missing). Provide `collectCoverageFrom` with at least one positive glob pattern.\",\n )\n }\n\n return withDefaultExcludes([...defaults, ...excludes])\n}\n\nasync function inferDefaultCollectCoverageFrom(rootDir: string): Promise<string[]> {\n const srcDir = path.join(rootDir, \"src\")\n if (await isDirectory(srcDir)) {\n return [`src/**/*.{${DEFAULT_COLLECT_COVERAGE_EXTENSIONS}}`]\n }\n\n return []\n}\n\nfunction inferDefaultCollectCoverageFromSync(rootDir: string): string[] {\n const srcDir = path.join(rootDir, \"src\")\n if (isDirectorySync(srcDir)) {\n return [`src/**/*.{${DEFAULT_COLLECT_COVERAGE_EXTENSIONS}}`]\n }\n\n return []\n}\n\nfunction withDefaultExcludes(patterns: string[]): string[] {\n if (!Array.isArray(patterns) || patterns.length === 0) {\n return patterns\n }\n\n const hasTestExclude = patterns.some((pattern) => {\n const raw = String(pattern ?? \"\")\n if (!raw.startsWith(\"!\")) {\n return false\n }\n return /\\.test(?:\\.|\\{|$)/.test(raw.slice(1))\n })\n if (hasTestExclude) {\n return patterns\n }\n\n return [...patterns, DEFAULT_COLLECT_COVERAGE_TEST_EXCLUDE]\n}\n\nasync function isDirectory(filePath: string): Promise<boolean> {\n try {\n const stat = await fs.stat(filePath)\n return stat.isDirectory()\n } catch {\n return false\n }\n}\n\nfunction isDirectorySync(filePath: string): boolean {\n try {\n const stat = fsSync.statSync(filePath)\n return stat.isDirectory()\n } catch {\n return false\n }\n}\n\nasync function normalizeOptions(\n rawOptions: any,\n filePath: string,\n): Promise<CoverageHarnessOptions> {\n const options = { ...rawOptions }\n const configDir = path.dirname(filePath)\n const rootDir = path.resolve(configDir, \"..\")\n\n const collectCoverageFrom = await resolveCollectCoverageFrom(options.collectCoverageFrom, rootDir)\n\n return {\n rootDir,\n collectCoverageFrom,\n coverageFileName: options.coverageFileName ?? \"v8-coverage.json\",\n includeAllFiles: options.includeAllFiles,\n thresholds: options.thresholds ?? {},\n }\n}\n\nfunction normalizeOptionsSync(\n rawOptions: any,\n filePath: string,\n): CoverageHarnessOptions {\n const options = { ...rawOptions }\n const configDir = path.dirname(filePath)\n const rootDir = path.resolve(configDir, \"..\")\n\n const collectCoverageFrom = resolveCollectCoverageFromSync(options.collectCoverageFrom, rootDir)\n\n return {\n rootDir,\n collectCoverageFrom,\n coverageFileName: options.coverageFileName ?? \"v8-coverage.json\",\n includeAllFiles: options.includeAllFiles,\n thresholds: options.thresholds ?? {},\n }\n}\n\nexport { DEFAULT_COVERAGE_CANDIDATES }\n"],"names":["require","createRequire","import","url","DEFAULT_COVERAGE_CANDIDATES","LEGACY_COVERAGE_CANDIDATES","loadCoverageOptions","optional","candidates","projectRoot","process","cwd","legacy","findCoverageFile","ext","path","extname","suggested","join","Error","relative","resolved","raw","importCoverageModule","normalizeOptions","loadCoverageOptionsSync","findCoverageFileSync","importCoverageModuleSync","normalizeOptionsSync","root","candidate","resolve","fs","access","fsSync","accessSync","filePath","readFile","JSON","parse","compiledUrl","compileTsModule","loadModule","moduleUrl","pathToFileURL","href","readFileSync","loadModuleSync","compiledPath","compileCjsModuleSync","stat","hash","crypto","createHash","update","String","mtimeMs","digest","outDir","os","tmpdir","mkdir","recursive","outfile","build","entryPoints","platform","format","bundle","sourcemap","logLevel","statSync","mkdirSync","buildSync","imported","default","modulePath","DEFAULT_COLLECT_COVERAGE_EXTENSIONS","DEFAULT_COLLECT_COVERAGE_TEST_EXCLUDE","resolveCollectCoverageFrom","rawPatterns","rootDir","resolvedRootDir","normalized","Array","isArray","map","pattern","trim","filter","length","excludes","startsWith","hasIncludes","some","withDefaultExcludes","defaults","inferDefaultCollectCoverageFrom","resolveCollectCoverageFromSync","inferDefaultCollectCoverageFromSync","srcDir","isDirectory","isDirectorySync","patterns","hasTestExclude","test","slice","rawOptions","options","configDir","dirname","collectCoverageFrom","coverageFileName","includeAllFiles","thresholds"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/test",
3
- "version": "0.369.0",
3
+ "version": "0.371.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -69,7 +69,7 @@
69
69
  "mongoose": "^9"
70
70
  },
71
71
  "dependencies": {
72
- "@playwright/test": "1.59.1",
72
+ "@playwright/test": "1.61.0",
73
73
  "esbuild": "0.28.0",
74
74
  "fast-glob": "3.3.3",
75
75
  "istanbul-lib-coverage": "3.2.2",