@xenos1996/usa 2.0.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.
Files changed (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +335 -0
  3. package/USA.md +597 -0
  4. package/dist/bootstrap/catalog.d.ts +46 -0
  5. package/dist/bootstrap/catalog.d.ts.map +1 -0
  6. package/dist/bootstrap/catalog.js +312 -0
  7. package/dist/bootstrap/catalog.js.map +1 -0
  8. package/dist/bootstrap/index.d.ts +36 -0
  9. package/dist/bootstrap/index.d.ts.map +1 -0
  10. package/dist/bootstrap/index.js +177 -0
  11. package/dist/bootstrap/index.js.map +1 -0
  12. package/dist/cli.d.ts +5 -0
  13. package/dist/cli.d.ts.map +1 -0
  14. package/dist/cli.js +706 -0
  15. package/dist/cli.js.map +1 -0
  16. package/dist/config.d.ts +7 -0
  17. package/dist/config.d.ts.map +1 -0
  18. package/dist/config.js +88 -0
  19. package/dist/config.js.map +1 -0
  20. package/dist/detect/index.d.ts +58 -0
  21. package/dist/detect/index.d.ts.map +1 -0
  22. package/dist/detect/index.js +329 -0
  23. package/dist/detect/index.js.map +1 -0
  24. package/dist/engine/audit.d.ts +32 -0
  25. package/dist/engine/audit.d.ts.map +1 -0
  26. package/dist/engine/audit.js +366 -0
  27. package/dist/engine/audit.js.map +1 -0
  28. package/dist/engine/diff.d.ts +24 -0
  29. package/dist/engine/diff.d.ts.map +1 -0
  30. package/dist/engine/diff.js +136 -0
  31. package/dist/engine/diff.js.map +1 -0
  32. package/dist/engine/evaluate.d.ts +19 -0
  33. package/dist/engine/evaluate.d.ts.map +1 -0
  34. package/dist/engine/evaluate.js +377 -0
  35. package/dist/engine/evaluate.js.map +1 -0
  36. package/dist/engine/gate.d.ts +19 -0
  37. package/dist/engine/gate.d.ts.map +1 -0
  38. package/dist/engine/gate.js +47 -0
  39. package/dist/engine/gate.js.map +1 -0
  40. package/dist/engine/loader.d.ts +37 -0
  41. package/dist/engine/loader.d.ts.map +1 -0
  42. package/dist/engine/loader.js +388 -0
  43. package/dist/engine/loader.js.map +1 -0
  44. package/dist/engine/maturity.d.ts +20 -0
  45. package/dist/engine/maturity.d.ts.map +1 -0
  46. package/dist/engine/maturity.js +157 -0
  47. package/dist/engine/maturity.js.map +1 -0
  48. package/dist/engine/score.d.ts +19 -0
  49. package/dist/engine/score.d.ts.map +1 -0
  50. package/dist/engine/score.js +141 -0
  51. package/dist/engine/score.js.map +1 -0
  52. package/dist/engine/sections.d.ts +14 -0
  53. package/dist/engine/sections.d.ts.map +1 -0
  54. package/dist/engine/sections.js +50 -0
  55. package/dist/engine/sections.js.map +1 -0
  56. package/dist/evolution/benchmark.d.ts +12 -0
  57. package/dist/evolution/benchmark.d.ts.map +1 -0
  58. package/dist/evolution/benchmark.js +107 -0
  59. package/dist/evolution/benchmark.js.map +1 -0
  60. package/dist/evolution/capability.d.ts +22 -0
  61. package/dist/evolution/capability.d.ts.map +1 -0
  62. package/dist/evolution/capability.js +69 -0
  63. package/dist/evolution/capability.js.map +1 -0
  64. package/dist/evolution/coverage.d.ts +15 -0
  65. package/dist/evolution/coverage.d.ts.map +1 -0
  66. package/dist/evolution/coverage.js +65 -0
  67. package/dist/evolution/coverage.js.map +1 -0
  68. package/dist/evolution/gap.d.ts +10 -0
  69. package/dist/evolution/gap.d.ts.map +1 -0
  70. package/dist/evolution/gap.js +52 -0
  71. package/dist/evolution/gap.js.map +1 -0
  72. package/dist/evolution/propose.d.ts +50 -0
  73. package/dist/evolution/propose.d.ts.map +1 -0
  74. package/dist/evolution/propose.js +188 -0
  75. package/dist/evolution/propose.js.map +1 -0
  76. package/dist/evolution/queue.d.ts +64 -0
  77. package/dist/evolution/queue.d.ts.map +1 -0
  78. package/dist/evolution/queue.js +192 -0
  79. package/dist/evolution/queue.js.map +1 -0
  80. package/dist/evolution/release.d.ts +11 -0
  81. package/dist/evolution/release.d.ts.map +1 -0
  82. package/dist/evolution/release.js +55 -0
  83. package/dist/evolution/release.js.map +1 -0
  84. package/dist/evolution/run.d.ts +88 -0
  85. package/dist/evolution/run.d.ts.map +1 -0
  86. package/dist/evolution/run.js +258 -0
  87. package/dist/evolution/run.js.map +1 -0
  88. package/dist/evolution/schedule.d.ts +59 -0
  89. package/dist/evolution/schedule.d.ts.map +1 -0
  90. package/dist/evolution/schedule.js +77 -0
  91. package/dist/evolution/schedule.js.map +1 -0
  92. package/dist/evolution/types.d.ts +174 -0
  93. package/dist/evolution/types.d.ts.map +1 -0
  94. package/dist/evolution/types.js +8 -0
  95. package/dist/evolution/types.js.map +1 -0
  96. package/dist/index.d.ts +36 -0
  97. package/dist/index.d.ts.map +1 -0
  98. package/dist/index.js +30 -0
  99. package/dist/index.js.map +1 -0
  100. package/dist/learn/index.d.ts +27 -0
  101. package/dist/learn/index.d.ts.map +1 -0
  102. package/dist/learn/index.js +196 -0
  103. package/dist/learn/index.js.map +1 -0
  104. package/dist/report/markdown.d.ts +16 -0
  105. package/dist/report/markdown.d.ts.map +1 -0
  106. package/dist/report/markdown.js +488 -0
  107. package/dist/report/markdown.js.map +1 -0
  108. package/dist/snapshot/index.d.ts +55 -0
  109. package/dist/snapshot/index.d.ts.map +1 -0
  110. package/dist/snapshot/index.js +76 -0
  111. package/dist/snapshot/index.js.map +1 -0
  112. package/dist/store/index.d.ts +31 -0
  113. package/dist/store/index.d.ts.map +1 -0
  114. package/dist/store/index.js +69 -0
  115. package/dist/store/index.js.map +1 -0
  116. package/dist/types.d.ts +287 -0
  117. package/dist/types.d.ts.map +1 -0
  118. package/dist/types.js +16 -0
  119. package/dist/types.js.map +1 -0
  120. package/dist/util/glob.d.ts +11 -0
  121. package/dist/util/glob.d.ts.map +1 -0
  122. package/dist/util/glob.js +86 -0
  123. package/dist/util/glob.js.map +1 -0
  124. package/dist/util/project.d.ts +90 -0
  125. package/dist/util/project.d.ts.map +1 -0
  126. package/dist/util/project.js +636 -0
  127. package/dist/util/project.js.map +1 -0
  128. package/dist/util/yaml.d.ts +28 -0
  129. package/dist/util/yaml.d.ts.map +1 -0
  130. package/dist/util/yaml.js +48 -0
  131. package/dist/util/yaml.js.map +1 -0
  132. package/package.json +94 -0
  133. package/rules/core/architecture.yaml +190 -0
  134. package/rules/core/cicd.yaml +212 -0
  135. package/rules/core/code-quality.yaml +261 -0
  136. package/rules/core/dependencies.yaml +132 -0
  137. package/rules/core/documentation.yaml +119 -0
  138. package/rules/core/future-readiness.yaml +91 -0
  139. package/rules/core/release.yaml +131 -0
  140. package/rules/core/repo.yaml +313 -0
  141. package/rules/core/security.yaml +496 -0
  142. package/rules/core/supply-chain.yaml +357 -0
  143. package/rules/core/testing.yaml +266 -0
  144. package/rules/detectors.yaml +2028 -0
  145. package/rules/index.yaml +42 -0
  146. package/rules/profiles/maturity.yaml +135 -0
  147. package/rules/stacks/ai-era.yaml +193 -0
  148. package/rules/stacks/api-backend.yaml +121 -0
  149. package/rules/stacks/cli.yaml +105 -0
  150. package/rules/stacks/compliance.yaml +157 -0
  151. package/rules/stacks/containers.yaml +124 -0
  152. package/rules/stacks/data.yaml +165 -0
  153. package/rules/stacks/go.yaml +134 -0
  154. package/rules/stacks/iac.yaml +128 -0
  155. package/rules/stacks/jvm.yaml +150 -0
  156. package/rules/stacks/ml-ai.yaml +140 -0
  157. package/rules/stacks/mobile.yaml +121 -0
  158. package/rules/stacks/node-typescript.yaml +166 -0
  159. package/rules/stacks/python.yaml +175 -0
  160. package/rules/stacks/rust.yaml +129 -0
  161. package/rules/stacks/solidity.yaml +139 -0
  162. package/rules/stacks/swift.yaml +100 -0
  163. package/rules/stacks/web-frontend.yaml +159 -0
@@ -0,0 +1,636 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { matchesAny, matchesGlob, isLiteralPath } from './glob.js';
5
+ /**
6
+ * Files that ARE part of the project index but should never be grepped or read:
7
+ * lockfiles, minified bundles, source maps. They must stay in the index (a rule
8
+ * asking "is a lockfile committed?" has to see them) but scanning them produces
9
+ * noise, false positives, and a lot of wasted I/O.
10
+ */
11
+ export const GREP_SKIP = [
12
+ 'package-lock.json',
13
+ 'yarn.lock',
14
+ 'pnpm-lock.yaml',
15
+ 'bun.lockb',
16
+ 'bun.lock',
17
+ 'poetry.lock',
18
+ 'uv.lock',
19
+ 'pdm.lock',
20
+ 'Pipfile.lock',
21
+ 'Cargo.lock',
22
+ 'go.sum',
23
+ 'composer.lock',
24
+ 'Gemfile.lock',
25
+ 'flake.lock',
26
+ '**/*.lock',
27
+ '**/*.min.js',
28
+ '**/*.min.css',
29
+ '**/*.map',
30
+ '**/*.bundle.js',
31
+ '**/*.generated.*',
32
+ ];
33
+ /** Directories and files never worth auditing. */
34
+ export const DEFAULT_IGNORES = [
35
+ '.git/**',
36
+ 'node_modules/**',
37
+ '**/node_modules/**',
38
+ 'dist/**',
39
+ '**/dist/**',
40
+ 'build/**',
41
+ '**/build/**',
42
+ 'out/**',
43
+ 'coverage/**',
44
+ '.next/**',
45
+ '.nuxt/**',
46
+ '.svelte-kit/**',
47
+ '.turbo/**',
48
+ '.venv/**',
49
+ 'venv/**',
50
+ '__pycache__/**',
51
+ '**/__pycache__/**',
52
+ '.mypy_cache/**',
53
+ '.pytest_cache/**',
54
+ '.ruff_cache/**',
55
+ 'target/**',
56
+ 'vendor/**',
57
+ '**/*.png',
58
+ '**/*.jpg',
59
+ '**/*.jpeg',
60
+ '**/*.gif',
61
+ '**/*.ico',
62
+ '**/*.webp',
63
+ '**/*.woff',
64
+ '**/*.woff2',
65
+ '**/*.ttf',
66
+ '**/*.pdf',
67
+ '**/*.zip',
68
+ '**/*.gz',
69
+ '**/*.wasm',
70
+ '**/*.pyc',
71
+ '**/*.class',
72
+ '**/*.jar',
73
+ ];
74
+ /** Files whose contents we are willing to read as text. */
75
+ const TEXT_EXT = new Set([
76
+ '.ts',
77
+ '.tsx',
78
+ '.js',
79
+ '.jsx',
80
+ '.mjs',
81
+ '.cjs',
82
+ '.mts',
83
+ '.cts',
84
+ '.py',
85
+ '.go',
86
+ '.rs',
87
+ '.java',
88
+ '.kt',
89
+ '.kts',
90
+ '.swift',
91
+ '.rb',
92
+ '.php',
93
+ '.c',
94
+ '.h',
95
+ '.cc',
96
+ '.cpp',
97
+ '.hpp',
98
+ '.cs',
99
+ '.scala',
100
+ '.clj',
101
+ '.ex',
102
+ '.exs',
103
+ '.sh',
104
+ '.bash',
105
+ '.zsh',
106
+ '.ps1',
107
+ '.fish',
108
+ '.json',
109
+ '.jsonc',
110
+ '.json5',
111
+ '.yaml',
112
+ '.yml',
113
+ '.toml',
114
+ '.ini',
115
+ '.cfg',
116
+ '.conf',
117
+ '.env',
118
+ '.properties',
119
+ '.gradle',
120
+ '.mk',
121
+ '.make',
122
+ '.md',
123
+ '.mdx',
124
+ '.txt',
125
+ '.rst',
126
+ '.adoc',
127
+ '.html',
128
+ '.htm',
129
+ '.css',
130
+ '.scss',
131
+ '.sass',
132
+ '.less',
133
+ '.vue',
134
+ '.svelte',
135
+ '.astro',
136
+ '.sql',
137
+ '.graphql',
138
+ '.gql',
139
+ '.proto',
140
+ '.tf',
141
+ '.hcl',
142
+ '.sol',
143
+ '.zig',
144
+ '.lua',
145
+ '.r',
146
+ '.dockerfile',
147
+ '.editorconfig',
148
+ '.gitignore',
149
+ '.gitattributes',
150
+ // Manifests and templates that carry no language-extension hint.
151
+ '.mod',
152
+ '.sum',
153
+ '.gemspec',
154
+ '.podspec',
155
+ '.sbt',
156
+ '.groovy',
157
+ '.gradle',
158
+ '.cmake',
159
+ '.erb',
160
+ '.haml',
161
+ '.twig',
162
+ '.mustache',
163
+ '.handlebars',
164
+ '.hbs',
165
+ '.pug',
166
+ '.tfvars',
167
+ '.nix',
168
+ '.bazel',
169
+ '.bzl',
170
+ '.ninja',
171
+ '.pl',
172
+ '.pm',
173
+ '.tcl',
174
+ '.awk',
175
+ '.vim',
176
+ '.el',
177
+ '.ml',
178
+ '.fs',
179
+ '.fsx',
180
+ '.v',
181
+ '.sv',
182
+ '.vhd',
183
+ '.asm',
184
+ '.s',
185
+ '.nim',
186
+ '.cr',
187
+ '.jl',
188
+ '.ipynb',
189
+ '.gemfile',
190
+ ]);
191
+ export const MAX_FILE_BYTES = 2 * 1024 * 1024; // 2 MB — skip anything bigger
192
+ export const MAX_FILES = 60_000; // hard safety valve for pathological trees
193
+ /** Reads cached under a bounded LRU: big trees must not grow memory with files. */
194
+ const CONTENT_CACHE_CAP = 1000;
195
+ export class Project {
196
+ root;
197
+ files = [];
198
+ ignores;
199
+ contentCache = new Map();
200
+ dirCache = new Set();
201
+ tracked = null;
202
+ maxFiles;
203
+ maxBytes;
204
+ /**
205
+ * True when indexing stopped at MAX_FILES — the tree is bigger than the
206
+ * audit can see, so PASS verdicts may rest on unindexed files. Always
207
+ * surfaced as a warning, never silently absorbed into the score.
208
+ */
209
+ truncated = false;
210
+ /** Files skipped for exceeding MAX_FILE_BYTES (counted once each). */
211
+ skippedLarge = 0;
212
+ constructor(root, extraIgnores = [], limits = {}) {
213
+ this.root = path.resolve(root);
214
+ this.ignores = [...DEFAULT_IGNORES, ...extraIgnores.map(normalizeIgnore)];
215
+ this.maxFiles = normalizeLimit(limits.maxFiles, MAX_FILES);
216
+ this.maxBytes = normalizeLimit(limits.maxBytes, MAX_FILE_BYTES);
217
+ this.walk();
218
+ }
219
+ /* ------------------------------------------------------------- indexing -- */
220
+ walk() {
221
+ const root = this.root;
222
+ if (!isDir(root))
223
+ return;
224
+ const gitignore = readGitignore(path.join(root, '.gitignore'));
225
+ const stack = [''];
226
+ while (stack.length > 0) {
227
+ const relDir = stack.pop();
228
+ if (this.files.length >= this.maxFiles) {
229
+ this.truncated = true;
230
+ return;
231
+ }
232
+ const absDir = path.join(root, relDir);
233
+ let entries;
234
+ try {
235
+ entries = fs.readdirSync(absDir, { withFileTypes: true });
236
+ }
237
+ catch {
238
+ continue;
239
+ }
240
+ for (const entry of entries) {
241
+ // Per-file bound (the per-directory check above only saves a
242
+ // readdir): with huge flat directories the cap must bite exactly,
243
+ // or a "max 3 files" audit silently audits 5.
244
+ if (this.files.length >= this.maxFiles) {
245
+ this.truncated = true;
246
+ return;
247
+ }
248
+ this.visitEntry(entry, relDir, gitignore, stack);
249
+ }
250
+ }
251
+ this.files.sort();
252
+ }
253
+ visitEntry(entry, relDir, gitignore, stack) {
254
+ const rel = relDir ? `${relDir}/${entry.name}` : entry.name;
255
+ const isDirectory = entry.isDirectory();
256
+ const relWithSlash = isDirectory ? `${rel}/` : rel;
257
+ if (rel === '.git')
258
+ return;
259
+ if (matchesAny(relWithSlash, this.ignores) || matchesAny(rel, this.ignores))
260
+ return;
261
+ if (gitignore.some((g) => matchGitignore(g, rel, isDirectory)))
262
+ return;
263
+ if (isDirectory) {
264
+ this.dirCache.add(rel);
265
+ stack.push(rel);
266
+ }
267
+ else if (entry.isFile()) {
268
+ this.dirCache.add(relDir);
269
+ this.files.push(rel);
270
+ }
271
+ }
272
+ /* -------------------------------------------------------------- queries -- */
273
+ /** All files matching at least one of `globs`. */
274
+ glob(globs) {
275
+ const literal = globs.filter(isLiteralPath);
276
+ const patterns = globs.filter((g) => !isLiteralPath(g));
277
+ return this.files.filter((f) => {
278
+ if (literal.includes(f))
279
+ return true;
280
+ return patterns.some((p) => matchesGlob(f, p));
281
+ });
282
+ }
283
+ has(glob) {
284
+ return this.glob([glob]).length > 0;
285
+ }
286
+ dirExists(dir) {
287
+ // Trailing slashes are trimmed by index rather than /\/+$/: a run of
288
+ // slashes makes that pattern backtrack quadratically.
289
+ let end = dir.length;
290
+ while (end > 0 && dir[end - 1] === '/')
291
+ end--;
292
+ const d = dir.slice(0, end);
293
+ return d === '' || this.dirCache.has(d) || isDir(path.join(this.root, d));
294
+ }
295
+ /** Directories present directly under root, one level deep. */
296
+ topLevelDirs() {
297
+ return [...this.dirCache].filter((d) => d && !d.includes('/')).sort();
298
+ }
299
+ /** True when at least one file matches `patterns`. */
300
+ anyFile(patterns) {
301
+ return this.glob(patterns).length > 0;
302
+ }
303
+ /** Number of distinct files matching `patterns`. */
304
+ count(patterns) {
305
+ return this.glob(patterns).length;
306
+ }
307
+ /** File contents, or null when unreadable / binary / too large. */
308
+ read(rel) {
309
+ const cached = this.cacheFetch(rel);
310
+ if (cached.hit)
311
+ return cached.value;
312
+ let text = null;
313
+ try {
314
+ const abs = path.join(this.root, rel);
315
+ const st = fs.statSync(abs);
316
+ if (st.isFile() && st.size > this.maxBytes) {
317
+ // Counted once per file (cache guard above): oversized files are
318
+ // invisible to every content check, so the audit must say so.
319
+ this.skippedLarge++;
320
+ }
321
+ else if (st.isFile() && looksLikeText(rel)) {
322
+ const buf = fs.readFileSync(abs);
323
+ // Cheap binary sniff: NUL byte in the first 8 KB.
324
+ const head = buf.subarray(0, Math.min(buf.length, 8192));
325
+ if (!head.includes(0))
326
+ text = buf.toString('utf8');
327
+ }
328
+ }
329
+ catch {
330
+ text = null;
331
+ }
332
+ this.cacheStore(rel, text);
333
+ return text;
334
+ }
335
+ cacheFetch(rel) {
336
+ if (!this.contentCache.has(rel))
337
+ return { hit: false, value: null };
338
+ const value = this.contentCache.get(rel) ?? null;
339
+ // Refresh recency: re-insertion moves the entry to the young end.
340
+ this.contentCache.delete(rel);
341
+ this.contentCache.set(rel, value);
342
+ return { hit: true, value };
343
+ }
344
+ cacheStore(rel, text) {
345
+ this.contentCache.set(rel, text);
346
+ if (this.contentCache.size > CONTENT_CACHE_CAP) {
347
+ const oldest = this.contentCache.keys().next();
348
+ if (!oldest.done)
349
+ this.contentCache.delete(oldest.value);
350
+ }
351
+ }
352
+ readJson(rel) {
353
+ const raw = this.read(rel);
354
+ if (raw === null)
355
+ return null;
356
+ try {
357
+ return JSON.parse(stripJsonComments(raw));
358
+ }
359
+ catch {
360
+ return null;
361
+ }
362
+ }
363
+ /**
364
+ * Grep across the project. `include`/`exclude` are globs; when `include` is
365
+ * empty every indexed file is scanned.
366
+ */
367
+ grep(pattern, include, exclude = [], flags = '') {
368
+ const re = compileGrepPattern(pattern, flags);
369
+ if (!re)
370
+ return [];
371
+ const targets = include.length > 0 ? this.glob(include) : this.files;
372
+ const hits = [];
373
+ for (const file of targets) {
374
+ this.grepFile(re, file, exclude, flags, hits);
375
+ if (hits.length >= 500)
376
+ return hits; // bounded output
377
+ }
378
+ return hits;
379
+ }
380
+ grepFile(re, file, exclude, flags, hits) {
381
+ if (exclude.length > 0 && matchesAny(file, exclude))
382
+ return;
383
+ if (matchesAny(file, GREP_SKIP))
384
+ return;
385
+ const text = this.read(file);
386
+ if (text === null)
387
+ return;
388
+ const lines = text.split(/\r?\n/);
389
+ for (let i = 0; i < lines.length; i++) {
390
+ const line = lines[i];
391
+ if (re.test(line)) {
392
+ hits.push({ file, line: i + 1, excerpt: truncate(line.trim(), 220) });
393
+ if (hits.length >= 500)
394
+ return;
395
+ }
396
+ if (!flags.includes('m'))
397
+ re.lastIndex = 0;
398
+ }
399
+ }
400
+ /* ------------------------------------------------------------------ git -- */
401
+ /**
402
+ * Files tracked by git. The tree index skips build output and vendored code
403
+ * for speed and signal quality, but some checks ("is `.env` committed?",
404
+ * "are build artifacts in the repo?") can only be answered from git.
405
+ */
406
+ trackedFiles() {
407
+ if (this.tracked !== null)
408
+ return this.tracked;
409
+ const out = [];
410
+ try {
411
+ const raw = execFileSync('git', ['ls-files', '-z'], {
412
+ cwd: this.root,
413
+ encoding: 'utf8',
414
+ timeout: 20_000,
415
+ maxBuffer: 64 * 1024 * 1024,
416
+ stdio: ['ignore', 'pipe', 'ignore'],
417
+ });
418
+ for (const entry of raw.split('\0')) {
419
+ if (entry)
420
+ out.push(entry);
421
+ if (out.length >= 200_000)
422
+ break;
423
+ }
424
+ }
425
+ catch {
426
+ out.length = 0;
427
+ }
428
+ this.tracked = out;
429
+ return out;
430
+ }
431
+ trackedGlob(globs) {
432
+ return this.trackedFiles().filter((f) => matchesAny(f, globs));
433
+ }
434
+ gitInfo() {
435
+ const isRepo = isDir(path.join(this.root, '.git'));
436
+ if (!isRepo) {
437
+ return { commits: 0, contributors: 0, tags: 0, branches: 0, isRepo: false };
438
+ }
439
+ return { ...this.gitIdentity(), ...this.gitStats(), isRepo: true };
440
+ }
441
+ gitRun(args) {
442
+ try {
443
+ return execFileSync('git', args, {
444
+ cwd: this.root,
445
+ encoding: 'utf8',
446
+ timeout: 10_000,
447
+ stdio: ['ignore', 'pipe', 'ignore'],
448
+ }).trim();
449
+ }
450
+ catch {
451
+ return null;
452
+ }
453
+ }
454
+ gitIdentity() {
455
+ const commit = this.gitRun(['rev-parse', 'HEAD'])?.slice(0, 40) || undefined;
456
+ const ref = this.gitRun(['rev-parse', '--abbrev-ref', 'HEAD']) || undefined;
457
+ const repoUrl = this.gitRun(['remote', 'get-url', 'origin']) || undefined;
458
+ return { commit, ref, repoUrl };
459
+ }
460
+ gitStats() {
461
+ const contributors = this.gitRun(['shortlog', '-sn', '--all', 'HEAD'])
462
+ ?.split('\n')
463
+ .filter(Boolean).length;
464
+ const tags = this.gitRun(['tag', '--list'])?.split('\n').filter(Boolean).length ?? 0;
465
+ const branches = this.gitRun(['branch', '--list'])?.split('\n').filter(Boolean).length ?? 0;
466
+ const lastTs = this.gitRun(['log', '-1', '--format=%ct']);
467
+ const daysSinceLastCommit = lastTs && /^\d+$/.test(lastTs)
468
+ ? Math.floor((Date.now() / 1000 - Number(lastTs)) / 86400)
469
+ : undefined;
470
+ return {
471
+ commits: toInt(this.gitRun(['rev-list', '--count', 'HEAD'])),
472
+ contributors: contributors ?? 0,
473
+ tags,
474
+ branches,
475
+ daysSinceLastCommit,
476
+ };
477
+ }
478
+ }
479
+ function compileGrepPattern(pattern, flags) {
480
+ try {
481
+ return new RegExp(pattern, flags.includes('i') ? 'i' : '');
482
+ }
483
+ catch {
484
+ return null; // invalid pattern in a rule pack — degrade, never crash
485
+ }
486
+ }
487
+ /* ---------------------------------------------------------------- helpers -- */
488
+ /**
489
+ * Caps are operator intent, not attacker input — but garbage still must not
490
+ * produce a zero-file index or an unbounded one. Non-positive garbage falls
491
+ * back to the default (the caller warns; see audit.ts resolveLimits).
492
+ */
493
+ function normalizeLimit(v, fallback) {
494
+ return typeof v === 'number' && Number.isFinite(v) && v > 0 ? Math.floor(v) : fallback;
495
+ }
496
+ function isDir(p) {
497
+ try {
498
+ return fs.statSync(p).isDirectory();
499
+ }
500
+ catch {
501
+ return false;
502
+ }
503
+ }
504
+ function normalizeIgnore(g) {
505
+ return g.endsWith('/') ? `${g}**` : g;
506
+ }
507
+ function truncate(s, n) {
508
+ return s.length <= n ? s : `${s.slice(0, n - 1)}…`;
509
+ }
510
+ function toInt(s) {
511
+ if (!s)
512
+ return 0;
513
+ const n = Number.parseInt(s.trim(), 10);
514
+ return Number.isFinite(n) ? n : 0;
515
+ }
516
+ /**
517
+ * Translates a single .gitignore line into our matcher. Handles the common
518
+ * cases (negation, directory-only, anchored, wildcard); exotic gitignore
519
+ * semantics are intentionally out of scope for an audit index.
520
+ */
521
+ function matchGitignore(pattern, rel, isDirectory) {
522
+ const n = normalizeGitignorePattern(pattern);
523
+ if (!n)
524
+ return false;
525
+ if (n.dirOnly && !isDirectory)
526
+ return false;
527
+ const hit = matchesGlob(rel, n.glob) ||
528
+ matchesGlob(`${rel}/**`, n.glob) ||
529
+ matchesGlob(rel, `${n.glob}/**`);
530
+ return n.negated ? false : hit;
531
+ }
532
+ function normalizeGitignorePattern(pattern) {
533
+ let p = pattern.trim();
534
+ if (!p || p.startsWith('#'))
535
+ return null;
536
+ let negated = false;
537
+ if (p.startsWith('!')) {
538
+ negated = true;
539
+ p = p.slice(1);
540
+ }
541
+ const dirOnly = p.endsWith('/');
542
+ if (dirOnly)
543
+ p = p.slice(0, -1);
544
+ const anchored = p.includes('/');
545
+ let glob = p;
546
+ if (glob.startsWith('/'))
547
+ glob = glob.slice(1);
548
+ if (!anchored)
549
+ glob = `**/${glob}`;
550
+ return { glob, negated, dirOnly };
551
+ }
552
+ function readGitignore(file) {
553
+ try {
554
+ return fs
555
+ .readFileSync(file, 'utf8')
556
+ .split(/\r?\n/)
557
+ .filter((l) => l.trim() && !l.trim().startsWith('#'));
558
+ }
559
+ catch {
560
+ return [];
561
+ }
562
+ }
563
+ /** Extension allow-list for content reads; extensionless files are allowed. */
564
+ function looksLikeText(rel) {
565
+ const base = rel.split('/').pop() ?? rel;
566
+ const dot = base.lastIndexOf('.');
567
+ if (dot <= 0)
568
+ return true; // Dockerfile, LICENSE, Makefile, .gitignore
569
+ return TEXT_EXT.has(base.slice(dot).toLowerCase());
570
+ }
571
+ /** package.json / tsconfig.json style comments + trailing commas. */
572
+ export function stripJsonComments(text) {
573
+ const st = {
574
+ out: '',
575
+ inString: false,
576
+ inLineComment: false,
577
+ inBlockComment: false,
578
+ };
579
+ for (let i = 0; i < text.length; i++) {
580
+ i = stripJsonChar(text, i, st);
581
+ }
582
+ return st.out.replace(/,(\s*[}\]])/g, '$1');
583
+ }
584
+ function stripJsonChar(text, i, st) {
585
+ const c = text[i];
586
+ const n = text[i + 1];
587
+ if (st.inLineComment)
588
+ return endLineComment(c, i, st);
589
+ if (st.inBlockComment)
590
+ return endBlockComment(c, n, i, st);
591
+ if (st.inString)
592
+ return copyStringChar(c, n, i, st);
593
+ return startJsonToken(c, n, i, st);
594
+ }
595
+ function endLineComment(c, i, st) {
596
+ if (c === '\n') {
597
+ st.inLineComment = false;
598
+ st.out += c;
599
+ }
600
+ return i;
601
+ }
602
+ function endBlockComment(c, n, i, st) {
603
+ if (c === '*' && n === '/') {
604
+ st.inBlockComment = false;
605
+ return i + 1;
606
+ }
607
+ return i;
608
+ }
609
+ function copyStringChar(c, n, i, st) {
610
+ st.out += c;
611
+ if (c === '\\') {
612
+ st.out += n ?? '';
613
+ return i + 1;
614
+ }
615
+ if (c === '"')
616
+ st.inString = false;
617
+ return i;
618
+ }
619
+ function startJsonToken(c, n, i, st) {
620
+ if (c === '"') {
621
+ st.inString = true;
622
+ st.out += c;
623
+ return i;
624
+ }
625
+ if (c === '/' && n === '/') {
626
+ st.inLineComment = true;
627
+ return i + 1;
628
+ }
629
+ if (c === '/' && n === '*') {
630
+ st.inBlockComment = true;
631
+ return i + 1;
632
+ }
633
+ st.out += c;
634
+ return i;
635
+ }
636
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/util/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Shape helpers for decoded YAML.
3
+ *
4
+ * `yaml.parse` hands back plain JS objects, which is exactly the *wrong* thing
5
+ * to sprinkle through the engine: every downstream field access would be `any`
6
+ * and a typo in a rule pack would surface as `undefined` three modules later.
7
+ * These helpers force the parse boundary to state up front what shape it
8
+ * expects, and make the "absent" case explicit rather than implicit.
9
+ */
10
+ /** A decoded YAML mapping. Keys are strings; values are whatever the author wrote. */
11
+ export type YamlMap = Record<string, unknown>;
12
+ export declare function isMap(v: unknown): v is YamlMap;
13
+ export declare function asMap(v: unknown): YamlMap;
14
+ /** Present and a string. */
15
+ export declare function str(v: unknown): string | undefined;
16
+ /** Present and a number. */
17
+ export declare function num(v: unknown): number | undefined;
18
+ /** Present and a boolean. */
19
+ export declare function bool(v: unknown): boolean | undefined;
20
+ /** Present and an array. */
21
+ export declare function list(v: unknown): unknown[] | undefined;
22
+ /** Present and an array — every element stringified. */
23
+ export declare function strList(v: unknown): string[] | undefined;
24
+ /** A scalar suitable for `json_path.equals` comparisons. */
25
+ export declare function scalar(v: unknown): string | number | boolean | null | undefined;
26
+ /** One entry of an array, as a mapping. */
27
+ export declare function maps(v: unknown): YamlMap[];
28
+ //# sourceMappingURL=yaml.d.ts.map