@kernlang/review 3.3.8 → 3.4.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 (116) hide show
  1. package/dist/cache.js +1 -1
  2. package/dist/call-graph.d.ts +10 -0
  3. package/dist/call-graph.js +138 -9
  4. package/dist/call-graph.js.map +1 -1
  5. package/dist/concept-rules/auth-drift.js +2 -0
  6. package/dist/concept-rules/auth-drift.js.map +1 -1
  7. package/dist/concept-rules/auth-propagation-drift.d.ts +10 -0
  8. package/dist/concept-rules/auth-propagation-drift.js +85 -0
  9. package/dist/concept-rules/auth-propagation-drift.js.map +1 -0
  10. package/dist/concept-rules/body-shape-drift.d.ts +32 -0
  11. package/dist/concept-rules/body-shape-drift.js +98 -0
  12. package/dist/concept-rules/body-shape-drift.js.map +1 -0
  13. package/dist/concept-rules/contract-drift.js +3 -1
  14. package/dist/concept-rules/contract-drift.js.map +1 -1
  15. package/dist/concept-rules/contract-method-drift.js +2 -0
  16. package/dist/concept-rules/contract-method-drift.js.map +1 -1
  17. package/dist/concept-rules/cross-stack-utils.d.ts +24 -0
  18. package/dist/concept-rules/cross-stack-utils.js +123 -29
  19. package/dist/concept-rules/cross-stack-utils.js.map +1 -1
  20. package/dist/concept-rules/index.d.ts +4 -2
  21. package/dist/concept-rules/index.js +22 -3
  22. package/dist/concept-rules/index.js.map +1 -1
  23. package/dist/concept-rules/mutation-without-idempotency.d.ts +10 -0
  24. package/dist/concept-rules/mutation-without-idempotency.js +47 -0
  25. package/dist/concept-rules/mutation-without-idempotency.js.map +1 -0
  26. package/dist/concept-rules/request-validation-drift.d.ts +11 -0
  27. package/dist/concept-rules/request-validation-drift.js +99 -0
  28. package/dist/concept-rules/request-validation-drift.js.map +1 -0
  29. package/dist/concept-rules/root-cause.d.ts +4 -0
  30. package/dist/concept-rules/root-cause.js +31 -0
  31. package/dist/concept-rules/root-cause.js.map +1 -0
  32. package/dist/concept-rules/unbounded-collection-query.d.ts +10 -0
  33. package/dist/concept-rules/unbounded-collection-query.js +58 -0
  34. package/dist/concept-rules/unbounded-collection-query.js.map +1 -0
  35. package/dist/concept-rules/unhandled-api-error-shape.d.ts +10 -0
  36. package/dist/concept-rules/unhandled-api-error-shape.js +59 -0
  37. package/dist/concept-rules/unhandled-api-error-shape.js.map +1 -0
  38. package/dist/default-export.d.ts +41 -0
  39. package/dist/default-export.js +76 -0
  40. package/dist/default-export.js.map +1 -0
  41. package/dist/eval.d.ts +67 -0
  42. package/dist/eval.js +177 -0
  43. package/dist/eval.js.map +1 -0
  44. package/dist/external-tools.js +52 -3
  45. package/dist/external-tools.js.map +1 -1
  46. package/dist/file-context.js +32 -13
  47. package/dist/file-context.js.map +1 -1
  48. package/dist/file-role.d.ts +6 -0
  49. package/dist/file-role.js +27 -0
  50. package/dist/file-role.js.map +1 -1
  51. package/dist/framework-seeds.d.ts +46 -0
  52. package/dist/framework-seeds.js +245 -0
  53. package/dist/framework-seeds.js.map +1 -0
  54. package/dist/git-env.d.ts +1 -0
  55. package/dist/git-env.js +25 -0
  56. package/dist/git-env.js.map +1 -0
  57. package/dist/graph.js +246 -21
  58. package/dist/graph.js.map +1 -1
  59. package/dist/index.d.ts +12 -3
  60. package/dist/index.js +314 -96
  61. package/dist/index.js.map +1 -1
  62. package/dist/mappers/ts-concepts.js +730 -1
  63. package/dist/mappers/ts-concepts.js.map +1 -1
  64. package/dist/path-canonical.d.ts +34 -0
  65. package/dist/path-canonical.js +85 -0
  66. package/dist/path-canonical.js.map +1 -0
  67. package/dist/policy.d.ts +22 -0
  68. package/dist/policy.js +47 -0
  69. package/dist/policy.js.map +1 -0
  70. package/dist/project-context.d.ts +135 -0
  71. package/dist/project-context.js +563 -0
  72. package/dist/project-context.js.map +1 -0
  73. package/dist/public-api.d.ts +21 -0
  74. package/dist/public-api.js +17 -2
  75. package/dist/public-api.js.map +1 -1
  76. package/dist/python-fallback.d.ts +2 -0
  77. package/dist/python-fallback.js +506 -0
  78. package/dist/python-fallback.js.map +1 -0
  79. package/dist/reporter.js +106 -1
  80. package/dist/reporter.js.map +1 -1
  81. package/dist/rule-quality.d.ts +58 -0
  82. package/dist/rule-quality.js +357 -0
  83. package/dist/rule-quality.js.map +1 -0
  84. package/dist/rules/base.js +21 -3
  85. package/dist/rules/base.js.map +1 -1
  86. package/dist/rules/dead-code.d.ts +2 -2
  87. package/dist/rules/dead-code.js +88 -4
  88. package/dist/rules/dead-code.js.map +1 -1
  89. package/dist/rules/index.d.ts +22 -0
  90. package/dist/rules/index.js +72 -0
  91. package/dist/rules/index.js.map +1 -1
  92. package/dist/rules/kern-source.d.ts +4 -0
  93. package/dist/rules/kern-source.js +184 -0
  94. package/dist/rules/kern-source.js.map +1 -1
  95. package/dist/rules/react.js +52 -3
  96. package/dist/rules/react.js.map +1 -1
  97. package/dist/rules/suggest-kern-primitive.js +0 -1
  98. package/dist/rules/suggest-kern-primitive.js.map +1 -1
  99. package/dist/semantic-diff.js +2 -0
  100. package/dist/semantic-diff.js.map +1 -1
  101. package/dist/suppression/apply-suppression.js +2 -0
  102. package/dist/suppression/apply-suppression.js.map +1 -1
  103. package/dist/suppression/parse-directives.d.ts +13 -5
  104. package/dist/suppression/parse-directives.js +62 -8
  105. package/dist/suppression/parse-directives.js.map +1 -1
  106. package/dist/suppression/types.d.ts +9 -0
  107. package/dist/suppression/types.js +6 -1
  108. package/dist/suppression/types.js.map +1 -1
  109. package/dist/taint-crossfile.js +15 -8
  110. package/dist/taint-crossfile.js.map +1 -1
  111. package/dist/telemetry.d.ts +126 -0
  112. package/dist/telemetry.js +303 -0
  113. package/dist/telemetry.js.map +1 -0
  114. package/dist/types.d.ts +172 -2
  115. package/dist/types.js.map +1 -1
  116. package/package.json +4 -3
