@gnapi/cotester 1.2.5 → 1.2.7

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.
Files changed (49) hide show
  1. package/dist/analyzer.d.ts +4 -0
  2. package/dist/analyzer.js +4 -0
  3. package/dist/analyzer.js.map +1 -1
  4. package/dist/auditLogger.d.ts +46 -0
  5. package/dist/auditLogger.js +107 -0
  6. package/dist/auditLogger.js.map +1 -0
  7. package/dist/checker.d.ts +11 -0
  8. package/dist/checker.js +32 -0
  9. package/dist/checker.js.map +1 -1
  10. package/dist/cli.js +22 -3
  11. package/dist/cli.js.map +1 -1
  12. package/dist/configManager.d.ts +16 -0
  13. package/dist/configManager.js +84 -17
  14. package/dist/configManager.js.map +1 -1
  15. package/dist/fileWorker.js +6 -1
  16. package/dist/fileWorker.js.map +1 -1
  17. package/dist/frameworkAdapter.d.ts +8 -0
  18. package/dist/frameworkAdapter.js +13 -1
  19. package/dist/frameworkAdapter.js.map +1 -1
  20. package/dist/generator.d.ts +24 -1
  21. package/dist/generator.js +161 -36
  22. package/dist/generator.js.map +1 -1
  23. package/dist/importRepairer.d.ts +22 -0
  24. package/dist/importRepairer.js +226 -0
  25. package/dist/importRepairer.js.map +1 -0
  26. package/dist/interfaceShapeResolver.js +8 -3
  27. package/dist/interfaceShapeResolver.js.map +1 -1
  28. package/dist/migrator.d.ts +49 -0
  29. package/dist/migrator.js +335 -0
  30. package/dist/migrator.js.map +1 -0
  31. package/dist/mockDataEngine.js +128 -0
  32. package/dist/mockDataEngine.js.map +1 -1
  33. package/dist/mockGenerator.js +3 -1
  34. package/dist/mockGenerator.js.map +1 -1
  35. package/dist/reporter.d.ts +1 -1
  36. package/dist/reporter.js +84 -0
  37. package/dist/reporter.js.map +1 -1
  38. package/dist/scenarioEngine.d.ts +3 -0
  39. package/dist/scenarioEngine.js +70 -1
  40. package/dist/scenarioEngine.js.map +1 -1
  41. package/dist/sensitiveValueDetector.d.ts +62 -0
  42. package/dist/sensitiveValueDetector.js +147 -0
  43. package/dist/sensitiveValueDetector.js.map +1 -0
  44. package/dist/validator.d.ts +25 -0
  45. package/dist/validator.js +150 -0
  46. package/dist/validator.js.map +1 -0
  47. package/dist/watcher.js +10 -1
  48. package/dist/watcher.js.map +1 -1
  49. package/package.json +1 -1
package/dist/reporter.js CHANGED
@@ -122,6 +122,10 @@ function renderReport(rows, checkResult, format, projectRoot) {
122
122
  return renderJson(rows, checkResult);
123
123
  case "html":
124
124
  return renderHtml(rows, checkResult, projectRoot);
125
+ case "junit":
126
+ return renderJunit(rows, checkResult);
127
+ case "lcov":
128
+ return renderLcov(rows);
125
129
  default:
126
130
  return renderMarkdown(rows, checkResult);
127
131
  }
