@untangle-code/file-graph 0.0.0-stage → 0.1.1

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 (130) hide show
  1. package/LICENSE +661 -0
  2. package/NOTICE +90 -0
  3. package/README.md +284 -2
  4. package/THIRD_PARTY_LICENSES.md +29 -0
  5. package/dist/assignment.d.ts +15 -0
  6. package/dist/assignment.d.ts.map +1 -0
  7. package/dist/assignment.js +75 -0
  8. package/dist/assignment.js.map +1 -0
  9. package/dist/boundaries/endpoints.d.ts +11 -0
  10. package/dist/boundaries/endpoints.d.ts.map +1 -0
  11. package/dist/boundaries/endpoints.js +195 -0
  12. package/dist/boundaries/endpoints.js.map +1 -0
  13. package/dist/boundaries/index.d.ts +9 -0
  14. package/dist/boundaries/index.d.ts.map +1 -0
  15. package/dist/boundaries/index.js +93 -0
  16. package/dist/boundaries/index.js.map +1 -0
  17. package/dist/boundaries/requests.d.ts +12 -0
  18. package/dist/boundaries/requests.d.ts.map +1 -0
  19. package/dist/boundaries/requests.js +311 -0
  20. package/dist/boundaries/requests.js.map +1 -0
  21. package/dist/edges.d.ts +49 -0
  22. package/dist/edges.d.ts.map +1 -0
  23. package/dist/edges.js +223 -0
  24. package/dist/edges.js.map +1 -0
  25. package/dist/file-index.d.ts +37 -0
  26. package/dist/file-index.d.ts.map +1 -0
  27. package/dist/file-index.js +103 -0
  28. package/dist/file-index.js.map +1 -0
  29. package/dist/graph.d.ts +160 -0
  30. package/dist/graph.d.ts.map +1 -0
  31. package/dist/graph.js +448 -0
  32. package/dist/graph.js.map +1 -0
  33. package/dist/index.d.ts +35 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +48 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/metrics.d.ts +67 -0
  38. package/dist/metrics.d.ts.map +1 -0
  39. package/dist/metrics.js +272 -0
  40. package/dist/metrics.js.map +1 -0
  41. package/dist/package-catalog.d.ts +43 -0
  42. package/dist/package-catalog.d.ts.map +1 -0
  43. package/dist/package-catalog.js +136 -0
  44. package/dist/package-catalog.js.map +1 -0
  45. package/dist/paths.d.ts +56 -0
  46. package/dist/paths.d.ts.map +1 -0
  47. package/dist/paths.js +129 -0
  48. package/dist/paths.js.map +1 -0
  49. package/dist/persistence.d.ts +83 -0
  50. package/dist/persistence.d.ts.map +1 -0
  51. package/dist/persistence.js +538 -0
  52. package/dist/persistence.js.map +1 -0
  53. package/dist/resolve/candidates.d.ts +52 -0
  54. package/dist/resolve/candidates.d.ts.map +1 -0
  55. package/dist/resolve/candidates.js +202 -0
  56. package/dist/resolve/candidates.js.map +1 -0
  57. package/dist/resolve/package-exports.d.ts +31 -0
  58. package/dist/resolve/package-exports.d.ts.map +1 -0
  59. package/dist/resolve/package-exports.js +229 -0
  60. package/dist/resolve/package-exports.js.map +1 -0
  61. package/dist/resolve/pipeline.d.ts +11 -0
  62. package/dist/resolve/pipeline.d.ts.map +1 -0
  63. package/dist/resolve/pipeline.js +109 -0
  64. package/dist/resolve/pipeline.js.map +1 -0
  65. package/dist/resolve/resolvers.d.ts +25 -0
  66. package/dist/resolve/resolvers.d.ts.map +1 -0
  67. package/dist/resolve/resolvers.js +367 -0
  68. package/dist/resolve/resolvers.js.map +1 -0
  69. package/dist/restore.d.ts +75 -0
  70. package/dist/restore.d.ts.map +1 -0
  71. package/dist/restore.js +136 -0
  72. package/dist/restore.js.map +1 -0
  73. package/dist/topology/compose.d.ts +27 -0
  74. package/dist/topology/compose.d.ts.map +1 -0
  75. package/dist/topology/compose.js +208 -0
  76. package/dist/topology/compose.js.map +1 -0
  77. package/dist/topology/jsonc.d.ts +38 -0
  78. package/dist/topology/jsonc.d.ts.map +1 -0
  79. package/dist/topology/jsonc.js +137 -0
  80. package/dist/topology/jsonc.js.map +1 -0
  81. package/dist/topology/load.d.ts +61 -0
  82. package/dist/topology/load.d.ts.map +1 -0
  83. package/dist/topology/load.js +436 -0
  84. package/dist/topology/load.js.map +1 -0
  85. package/dist/topology/manifest.d.ts +48 -0
  86. package/dist/topology/manifest.d.ts.map +1 -0
  87. package/dist/topology/manifest.js +109 -0
  88. package/dist/topology/manifest.js.map +1 -0
  89. package/dist/topology/project-config.d.ts +39 -0
  90. package/dist/topology/project-config.d.ts.map +1 -0
  91. package/dist/topology/project-config.js +150 -0
  92. package/dist/topology/project-config.js.map +1 -0
  93. package/dist/topology/workspace-definition.d.ts +26 -0
  94. package/dist/topology/workspace-definition.d.ts.map +1 -0
  95. package/dist/topology/workspace-definition.js +104 -0
  96. package/dist/topology/workspace-definition.js.map +1 -0
  97. package/dist/traverse.d.ts +49 -0
  98. package/dist/traverse.d.ts.map +1 -0
  99. package/dist/traverse.js +167 -0
  100. package/dist/traverse.js.map +1 -0
  101. package/dist/types.d.ts +332 -0
  102. package/dist/types.d.ts.map +1 -0
  103. package/dist/types.js +2 -0
  104. package/dist/types.js.map +1 -0
  105. package/package.json +63 -3
  106. package/src/assignment.ts +83 -0
  107. package/src/boundaries/endpoints.ts +273 -0
  108. package/src/boundaries/index.ts +118 -0
  109. package/src/boundaries/requests.ts +411 -0
  110. package/src/edges.ts +334 -0
  111. package/src/file-index.ts +127 -0
  112. package/src/graph.ts +591 -0
  113. package/src/index.ts +58 -0
  114. package/src/metrics.ts +350 -0
  115. package/src/package-catalog.ts +145 -0
  116. package/src/paths.ts +138 -0
  117. package/src/persistence.ts +746 -0
  118. package/src/resolve/candidates.ts +230 -0
  119. package/src/resolve/package-exports.ts +268 -0
  120. package/src/resolve/pipeline.ts +140 -0
  121. package/src/resolve/resolvers.ts +468 -0
  122. package/src/restore.ts +201 -0
  123. package/src/topology/compose.ts +268 -0
  124. package/src/topology/jsonc.ts +147 -0
  125. package/src/topology/load.ts +644 -0
  126. package/src/topology/manifest.ts +132 -0
  127. package/src/topology/project-config.ts +183 -0
  128. package/src/topology/workspace-definition.ts +115 -0
  129. package/src/traverse.ts +232 -0
  130. package/src/types.ts +372 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requests.js","sourceRoot":"","sources":["../../src/boundaries/requests.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI5C,MAAM,OAAO,GAAe,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;AACzE,MAAM,SAAS,GAAe,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AACpD,MAAM,OAAO,GAAG,WAAW,CAAC;AAC5B,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAQ5C,SAAS,UAAU,CAAC,IAA6B,EAAE,KAAa;IAC9D,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,cAAc,CAAC,IAAgB,EAAE,IAAY,EAAE,KAAK,GAAG,CAAC;IAC/D,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC;IAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;IACpD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CACpB,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAC5E,CAAC;IACJ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACjC,cAAc,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAChF,CAAC;IACJ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAChF,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,sFAAsF;AACtF,SAAS,aAAa,CAAC,IAAY,EAAE,OAAgB,EAAE,OAAO,IAAI,GAAG,EAAU;IAC7E,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;IAC5C,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1C,IACE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CACxB,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;QAC/B,OAAO,CAAC,IAAI,KAAK,IAAI;QACrB,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CACtC;QAED,OAAO,IAAI,CAAC;IACd,IACE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CACxB,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;QAC/B,OAAO,CAAC,IAAI,KAAK,IAAI;QACrB,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;QAChC,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,oBAAoB,CAChD;QAED,OAAO,IAAI,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACrF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,QAAQ,EAAE,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI;gBAAE,SAAS;YAClE,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;gBAAE,SAAS;YAChD,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YAC5C,IACE,MAAM,KAAK,IAAI;gBACf,MAAM,KAAK,SAAS;gBACpB,SAAS,KAAK,SAAS;gBACvB,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC;gBAExF,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,OAAgB,EAAE,IAAiB,EAAE,KAAa;IACnF,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;IAC1C,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,OAAO,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC1C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAC7D,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;IAC9F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;QAC7F,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,kDAAkD,EAAE,CAAC;IACzF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QACtB,OAAO,iBAAiB,CACrB,OAAO,CAAC,CAAC,CAA8B,CAAC,KAAK,EAC9C,OAAO,EACP,IAAI,EACJ,KAAK,GAAG,CAAC,CACV,CAAC;IACJ,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,QAAQ,KAAK,SAAS;QACxB,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;YAC/D,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,oDAAoD,EAAE;YACnF,CAAC,CAAC,QAAQ,CAAC;IACf,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACxE,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ;QAC5B,OAAO,WAAW,CAChB,IAAI,EACJ,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,IAAI,QAAQ,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,EAClE,IAAI,EACJ,KAAK,GAAG,CAAC,CACV,CAAC;IACJ,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAgB,EAChB,OAAgB,EAChB,OAAO,IAAI,GAAG,EAAU,EACxB,KAAK,GAAG,CAAC;IAET,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,OAAO,CAAC;IAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,CAAC,KAAiB,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1F,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAC1B,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;SACnF,CAAC;IACJ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QACxB,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAClC,QAAQ,IAAI,KAAK;gBACf,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBACnC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CACpD;SACF,CAAC;IACJ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7E,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;YAC7E,MAAM,QAAQ,GACZ,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAC1C,CAAC,KAAK,EAAE,EAAE,CACR,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CACxB,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,KAAK,oBAAoB,CAC9E;gBACD,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,UAAU,CAAC,IAAI,CAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,oBAAoB,CAC/C;gBACD,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CACzB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,KAAK,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,oBAAoB,CACrE,CACJ,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC7F,IAAI,QAAQ;gBAAE,OAAO,OAAO,CAAC;QAC/B,CAAC;QACD,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,IAA6B,EAAE,KAAa;IAC9D,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,IAAI,KAAK,KAAK,QAAQ,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACjE,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,WAAW,IAAI,QAAQ,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,IAA6B,EAAE,IAAoB;IACxE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;YACnF,OAAO,KAAK,CAAC;QACf,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACtE,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC,cAAc,KAAK,IAAI,CAAC;QACtE,IACE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC;YAE9F,OAAO,KAAK,CAAC;QACf,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAClF,CAAC;IACD,OAAO,IAAI,KAAK,OAAO,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CACpB,IAA6B,EAC7B,IAAoB;IAEpB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,KAAK,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC/F,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC,CAAC,CAAuB,CAAC;QACxE,IACE,UAAU,CAAC,MAAM,GAAG,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;YAEjF,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,MAAM,CAAC,IAAgB;IAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC;YACzE,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACjB,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7F,IACE,IAAI,CAAC,IAAI,KAAK,MAAM;QACpB,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM;QAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,oBAAoB;QACzC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAE3B,OAAO,eAAe,CAAC;IACzB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAgB;IAChC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,MAAM,GAAe,SAAS,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtC,IACE,MAAM,KAAK,KAAK;oBAChB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC;oBAE3E,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC3E,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW;gBAAE,MAAM,GAAG,OAAO,CAAC;QACjE,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;YAAE,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1D,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAC9C,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACjE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;QAC5B,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IAKnC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;IAC/E,IAAI,IAAI,GAAG,IAAI,EACb,MAAM,GAAkB,IAAI,CAAC;IAC/B,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;gBACpC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;YACjF,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACvB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,IAAI,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;QACtE,CAAC;IACH,CAAC;IACD,IACE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3B,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QAEhC,OAAO;YACL,IAAI,EAAE,IAAI;YACV,MAAM;YACN,MAAM,EAAE,4DAA4D;SACrE,CAAC;IACJ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,IAAI,KAAK,eAAe,CAAC;QAC5F,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,kDAAkD,EAAE,CAAC;IAC5F,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AACnE,CAAC;AAWD,8FAA8F;AAC9F,MAAM,UAAU,eAAe,CAAC,IAA6B;IAC3D,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,IAAI,CAAC,EAAE,CAAC;QACtD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzC,IACE,MAAM,KAAK,IAAI;gBACf,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC5B,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC1B,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EACzB,CAAC;gBACD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,MAAM;IACtB,CAAC;IACD,MAAM,IAAI,GAAG,CACX,IAAoB,EACpB,OAAgB,EAChB,MAAgC,EAChC,KAAiC,EAC3B,EAAE;QACR,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK;YACxB,MAAM,IAAI,aAAa,CAAC,qBAAqB,EAAE,wCAAwC,CAAC,CAAC;QAC3F,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QACpF,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC;YACV,MAAM;YACN,MAAM;YACN,GAAG,UAAU;YACb,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS;gBACpD,CAAC,CAAC,EAAE,MAAM,EAAE,qCAAqC,EAAE;gBACnD,CAAC,CAAC,EAAE,CAAC;YACP,UAAU,EAAE,CAAC,GAAG,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;SAClE,CAAC,CAAC;IACL,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CACb,EAAsB,EACtB,IAAkB,EAClB,MAAgC,EAChC,KAAiC,EACjC,IAAiB,EACX,EAAE;QACR,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM;gBACN,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,+CAA+C;gBACvD,UAAU,EAAE,KAAK;aAClB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI;YACV,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,IAAI,SAAS;SAC/C,CAAC,CACH,CAAC;QACF,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QAC/C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC;gBAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;iBAC7D,CAAC;gBACJ,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACzC,IAAI,MAAM,KAAK,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;oBAC/C,MAAM,CACJ,MAAM,EACN,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,EAC5D,MAAM,EACN,CAAC,GAAG,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAClE,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAC7B,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAC/F,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACtC,iBAAiB,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CACpE,CAAC;QACF,+FAA+F;QAC/F,IACE,IAAI,CAAC,MAAM,KAAK,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC;YAE9F,SAAS;QACX,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QAC3C,IAAI,CACF,IAAI,EACJ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,EAC3C,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,EACvC,EAAE,CACH,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Rohimporte → Kanten des Dateigraphen (spec.md §14.2).