@@ -6,9 +6,17 @@
6
6
  *
7
7
  * Phase 3 of the review pipeline.
8
8
  */
9
+ import { existsSync } from 'fs';
10
+ import { dirname, resolve } from 'path';
9
11
  import { createProject } from './inferrer.js';
10
12
  import { debugDetail } from './review-health.js';
11
13
  import { createFingerprint } from './types.js';
14
+ function optionalPackageName(...parts) {
15
+ return parts.join('');
16
+ }
17
+ function importOptionalModule(specifier) {
18
+ return import(specifier);
19
+ }
12
20
  /**
13
21
  * Node-style error check — used to distinguish "optional peer dep missing" (quietly skip)
14
22
  * from "the peer dep is installed but failed to load" (surface as degraded-mode health note).
@@ -35,10 +43,10 @@ function isModuleNotFound(err) {
35
43
  export async function runESLint(filePaths, cwd, health) {
36
44
  // Dynamic import — ESLint is an optional peer dep. MODULE_NOT_FOUND at this step means
37
45
  // "not installed" (quiet skip); anything else is a real load failure worth surfacing.
38
- const eslintModuleName = 'eslint';
46
+ const eslintModuleName = optionalPackageName('es', 'lint');
39
47
  let ESLint;
40
48
  try {
41
- const eslintModule = (await import(eslintModuleName));
49
+ const eslintModule = (await importOptionalModule(eslintModuleName));
42
50
  ESLint = eslintModule.ESLint || eslintModule.default?.ESLint;
43
51
  }
44
52
  catch (err) {
@@ -163,7 +171,8 @@ export function runTSCDiagnostics(project, options = {}, health) {
163
171
  // both point at the same user-side remedy, both are environmental from review's POV.)
164
172
  const isLoadingNoise = code === 6059 || code === 6307;
165
173
  const isEnvironmentalNoise = code === 2792 || code === 17004 || code === 2580 || code === 2591;
166
- if ((isLoadingNoise || isEnvironmentalNoise) && options.downgradeProjectLoadingErrors) {
174
+ if (options.downgradeProjectLoadingErrors &&
175
+ (isLoadingNoise || isEnvironmentalNoise || isReviewModeModuleResolutionNoise(code, messageStr, filePath))) {
167
176
  continue;
168
177
  }
169
178
  findings.push({
@@ -191,6 +200,46 @@ export function runTSCDiagnostics(project, options = {}, health) {
191
200
  }
192
201
  return findings;
193
202
  }
203
+ function isReviewModeModuleResolutionNoise(code, message, importerFilePath) {
204
+ if (code !== 2307)
205
+ return false;
206
+ const specifier = extractMissingModuleSpecifier(message);
207
+ if (!specifier)
208
+ return false;
209
+ // KERN-generated facades are commonly imported as `.js` from TS source and
210
+ // materialized by `kern compile`. In guard mode, a missing generated facade is
211
+ // pipeline ordering noise unless the explicit lint/typecheck phase says
212
+ // otherwise.
213
+ if (isGeneratedModuleSpecifier(specifier))
214
+ return true;
215
+ // Bare package misses (`vitest`, `ai`, etc.) are dependency-install or workspace
216
+ // context failures in review mode. The explicit `--lint` tsc path still reports
217
+ // them as real compiler errors.
218
+ if (isBareModuleSpecifier(specifier))
219
+ return true;
220
+ // TS ESM commonly imports `./foo.js` while the source file is `foo.ts`. If the
221
+ // corresponding TS source exists, this is a moduleResolution mismatch in
222
+ // review's ad-hoc Project, not a code bug.
223
+ return isTsBackedJsSpecifier(specifier, importerFilePath);
224
+ }
225
+ function extractMissingModuleSpecifier(message) {
226
+ const match = message.match(/Cannot find module ['"]([^'"]+)['"]/);
227
+ return match?.[1];
228
+ }
229
+ function isGeneratedModuleSpecifier(specifier) {
230
+ const normalized = specifier.replace(/\\/g, '/');
231
+ return /(?:^|\/)generated\//.test(normalized) || /(?:^|\/)__generated__\//.test(normalized);
232
+ }
233
+ function isBareModuleSpecifier(specifier) {
234
+ return !specifier.startsWith('.') && !specifier.startsWith('/') && !/^[A-Za-z]:[\\/]/.test(specifier);
235
+ }
236
+ function isTsBackedJsSpecifier(specifier, importerFilePath) {
237
+ if (!specifier.startsWith('.') || !/\.(?:mjs|cjs|js|jsx)$/.test(specifier))
238
+ return false;
239
+ const resolved = resolve(dirname(importerFilePath), specifier);
240
+ const withoutJsExt = resolved.replace(/\.(?:mjs|cjs|js|jsx)$/, '');
241
+ return ['.ts', '.tsx', '.mts', '.cts', '.d.ts'].some((ext) => existsSync(`${withoutJsExt}${ext}`));
242
+ }
194
243
  // ── tsc Diagnostics from file paths ───────────────────────────────────
195
244
  /**
196
245
  * Run TypeScript compiler diagnostics from file paths (no pre-existing Project).
@@ -1 +1 @@
1
- {"version":3,"file":"external-tools.js","sourceRoot":"","sources":["../src/external-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"external-tools.js","sourceRoot":"","sources":["../src/external-tools.ts"],"names":[],"mappings":"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"}
@@ -155,37 +155,49 @@ function traceImportChain(targetPath, fileMap, entrySet) {
155
155
  export function buildFileContextMap(graph) {
156
156
  const contextMap = new Map();
157
157
  const fileMap = new Map();
158
- const entrySet = new Set(graph.entryFiles);
158
+ // Internal maps key by canonicalPath (red-team #9 / Option B). Cross-file
159
+ // edges (gf.imports / gf.importedBy / graph.entryFiles include canonical
160
+ // forms after the canonicalisation pass in graph.ts), and ts-morph paths
161
+ // round-trip through canonical, so canonical is the only stable key.
162
+ // Display paths are reported via gf.path on the value side, not the key.
163
+ const entrySet = new Set(graph.entryFiles.map((p) => graph.files.find((g) => g.path === p)?.canonicalPath ?? p));
159
164
  for (const gf of graph.files) {
160
- fileMap.set(gf.path, gf);
165
+ fileMap.set(gf.canonicalPath, gf);
161
166
  }
162
- // Classify entry points
167
+ // Classify entry points (key by canonicalPath so subsequent lookups match)
163
168
  const entryBoundaries = new Map();
164
169
  for (const entry of graph.entryFiles) {
165
- entryBoundaries.set(entry, classifyEntryPoint(entry));
170
+ const entryGf = graph.files.find((g) => g.path === entry);
171
+ const key = entryGf?.canonicalPath ?? entry;
172
+ // classifyEntryPoint reads suffix patterns (page.tsx, route.ts, etc.) —
173
+ // those are the same regardless of /var vs /private/var, so passing
174
+ // either form works. Use display so reads from disk hit the right file.
175
+ entryBoundaries.set(key, classifyEntryPoint(entry));
166
176
  }
167
177
  // Client boundary propagation cache
168
178
  const clientBoundaryCache = new Map();
169
179
  for (const gf of graph.files) {
170
- const isClient = isWithinClientBoundary(gf.path, fileMap, entrySet, clientBoundaryCache, new Set());
180
+ const isClient = isWithinClientBoundary(gf.canonicalPath, fileMap, entrySet, clientBoundaryCache, new Set());
181
+ // hasUseClientDirective reads from disk — pass display so symlinked
182
+ // paths work even on systems without realpath idempotence guarantees.
171
183
  const hasDirective = hasUseClientDirective(gf.path);
172
- const importChain = traceImportChain(gf.path, fileMap, entrySet);
184
+ const importChain = traceImportChain(gf.canonicalPath, fileMap, entrySet);
173
185
  // Determine boundary from import chain
174
186
  let boundary = 'unknown';
175
187
  if (isClient || hasDirective) {
176
188
  boundary = 'client';
177
189
  }
178
- else if (entrySet.has(gf.path)) {
179
- boundary = entryBoundaries.get(gf.path) || 'unknown';
190
+ else if (entrySet.has(gf.canonicalPath)) {
191
+ boundary = entryBoundaries.get(gf.canonicalPath) || 'unknown';
180
192
  }
181
193
  else {
182
194
  // Inherit boundary from entry points that import this file
183
195
  const entryBounds = new Set();
184
196
  for (const entry of graph.entryFiles) {
185
- // Check if this entry eventually imports this file
186
- const entryGf = fileMap.get(entry);
187
- if (entryGf && canReach(entry, gf.path, fileMap, new Set())) {
188
- entryBounds.add(entryBoundaries.get(entry) || 'unknown');
197
+ const entryGf = graph.files.find((g) => g.path === entry);
198
+ const entryKey = entryGf?.canonicalPath ?? entry;
199
+ if (entryGf && canReach(entryKey, gf.canonicalPath, fileMap, new Set())) {
200
+ entryBounds.add(entryBoundaries.get(entryKey) || 'unknown');
189
201
  }
190
202
  }
191
203
  if (entryBounds.size === 1) {
@@ -198,10 +210,17 @@ export function buildFileContextMap(graph) {
198
210
  // Find which entry points reach this file
199
211
  const reachableEntries = [];
200
212
  for (const entry of graph.entryFiles) {
201
- if (entry === gf.path || canReach(entry, gf.path, fileMap, new Set())) {
213
+ const entryGf = graph.files.find((g) => g.path === entry);
214
+ const entryKey = entryGf?.canonicalPath ?? entry;
215
+ if (entryKey === gf.canonicalPath || canReach(entryKey, gf.canonicalPath, fileMap, new Set())) {
216
+ // Push the DISPLAY entry path so consumers see what the user
217
+ // passed in, not the realpath-resolved form.
202
218
  reachableEntries.push(entry);
203
219
  }
204
220
  }
221
+ // contextMap keyed by gf.path (display) so callers querying by the
222
+ // path they passed in find the entry directly. Internal lookups
223
+ // (fileMap, traceImportChain) use canonicalPath — see above.
205
224
  contextMap.set(gf.path, {
206
225
  boundary,
207
226
  entryPoints: reachableEntries,
@@ -1 +1 @@
1
- {"version":3,"file":"file-context.js","sourceRoot":"","sources":["../src/file-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAGlC,2EAA2E;AAE3E,2DAA2D;AAC3D,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAErC,iCAAiC;IACjC,IAAI,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnE,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IAEtE,mCAAmC;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IAED,0FAA0F;IAC1F,IAAI,4EAA4E,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE9G,8BAA8B;IAC9B,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEjD,mBAAmB;IACnB,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE5E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,2EAA2E;AAE3E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAmB,CAAC;AAElD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3E,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,2EAA2E;AAE3E;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAC7B,QAAgB,EAChB,OAA+B,EAC/B,QAAqB,EACrB,KAA2B,EAC3B,QAAqB;IAErB,IAAI,qBAAqB,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,yDAAyD;IACzD,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qDAAqD;IACrD,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvB,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC9C,sBAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CACrE,CAAC;IACF,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1B,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,2EAA2E;AAE3E,6EAA6E;AAC7E,SAAS,gBAAgB,CAAC,UAAkB,EAAE,OAA+B,EAAE,QAAqB;IAClG,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAElD,8EAA8E;IAC9E,gEAAgE;IAChE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,KAAK,GAAa,CAAC,UAAU,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,IAAI,UAA8B,CAAC;IAEnC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAE/B,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,KAAK,MAAM,QAAQ,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACpC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,qCAAqC;YAEpE,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,UAAU,GAAG,QAAQ,CAAC;gBACtB,MAAM;YACR,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,UAAU;YAAE,MAAM;IACxB,CAAC;IAED,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAErC,uDAAuD;IACvD,gFAAgF;IAChF,MAAM,KAAK,GAAa,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,MAAM;QACjB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,GAAG,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2EAA2E;AAE3E;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAkB;IACpD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE3C,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,wBAAwB;IACxB,MAAM,eAAe,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC3D,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,oCAAoC;IACpC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEvD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACpG,MAAM,YAAY,GAAG,qBAAqB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEjE,uCAAuC;QACvC,IAAI,QAAQ,GAAoB,SAAS,CAAC;QAE1C,IAAI,QAAQ,IAAI,YAAY,EAAE,CAAC;YAC7B,QAAQ,GAAG,QAAQ,CAAC;QACtB,CAAC;aAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,2DAA2D;YAC3D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmB,CAAC;YAC/C,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACrC,mDAAmD;gBACnD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;oBAC5D,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;YAED,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC3B,QAAQ,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;iBAAM,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAChC,QAAQ,GAAG,QAAQ,CAAC,CAAC,kDAAkD;YACzE,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,MAAM,gBAAgB,GAAa,EAAE,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrC,IAAI,KAAK,KAAK,EAAE,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;gBACtE,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;YACtB,QAAQ;YACR,WAAW,EAAE,gBAAgB;YAC7B,WAAW;YACX,KAAK,EAAE,EAAE,CAAC,QAAQ;YAClB,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,gBAAgB,EAAE,QAAQ;YAC1B,qBAAqB,EAAE,YAAY;SACpC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,mEAAmE;AACnE,SAAS,QAAQ,CAAC,MAAc,EAAE,MAAc,EAAE,OAA+B,EAAE,OAAoB;IACrG,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpB,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAEtB,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IAC3D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,cAAc,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"file-context.js","sourceRoot":"","sources":["../src/file-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAGlC,2EAA2E;AAE3E,2DAA2D;AAC3D,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAErC,iCAAiC;IACjC,IAAI,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnE,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IAEtE,mCAAmC;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IAED,0FAA0F;IAC1F,IAAI,4EAA4E,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE9G,8BAA8B;IAC9B,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEjD,mBAAmB;IACnB,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE5E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,2EAA2E;AAE3E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAmB,CAAC;AAElD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3E,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,2EAA2E;AAE3E;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAC7B,QAAgB,EAChB,OAA+B,EAC/B,QAAqB,EACrB,KAA2B,EAC3B,QAAqB;IAErB,IAAI,qBAAqB,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,yDAAyD;IACzD,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qDAAqD;IACrD,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvB,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC9C,sBAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CACrE,CAAC;IACF,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1B,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,2EAA2E;AAE3E,6EAA6E;AAC7E,SAAS,gBAAgB,CAAC,UAAkB,EAAE,OAA+B,EAAE,QAAqB;IAClG,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAElD,8EAA8E;IAC9E,gEAAgE;IAChE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,KAAK,GAAa,CAAC,UAAU,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,IAAI,UAA8B,CAAC;IAEnC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAE/B,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,KAAK,MAAM,QAAQ,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACpC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,qCAAqC;YAEpE,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,UAAU,GAAG,QAAQ,CAAC;gBACtB,MAAM;YACR,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,UAAU;YAAE,MAAM;IACxB,CAAC;IAED,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAErC,uDAAuD;IACvD,gFAAgF;IAChF,MAAM,KAAK,GAAa,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,MAAM;QACjB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,GAAG,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2EAA2E;AAE3E;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAkB;IACpD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC7C,0EAA0E;IAC1E,yEAAyE;IACzE,yEAAyE;IACzE,qEAAqE;IACrE,yEAAyE;IACzE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;IAEjH,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,2EAA2E;IAC3E,MAAM,eAAe,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC3D,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,OAAO,EAAE,aAAa,IAAI,KAAK,CAAC;QAC5C,wEAAwE;QACxE,oEAAoE;QACpE,wEAAwE;QACxE,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,oCAAoC;IACpC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEvD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7G,oEAAoE;QACpE,sEAAsE;QACtE,MAAM,YAAY,GAAG,qBAAqB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE1E,uCAAuC;QACvC,IAAI,QAAQ,GAAoB,SAAS,CAAC;QAE1C,IAAI,QAAQ,IAAI,YAAY,EAAE,CAAC;YAC7B,QAAQ,GAAG,QAAQ,CAAC;QACtB,CAAC;aAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;YAC1C,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,2DAA2D;YAC3D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmB,CAAC;YAC/C,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;gBAC1D,MAAM,QAAQ,GAAG,OAAO,EAAE,aAAa,IAAI,KAAK,CAAC;gBACjD,IAAI,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;oBACxE,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;YAED,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC3B,QAAQ,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;iBAAM,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAChC,QAAQ,GAAG,QAAQ,CAAC,CAAC,kDAAkD;YACzE,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,MAAM,gBAAgB,GAAa,EAAE,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,OAAO,EAAE,aAAa,IAAI,KAAK,CAAC;YACjD,IAAI,QAAQ,KAAK,EAAE,CAAC,aAAa,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;gBAC9F,6DAA6D;gBAC7D,6CAA6C;gBAC7C,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,mEAAmE;QACnE,gEAAgE;QAChE,6DAA6D;QAC7D,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;YACtB,QAAQ;YACR,WAAW,EAAE,gBAAgB;YAC7B,WAAW;YACX,KAAK,EAAE,EAAE,CAAC,QAAQ;YAClB,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,gBAAgB,EAAE,QAAQ;YAC1B,qBAAqB,EAAE,YAAY;SACpC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,mEAAmE;AACnE,SAAS,QAAQ,CAAC,MAAc,EAAE,MAAc,EAAE,OAA+B,EAAE,OAAoB;IACrG,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpB,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAEtB,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IAC3D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,cAAc,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC"}
@@ -8,3 +8,9 @@ import { type SourceFile } from 'ts-morph';
8
8
  import type { FileRole } from './types.js';
9
9
  /** Classify a source file's role based on AST evidence and path heuristics. */