@@ -267,4 +271,84 @@ function renderHtml(rows, checkResult, projectRoot) {
267
271
  </html>
268
272
  `;
269
273
  }
274
+ // ── JUnit XML ─────────────────────────────────────────────────────────────────
275
+ /**
276
+ * Render a JUnit XML report consumable by Jenkins, GitLab CI, Azure Pipelines,
277
+ * and GitHub Actions test-reporter integrations.
278
+ *
279
+ * Structure: one <testsuite> per source file, one <testcase> per function.
280
+ * Uncovered functions are emitted as <testcase> with a <failure> child.
281
+ */
282
+ function renderJunit(rows, checkResult) {
283
+ const lines = [];
284
+ lines.push(`<?xml version="1.0" encoding="UTF-8"?>`);
285
+ lines.push(`<testsuites name="CoTester Coverage" tests="${checkResult.totalFunctions}" ` +
286
+ `failures="${checkResult.totalFunctions - checkResult.coveredFunctions}" ` +
287
+ `timestamp="${new Date().toISOString()}">`);
288
+ for (const row of rows) {
289
+ const uncovered = row.totalFns - row.coveredFns;
290
+ lines.push(` <testsuite name="${escapeXml(row.relPath)}" ` +
291
+ `tests="${row.totalFns}" failures="${uncovered}" ` +
292
+ `skipped="${row.staleCount}">`);
293
+ if (row.coveredFns > 0) {
294
+ lines.push(` <testcase name="covered functions (${row.coveredFns}/${row.totalFns})" ` +
295
+ `classname="${escapeXml(row.relPath)}"/>`);
296
+ }
297
+ if (uncovered > 0) {
298
+ lines.push(` <testcase name="uncovered functions (${uncovered}/${row.totalFns})" ` +
299
+ `classname="${escapeXml(row.relPath)}">`);
300
+ lines.push(` <failure message="${uncovered} function(s) in ${escapeXml(row.relPath)} have no generated test describe block" ` +
301
+ `type="MissingTestCoverage"/>`);
302
+ lines.push(` </testcase>`);
303
+ }
304
+ if (row.staleCount > 0) {
305
+ lines.push(` <testcase name="stale tests (${row.staleCount})" ` +
306
+ `classname="${escapeXml(row.relPath)}">`);
307
+ lines.push(` <skipped message="${row.staleCount} function(s) have stale @testgen-sig signatures — rerun cotester generate"/>`);
308
+ lines.push(` </testcase>`);
309
+ }
310
+ lines.push(` </testsuite>`);
311
+ }
312
+ lines.push(`</testsuites>`);
313
+ return lines.join("\n") + "\n";
314
+ }
315
+ function escapeXml(s) {
316
+ return s
317
+ .replace(/&/g, "&amp;")
318
+ .replace(/</g, "&lt;")
319
+ .replace(/>/g, "&gt;")
320
+ .replace(/"/g, "&quot;")
321
+ .replace(/'/g, "&apos;");
322
+ }
323
+ // ── LCOV ──────────────────────────────────────────────────────────────────────
324
+ /**
325
+ * Render an LCOV tracefile consumable by SonarQube, CodeCov, Coveralls, and
326
+ * most enterprise quality-gate platforms.
327
+ *
328
+ * Format: one SF:/FN:/FNDA:/FNF:/FNH: block per source file.
329
+ * Since cotester tracks function-level coverage (not line-level), only
330
+ * function coverage records (FN/FNDA/FNF/FNH) are emitted.
331
+ */
332
+ function renderLcov(rows) {
333
+ const lines = [];
334
+ for (const row of rows) {
335
+ lines.push(`SF:${row.relPath}`);
336
+ // FN:<line>,<function_name> — line numbers unavailable, use 0 as placeholder
337
+ for (let i = 1; i <= row.totalFns; i++) {
338
+ lines.push(`FN:0,fn_${i}`);
339
+ }
340
+ // FNDA:<execution_count>,<function_name> — covered=1, uncovered=0
341
+ for (let i = 1; i <= row.coveredFns; i++) {
342
+ lines.push(`FNDA:1,fn_${i}`);
343
+ }
344
+ for (let i = row.coveredFns + 1; i <= row.totalFns; i++) {
345
+ lines.push(`FNDA:0,fn_${i}`);
346
+ }
347
+ lines.push(`FNF:${row.totalFns}`); // functions found
348
+ lines.push(`FNH:${row.coveredFns}`); // functions hit
349
+ lines.push("end_of_record");
350
+ lines.push("");
351
+ }
352
+ return lines.join("\n");
353
+ }
270
354
  //# sourceMappingURL=reporter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
@@ -17,9 +17,12 @@ export interface ScenarioCase {
17
17
  export interface TestScenario {
18
18
  functionName: string;
19
19
  className?: string;
20
+ /** true when this is a static class method */
21
+ isStatic?: boolean;
20
22
  parameters: {
21
23
  name: string;
22
24
  type: string;
25
+ isOptional?: boolean;
23
26
  }[];
24
27
  returnType: string;
25
28
  cases: ScenarioCase[];
@@ -14,7 +14,8 @@ function generateScenarios(functions, config, projectRoot) {
14
14
  return {
15
15
  functionName: fn.name,
16
16
  className: fn.className,
17
- parameters: fn.parameters.map((p) => ({ name: p.name, type: p.type })),
17
+ isStatic: fn.isStatic,
18
+ parameters: fn.parameters.map((p) => ({ name: p.name, type: p.type, isOptional: p.isOptional })),
18
19
  returnType: fn.returnType,
19
20
  cases,
20
21
  isAsync: fn.isAsync,
@@ -166,6 +167,50 @@ function buildCases(fn, config, projectRoot) {
166
167
  }
167
168
  }
168
169
  }
170
+ // ── Union-type exhaustion scenarios ─────────────────────────────────
171
+ // For parameters whose type is a string/number literal union, generate
172
+ // one scenario per union member (capped at 5 to avoid explosion).
173
+ for (const param of fn.parameters) {
174
+ const unionMembers = extractLiteralUnionMembers(param.type);
175
+ if (unionMembers.length > 1 && unionMembers.length <= 5) {
176
+ for (const member of unionMembers) {
177
+ const label = `handles ${param.name} = ${member}`;
178
+ if (!seen.has(label)) {
179
+ seen.add(label);
180
+ // Replace this param's literal with the union member; keep others from first mock set
181
+ const baseArgs = mockSets.length > 0
182
+ ? mockSets[0].args.map((a) => a.literal)
183
+ : paramNames.map(() => "undefined");
184
+ const argLiterals = paramNames.map((n, i) => n === param.name ? member : (baseArgs[i] ?? "undefined"));
185
+ cases.push({ label, argLiterals, paramNames, kind: "standard" });
186
+ }
187
+ }
188
+ }
189
+ }
190
+ // ── Optional-param omission scenario ────────────────────────────────
191
+ // When the function has optional parameters, add one scenario that
192
+ // calls it with only the required parameters (optional ones omitted).
193
+ const hasOptional = fn.parameters.some((p) => p.isOptional);
194
+ if (hasOptional) {
195
+ const label = "handles optional params omitted";
196
+ if (!seen.has(label)) {
197
+ seen.add(label);
198
+ const requiredNames = fn.parameters
199
+ .filter((p) => !p.isOptional)
200
+ .map((p) => p.name);
201
+ const requiredArgs = mockSets.length > 0
202
+ ? mockSets[0].args
203
+ .filter((_, i) => !fn.parameters[i]?.isOptional)
204
+ .map((a) => a.literal)
205
+ : [];
206
+ cases.push({
207
+ label,
208
+ argLiterals: requiredArgs,
209
+ paramNames: requiredNames,
210
+ kind: "standard",
211
+ });
212
+ }
213
+ }
169
214
  // ── Fallback ────────────────────────────────────────────────────────
170
215
  if (cases.length === 0) {
171
216
  cases.push({
@@ -177,4 +222,28 @@ function buildCases(fn, config, projectRoot) {
177
222
  }
178
223
  return cases;
179
224
  }
225
+ // ─── Union type helpers ───────────────────────────────────────────────────────
226
+ /**
227
+ * Parse a TypeScript type string and return the individual literal members
228
+ * if it is a string or number literal union (e.g. `'active' | 'inactive'`).
229
+ *
230
+ * Returns [] when the type is not a recognisable literal union or when it
231
+ * contains more than 5 members (to avoid scenario explosion).
232
+ *
233
+ * Examples:
234
+ * `'active' | 'inactive' | 'pending'` → [`'active'`, `'inactive'`, `'pending'`]
235
+ * `200 | 400 | 404 | 500` → [`200`, `400`, `404`, `500`]
236
+ * `string | number` → [] (not literal union)
237
+ */
238
+ function extractLiteralUnionMembers(typeStr) {
239
+ const trimmed = typeStr.trim();
240
+ if (!trimmed.includes("|"))
241
+ return [];
242
+ const members = trimmed.split("|").map((m) => m.trim());
243
+ // Each member must be a string literal ('...'), a number literal, or null/undefined/boolean
244
+ const LITERAL_RE = /^(?:'[^']*'|"[^"]*"|`[^`]*`|-?\d+(\.\d+)?|true|false|null|undefined)$/;
245
+ if (!members.every((m) => LITERAL_RE.test(m)))
246
+ return [];
247
+ return members;
248
+ }
180
249
  //# sourceMappingURL=scenarioEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scenarioEngine.js","sourceRoot":"","sources":["../src/scenarioEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scenarioEngine.js","sourceRoot":"","sources":["../src/scenarioEngine.ts"],"names":[],"mappings":";;AAkDA,8CA0BC;AA1ED,mDAAsF;AA0CtF;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC7B,SAAyB,EACzB,MAAqB,EACrB,WAAoB;IAEpB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACxB,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAClD,OAAO;YACH,YAAY,EAAE,EAAE,CAAC,IAAI;YACrB,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YAChG,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,KAAK;YACL,OAAO,EAAE,EAAE,CAAC,OAAO;YACnB,YAAY,EAAE,EAAE,CAAC,YAAY;YAC7B,YAAY,EAAE,EAAE,CAAC,YAAY;YAC7B,iBAAiB,EAAE,EAAE,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjD,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;aACf,CAAC,CAAC;YACH,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,QAAQ,EAAE,EAAE,CAAC,QAAQ;SACxB,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,UAAU,CAAC,EAAgB,EAAE,MAAqB,EAAE,WAAoB;IAC7E,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,uEAAuE;IACvE,MAAM,QAAQ,GAAiB,IAAA,gCAAgB,EAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAE/F,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC;gBACP,KAAK,EAAE,EAAE,CAAC,aAAa;gBACvB,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC1C,UAAU;gBACV,IAAI,EAAE,UAAU;aACnB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,MAAM,WAAW,GAAG,IAAA,qCAAqB,EAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IACzD,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvF,KAAK,CAAC,IAAI,CAAC;gBACP,KAAK;gBACL,WAAW,EAAE,YAAY;gBACzB,UAAU;gBACV,IAAI,EAAE,UAAU;aACnB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC;QAClB,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YACb,iDAAiD;YACjD,MAAM,KAAK,GAAG,0BAA0B,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAChB,kEAAkE;gBAClE,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;oBACjC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC1D,CAAC,CAAC,EAAE,CAAC;gBACT,KAAK,CAAC,IAAI,CAAC;oBACP,KAAK;oBACL,WAAW,EAAE,SAAS;oBACtB,UAAU;oBACV,IAAI,EAAE,SAAS;iBAClB,CAAC,CAAC;YACP,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,8CAA8C;YAC9C,MAAM,KAAK,GAAG,yBAAyB,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAChB,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;oBACjC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC1D,CAAC,CAAC,EAAE,CAAC;gBACT,KAAK,CAAC,IAAI,CAAC;oBACP,KAAK;oBACL,WAAW,EAAE,SAAS;oBACtB,UAAU;oBACV,IAAI,EAAE,QAAQ;iBACjB,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;SAAM,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACpB,sEAAsE;QACtE,MAAM,KAAK,GAAG,8BAA8B,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACpC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBACxC,CAAC,CAAC,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CAAC;gBACP,KAAK;gBACL,WAAW,EAAE,YAAY;gBACzB,UAAU;gBACV,IAAI,EAAE,SAAS;aAClB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,kCAAkC,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACpC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBACxC,CAAC,CAAC,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CAAC;gBACP,KAAK;gBACL,WAAW,EAAE,YAAY;gBACzB,UAAU;gBACV,IAAI,EAAE,UAAU;aACnB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC/B,qBAAqB;YACrB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACpB,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;oBACpC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;oBACxC,CAAC,CAAC,EAAE,CAAC;gBACT,KAAK,CAAC,IAAI,CAAC;oBACP,KAAK,EAAE,SAAS;oBAChB,WAAW,EAAE,YAAY;oBACzB,UAAU;oBACV,yEAAyE;oBACzE,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,OAAO;wBACzB,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;wBACtE,CAAC,CAAC,UAAU;iBACnB,CAAC,CAAC;YACP,CAAC;YAED,sBAAsB;YACtB,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACrB,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;oBACpC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;oBACvE,CAAC,CAAC,EAAE,CAAC;gBACT,KAAK,CAAC,IAAI,CAAC;oBACP,KAAK,EAAE,UAAU;oBACjB,WAAW,EAAE,YAAY;oBACzB,UAAU;oBACV,IAAI,EAAE,UAAU;iBACnB,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,uEAAuE;IACvE,kEAAkE;IAClE,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtD,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,WAAW,KAAK,CAAC,IAAI,MAAM,MAAM,EAAE,CAAC;gBAClD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAChB,sFAAsF;oBACtF,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;wBAChC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;wBACxC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;oBACxC,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACxC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAC3D,CAAC;oBACF,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;gBACrE,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,mEAAmE;IACnE,sEAAsE;IACtE,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,iCAAiC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU;iBAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;iBAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACpC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;qBACb,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;qBAC/C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC1B,CAAC,CAAC,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CAAC;gBACP,KAAK;gBACL,WAAW,EAAE,YAAY;gBACzB,UAAU,EAAE,aAAa;gBACzB,IAAI,EAAE,UAAU;aACnB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC;YACP,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EAAE,EAAE;YACf,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,UAAU;SACnB,CAAC,CAAC;IACP,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;;;;GAWG;AACH,SAAS,0BAA0B,CAAC,OAAe;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAExD,4FAA4F;IAC5F,MAAM,UAAU,GAAG,uEAAuE,CAAC;IAE3F,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAEzD,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Sensitive Value Detector (Security)