3
+ *
4
+ * Diese Datei ist die Stelle, an der E4 konkret wird. Drei Faelle, die hier
5
+ * NICHT stillschweigend verschwinden:
6
+ *
7
+ * 1. Ein Import, der sich nicht aufloesen laesst, bleibt eine Kante. Er
8
+ * behaelt seine Art (`import` bleibt `import`) und bekommt
9
+ * `resolution.status: "unresolved"` mit benanntem Grund. So bleibt die
10
+ * Import-Resolution-Rate (spec.md §14.4) eine ehrliche Zahl.
11
+ * 2. Ein Import OHNE Spezifizierer kann keine Kante werden — `rawSpecifier`
12
+ * darf nie leer sein (`validateFileEdge`). Er wird deshalb zum
13
+ * Ledger-Eintrag, nicht zu einer weggelassenen Zeile.
14
+ * 3. Eine Datei, deren Importe gar nicht erst extrahiert werden konnten
15
+ * (`importsMissingReason`), erzeugt ebenfalls einen Ledger-Eintrag.
16
+ * Ohne ihn saehe eine nicht geparste Datei wie eine importfreie aus.
17
+ */
18
+ import type { FileEdgeKind, FileEdgeV1, RawImportKind, SkipLedgerEntryV1 } from "@untangle-code/domain";
19
+ import type { ContainerServiceV1, FileImportsV1, ImportResolverV1, ResolveContextV1, WorkspacePackageCatalogV1, WorkspacePackageV1 } from "./types.js";
20
+ /** Abbildung der Parser-Importart auf die Kantenart des Graphen. */
21
+ export declare const RAW_IMPORT_KIND_TO_EDGE_KIND: Readonly<Record<RawImportKind, FileEdgeKind>>;
22
+ /** Alles, was der Kantenbau je Datei braucht. */
23
+ export interface EdgeBuildContextV1 {
24
+ workspaceId: string;
25
+ graphGeneration: string;
26
+ packages: readonly WorkspacePackageV1[];
27
+ /** Repository-bewusster Paketkatalog; siehe `package-catalog.ts`. */
28
+ packageCatalog: WorkspacePackageCatalogV1;
29
+ services: readonly ContainerServiceV1[];
30
+ projectAliases: ResolveContextV1["projectAliases"];
31
+ configuredAliases: ResolveContextV1["configuredAliases"];
32
+ extensionOrder: readonly string[];
33
+ files: ResolveContextV1["files"];
34
+ /** repoId → refId, fuer die Zielangabe aufgeloester Kanten. */
35
+ refIdByRepoId: ReadonlyMap<string, string>;
36
+ /** repoId + Pfad → fileId. */
37
+ resolveFileId: (repoId: string, path: string) => string | null;
38
+ pipeline?: readonly ImportResolverV1[];
39
+ }
40
+ /** Ergebnis des Kantenbaus fuer EINE Datei. */
41
+ export interface FileEdgesV1 {
42
+ edges: FileEdgeV1[];
43
+ skipped: SkipLedgerEntryV1[];
44
+ }
45
+ /** Baut alle Kanten einer einzelnen Datei. */
46
+ export declare function buildEdgesForFile(file: FileImportsV1, context: EdgeBuildContextV1): FileEdgesV1;
47
+ /** Stabile Kantenordnung: Quelle, Art, Rohstring, laufende Nummer. */
48
+ export declare function compareEdges(left: FileEdgeV1, right: FileEdgeV1): number;
49
+ //# sourceMappingURL=edges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edges.d.ts","sourceRoot":"","sources":["../src/edges.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EACV,YAAY,EAEZ,UAAU,EAEV,aAAa,EACb,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAW/B,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,oEAAoE;AACpE,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAStF,CAAC;AASF,iDAAiD;AACjD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC,qEAAqE;IACrE,cAAc,EAAE,yBAAyB,CAAC;IAC1C,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC,cAAc,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACnD,iBAAiB,EAAE,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;IACzD,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACjC,+DAA+D;IAC/D,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,8BAA8B;IAC9B,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC/D,QAAQ,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACxC;AAED,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,8CAA8C;AAC9C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAuJ/F;AAOD,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAQxE"}
package/dist/edges.js ADDED
@@ -0,0 +1,223 @@
1
+ import { FILE_GRAPH_VERSION, buildFileEdgeId, buildSkipLedgerEntry, compareCodepoints, } from "@untangle-code/domain";
2
+ import { assignContainerService, assignPackage } from "./assignment.js";
3
+ import { isAssetSpecifier } from "./resolve/candidates.js";
4
+ import { resolveImport } from "./resolve/pipeline.js";
5
+ /** Abbildung der Parser-Importart auf die Kantenart des Graphen. */
6
+ export const RAW_IMPORT_KIND_TO_EDGE_KIND = {
7
+ import: "import",
8
+ re_export: "re-export",
9
+ dynamic_import: "dynamic-import",
10
+ // `package_dependency` entsteht nicht im Quelltext, sondern aus einem
11
+ // Manifest. Als Bezug auf eine Konfigurationsdatei ist es genau das, was
12
+ // `config-reference` beschreibt — und NICHT `import`, weil kein Modul
13
+ // geladen wird.
14
+ package_dependency: "config-reference",
15
+ };
16
+ /**
17
+ * Zeichen, die einen dynamischen Spezifizierer als nicht statisch auswertbar
18
+ * ausweisen. Der Parser liefert bei `import(variable)` den Ausdruckstext; der
19
+ * ist ein ehrlicher Rohstring, aber kein Modulpfad.
20
+ */
21
+ const NON_LITERAL_SPECIFIER = /[`$+(){}[\]\s]|\.\.\.|\?\?|&&|\|\|/;
22
+ /** Baut alle Kanten einer einzelnen Datei. */
23
+ export function buildEdgesForFile(file, context) {
24
+ const edges = [];
25
+ const skipped = [];
26
+ if (file.importsMissingReason !== undefined) {
27
+ skipped.push(buildSkipLedgerEntry({
28
+ stage: "file_graph",
29
+ subjectKind: "file",
30
+ subjectId: file.fileId,
31
+ path: file.path,
32
+ repoId: file.repoId,
33
+ refId: file.refId,
34
+ reason: "parse_failed",
35
+ detail: `imports of "${file.path}" were not extracted: ${file.importsMissingReason}`,
36
+ recoverable: true,
37
+ }));
38
+ }
39
+ const fromPackage = assignPackage(context.packages, file.repoId, file.path);
40
+ const fromService = assignContainerService(context.services, file.repoId, file.path);
41
+ const resolveContext = {
42
+ workspaceId: context.workspaceId,
43
+ fromRepoId: file.repoId,
44
+ fromRefId: file.refId,
45
+ fromPath: file.path,
46
+ fromLanguageId: file.languageId,
47
+ ...(fromPackage === null ? {} : { fromPackage }),
48
+ files: context.files,
49
+ packageCatalog: context.packageCatalog,
50
+ projectAliases: context.projectAliases,
51
+ configuredAliases: context.configuredAliases,
52
+ extensionOrder: context.extensionOrder,
53
+ };
54
+ const ordinals = new Map();
55
+ for (const rawImport of file.imports) {
56
+ const specifier = rawImport.specifier;
57
+ if (specifier.trim() === "") {
58
+ skipped.push(buildSkipLedgerEntry({
59
+ stage: "file_graph",
60
+ subjectKind: "file_edge",
61
+ path: file.path,
62
+ repoId: file.repoId,
63
+ refId: file.refId,
64
+ range: rawImport.range,
65
+ reason: "resolution_failed",
66
+ detail: `parser reported an import of kind "${rawImport.importKind}" without a specifier at line ${String(rawImport.range.startLine)}; an edge without a raw specifier would violate the file-edge invariant`,
67
+ recoverable: false,
68
+ }));
69
+ continue;
70
+ }
71
+ const kind = edgeKindOf(rawImport, specifier);
72
+ const ordinalKey = `${kind}\u001f${specifier}`;
73
+ const occurrenceOrdinal = ordinals.get(ordinalKey) ?? 0;
74
+ ordinals.set(ordinalKey, occurrenceOrdinal + 1);
75
+ const resolution = resolveSpecifier(rawImport, specifier, resolveContext, context);
76
+ const site = {
77
+ range: rawImport.range,
78
+ ...(rawImport.importedNames !== undefined && rawImport.importedNames.length > 0
79
+ ? { importedNames: [...rawImport.importedNames] }
80
+ : {}),
81
+ ...(rawImport.typeOnly === undefined ? {} : { typeOnly: rawImport.typeOnly }),
82
+ };
83
+ // Die Grenzen werden aus der ENDGUELTIGEN Aufloesung abgeleitet, nicht aus
84
+ // der des Resolvers: `toDomainResolution` kann einen Treffer noch zu einem
85
+ // Fehlschlag herabstufen (wenn der Index keine `file_id` zum Pfad hat), und
86
+ // eine Kante mit `crossRepo: true` bei `status: "unresolved"` waere eine
87
+ // Behauptung ohne Grundlage.
88
+ const domainResolution = toDomainResolution(resolution, context);
89
+ let targetPackage = null;
90
+ let targetService = null;
91
+ let externalPackageName;
92
+ if (domainResolution.status === "resolved") {
93
+ targetPackage = assignPackage(context.packages, domainResolution.targetRepoId, domainResolution.targetPath);
94
+ targetService = assignContainerService(context.services, domainResolution.targetRepoId, domainResolution.targetPath);
95
+ }
96
+ else if (domainResolution.status === "external") {
97
+ externalPackageName = domainResolution.packageName;
98
+ }
99
+ const crossRepo = domainResolution.status === "resolved" && domainResolution.targetRepoId !== file.repoId;
100
+ const toPackageName = targetPackage?.name ?? externalPackageName;
101
+ // Paketgleichheit ist NICHT Namensgleichheit: zwei Repositories eines
102
+ // Workspace duerfen ein gleichnamiges Paket fuehren, und eine Kante von
103
+ // einem ins andere ueberquert sehr wohl eine Paketgrenze. Verglichen wird
104
+ // deshalb die Identitaet (Repository + Verzeichnis), nicht der Name.
105
+ const crossPackage = toPackageName !== undefined &&
106
+ (fromPackage === null ||
107
+ (targetPackage === null
108
+ ? fromPackage.name !== toPackageName
109
+ : packageKeyOf(fromPackage) !== packageKeyOf(targetPackage)));
110
+ const crossContainer = fromService !== null && targetService !== null && fromService.name !== targetService.name;
111
+ const edge = {
112
+ schemaVersion: 1,
113
+ edgeId: buildFileEdgeId({
114
+ workspaceId: context.workspaceId,
115
+ fromFileId: file.fileId,
116
+ edgeKind: kind,
117
+ rawSpecifier: specifier,
118
+ occurrenceOrdinal,
119
+ }),
120
+ workspaceId: context.workspaceId,
121
+ repoId: file.repoId,
122
+ refId: file.refId,
123
+ fromFileId: file.fileId,
124
+ fromPath: file.path,
125
+ kind,
126
+ rawSpecifier: specifier,
127
+ resolution: domainResolution,
128
+ boundary: {
129
+ crossRepo,
130
+ crossPackage,
131
+ crossContainer,
132
+ ...(fromPackage === null ? {} : { fromPackageName: fromPackage.name }),
133
+ ...(toPackageName === undefined ? {} : { toPackageName }),
134
+ ...(fromService === null ? {} : { fromContainerService: fromService.name }),
135
+ ...(targetService === null ? {} : { toContainerService: targetService.name }),
136
+ },
137
+ sites: [site],
138
+ occurrenceOrdinal,
139
+ graphGeneration: context.graphGeneration,
140
+ graphVersion: FILE_GRAPH_VERSION,
141
+ };
142
+ edges.push(edge);
143
+ }
144
+ edges.sort(compareEdges);
145
+ return { edges, skipped };
146
+ }
147
+ /** Identitaet eines Pakets: Repository plus Verzeichnis, nicht der Name. */
148
+ function packageKeyOf(entry) {
149
+ return `${entry.repoId}\u001f${entry.packageDir}`;
150
+ }
151
+ /** Stabile Kantenordnung: Quelle, Art, Rohstring, laufende Nummer. */
152
+ export function compareEdges(left, right) {
153
+ return (compareCodepoints(left.fromFileId, right.fromFileId) ||
154
+ compareCodepoints(left.kind, right.kind) ||
155
+ compareCodepoints(left.rawSpecifier, right.rawSpecifier) ||
156
+ left.occurrenceOrdinal - right.occurrenceOrdinal ||
157
+ compareCodepoints(left.edgeId, right.edgeId));
158
+ }
159
+ function edgeKindOf(rawImport, specifier) {
160
+ const base = RAW_IMPORT_KIND_TO_EDGE_KIND[rawImport.importKind];
161
+ // Ein Import einer Nicht-Code-Ressource bleibt eine echte Abhaengigkeit,
162
+ // ist aber keine Modulbeziehung — `asset-reference` macht sichtbar, dass
163
+ // die Zieldatei nie Symbole beitragen wird (spec.md §19/§20).
164
+ if ((base === "import" || base === "dynamic-import") && isAssetSpecifier(specifier)) {
165
+ return "asset-reference";
166
+ }
167
+ return base;
168
+ }
169
+ function resolveSpecifier(rawImport, specifier, resolveContext, context) {
170
+ if (rawImport.importKind === "dynamic_import" && NON_LITERAL_SPECIFIER.test(specifier)) {
171
+ return {
172
+ status: "unresolved",
173
+ reason: "dynamic_specifier_not_statically_analyzable",
174
+ detail: `dynamic import argument "${specifier}" is an expression, not a literal module specifier; the raw text is kept so the call site stays findable`,
175
+ };
176
+ }
177
+ return resolveImport(specifier, resolveContext, context.pipeline).result;
178
+ }
179
+ function toDomainResolution(resolution, context) {
180
+ if (resolution.status === "external") {
181
+ return {
182
+ status: "external",
183
+ mechanism: resolution.mechanism,
184
+ packageName: resolution.packageName,
185
+ ...(resolution.declaredVersion === undefined
186
+ ? {}
187
+ : { declaredVersion: resolution.declaredVersion }),
188
+ };
189
+ }
190
+ if (resolution.status === "unresolved") {
191
+ return {
192
+ status: "unresolved",
193
+ reason: resolution.reason,
194
+ detail: resolution.detail,
195
+ ...(resolution.rejectedCandidates === undefined
196
+ ? {}
197
+ : { rejectedCandidates: resolution.rejectedCandidates }),
198
+ };
199
+ }
200
+ const targetFileId = context.resolveFileId(resolution.targetRepoId, resolution.targetPath);
201
+ if (targetFileId === null) {
202
+ // Kann nur passieren, wenn der Index zwischen Probe und Kantenbau
203
+ // veraendert wurde. Der Fall wird zum benannten Fehlschlag, nicht zu
204
+ // einer Kante mit leerer Ziel-ID.
205
+ return {
206
+ status: "unresolved",
207
+ reason: "target_file_not_found",
208
+ detail: `resolver found "${resolution.targetPath}" in repository "${resolution.targetRepoId}", but the file index has no id for it`,
209
+ };
210
+ }
211
+ return {
212
+ status: "resolved",
213
+ mechanism: resolution.mechanism,
214
+ targetFileId,
215
+ targetRepoId: resolution.targetRepoId,
216
+ targetRefId: context.refIdByRepoId.get(resolution.targetRepoId) ?? "",
217
+ targetPath: resolution.targetPath,
218
+ ...(resolution.viaPackageName === undefined
219
+ ? {}
220
+ : { viaPackageName: resolution.viaPackageName }),
221
+ };
222
+ }
223
+ //# sourceMappingURL=edges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edges.js","sourceRoot":"","sources":["../src/edges.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { FileImportsV1, FileLookupV1 } from "./types.js";
2
+ /** Eintrag des Index — genau das, was die Aufloesung ueber eine Datei wissen muss. */
3
+ export interface FileIndexEntryV1 {
4
+ fileId: string;
5
+ repoId: string;
6
+ refId: string;
7
+ path: string;
8
+ languageId: string;
9
+ contentHash: string;
10
+ }
11
+ export declare class FileIndex implements FileLookupV1 {
12
+ private readonly byRepoPath;
13
+ private readonly byFileId;
14
+ private readonly repos;
15
+ static fromFiles(files: readonly FileImportsV1[]): FileIndex;
16
+ /**
17
+ * Nimmt einen Eintrag auf und ERSETZT dabei jede fruehere Bindung derselben
18
+ * `file_id`.
19
+ *
20
+ * Der zweite Schritt ist der wichtige: eine Umbenennung erreicht den Index
21
+ * als `add()` mit neuem Pfad (`FileGraphChangeV1` kennt kein „renamed"). Wer
22
+ * dabei nur den neuen Schluessel setzt, laesst den alten stehen — der Index
23
+ * behauptet danach eine Datei unter einem Pfad, den keine Datei mehr hat,
24
+ * und die Aufloesung meldet eine Kante dorthin als `resolved`. Ein Phantom
25
+ * mit Aufloesungsrate 1 ist genau das stille Verschweigen, das E4 verbietet.
26
+ */
27
+ add(entry: FileIndexEntryV1): void;
28
+ /** Entfernt einen Eintrag; True, wenn er vorhanden war. */
29
+ remove(fileId: string): boolean;
30
+ hasFile(repoId: string, path: string): boolean;
31
+ fileIdOf(repoId: string, path: string): string | null;
32
+ entryOf(repoId: string, path: string): FileIndexEntryV1 | null;
33
+ entryById(fileId: string): FileIndexEntryV1 | null;
34
+ repoIds(): readonly string[];
35
+ get size(): number;
36
+ }
37
+ //# sourceMappingURL=file-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-index.d.ts","sourceRoot":"","sources":["../src/file-index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9D,sFAAsF;AACtF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,SAAU,YAAW,YAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuC;IAClE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IAChE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAE3C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS;IAe5D;;;;;;;;;;OAUG;IACH,GAAG,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAsBlC,2DAA2D;IAC3D,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAe/B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9C,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIrD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAI9D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAIlD,OAAO,IAAI,SAAS,MAAM,EAAE;IAI5B,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Dateiverzeichnis: die einzige Nachschlagequelle der Aufloesung.
3
+ *
4
+ * Die gesamte Modulaufloesung arbeitet gegen diesen Index und NICHT gegen das
5
+ * Dateisystem. Grund: eine Aufloesung, die das Dateisystem befragt, haengt am
6
+ * Zustand der Platte zum Zeitpunkt des Laufs und ist damit weder
7
+ * reproduzierbar noch ohne echtes Repository testbar. Der Index wird einmal
8
+ * aus der Dateiliste des Scanners gebaut; ab da ist jede Aufloesung eine reine
9
+ * Funktion.
10
+ */
11
+ import { compareCodepoints } from "@untangle-code/domain";
12
+ import { normalizePath } from "./paths.js";
13
+ export class FileIndex {
14
+ byRepoPath = new Map();
15
+ byFileId = new Map();
16
+ repos = new Set();
17
+ static fromFiles(files) {
18
+ const index = new FileIndex();
19
+ for (const file of files) {
20
+ index.add({
21
+ fileId: file.fileId,
22
+ repoId: file.repoId,
23
+ refId: file.refId,
24
+ path: normalizePath(file.path),
25
+ languageId: file.languageId,
26
+ contentHash: file.contentHash,
27
+ });
28
+ }
29
+ return index;
30
+ }
31
+ /**
32
+ * Nimmt einen Eintrag auf und ERSETZT dabei jede fruehere Bindung derselben
33
+ * `file_id`.
34
+ *
35
+ * Der zweite Schritt ist der wichtige: eine Umbenennung erreicht den Index
36
+ * als `add()` mit neuem Pfad (`FileGraphChangeV1` kennt kein „renamed"). Wer
37
+ * dabei nur den neuen Schluessel setzt, laesst den alten stehen — der Index
38
+ * behauptet danach eine Datei unter einem Pfad, den keine Datei mehr hat,
39
+ * und die Aufloesung meldet eine Kante dorthin als `resolved`. Ein Phantom
40
+ * mit Aufloesungsrate 1 ist genau das stille Verschweigen, das E4 verbietet.
41
+ */
42
+ add(entry) {
43
+ const normalized = { ...entry, path: normalizePath(entry.path) };
44
+ const newKey = keyOf(normalized.repoId, normalized.path);
45
+ const previous = this.byFileId.get(normalized.fileId);
46
+ if (previous !== undefined) {
47
+ const previousKey = keyOf(previous.repoId, previous.path);
48
+ // Nur loeschen, wenn der alte Schluessel WIRKLICH noch auf diese Datei
49
+ // zeigt: hat inzwischen eine andere Datei den Pfad uebernommen, waere das
50
+ // Loeschen ein zweites Phantom — diesmal ein fehlendes statt eines
51
+ // ueberzaehligen.
52
+ if (previousKey !== newKey &&
53
+ this.byRepoPath.get(previousKey)?.fileId === normalized.fileId) {
54
+ this.byRepoPath.delete(previousKey);
55
+ }
56
+ }
57
+ this.byRepoPath.set(newKey, normalized);
58
+ this.byFileId.set(normalized.fileId, normalized);
59
+ this.repos.add(normalized.repoId);
60
+ }
61
+ /** Entfernt einen Eintrag; True, wenn er vorhanden war. */
62
+ remove(fileId) {
63
+ const entry = this.byFileId.get(fileId);
64
+ if (entry === undefined) {
65
+ return false;
66
+ }
67
+ this.byFileId.delete(fileId);
68
+ const key = keyOf(entry.repoId, entry.path);
69
+ // Denselben Grund wie in `add()`: den Pfadschluessel nur freigeben, wenn er
70
+ // noch auf genau diese Datei zeigt.
71
+ if (this.byRepoPath.get(key)?.fileId === fileId) {
72
+ this.byRepoPath.delete(key);
73
+ }
74
+ return true;
75
+ }
76
+ hasFile(repoId, path) {
77
+ return this.byRepoPath.has(keyOf(repoId, normalizePath(path)));
78
+ }
79
+ fileIdOf(repoId, path) {
80
+ return this.byRepoPath.get(keyOf(repoId, normalizePath(path)))?.fileId ?? null;
81
+ }
82
+ entryOf(repoId, path) {
83
+ return this.byRepoPath.get(keyOf(repoId, normalizePath(path))) ?? null;
84
+ }
85
+ entryById(fileId) {
86
+ return this.byFileId.get(fileId) ?? null;
87
+ }
88
+ repoIds() {
89
+ return [...this.repos].sort(compareCodepoints);
90
+ }
91
+ get size() {
92
+ return this.byFileId.size;
93
+ }
94
+ }
95
+ /**
96
+ * U+001F als Trenner: derselbe Trenner, den `domain`s ID-Ableitung nutzt. Er
97
+ * kann in keinem Pfad und in keiner Repository-ID vorkommen, also kann der
98
+ * Schluessel von ("ab", "c") nie mit dem von ("a", "bc") kollidieren.
99
+ */
100
+ function keyOf(repoId, path) {
101
+ return `${repoId}\u001f${path}`;
102
+ }
103
+ //# sourceMappingURL=file-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-index.js","sourceRoot":"","sources":["../src/file-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Der Dateigraph selbst: Aufbau, Abfrage, Traversierung, Fortschreibung.
3
+ *
4
+ * DREI ENTSCHEIDUNGEN, die hier festgeschrieben sind:
5
+ *
6
+ * 1. `unresolvedImportCount` zaehlt Kanten mit
7
+ * `resolution.status === "unresolved"`, NICHT solche mit
8
+ * `kind === "unresolved"`. Die normative Regel von `validateFileEdge`
9
+ * lautet: ein nicht aufloesbarer Import behaelt `kind: "import"`. Wer nach
10
+ * der Art zaehlte, bekaeme in jedem realen Lauf die Zahl 0 — und damit
11
+ * eine Kennzahl, die genau das verschweigt, wofuer sie da ist (E4).
12
+ *
13
+ * 2. Nur AUFGELOESTE Kanten mit Ziel im Workspace sind Graphverbindungen.
14
+ * Externe und unaufgeloeste Kanten existieren weiter, zaehlen in die
15
+ * Import-Resolution-Rate und stehen in `imports`, haben aber keinen
16
+ * Zielknoten — es gibt keinen.
17
+ *
18
+ * 3. Die Traversierung bricht Zyklen NICHT auf, sie meldet sie. Der
19
+ * Zyklenschutz verhindert nur die Endlosschleife; jeder wiedergetroffene
20
+ * Knoten landet in `revisitSkippedFileIds` und jeder geschlossene Pfad in
21
+ * `cycles`.
22
+ */
23
+ import type { FileEdgeV1, FileGraphMetricsV1, FileNodeV1, SkipLedgerEntryV1, SkipLedgerV1, TraversalDirection, TraversalLimitsV1 } from "@untangle-code/domain";
24
+ import type { MonotonicClock } from "./traverse.js";
25
+ import { DEFAULT_TRAVERSAL_LIMITS } from "./traverse.js";
26
+ import type { AliasRuleV1, FileGraphLimitsV1, FileGraphSnapshotV1, FileImportsV1, FileTraversalResultV1, ImportResolverV1, RepositoryInputV1, WorkspaceTopologyV1 } from "./types.js";
27
+ /**
28
+ * Standardbudgets und Uhr leben seit dem Bau des Lesepfades in `traverse.ts`
29
+ * — hier stehen sie nur noch als Weiterreichung, damit der bisherige
30
+ * Einstiegspunkt des Pakets unveraendert bleibt.
31
+ */
32
+ export { DEFAULT_TRAVERSAL_LIMITS };
33
+ export type { MonotonicClock };
34
+ export interface BuildFileGraphInputV1 {
35
+ workspaceId: string;
36
+ graphGeneration: string;
37
+ repositories: readonly RepositoryInputV1[];
38
+ files: readonly FileImportsV1[];
39
+ topology: WorkspaceTopologyV1;
40
+ /** Aliasregeln aus Projektkonfigurationen (siehe `aliasRulesFromConfigs`). */
41
+ projectAliases?: readonly AliasRuleV1[];
42
+ /** Aliasregeln aus der Nutzerkonfiguration. */
43
+ configuredAliases?: readonly AliasRuleV1[];
44
+ extensionOrder?: readonly string[];
45
+ limits?: Partial<FileGraphLimitsV1>;
46
+ /** Ersetzt die Standardpipeline; nur fuer Erweiterungen gedacht. */
47
+ pipeline?: readonly ImportResolverV1[];
48
+ }
49
+ /** Eine Aenderung fuer die inkrementelle Fortschreibung. */
50
+ export type FileGraphChangeV1 = {
51
+ kind: "added";
52
+ file: FileImportsV1;
53
+ } | {
54
+ kind: "modified";
55
+ file: FileImportsV1;
56
+ } | {
57
+ kind: "removed";
58
+ fileId: string;
59
+ };
60
+ /** Was eine Fortschreibung tatsaechlich angefasst hat. */
61
+ export interface FileGraphUpdateResultV1 {
62
+ /** Dateien, deren Kanten neu gebaut wurden, codepoint-sortiert. */
63
+ recomputedFileIds: string[];
64
+ addedEdgeIds: string[];
65
+ removedEdgeIds: string[];
66
+ /** Knoten, deren `dependents` sich geaendert haben. */
67
+ affectedFileIds: string[];
68
+ skipped: SkipLedgerEntryV1[];
69
+ }
70
+ interface TraverseOptionsV1 {
71
+ direction: TraversalDirection;
72
+ limits?: Partial<TraversalLimitsV1>;
73
+ now?: MonotonicClock;
74
+ }
75
+ export declare class FileDependencyGraph {
76
+ readonly workspaceId: string;
77
+ readonly graphGeneration: string;
78
+ private readonly index;
79
+ private readonly edgeContext;
80
+ private readonly topology;
81
+ private readonly limits;
82
+ private readonly nodesById;
83
+ private readonly edgesById;
84
+ private readonly edgeIdsByFrom;
85
+ private readonly filesById;
86
+ /**
87
+ * Ledger-Eintraege JE DATEI statt in einer flachen Liste.
88
+ *
89
+ * Eine flache Liste laesst sich nur ueber den Pfad aufraeumen — und der ist
90
+ * genau das, was sich bei einer Umbenennung aendert. Ein Eintrag der alten
91
+ * Fassung bliebe dann unter dem ALTEN Pfad stehen, und beim Entfernen einer
92
+ * Datei bliebe er ganz. Beides sind Meldungen ueber Dateien, die der Graph
93
+ * nicht mehr kennt; `countsByReason` waere dauerhaft falsch. Ueber die
94
+ * `file_id` ist das Aufraeumen exakt.
95
+ */
96
+ private readonly skipEntriesByFile;
97
+ private adjacency;
98
+ private cachedMetrics;
99
+ private constructor();
100
+ static build(input: BuildFileGraphInputV1): FileDependencyGraph;
101
+ nodes(): FileNodeV1[];
102
+ edges(): FileEdgeV1[];
103
+ node(fileId: string): FileNodeV1 | null;
104
+ edge(edgeId: string): FileEdgeV1 | null;
105
+ /** Kanten, deren Quelle `fileId` ist, in kanonischer Ordnung. */
106
+ edgesFrom(fileId: string): FileEdgeV1[];
107
+ metrics(): FileGraphMetricsV1;
108
+ /** Alle Ledger-Eintraege des Graphen, in kanonischer Ordnung. */
109
+ private allSkipEntries;
110
+ skipLedger(): SkipLedgerV1;
111
+ /** Vollstaendiges, serialisierbares Abbild inklusive Topologie und Ledger. */
112
+ snapshot(): FileGraphSnapshotV1;
113
+ /** Woran haenge ich (vorwaerts, ueber `dependencies`). */
114
+ dependenciesOf(fileId: string, limits?: Partial<TraversalLimitsV1>, now?: MonotonicClock): FileTraversalResultV1;
115
+ /** Wer haengt an mir (rueckwaerts, ueber `dependents`) — die Wirkungsfrage. */
116
+ dependentsOf(fileId: string, limits?: Partial<TraversalLimitsV1>, now?: MonotonicClock): FileTraversalResultV1;
117
+ /**
118
+ * Tiefensuche mit Budget und Zyklenmeldung.
119
+ *
120
+ * Die Traversierung selbst steht in `traverse.ts` — sie ist wortgleich die,
121
+ * die auch ein aus einem Abbild zurueckgeladener Graph benutzt. Hier bleibt
122
+ * nur die Nachbarschaft: die Adjazenz dieses Graphen und die Frage, welche
123
+ * Kante zwei benachbarte Dateien verbindet.
124
+ */
125
+ traverse(rootFileIds: readonly string[], options: TraverseOptionsV1): FileTraversalResultV1;
126
+ /**
127
+ * Schreibt den Graphen fort, ohne ihn neu zu bauen.
128
+ *
129
+ * WELCHE DATEIEN NEU GERECHNET WERDEN — und warum nicht nur die geaenderte:
130
+ *
131
+ * - `modified` (Inhalt geaendert, Pfad gleich): NUR die Datei selbst. Ihre
132
+ * Existenz hat sich nicht geaendert, also kann sich die Aufloesung keiner
133
+ * anderen Datei geaendert haben.
134
+ * - `added` / `removed`: zusaetzlich jede Datei, deren Aufloesung von der
135
+ * Existenz dieses Pfades abhaengt. Die ist exakt bestimmbar, weil jede
136
+ * unaufgeloeste Kante ihre geprueften Kandidaten mitfuehrt (E4 zahlt sich
137
+ * hier aus): wer den betroffenen Pfad geprueft und nicht gefunden hat,
138
+ * findet ihn jetzt. Dazu kommen die bisherigen Abhaengigen und alle
139
+ * Dateien, die auf denselben Stamm aufgeloest haben (Verdeckungsfall:
140
+ * ein neues `util.ts` verdeckt ein bestehendes `util.js`).
141
+ */
142
+ applyChanges(changes: readonly FileGraphChangeV1[]): FileGraphUpdateResultV1;
143
+ private edgeIdBetween;
144
+ /** Dateien, deren Aufloesung sich durch das Auftauchen/Verschwinden von `path` aendern kann. */
145
+ private filesDependingOnPath;
146
+ private dropFile;
147
+ private removeEdgesOf;
148
+ private rebuildEdgesOf;
149
+ /** Baut Knoten, Nachbarschaft und Metrikzwischenspeicher neu auf. */
150
+ private refresh;
151
+ }
152
+ /** Kurzform des Aufbaus. */
153
+ export declare function buildFileGraph(input: BuildFileGraphInputV1): FileDependencyGraph;
154
+ /**
155
+ * Stamm eines Pfades: ohne Erweiterung und ohne abschliessendes `index`.
156
+ * `src/util.ts`, `src/util.js` und `src/util/index.ts` haben denselben Stamm —
157
+ * genau die Dateien, die einander bei der Kandidatenprobe verdecken koennen.
158
+ */
159
+ export declare function stemOf(path: string): string;
160
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}