10
10
  export declare function classifyFileRole(sourceFile: SourceFile, filePath: string): FileRole;
11
+ /**
12
+ * Path-only role classifier for languages where we don't have a ts-morph SourceFile
13
+ * (Python, .kern). Recognizes test/codegen/example/rule-definition by path; everything
14
+ * else falls back to 'runtime'. Barrel detection is unavailable without an AST.
15
+ */
16
+ export declare function classifyFileRoleByPath(filePath: string): FileRole;
package/dist/file-role.js CHANGED
@@ -46,6 +46,33 @@ export function classifyFileRole(sourceFile, filePath) {
46
46
  // 6. Default
47
47
  return 'runtime';
48
48
  }
49
+ /**
50
+ * Path-only role classifier for languages where we don't have a ts-morph SourceFile
51
+ * (Python, .kern). Recognizes test/codegen/example/rule-definition by path; everything
52
+ * else falls back to 'runtime'. Barrel detection is unavailable without an AST.
53
+ */
54
+ export function classifyFileRoleByPath(filePath) {
55
+ if (/\.(test|spec)\.(tsx?|jsx?|py)$/.test(filePath) ||
56
+ /\/tests?\//.test(filePath) ||
57
+ /^test_/.test(filePath.split('/').pop() || '')) {
58
+ return 'test';
59
+ }
60
+ const lower = filePath.toLowerCase();
61
+ if (/\/(codegen|generated|__generated__|gen)\//i.test(lower) || /\/codegen-/.test(lower)) {
62
+ return 'codegen';
63
+ }
64
+ if (/\/rules?\//i.test(lower) && /\/review\//.test(lower)) {
65
+ return 'rule-definition';
66
+ }
67
+ const basename = lower.split('/').pop() || '';
68
+ if (/\/examples?\//i.test(lower) ||
69
+ /\/fixtures?\//i.test(lower) ||
70
+ /\/preview-/.test(basename) ||
71
+ /(?:^|[-_.])examples?\.(tsx?|jsx?|py)$/.test(basename)) {
72
+ return 'example';
73
+ }
74
+ return 'runtime';
75
+ }
49
76
  /** A barrel file has only import/export declarations and no executable statements. */