3
+ *
4
+ * Scans string literals that are about to be written into generated mock files
5
+ * and replaces any that match known credential/secret patterns with the safe
6
+ * placeholder `'REDACTED_FOR_TESTS'`.
7
+ *
8
+ * Covers:
9
+ * • JWT tokens (three base64url segments with realistic lengths)
10
+ * • OpenAI / Anthropic / generic sk- prefixed keys
11
+ * • Stripe live/test keys (pk_live_, sk_live_, pk_test_, sk_test_)
12
+ * • AWS access key IDs (AKIA…)
13
+ * • Google API keys (AIza…)
14
+ * • GitHub personal access tokens (ghp_, ghs_)
15
+ * • PEM private-key headers
16
+ * • Database connection strings that embed a password (scheme://user:pass@)
17
+ * • High-entropy hex blobs (≥ 32 hex chars)
18
+ *
19
+ * Design decisions:
20
+ * - All patterns require a minimum length to avoid false positives on
21
+ * short/obviously-fake values used in unit-test fixtures.
22
+ * - The JWT pattern requires a signature segment of ≥ 20 chars so the
23
+ * intentionally short placeholder in mockDataEngine is NOT redacted.
24
+ * - Detection is case-sensitive where real credentials always match a
25
+ * fixed casing (AWS, JWT headers), case-insensitive for word patterns.
26
+ */
27
+ /** The safe placeholder substituted for any detected sensitive value. */
28
+ export declare const REDACTED_PLACEHOLDER = "'REDACTED_FOR_TESTS'";
29
+ /**
30
+ * Check whether a raw string value (no surrounding quotes) matches any
31
+ * sensitive pattern.
32
+ *
33
+ * @returns The matched pattern name, or `null` when the value is clean.
34
+ */
35
+ export declare function detectSensitiveValue(rawValue: string): string | null;
36
+ /**
37
+ * Sanitize a TypeScript **string literal** (including its surrounding single
38
+ * or double quotes) that is about to be written into a mock file.
39
+ *
40
+ * - If the extracted value matches a sensitive pattern → returns
41
+ * `'REDACTED_FOR_TESTS'` and logs a security warning.
42
+ * - Otherwise → returns the original literal unchanged.
43
+ *
44
+ * Non-string literals (numbers, booleans, object literals, `null`, etc.) are
45
+ * returned unchanged — they cannot carry credential strings.
46
+ *
47
+ * @param literal The TypeScript source literal, e.g. `'sk-live-abc123'`
48
+ * @param context Optional description of where the literal came from
49
+ * (used only in the warning message).
50
+ */
51
+ export declare function sanitizeLiteral(literal: string, context?: string): string;
52
+ /**
53
+ * Sanitize a **raw string value** (without surrounding quotes) that is about
54
+ * to be embedded inside a larger generated literal (e.g. an object property).
55
+ *
56
+ * - If sensitive → returns the string `REDACTED_FOR_TESTS` (no quotes).
57
+ * - Otherwise → returns the original value unchanged.
58
+ *
59
+ * @param rawValue The bare string value, e.g. `sk-live-abc123`
60
+ * @param context Optional description for the warning message.
61
+ */
62
+ export declare function sanitizeRawValue(rawValue: string, context?: string): string;
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ /**
3
+ * Sensitive Value Detector (Security)
4
+ *
5
+ * Scans string literals that are about to be written into generated mock files
6
+ * and replaces any that match known credential/secret patterns with the safe
7
+ * placeholder `'REDACTED_FOR_TESTS'`.
8
+ *
9
+ * Covers:
10
+ * • JWT tokens (three base64url segments with realistic lengths)
11
+ * • OpenAI / Anthropic / generic sk- prefixed keys
12
+ * • Stripe live/test keys (pk_live_, sk_live_, pk_test_, sk_test_)
13
+ * • AWS access key IDs (AKIA…)
14
+ * • Google API keys (AIza…)
15
+ * • GitHub personal access tokens (ghp_, ghs_)
16
+ * • PEM private-key headers
17
+ * • Database connection strings that embed a password (scheme://user:pass@)
18
+ * • High-entropy hex blobs (≥ 32 hex chars)
19
+ *
20
+ * Design decisions:
21
+ * - All patterns require a minimum length to avoid false positives on
22
+ * short/obviously-fake values used in unit-test fixtures.
23
+ * - The JWT pattern requires a signature segment of ≥ 20 chars so the
24
+ * intentionally short placeholder in mockDataEngine is NOT redacted.
25
+ * - Detection is case-sensitive where real credentials always match a
26
+ * fixed casing (AWS, JWT headers), case-insensitive for word patterns.
27
+ */
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.REDACTED_PLACEHOLDER = void 0;
30
+ exports.detectSensitiveValue = detectSensitiveValue;
31
+ exports.sanitizeLiteral = sanitizeLiteral;
32
+ exports.sanitizeRawValue = sanitizeRawValue;
33
+ const utils_1 = require("./utils");
34
+ const SENSITIVE_PATTERNS = [
35
+ // JWT — header.payload.signature (all three segments must be non-trivial)
36
+ {
37
+ name: "JWT",
38
+ pattern: /eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{20,}/,
39
+ },
40
+ // OpenAI / Anthropic / generic sk- keys (supports sk-XXXX and sk-proj-XXXX formats)
41
+ {
42
+ name: "API key (sk- prefix)",
43
+ pattern: /\bsk-[A-Za-z0-9_-]{15,}\b/,
44
+ },
45
+ // Stripe-style keys
46
+ {
47
+ name: "Stripe API key",
48
+ pattern: /\b(?:pk_live|sk_live|pk_test|sk_test)_[A-Za-z0-9]{20,}\b/,
49
+ },
50
+ // AWS Access Key ID
51
+ {
52
+ name: "AWS access key ID",
53
+ pattern: /\bAKIA[0-9A-Z]{16}\b/,
54
+ },
55
+ // Google API key
56
+ {
57
+ name: "Google API key",
58
+ pattern: /\bAIza[0-9A-Za-z_-]{35}\b/,
59
+ },
60
+ // GitHub personal / server / actions tokens (ghp_, ghs_, gha_, ghr_)
61
+ {
62
+ name: "GitHub token",
63
+ pattern: /\bgh[psar]_[A-Za-z0-9]{30,}\b/,
64
+ },
65
+ // PEM private key block header
66
+ {
67
+ name: "PEM private key header",
68
+ pattern: /-----BEGIN (?:RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----/,
69
+ },
70
+ // Database URLs with embedded credentials: scheme://user:pass@host
71
+ {
72
+ name: "database URL with credentials",
73
+ pattern: /(?:mongodb|postgres(?:ql)?|mysql|redis|mariadb):\/\/[^:/?#\s]+:[^@\s]{4,}@/i,
74
+ },
75
+ // High-entropy hex blobs (≥ 32 consecutive hex chars — typical of secrets/hashes)
76
+ {
77
+ name: "high-entropy hex string",
78
+ pattern: /\b[0-9a-f]{32,}\b/i,
79
+ },
80
+ ];
81
+ // ─── Public API ───────────────────────────────────────────────────────────────
82
+ /** The safe placeholder substituted for any detected sensitive value. */
83
+ exports.REDACTED_PLACEHOLDER = "'REDACTED_FOR_TESTS'";
84
+ /**
85
+ * Check whether a raw string value (no surrounding quotes) matches any
86
+ * sensitive pattern.
87
+ *
88
+ * @returns The matched pattern name, or `null` when the value is clean.
89
+ */
90
+ function detectSensitiveValue(rawValue) {
91
+ for (const { name, pattern } of SENSITIVE_PATTERNS) {
92
+ if (pattern.test(rawValue))
93
+ return name;
94
+ }
95
+ return null;
96
+ }
97
+ /**
98
+ * Sanitize a TypeScript **string literal** (including its surrounding single
99
+ * or double quotes) that is about to be written into a mock file.
100
+ *
101
+ * - If the extracted value matches a sensitive pattern → returns
102
+ * `'REDACTED_FOR_TESTS'` and logs a security warning.
103
+ * - Otherwise → returns the original literal unchanged.
104
+ *
105
+ * Non-string literals (numbers, booleans, object literals, `null`, etc.) are
106
+ * returned unchanged — they cannot carry credential strings.
107
+ *
108
+ * @param literal The TypeScript source literal, e.g. `'sk-live-abc123'`
109
+ * @param context Optional description of where the literal came from
110
+ * (used only in the warning message).
111
+ */
112
+ function sanitizeLiteral(literal, context) {
113
+ // Only process string literals — must start with ' or "
114
+ const trimmed = literal.trim();
115
+ if (!trimmed.startsWith("'") && !trimmed.startsWith('"')) {
116
+ return literal;
117
+ }
118
+ // Extract raw value by stripping outer quotes
119
+ const rawValue = trimmed.slice(1, trimmed.length - 1);
120
+ const matched = detectSensitiveValue(rawValue);
121
+ if (matched) {
122
+ const where = context ? ` (from ${context})` : "";
123
+ (0, utils_1.log)(` ⚠ Security: sensitive value matching "${matched}" detected${where} — replaced with REDACTED_FOR_TESTS`, "warn");
124
+ return exports.REDACTED_PLACEHOLDER;
125
+ }
126
+ return literal;
127
+ }
128
+ /**
129
+ * Sanitize a **raw string value** (without surrounding quotes) that is about
130
+ * to be embedded inside a larger generated literal (e.g. an object property).
131
+ *
132
+ * - If sensitive → returns the string `REDACTED_FOR_TESTS` (no quotes).
133
+ * - Otherwise → returns the original value unchanged.
134
+ *
135
+ * @param rawValue The bare string value, e.g. `sk-live-abc123`
136
+ * @param context Optional description for the warning message.
137
+ */
138
+ function sanitizeRawValue(rawValue, context) {
139
+ const matched = detectSensitiveValue(rawValue);
140
+ if (matched) {
141
+ const where = context ? ` (from ${context})` : "";
142
+ (0, utils_1.log)(` ⚠ Security: sensitive value matching "${matched}" detected${where} — replaced with REDACTED_FOR_TESTS`, "warn");
143
+ return "REDACTED_FOR_TESTS";
144
+ }
145
+ return rawValue;
146
+ }
147
+ //# sourceMappingURL=sensitiveValueDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sensitiveValueDetector.js","sourceRoot":"","sources":["../src/sensitiveValueDetector.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;AAwEH,oDAKC;AAiBD,0CAqBC;AAYD,4CAWC;AAxID,mCAA8B;AAW9B,MAAM,kBAAkB,GAAuB;IAC3C,0EAA0E;IAC1E;QACI,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,+DAA+D;KAC3E;IACD,oFAAoF;IACpF;QACI,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,2BAA2B;KACvC;IACD,oBAAoB;IACpB;QACI,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,0DAA0D;KACtE;IACD,oBAAoB;IACpB;QACI,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,sBAAsB;KAClC;IACD,iBAAiB;IACjB;QACI,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,2BAA2B;KACvC;IACD,qEAAqE;IACrE;QACI,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,+BAA+B;KAC3C;IACD,+BAA+B;IAC/B;QACI,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,wDAAwD;KACpE;IACD,mEAAmE;IACnE;QACI,IAAI,EAAE,+BAA+B;QACrC,OAAO,EAAE,6EAA6E;KACzF;IACD,kFAAkF;IAClF;QACI,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,oBAAoB;KAChC;CACJ,CAAC;AAEF,iFAAiF;AAEjF,yEAAyE;AAC5D,QAAA,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D;;;;;GAKG;AACH,SAAgB,oBAAoB,CAAC,QAAgB;IACjD,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,kBAAkB,EAAE,CAAC;QACjD,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,eAAe,CAAC,OAAe,EAAE,OAAgB;IAC7D,wDAAwD;IACxD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,IAAA,WAAG,EACC,2CAA2C,OAAO,aAAa,KAAK,qCAAqC,EACzG,MAAM,CACT,CAAC;QACF,OAAO,4BAAoB,CAAC;IAChC,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,OAAgB;IAC/D,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,IAAA,WAAG,EACC,2CAA2C,OAAO,aAAa,KAAK,qCAAqC,EACzG,MAAM,CACT,CAAC;QACF,OAAO,oBAAoB,CAAC;IAChC,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * `cotester validate` — Compile-check Generated Tests
3
+ *
4
+ * Spawns `tsc --noEmit` scoped to the project's testDir and parses the output.
5
+ * Maps TypeScript errors back to source files and reports them clearly.
6
+ *
7
+ * Exits with code 1 if any compile errors are found, making it CI-safe.
8
+ */
9
+ export interface ValidateOptions {
10
+ /** Restrict validation to a subfolder of testDir (e.g. "services") */
11
+ folder?: string;
12
+ }
13
+ export interface ValidateResult {
14
+ errorCount: number;
15
+ warningCount: number;
16
+ passed: boolean;
17
+ }
18
+ /**
19
+ * Run TypeScript compile-check on generated test files.
20
+ *
21
+ * Uses the project's own tsconfig.json (if present) so the check respects
22
+ * the same compiler options the developer uses. Falls back to a minimal
23
+ * inline config when no tsconfig.json is found.
24
+ */
25
+ export declare function runValidate(opts?: ValidateOptions): ValidateResult;