gitnexus 1.6.6-rc.47 → 1.6.6-rc.49
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.
- package/dist/_shared/index.d.ts +1 -1
- package/dist/_shared/index.d.ts.map +1 -1
- package/dist/_shared/index.js +1 -1
- package/dist/_shared/index.js.map +1 -1
- package/dist/_shared/language-detection.d.ts +6 -0
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/language-detection.js +10 -0
- package/dist/_shared/language-detection.js.map +1 -1
- package/dist/config/ignore-service.js +9 -0
- package/dist/core/group/extractors/http-patterns/index.js +3 -0
- package/dist/core/ingestion/languages/index.js +3 -1
- package/dist/core/ingestion/pipeline-phases/routes.d.ts +8 -0
- package/dist/core/ingestion/pipeline-phases/routes.js +79 -18
- package/dist/core/ingestion/pipeline.js +2 -0
- package/dist/core/ingestion/route-extractors/laravel.d.ts +13 -0
- package/dist/core/ingestion/route-extractors/laravel.js +419 -0
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +2 -0
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +78 -8
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +4 -1
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +43 -1
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +3 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +6 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +7 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +11 -1
- package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +24 -0
- package/dist/core/ingestion/scope-resolution/resolution-outcome.js +1 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +2 -11
- package/dist/core/ingestion/workers/parse-worker.js +2 -362
- package/dist/types/pipeline.d.ts +7 -0
- package/package.json +1 -1
- package/web/assets/{agent-DUsqJyKb.js → agent-nAULJArI.js} +1 -1
- package/web/assets/{architectureDiagram-UL44E2DR-CH1dpzu7.js → architectureDiagram-UL44E2DR-BBgyi4Hs.js} +1 -1
- package/web/assets/{chunk-LCXTWHL2-CT3mhvQX.js → chunk-LCXTWHL2-BZ0Tzowc.js} +1 -1
- package/web/assets/{chunk-RG4AUYOV-Cq8U5h8M.js → chunk-RG4AUYOV-CQnJ4SPj.js} +1 -1
- package/web/assets/{classDiagram-KGZ6W3CR-EWTFMYba.js → classDiagram-KGZ6W3CR-CUNPyuum.js} +1 -1
- package/web/assets/{classDiagram-v2-72OJOZXJ-ChoxqWRC.js → classDiagram-v2-72OJOZXJ-C12MIEIr.js} +1 -1
- package/web/assets/{diagram-3NCE3AQN-8BFf7hQK.js → diagram-3NCE3AQN-BplIrXJz.js} +1 -1
- package/web/assets/{diagram-GF46GFSD-C8QiS9Ir.js → diagram-GF46GFSD-D6gCOCa1.js} +1 -1
- package/web/assets/{diagram-QXG6HAR7-WS98nzev.js → diagram-QXG6HAR7-DgvheRLr.js} +1 -1
- package/web/assets/{diagram-WEQXMOUZ-BZATDqtC.js → diagram-WEQXMOUZ-BhwmMqWa.js} +1 -1
- package/web/assets/{erDiagram-L5TCEMPS-CZ37_biE.js → erDiagram-L5TCEMPS-CxXgenB4.js} +1 -1
- package/web/assets/{flowDiagram-H6V6AXG4-Dfb084rT.js → flowDiagram-H6V6AXG4-D8VtPSLz.js} +1 -1
- package/web/assets/{index-BWcdXaGJ.js → index-tUlGk4Oi.js} +82 -82
- package/web/assets/{infoDiagram-3YFTVSEB-I_J4CdiH.js → infoDiagram-3YFTVSEB-D06WJJBB.js} +1 -1
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-dB0oTk1D.js → ishikawaDiagram-BNXS4ZKH-BJ6vvQ-b.js} +1 -1
- package/web/assets/{kanban-definition-75IXJCU3-DOIXYxOz.js → kanban-definition-75IXJCU3-B92nDVAK.js} +1 -1
- package/web/assets/{mindmap-definition-2TDM6QVE-BxCigzq7.js → mindmap-definition-2TDM6QVE-CYxYgco6.js} +1 -1
- package/web/assets/{pieDiagram-CU6KROY3-CRVFetTd.js → pieDiagram-CU6KROY3-BjZuIu0o.js} +1 -1
- package/web/assets/{requirementDiagram-JXO7QTGE-B-EabbGj.js → requirementDiagram-JXO7QTGE-DH8xq3fX.js} +1 -1
- package/web/assets/{sequenceDiagram-VS2MUI6T-BuTgbKYt.js → sequenceDiagram-VS2MUI6T-DYzZuGXA.js} +1 -1
- package/web/assets/{stateDiagram-7D4R322I-CS7W450D.js → stateDiagram-7D4R322I-CpCVIJnb.js} +1 -1
- package/web/assets/{stateDiagram-v2-36443NZ5-CHqsr-h8.js → stateDiagram-v2-36443NZ5-DhR_oUxs.js} +1 -1
- package/web/assets/{timeline-definition-O6YCAMPW-sBajeUFi.js → timeline-definition-O6YCAMPW-CDvxXmIy.js} +1 -1
- package/web/assets/{vennDiagram-MWXL3ELB-Dg8mzKiR.js → vennDiagram-MWXL3ELB-Do6mhgNC.js} +1 -1
- package/web/assets/{wardleyDiagram-CUQ6CDDI-9aiVlfYW.js → wardleyDiagram-CUQ6CDDI-DYOtljeC.js} +1 -1
- package/web/assets/{xychartDiagram-N2JHSOCM-Nl7B2WLC.js → xychartDiagram-N2JHSOCM-DBLuzqYo.js} +1 -1
- package/web/index.html +1 -1
package/dist/_shared/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export type { NodeLabel, NodeProperties, RelationshipType, GraphNode, GraphRelat
|
|
|
2
2
|
export { NODE_TABLES, REL_TABLE_NAME, REL_TYPES, EMBEDDING_TABLE_NAME, } from './lbug/schema-constants.js';
|
|
3
3
|
export type { NodeTableName, RelType } from './lbug/schema-constants.js';
|
|
4
4
|
export { SupportedLanguages } from './languages.js';
|
|
5
|
-
export { getLanguageFromFilename, getSyntaxLanguageFromFilename } from './language-detection.js';
|
|
5
|
+
export { getLanguageFromFilename, getSyntaxLanguageFromFilename, isBladeTemplateFilename, } from './language-detection.js';
|
|
6
6
|
export type { MroStrategy } from './mro-strategy.js';
|
|
7
7
|
export type { PipelinePhase, PipelineProgress } from './pipeline.js';
|
|
8
8
|
export type { ParameterTypeClass, SymbolDefinition } from './scope-resolution/symbol-definition.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,WAAW,EACX,cAAc,EACd,SAAS,EACT,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAGzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,WAAW,EACX,cAAc,EACd,SAAS,EACT,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAGzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIrE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AACpG,YAAY,EACV,OAAO,EACP,KAAK,EACL,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,EACZ,UAAU,EACV,UAAU,EACV,OAAO,EACP,KAAK,EACL,kBAAkB,EAClB,UAAU,EACV,SAAS,EACT,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,WAAW,GACZ,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAG/E,OAAO,EACL,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,+CAA+C,CAAC;AACvD,YAAY,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAG5F,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,YAAY,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AACnG,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,YAAY,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAKrF,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAGpF,YAAY,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACpE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAGnG,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,YAAY,EACV,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,6CAA6C,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AACpE,YAAY,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,aAAa,GACd,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AACrF,YAAY,EAAE,aAAa,EAAE,MAAM,iDAAiD,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,YAAY,EACV,cAAc,EACd,mBAAmB,GACpB,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AACrF,YAAY,EACV,aAAa,EACb,kBAAkB,GACnB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAC1E,YAAY,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACpF,YAAY,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACpG,YAAY,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EACL,gCAAgC,EAChC,kBAAkB,GACnB,MAAM,6CAA6C,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAClG,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,GAClB,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACrF,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACL,cAAc,EACd,cAAc,EACd,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,YAAY,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAM1E,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACjG,YAAY,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EACL,cAAc,EACd,4BAA4B,EAC5B,kBAAkB,EAClB,eAAe,GAChB,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAG/E,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,4BAA4B,EAC5B,sBAAsB,EACtB,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,GACf,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAG9E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,YAAY,EACV,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC"}
|
package/dist/_shared/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
export { NODE_TABLES, REL_TABLE_NAME, REL_TYPES, EMBEDDING_TABLE_NAME, } from './lbug/schema-constants.js';
|
|
3
3
|
// Language support
|
|
4
4
|
export { SupportedLanguages } from './languages.js';
|
|
5
|
-
export { getLanguageFromFilename, getSyntaxLanguageFromFilename } from './language-detection.js';
|
|
5
|
+
export { getLanguageFromFilename, getSyntaxLanguageFromFilename, isBladeTemplateFilename, } from './language-detection.js';
|
|
6
6
|
// Evidence + tie-break constants (RFC Appendix A, Appendix B)
|
|
7
7
|
export { EvidenceWeights, typeBindingWeightAtDepth } from './scope-resolution/evidence-weights.js';
|
|
8
8
|
export { ORIGIN_PRIORITY } from './scope-resolution/origin-priority.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,mBAAmB;AACnB,OAAO,EACL,WAAW,EACX,cAAc,EACd,SAAS,EACT,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AAGpC,mBAAmB;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,mBAAmB;AACnB,OAAO,EACL,WAAW,EACX,cAAc,EACd,SAAS,EACT,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AAGpC,mBAAmB;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAiCjC,8DAA8D;AAC9D,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAGxE,yDAAyD;AACzD,OAAO,EACL,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,+CAA+C,CAAC;AAGvD,sEAAsE;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAEjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAGrF,gEAAgE;AAChE,yEAAyE;AACzE,2DAA2D;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAOxE,oFAAoF;AACpF,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AAMvF,uEAAuE;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AAUpE,sEAAsE;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAErF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAKvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAKrF,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAE1E,OAAO,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AAEpF,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAEpG,OAAO,EACL,gCAAgC,EAChC,kBAAkB,GACnB,MAAM,6CAA6C,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAUlG,2EAA2E;AAC3E,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAErF,OAAO,EACL,cAAc,EACd,cAAc,EACd,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAG1E,8EAA8E;AAC9E,wEAAwE;AACxE,wEAAwE;AACxE,8DAA8D;AAC9D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAEjG,OAAO,EACL,cAAc,EACd,4BAA4B,EAC5B,kBAAkB,EAClB,eAAe,GAChB,MAAM,mCAAmC,CAAC;AAG3C,mDAAmD;AACnD,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,4BAA4B,EAC5B,sBAAsB,EACtB,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,GACf,MAAM,sCAAsC,CAAC;AAG9C,gEAAgE;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAMpE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC"}
|
|
@@ -9,6 +9,12 @@
|
|
|
9
9
|
* 3. TypeScript will error if you miss either step (exhaustive Record)
|
|
10
10
|
*/
|
|
11
11
|
import { SupportedLanguages } from './languages.js';
|
|
12
|
+
/**
|
|
13
|
+
* Laravel Blade templates are source templates whose filename convention ends
|
|
14
|
+
* in `.blade.php`. They may contain PHP snippets, but the full file is not a
|
|
15
|
+
* pure PHP translation unit and must not enter the generic PHP provider path.
|
|
16
|
+
*/
|
|
17
|
+
export declare const isBladeTemplateFilename: (filePath: string) => boolean;
|
|
12
18
|
/**
|
|
13
19
|
* Map file extension to SupportedLanguage enum.
|
|
14
20
|
* Returns null if the file extension is not recognized.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-detection.d.ts","sourceRoot":"","sources":["../src/language-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AA+CpD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAU,MAAM,KAAG,kBAAkB,GAAG,
|
|
1
|
+
{"version":3,"file":"language-detection.d.ts","sourceRoot":"","sources":["../src/language-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AA+CpD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAU,MAAM,KAAG,OACQ,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAU,MAAM,KAAG,kBAAkB,GAAG,IAkB/E,CAAC;AAwDF;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,GAAI,UAAU,MAAM,KAAG,MAUhE,CAAC"}
|
|
@@ -48,11 +48,19 @@ for (const [lang, exts] of Object.entries(EXTENSION_MAP)) {
|
|
|
48
48
|
extToLang.set(ext, lang);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Laravel Blade templates are source templates whose filename convention ends
|
|
53
|
+
* in `.blade.php`. They may contain PHP snippets, but the full file is not a
|
|
54
|
+
* pure PHP translation unit and must not enter the generic PHP provider path.
|
|
55
|
+
*/
|
|
56
|
+
export const isBladeTemplateFilename = (filePath) => filePath.replace(/\\/g, '/').toLowerCase().endsWith('.blade.php');
|
|
51
57
|
/**
|
|
52
58
|
* Map file extension to SupportedLanguage enum.
|
|
53
59
|
* Returns null if the file extension is not recognized.
|
|
54
60
|
*/
|
|
55
61
|
export const getLanguageFromFilename = (filename) => {
|
|
62
|
+
if (isBladeTemplateFilename(filename))
|
|
63
|
+
return null;
|
|
56
64
|
// Fast path: check the extension map
|
|
57
65
|
const lastDot = filename.lastIndexOf('.');
|
|
58
66
|
if (lastDot >= 0) {
|
|
@@ -125,6 +133,8 @@ const AUXILIARY_BASENAME_MAP = {
|
|
|
125
133
|
* Returns 'text' for unrecognised files.
|
|
126
134
|
*/
|
|
127
135
|
export const getSyntaxLanguageFromFilename = (filePath) => {
|
|
136
|
+
if (isBladeTemplateFilename(filePath))
|
|
137
|
+
return 'markup';
|
|
128
138
|
const lang = getLanguageFromFilename(filePath);
|
|
129
139
|
if (lang)
|
|
130
140
|
return SYNTAX_MAP[lang];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-detection.js","sourceRoot":"","sources":["../src/language-detection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"language-detection.js","sourceRoot":"","sources":["../src/language-detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -258,9 +258,18 @@ const IGNORED_FILES = new Set([
|
|
|
258
258
|
// deterministic results independent of per-repo config.
|
|
259
259
|
export const shouldIgnorePath = (filePath) => {
|
|
260
260
|
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
261
|
+
const normalizedPathLower = normalizedPath.toLowerCase();
|
|
261
262
|
const parts = normalizedPath.split('/');
|
|
262
263
|
const fileName = parts[parts.length - 1];
|
|
263
264
|
const fileNameLower = fileName.toLowerCase();
|
|
265
|
+
// Laravel compiles Blade templates into generated PHP cache files under
|
|
266
|
+
// storage/framework/views. Source templates live in resources/views and are
|
|
267
|
+
// handled separately; compiled cache should not become source-of-truth. Keep
|
|
268
|
+
// storage/framework/cache parseable unless a separate warning source is proven:
|
|
269
|
+
// Laravel route/config cache files are ordinary generated PHP, not Blade.
|
|
270
|
+
if (/(^|\/)storage\/framework\/views(\/|$)/.test(normalizedPathLower)) {
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
264
273
|
// Check if any path segment is in the hardcoded ignore list.
|
|
265
274
|
for (const part of parts) {
|
|
266
275
|
if (DEFAULT_IGNORE_LIST.has(part)) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as path from 'node:path';
|
|
2
|
+
import { isBladeTemplateFilename } from '../../../../_shared/index.js';
|
|
2
3
|
import { JAVA_HTTP_PLUGIN } from './java.js';
|
|
3
4
|
import { GO_HTTP_PLUGIN } from './go.js';
|
|
4
5
|
import { PYTHON_HTTP_PLUGIN } from './python.js';
|
|
@@ -39,6 +40,8 @@ export const HTTP_SCAN_GLOB = '**/*.{ts,tsx,js,jsx,java,go,py,php}';
|
|
|
39
40
|
* or `undefined` if the extension is not registered.
|
|
40
41
|
*/
|
|
41
42
|
export function getPluginForFile(rel) {
|
|
43
|
+
if (isBladeTemplateFilename(rel))
|
|
44
|
+
return undefined;
|
|
42
45
|
const ext = path.extname(rel).toLowerCase();
|
|
43
46
|
return REGISTRY[ext];
|
|
44
47
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* 3. Add one line to the `providers` table below
|
|
8
8
|
* 4. Run `tsc --noEmit` to verify
|
|
9
9
|
*/
|
|
10
|
-
import { SupportedLanguages } from '../../../_shared/index.js';
|
|
10
|
+
import { SupportedLanguages, isBladeTemplateFilename } from '../../../_shared/index.js';
|
|
11
11
|
import { typescriptProvider, javascriptProvider } from './typescript.js';
|
|
12
12
|
import { pythonProvider } from './python.js';
|
|
13
13
|
import { javaProvider } from './java.js';
|
|
@@ -54,6 +54,8 @@ for (const provider of Object.values(providers)) {
|
|
|
54
54
|
/** Look up a language provider from a file path by extension.
|
|
55
55
|
* Returns null if the file extension is not recognized. */
|
|
56
56
|
export function getProviderForFile(filePath) {
|
|
57
|
+
if (isBladeTemplateFilename(filePath))
|
|
58
|
+
return null;
|
|
57
59
|
const lastDot = filePath.lastIndexOf('.');
|
|
58
60
|
const ext = lastDot >= 0 ? filePath.slice(lastDot).toLowerCase() : '';
|
|
59
61
|
const basename = filePath.slice(filePath.lastIndexOf('/') + 1);
|
|
@@ -18,4 +18,12 @@ export interface RouteEntry {
|
|
|
18
18
|
export interface RoutesOutput {
|
|
19
19
|
routeRegistry: Map<string, RouteEntry>;
|
|
20
20
|
}
|
|
21
|
+
export interface TemplateFetchCall {
|
|
22
|
+
filePath: string;
|
|
23
|
+
fetchURL: string;
|
|
24
|
+
lineNumber: number;
|
|
25
|
+
}
|
|
26
|
+
export declare const isTemplateRouteCandidate: (filePath: string) => boolean;
|
|
27
|
+
export declare function extractTemplateStaticFetchCalls(filePath: string, content: string, namedRouteUrls?: ReadonlyMap<string, string>): TemplateFetchCall[];
|
|
28
|
+
export declare function normalizeExtractedRoutePath(routePath: string, prefix: string | null): string;
|
|
21
29
|
export declare const routesPhase: PipelinePhase<RoutesOutput>;
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* @output routeRegistry, handlerContents
|
|
12
12
|
*/
|
|
13
13
|
import { getPhaseOutput } from './types.js';
|
|
14
|
+
import { isBladeTemplateFilename } from '../../../_shared/index.js';
|
|
14
15
|
import { nextjsFileToRouteURL, normalizeFetchURL } from '../route-extractors/nextjs.js';
|
|
15
16
|
import { expoFileToRouteURL } from '../route-extractors/expo.js';
|
|
16
17
|
import { phpFileToRouteURL } from '../route-extractors/php.js';
|
|
@@ -25,6 +26,74 @@ const EXPO_NAV_PATTERNS = [
|
|
|
25
26
|
/router\.(push|replace|navigate)\(\s*['"`]([^'"`]+)['"`]/g,
|
|
26
27
|
/<Link\s+[^>]*href=\s*['"`]([^'"`]+)['"`]/g,
|
|
27
28
|
];
|
|
29
|
+
const TEMPLATE_URL_PATTERNS = [
|
|
30
|
+
/\b(?:action|href)\s*=\s*["']([^"']+)["']/gi,
|
|
31
|
+
/\burl\s*:\s*["']([^"']+)["'](?!\s*\+)/g,
|
|
32
|
+
// Laravel asset() points at static assets, not application routes; keep it
|
|
33
|
+
// out of route matching so asset paths cannot collide with real route URLs.
|
|
34
|
+
/\{\{[\s\S]{0,200}?\burl\(\s*["']([^"']+)["']\s*\)[\s\S]{0,200}?\}\}/g,
|
|
35
|
+
/\{!![\s\S]{0,200}?\burl\(\s*["']([^"']+)["']\s*\)[\s\S]{0,200}?!\}/g,
|
|
36
|
+
];
|
|
37
|
+
const TEMPLATE_NAMED_ROUTE_PATTERNS = [
|
|
38
|
+
// Parameterless Laravel route('name') helpers can be resolved from extracted
|
|
39
|
+
// route names. Parameterized helpers are intentionally deferred because they
|
|
40
|
+
// require binding runtime values onto route placeholders.
|
|
41
|
+
/\{\{[\s\S]{0,200}?\broute\(\s*["']([^"']+)["']\s*\)[\s\S]{0,200}?\}\}/g,
|
|
42
|
+
/\{!![\s\S]{0,200}?\broute\(\s*["']([^"']+)["']\s*\)[\s\S]{0,200}?!\}/g,
|
|
43
|
+
];
|
|
44
|
+
function hasRouteParameters(routeUrl) {
|
|
45
|
+
return /\{[^}]+\}/.test(routeUrl);
|
|
46
|
+
}
|
|
47
|
+
export const isTemplateRouteCandidate = (filePath) => {
|
|
48
|
+
const normalized = filePath.replace(/\\/g, '/').toLowerCase();
|
|
49
|
+
return (normalized.endsWith('.html') ||
|
|
50
|
+
normalized.endsWith('.htm') ||
|
|
51
|
+
normalized.endsWith('.ejs') ||
|
|
52
|
+
normalized.endsWith('.hbs') ||
|
|
53
|
+
isBladeTemplateFilename(normalized));
|
|
54
|
+
};
|
|
55
|
+
export function extractTemplateStaticFetchCalls(filePath, content, namedRouteUrls = new Map()) {
|
|
56
|
+
const calls = [];
|
|
57
|
+
const seen = new Set();
|
|
58
|
+
for (const pattern of TEMPLATE_URL_PATTERNS) {
|
|
59
|
+
pattern.lastIndex = 0;
|
|
60
|
+
let match;
|
|
61
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
62
|
+
const normalized = normalizeFetchURL(match[1]);
|
|
63
|
+
if (!normalized)
|
|
64
|
+
continue;
|
|
65
|
+
if (seen.has(normalized))
|
|
66
|
+
continue;
|
|
67
|
+
seen.add(normalized);
|
|
68
|
+
calls.push({ filePath, fetchURL: normalized, lineNumber: 0 });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
for (const pattern of TEMPLATE_NAMED_ROUTE_PATTERNS) {
|
|
72
|
+
pattern.lastIndex = 0;
|
|
73
|
+
let match;
|
|
74
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
75
|
+
const routeUrl = namedRouteUrls.get(match[1]);
|
|
76
|
+
if (!routeUrl)
|
|
77
|
+
continue;
|
|
78
|
+
if (hasRouteParameters(routeUrl))
|
|
79
|
+
continue;
|
|
80
|
+
const normalized = normalizeFetchURL(routeUrl);
|
|
81
|
+
if (!normalized)
|
|
82
|
+
continue;
|
|
83
|
+
if (seen.has(normalized))
|
|
84
|
+
continue;
|
|
85
|
+
seen.add(normalized);
|
|
86
|
+
calls.push({ filePath, fetchURL: normalized, lineNumber: 0 });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return calls;
|
|
90
|
+
}
|
|
91
|
+
export function normalizeExtractedRoutePath(routePath, prefix) {
|
|
92
|
+
const pathPart = routePath.trim().replace(/^\/+/, '').replace(/\/+$/g, '');
|
|
93
|
+
const prefixPart = prefix?.trim().replace(/^\/+/, '').replace(/\/+$/g, '');
|
|
94
|
+
const joined = prefixPart ? `/${prefixPart}${pathPart ? `/${pathPart}` : ''}` : `/${pathPart}`;
|
|
95
|
+
return joined.replace(/\/+/g, '/') || '/';
|
|
96
|
+
}
|
|
28
97
|
export const routesPhase = {
|
|
29
98
|
name: 'routes',
|
|
30
99
|
deps: ['parse'],
|
|
@@ -80,6 +149,7 @@ export const routesPhase = {
|
|
|
80
149
|
}
|
|
81
150
|
const ensureSlash = (path) => (path.startsWith('/') ? path : '/' + path);
|
|
82
151
|
let duplicateRoutes = 0;
|
|
152
|
+
const namedRouteRegistry = new Map();
|
|
83
153
|
const addRoute = (url, entry) => {
|
|
84
154
|
if (routeRegistry.has(url)) {
|
|
85
155
|
duplicateRoutes++;
|
|
@@ -90,10 +160,14 @@ export const routesPhase = {
|
|
|
90
160
|
for (const route of allExtractedRoutes) {
|
|
91
161
|
if (!route.routePath)
|
|
92
162
|
continue;
|
|
93
|
-
|
|
163
|
+
const routeUrl = normalizeExtractedRoutePath(route.routePath, route.prefix);
|
|
164
|
+
addRoute(routeUrl, {
|
|
94
165
|
filePath: route.filePath,
|
|
95
166
|
source: 'framework-route',
|
|
96
167
|
});
|
|
168
|
+
if (route.routeName && !namedRouteRegistry.has(route.routeName)) {
|
|
169
|
+
namedRouteRegistry.set(route.routeName, routeUrl);
|
|
170
|
+
}
|
|
97
171
|
}
|
|
98
172
|
for (const dr of allDecoratorRoutes) {
|
|
99
173
|
addRoute(ensureSlash(dr.routePath), {
|
|
@@ -184,26 +258,13 @@ export const routesPhase = {
|
|
|
184
258
|
}
|
|
185
259
|
}
|
|
186
260
|
}
|
|
187
|
-
// Scan HTML/template files for
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
p.endsWith('.ejs') ||
|
|
191
|
-
p.endsWith('.hbs') ||
|
|
192
|
-
p.endsWith('.blade.php'));
|
|
261
|
+
// Scan HTML/template files for safe static form/link/AJAX URL patterns.
|
|
262
|
+
// Blade stays template-only here; it must not re-enter PHP provider paths.
|
|
263
|
+
const htmlCandidates = allPaths.filter(isTemplateRouteCandidate);
|
|
193
264
|
if (htmlCandidates.length > 0 && routeRegistry.size > 0) {
|
|
194
265
|
const htmlContents = await readFileContents(ctx.repoPath, htmlCandidates);
|
|
195
|
-
const htmlPatterns = [/action=["']([^"']+)["']/g, /url:\s*["']([^"']+)["']/g];
|
|
196
266
|
for (const [filePath, content] of htmlContents) {
|
|
197
|
-
|
|
198
|
-
pattern.lastIndex = 0;
|
|
199
|
-
let match;
|
|
200
|
-
while ((match = pattern.exec(content)) !== null) {
|
|
201
|
-
const normalized = normalizeFetchURL(match[1]);
|
|
202
|
-
if (normalized) {
|
|
203
|
-
allFetchCalls.push({ filePath, fetchURL: normalized, lineNumber: 0 });
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
267
|
+
allFetchCalls.push(...extractTemplateStaticFetchCalls(filePath, content, namedRouteRegistry));
|
|
207
268
|
}
|
|
208
269
|
}
|
|
209
270
|
// ── Extract Expo Router navigation patterns ──
|
|
@@ -62,6 +62,7 @@ export const runPipelineFromRepo = async (repoPath, onProgress, options) => {
|
|
|
62
62
|
const { totalFiles, usedWorkerPool } = getPhaseOutput(results, 'parse');
|
|
63
63
|
let communityResult;
|
|
64
64
|
let processResult;
|
|
65
|
+
const resolutionOutcomes = getPhaseOutput(results, 'scopeResolution').resolutionOutcomes;
|
|
65
66
|
if (!options?.skipGraphPhases) {
|
|
66
67
|
communityResult = getPhaseOutput(results, 'communities').communityResult;
|
|
67
68
|
processResult = getPhaseOutput(results, 'processes').processResult;
|
|
@@ -84,6 +85,7 @@ export const runPipelineFromRepo = async (repoPath, onProgress, options) => {
|
|
|
84
85
|
totalFileCount: totalFiles,
|
|
85
86
|
communityResult,
|
|
86
87
|
processResult,
|
|
88
|
+
resolutionOutcomes,
|
|
87
89
|
usedWorkerPool,
|
|
88
90
|
};
|
|
89
91
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type Parser from 'tree-sitter';
|
|
2
|
+
export interface ExtractedRoute {
|
|
3
|
+
filePath: string;
|
|
4
|
+
httpMethod: string;
|
|
5
|
+
routePath: string | null;
|
|
6
|
+
routeName: string | null;
|
|
7
|
+
controllerName: string | null;
|
|
8
|
+
methodName: string | null;
|
|
9
|
+
middleware: string[];
|
|
10
|
+
prefix: string | null;
|
|
11
|
+
lineNumber: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function extractLaravelRoutes(tree: Parser.Tree, filePath: string): ExtractedRoute[];
|