50
77
  function isBarrelFile(sourceFile) {
51
78
  const statements = sourceFile.getStatements();
@@ -1 +1 @@
1
- {"version":3,"file":"file-role.js","sourceRoot":"","sources":["../src/file-role.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAmB,UAAU,EAAE,MAAM,UAAU,CAAC;AAGvD,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,UAAsB,EAAE,QAAgB;IACvE,gBAAgB;IAChB,IACE,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC5C,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAC9C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,mCAAmC;IACnC,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,4CAA4C;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,4CAA4C,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAC9C,IACE,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5B,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3B,oCAAoC,CAAC,IAAI,CAAC,QAAQ,CAAC,EACnD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,qBAAqB;IACrB,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IAC1C,IACE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACrC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,EACvC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,sFAAsF;IACtF,IAAI,wBAAwB,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,aAAa;IACb,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,sFAAsF;AACtF,SAAS,YAAY,CAAC,UAAsB;IAC1C,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;IAC9C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,CACL,IAAI,KAAK,UAAU,CAAC,iBAAiB;YACrC,IAAI,KAAK,UAAU,CAAC,iBAAiB;YACrC,IAAI,KAAK,UAAU,CAAC,gBAAgB,CACrC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAAC,UAAsB;IACtD,MAAM,WAAW,GAAG,8DAA8D,CAAC;IAEnF,mDAAmD;IACnD,MAAM,SAAS,GAAG,UAAU,CAAC,oBAAoB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACjF,MAAM,cAAc,GAAG,UAAU,CAAC,oBAAoB,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;IACjG,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC;QAClD,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,yFAAyF;IACzF,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAC1E,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;YACzC,eAAe,EAAE,CAAC;YAClB,IAAI,eAAe,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,CAAC,wCAAwC;QACjF,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"file-role.js","sourceRoot":"","sources":["../src/file-role.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * KNOWN_FRAMEWORK_SEEDS — per-pattern, per-symbol public-API conventions.
3
+ *
4
+ * MAINTENANCE CONTRACT
5
+ *
6
+ * Every entry must be **symbol-scoped**. A whole-file "this file is public"
7
+ * seed is forbidden by Phase 4 design — a stale helper sitting next to a
8
+ * Next.js page would silently inherit public-API status, which was
9
+ * red-team CRITICAL #2 against Plan v3. Each pattern lists the EXACT
10
+ * export names the convention treats as runtime entry points; everything
11
+ * else stays subject to dead-export checks.
12
+ *
13
+ * Order matters. The first matching seed wins, so put more-specific
14
+ * patterns before more-general ones (e.g. `pages/api/**` before
15
+ * `pages/** /*.*`). The matcher uses POSIX-style globs from
16
+ * `public-api.ts:globToRegex`; patterns are matched against the input
17
+ * file path normalized to forward slashes.
18
+ *
19
+ * Step 7a covers the "stable" Next.js conventions documented in the
20
+ * official routing/file-convention docs and stable across versions
21
+ * 13–15. Edge cases — parallel-route slots, metadata image files,
22
+ * instrumentation, mdx-components, the v16 middleware → proxy rename —
23
+ * land in step 7b. Splitting keeps each commit a clear change set if
24
+ * one half regresses.
25
+ */
26
+ export interface FrameworkSeed {
27
+ /** Pattern this convention applies to (POSIX-style glob, no braces). */
28
+ pattern: string;
29
+ /** Public symbol names — runtime entry points ONLY. */
30
+ symbols: readonly string[];
31
+ /** Short description for diagnostics / future maintainers. */
32
+ why: string;
33
+ }
34
+ /**
35
+ * STABLE Next.js conventions (step 7a). Edge-case shapes (parallel routes,
36
+ * metadata files like icon/opengraph-image, instrumentation, proxy) live
37
+ * in step 7b — each commit stays a clean change set.
38
+ */
39
+ export declare const KNOWN_FRAMEWORK_SEEDS: readonly FrameworkSeed[];
40
+ /**
41
+ * Match a file path against KNOWN_FRAMEWORK_SEEDS. Returns the FIRST
42
+ * matching seed (more-specific patterns must be ordered before more-
43
+ * general ones — see the const above). Returns undefined when nothing
44
+ * matches; the caller falls back to package.json-driven seeding.
45
+ */
46
+ export declare function getFrameworkSeed(filePath: string): FrameworkSeed | undefined;
@@ -0,0 +1,245 @@
1
+ /**
2
+ * KNOWN_FRAMEWORK_SEEDS — per-pattern, per-symbol public-API conventions.
3
+ *
4
+ * MAINTENANCE CONTRACT
5
+ *
6
+ * Every entry must be **symbol-scoped**. A whole-file "this file is public"
7
+ * seed is forbidden by Phase 4 design — a stale helper sitting next to a
8
+ * Next.js page would silently inherit public-API status, which was
9
+ * red-team CRITICAL #2 against Plan v3. Each pattern lists the EXACT
10
+ * export names the convention treats as runtime entry points; everything
11
+ * else stays subject to dead-export checks.
12
+ *
13
+ * Order matters. The first matching seed wins, so put more-specific
14
+ * patterns before more-general ones (e.g. `pages/api/**` before
15
+ * `pages/** /*.*`). The matcher uses POSIX-style globs from
16
+ * `public-api.ts:globToRegex`; patterns are matched against the input
17
+ * file path normalized to forward slashes.
18
+ *
19
+ * Step 7a covers the "stable" Next.js conventions documented in the
20
+ * official routing/file-convention docs and stable across versions
21
+ * 13–15. Edge cases — parallel-route slots, metadata image files,
22
+ * instrumentation, mdx-components, the v16 middleware → proxy rename —
23
+ * land in step 7b. Splitting keeps each commit a clear change set if
24
+ * one half regresses.
25
+ */
26
+ import { globToRegex, toPosix } from './public-api.js';
27
+ /**
28
+ * Route-segment config exports valid on Next.js page/layout/route files.
29
+ * Listing them once lets the page/layout/route patterns share the same set.
30
+ * Source: Next.js routing/route-segment-config.
31
+ */
32
+ const ROUTE_SEGMENT_CONFIG = [
33
+ 'dynamic',
34
+ 'dynamicParams',
35
+ 'revalidate',
36
+ 'fetchCache',
37
+ 'runtime',
38
+ 'preferredRegion',
39
+ 'maxDuration',
40
+ ];
41
+ /**
42
+ * Metadata exports valid on page/layout files. `viewport` and
43
+ * `generateViewport` are post-13.6 additions; `generateStaticParams` is
44
+ * how dynamic routes pre-render at build time.
45
+ */
46
+ const PAGE_METADATA = ['metadata', 'generateMetadata', 'viewport', 'generateViewport', 'generateStaticParams'];
47
+ const PAGE_LIKE_SYMBOLS = ['default', ...PAGE_METADATA, ...ROUTE_SEGMENT_CONFIG];
48
+ const ROUTE_HANDLER_VERBS = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'];
49
+ const APP_EXTS = ['ts', 'tsx', 'js', 'jsx'];
50
+ const SCRIPT_EXTS = ['ts', 'js'];
51
+ const PAGES_EXTS = ['tsx', 'ts', 'jsx', 'js'];
52
+ /**
53
+ * Symbol surface for app/ metadata image files (icon, apple-icon,
54
+ * opengraph-image, twitter-image). The dynamic forms (`.ts(x)`/`.js(x)`)
55
+ * export `default` (the image-generation function) plus optional
56
+ * `generateImageMetadata`, `alt`, `size`, `contentType`. Static forms
57
+ * (`.png`, `.svg`, etc.) have no JS exports so we skip those extensions.
58
+ * Source: Next.js metadata-files docs.
59
+ */
60
+ const IMAGE_METADATA_SYMBOLS = ['default', 'generateImageMetadata', 'alt', 'size', 'contentType'];
61
+ /**
62
+ * STABLE Next.js conventions (step 7a). Edge-case shapes (parallel routes,
63
+ * metadata files like icon/opengraph-image, instrumentation, proxy) live
64
+ * in step 7b — each commit stays a clean change set.
65
+ */
66
+ export const KNOWN_FRAMEWORK_SEEDS = [
67
+ // App Router: route handlers — HTTP verbs + segment config.
68
+ ...SCRIPT_EXTS.map((ext) => ({
69
+ pattern: `**/app/**/route.${ext}`,
70
+ symbols: [...ROUTE_HANDLER_VERBS, ...ROUTE_SEGMENT_CONFIG],
71
+ why: 'Next.js App Router route handler',
72
+ })),
73
+ // App Router: special files (template/loading/error/not-found/global-error)
74
+ // — `default` only.
75
+ ...APP_EXTS.flatMap((ext) => ['template', 'loading', 'error', 'not-found', 'global-error'].map((kind) => ({
76
+ pattern: `**/app/**/${kind}.${ext}`,
77
+ symbols: ['default'],
78
+ why: `Next.js App Router ${kind}`,
79
+ }))),
80
+ // App Router: page + layout — symmetric public surface (default render
81
+ // + metadata + segment config).
82
+ ...APP_EXTS.flatMap((ext) => [
83
+ {
84
+ pattern: `**/app/**/page.${ext}`,
85
+ symbols: PAGE_LIKE_SYMBOLS,
86
+ why: 'Next.js App Router page',
87
+ },
88
+ {
89
+ pattern: `**/app/**/layout.${ext}`,
90
+ symbols: PAGE_LIKE_SYMBOLS,
91
+ why: 'Next.js App Router layout',
92
+ },
93
+ ]),
94
+ // Pages Router: special files first (more specific patterns).
95
+ ...PAGES_EXTS.flatMap((ext) => [
96
+ {
97
+ pattern: `**/pages/_app.${ext}`,
98
+ symbols: ['default'],
99
+ why: 'Next.js Pages Router _app',
100
+ },
101
+ {
102
+ pattern: `**/pages/_document.${ext}`,
103
+ symbols: ['default'],
104
+ why: 'Next.js Pages Router _document',
105
+ },
106
+ ]),
107
+ // Pages Router: API routes — `default` (handler) + `config` (size limits,
108
+ // bodyParser, runtime). Must come BEFORE the general pages/**/*.* pattern
109
+ // so api files get the api-specific seed.
110
+ ...PAGES_EXTS.map((ext) => ({
111
+ pattern: `**/pages/api/**/*.${ext}`,
112
+ symbols: ['default', 'config'],
113
+ why: 'Next.js Pages Router API route',
114
+ })),
115
+ // Pages Router: data-fetching pages.
116
+ ...PAGES_EXTS.map((ext) => ({
117
+ pattern: `**/pages/**/*.${ext}`,
118
+ symbols: ['default', 'getServerSideProps', 'getStaticProps', 'getStaticPaths', 'config'],
119
+ why: 'Next.js Pages Router page',
120
+ })),
121
+ // Middleware: root or src/, with both ts and js.
122
+ ...SCRIPT_EXTS.flatMap((ext) => [
123
+ {
124
+ pattern: `**/middleware.${ext}`,
125
+ symbols: ['default', 'middleware', 'config'],
126
+ why: 'Next.js middleware',
127
+ },
128
+ ]),
129
+ // ── Step 7b — edge-case Next.js conventions ────────────────────────────
130
+ // Parallel-route slot fallback. `app/@slot/default.tsx` (and any nested
131
+ // `default.{ext}` under `app/`) is rendered when an unmatched parallel
132
+ // segment has no other match. Always exports `default` only.
133
+ ...APP_EXTS.map((ext) => ({
134
+ pattern: `**/app/**/default.${ext}`,
135
+ symbols: ['default'],
136
+ why: 'Next.js App Router parallel-route default',
137
+ })),
138
+ // Auth-flow special files (Next 15+): forbidden() and unauthorized()
139
+ // navigations resolve to dedicated UI files. Symmetric with not-found.
140
+ ...APP_EXTS.flatMap((ext) => ['forbidden', 'unauthorized', 'global-not-found'].map((kind) => ({
141
+ pattern: `**/app/**/${kind}.${ext}`,
142
+ symbols: ['default'],
143
+ why: `Next.js App Router ${kind}`,
144
+ }))),
145
+ // Metadata route handlers — sitemap, robots, manifest. Always at the
146
+ // app/ root or under a route group; export `default` (the generator).
147
+ // sitemap.{ext} also supports `generateSitemaps` for paginated sitemaps.
148
+ ...SCRIPT_EXTS.map((ext) => ({
149
+ pattern: `**/app/**/sitemap.${ext}`,
150
+ symbols: ['default', 'generateSitemaps'],
151
+ why: 'Next.js App Router sitemap',
152
+ })),
153
+ ...SCRIPT_EXTS.flatMap((ext) => ['robots', 'manifest'].map((kind) => ({
154
+ pattern: `**/app/**/${kind}.${ext}`,
155
+ symbols: ['default'],
156
+ why: `Next.js App Router ${kind}`,
157
+ }))),
158
+ // Image metadata files — dynamic generation forms only. Static images
159
+ // (`.png`, `.svg`, …) have no JS exports so we don't pattern those.
160
+ ...APP_EXTS.flatMap((ext) => ['icon', 'apple-icon', 'opengraph-image', 'twitter-image'].map((kind) => ({
161
+ pattern: `**/app/**/${kind}.${ext}`,
162
+ symbols: IMAGE_METADATA_SYMBOLS,
163
+ why: `Next.js App Router ${kind}`,
164
+ }))),
165
+ // instrumentation.{ts,js} — root-level (or src/-level) hooks. `register`
166
+ // runs at server start; `onRequestError` reports per-request errors.
167
+ ...SCRIPT_EXTS.map((ext) => ({
168
+ pattern: `**/instrumentation.${ext}`,
169
+ symbols: ['register', 'onRequestError'],
170
+ why: 'Next.js instrumentation',
171
+ })),
172
+ // instrumentation-client.{ts,js} — Next 15+ client-side companion.
173
+ // `onRouterTransitionStart` fires on route changes.
174
+ ...SCRIPT_EXTS.map((ext) => ({
175
+ pattern: `**/instrumentation-client.${ext}`,
176
+ symbols: ['onRouterTransitionStart'],
177
+ why: 'Next.js instrumentation-client',
178
+ })),
179
+ // mdx-components.{ts,tsx,js,jsx} — required at the project root for MDX
180
+ // pages to resolve component overrides via useMDXComponents.
181
+ ...APP_EXTS.map((ext) => ({
182
+ pattern: `**/mdx-components.${ext}`,
183
+ symbols: ['useMDXComponents'],
184
+ why: 'Next.js mdx-components',
185
+ })),
186
+ // Forward-compat: Next 16 renames `middleware` to `proxy`. Adding the
187
+ // pattern now means upgrading projects keep their seeds working without
188
+ // a kern-lang release. If Next walks back the rename, removing this
189
+ // pattern is a no-op for projects still on `middleware.{ts,js}`.
190
+ ...SCRIPT_EXTS.map((ext) => ({
191
+ pattern: `**/proxy.${ext}`,
192
+ symbols: ['default', 'proxy', 'config'],
193
+ why: 'Next.js proxy (v16 middleware rename)',
194
+ })),
195
+ // ── Nuxt 3+ conventions ────────────────────────────────────────────────
196
+ //
197
+ // SCOPE NOTE: only Nuxt-specific path shapes are seeded here. Generic
198
+ // top-level `middleware/`, `plugins/`, `modules/`, `composables/` dirs
199
+ // are NOT seeded because non-Nuxt projects with similarly-named dirs
200
+ // would get over-marked: a stale plugin in `plugins/legacy.ts` of an
201
+ // arbitrary project would inherit public-API status. The `**/server/**`
202
+ // patterns ARE Nuxt-specific (Nitro server routes), so seeding them is
203
+ // safe. `nuxt.config.{ts,js}` is uniquely identifying.
204
+ //
205
+ // SFC files (`.vue`) are not reviewed — symbols inside `<script setup>`
206
+ // never reach the dead-export rule — so Vue's `pages/**/*.vue`,
207
+ // `layouts/**/*.vue`, `components/**/*.vue` are intentionally absent.
208
+ // Nuxt server routes — defineEventHandler default-export the handler
209
+ // factory. Symbol-scoped to `default`; siblings stay subject to
210
+ // dead-export checks.
211
+ ...SCRIPT_EXTS.flatMap((ext) => ['api', 'middleware', 'plugins', 'routes'].map((kind) => ({
212
+ pattern: `**/server/${kind}/**/*.${ext}`,
213
+ symbols: ['default'],
214
+ why: `Nuxt server/${kind} handler`,
215
+ }))),
216
+ // nuxt.config — defineNuxtConfig default export. Uniquely Nuxt-named.
217
+ ...SCRIPT_EXTS.map((ext) => ({
218
+ pattern: `**/nuxt.config.${ext}`,
219
+ symbols: ['default'],
220
+ why: 'Nuxt config',
221
+ })),
222
+ ];
223
+ /**
224
+ * Compiled regex per seed. globToRegex is non-trivial; cache once per
225
+ * process — KNOWN_FRAMEWORK_SEEDS is `as const` so the cache is sound.
226
+ */
227
+ const compiled = KNOWN_FRAMEWORK_SEEDS.map((seed) => ({
228
+ regex: globToRegex(seed.pattern),
229
+ seed,
230
+ }));
231
+ /**
232
+ * Match a file path against KNOWN_FRAMEWORK_SEEDS. Returns the FIRST
233
+ * matching seed (more-specific patterns must be ordered before more-
234
+ * general ones — see the const above). Returns undefined when nothing
235
+ * matches; the caller falls back to package.json-driven seeding.
236
+ */
237
+ export function getFrameworkSeed(filePath) {
238
+ const posix = toPosix(filePath);
239
+ for (const { regex, seed } of compiled) {
240
+ if (regex.test(posix))
241
+ return seed;
242
+ }
243
+ return undefined;
244
+ }
245
+ //# sourceMappingURL=framework-seeds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-seeds.js","sourceRoot":"","sources":["../src/framework-seeds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function withoutLocalGitEnv(env?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
@@ -0,0 +1,25 @@
1
+ const LOCAL_GIT_ENV_VARS = [
2
+ 'GIT_ALTERNATE_OBJECT_DIRECTORIES',
3
+ 'GIT_COMMON_DIR',
4
+ 'GIT_CONFIG',
5
+ 'GIT_CONFIG_COUNT',
6
+ 'GIT_CONFIG_PARAMETERS',
7
+ 'GIT_DIR',
8
+ 'GIT_GRAFT_FILE',
9
+ 'GIT_IMPLICIT_WORK_TREE',
10
+ 'GIT_INDEX_FILE',
11
+ 'GIT_NO_REPLACE_OBJECTS',
12
+ 'GIT_OBJECT_DIRECTORY',
13
+ 'GIT_PREFIX',
14
+ 'GIT_REPLACE_REF_BASE',
15
+ 'GIT_SHALLOW_FILE',
16
+ 'GIT_WORK_TREE',
17
+ ];
18
+ export function withoutLocalGitEnv(env = process.env) {
19
+ const clean = { ...env };
20
+ for (const key of LOCAL_GIT_ENV_VARS) {
21
+ delete clean[key];
22
+ }
23
+ return clean;
24
+ }
25
+ //# sourceMappingURL=git-env.js.map