@principled/cairn 1.0.0-beta

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 (313) hide show
  1. package/README.md +182 -0
  2. package/dist/analysis/analyzer.d.ts +13 -0
  3. package/dist/analysis/analyzer.d.ts.map +1 -0
  4. package/dist/analysis/analyzer.js +47 -0
  5. package/dist/analysis/analyzer.js.map +1 -0
  6. package/dist/analysis/embedding-provider.d.ts +12 -0
  7. package/dist/analysis/embedding-provider.d.ts.map +1 -0
  8. package/dist/analysis/embedding-provider.js +21 -0
  9. package/dist/analysis/embedding-provider.js.map +1 -0
  10. package/dist/analysis/index.d.ts +4 -0
  11. package/dist/analysis/index.d.ts.map +1 -0
  12. package/dist/analysis/index.js +4 -0
  13. package/dist/analysis/index.js.map +1 -0
  14. package/dist/analysis/stub-provider.d.ts +12 -0
  15. package/dist/analysis/stub-provider.d.ts.map +1 -0
  16. package/dist/analysis/stub-provider.js +30 -0
  17. package/dist/analysis/stub-provider.js.map +1 -0
  18. package/dist/catalog/catalog.d.ts +40 -0
  19. package/dist/catalog/catalog.d.ts.map +1 -0
  20. package/dist/catalog/catalog.js +118 -0
  21. package/dist/catalog/catalog.js.map +1 -0
  22. package/dist/catalog/category-merger.d.ts +25 -0
  23. package/dist/catalog/category-merger.d.ts.map +1 -0
  24. package/dist/catalog/category-merger.js +75 -0
  25. package/dist/catalog/category-merger.js.map +1 -0
  26. package/dist/catalog/index.d.ts +4 -0
  27. package/dist/catalog/index.d.ts.map +1 -0
  28. package/dist/catalog/index.js +4 -0
  29. package/dist/catalog/index.js.map +1 -0
  30. package/dist/catalog/post-merge-validation.d.ts +7 -0
  31. package/dist/catalog/post-merge-validation.d.ts.map +1 -0
  32. package/dist/catalog/post-merge-validation.js +59 -0
  33. package/dist/catalog/post-merge-validation.js.map +1 -0
  34. package/dist/cli/commands/add.d.ts +3 -0
  35. package/dist/cli/commands/add.d.ts.map +1 -0
  36. package/dist/cli/commands/add.js +107 -0
  37. package/dist/cli/commands/add.js.map +1 -0
  38. package/dist/cli/commands/analyze.d.ts +3 -0
  39. package/dist/cli/commands/analyze.d.ts.map +1 -0
  40. package/dist/cli/commands/analyze.js +44 -0
  41. package/dist/cli/commands/analyze.js.map +1 -0
  42. package/dist/cli/commands/diff.d.ts +3 -0
  43. package/dist/cli/commands/diff.d.ts.map +1 -0
  44. package/dist/cli/commands/diff.js +69 -0
  45. package/dist/cli/commands/diff.js.map +1 -0
  46. package/dist/cli/commands/edit.d.ts +3 -0
  47. package/dist/cli/commands/edit.d.ts.map +1 -0
  48. package/dist/cli/commands/edit.js +93 -0
  49. package/dist/cli/commands/edit.js.map +1 -0
  50. package/dist/cli/commands/export.d.ts +3 -0
  51. package/dist/cli/commands/export.d.ts.map +1 -0
  52. package/dist/cli/commands/export.js +46 -0
  53. package/dist/cli/commands/export.js.map +1 -0
  54. package/dist/cli/commands/init.d.ts +3 -0
  55. package/dist/cli/commands/init.d.ts.map +1 -0
  56. package/dist/cli/commands/init.js +21 -0
  57. package/dist/cli/commands/init.js.map +1 -0
  58. package/dist/cli/commands/inspect.d.ts +3 -0
  59. package/dist/cli/commands/inspect.d.ts.map +1 -0
  60. package/dist/cli/commands/inspect.js +153 -0
  61. package/dist/cli/commands/inspect.js.map +1 -0
  62. package/dist/cli/commands/query.d.ts +3 -0
  63. package/dist/cli/commands/query.d.ts.map +1 -0
  64. package/dist/cli/commands/query.js +77 -0
  65. package/dist/cli/commands/query.js.map +1 -0
  66. package/dist/cli/commands/review.d.ts +3 -0
  67. package/dist/cli/commands/review.d.ts.map +1 -0
  68. package/dist/cli/commands/review.js +118 -0
  69. package/dist/cli/commands/review.js.map +1 -0
  70. package/dist/cli/commands/validate.d.ts +3 -0
  71. package/dist/cli/commands/validate.d.ts.map +1 -0
  72. package/dist/cli/commands/validate.js +125 -0
  73. package/dist/cli/commands/validate.js.map +1 -0
  74. package/dist/cli/helpers.d.ts +24 -0
  75. package/dist/cli/helpers.d.ts.map +1 -0
  76. package/dist/cli/helpers.js +152 -0
  77. package/dist/cli/helpers.js.map +1 -0
  78. package/dist/cli/index.d.ts +3 -0
  79. package/dist/cli/index.d.ts.map +1 -0
  80. package/dist/cli/index.js +34 -0
  81. package/dist/cli/index.js.map +1 -0
  82. package/dist/config/index.d.ts +5 -0
  83. package/dist/config/index.d.ts.map +1 -0
  84. package/dist/config/index.js +3 -0
  85. package/dist/config/index.js.map +1 -0
  86. package/dist/config/loader.d.ts +45 -0
  87. package/dist/config/loader.d.ts.map +1 -0
  88. package/dist/config/loader.js +201 -0
  89. package/dist/config/loader.js.map +1 -0
  90. package/dist/config/schema.d.ts +37 -0
  91. package/dist/config/schema.d.ts.map +1 -0
  92. package/dist/config/schema.js +42 -0
  93. package/dist/config/schema.js.map +1 -0
  94. package/dist/data/data/defaults.yaml +101 -0
  95. package/dist/data/defaults.yaml +101 -0
  96. package/dist/errors.d.ts +45 -0
  97. package/dist/errors.d.ts.map +1 -0
  98. package/dist/errors.js +84 -0
  99. package/dist/errors.js.map +1 -0
  100. package/dist/exporters/base.d.ts +17 -0
  101. package/dist/exporters/base.d.ts.map +1 -0
  102. package/dist/exporters/base.js +7 -0
  103. package/dist/exporters/base.js.map +1 -0
  104. package/dist/exporters/csv-exporter.d.ts +13 -0
  105. package/dist/exporters/csv-exporter.d.ts.map +1 -0
  106. package/dist/exporters/csv-exporter.js +73 -0
  107. package/dist/exporters/csv-exporter.js.map +1 -0
  108. package/dist/exporters/dot-exporter.d.ts +12 -0
  109. package/dist/exporters/dot-exporter.d.ts.map +1 -0
  110. package/dist/exporters/dot-exporter.js +72 -0
  111. package/dist/exporters/dot-exporter.js.map +1 -0
  112. package/dist/exporters/index.d.ts +8 -0
  113. package/dist/exporters/index.d.ts.map +1 -0
  114. package/dist/exporters/index.js +8 -0
  115. package/dist/exporters/index.js.map +1 -0
  116. package/dist/exporters/json-exporter.d.ts +14 -0
  117. package/dist/exporters/json-exporter.d.ts.map +1 -0
  118. package/dist/exporters/json-exporter.js +41 -0
  119. package/dist/exporters/json-exporter.js.map +1 -0
  120. package/dist/exporters/markdown-exporter.d.ts +14 -0
  121. package/dist/exporters/markdown-exporter.d.ts.map +1 -0
  122. package/dist/exporters/markdown-exporter.js +65 -0
  123. package/dist/exporters/markdown-exporter.js.map +1 -0
  124. package/dist/exporters/registry.d.ts +4 -0
  125. package/dist/exporters/registry.d.ts.map +1 -0
  126. package/dist/exporters/registry.js +20 -0
  127. package/dist/exporters/registry.js.map +1 -0
  128. package/dist/exporters/sqlite-exporter.d.ts +10 -0
  129. package/dist/exporters/sqlite-exporter.d.ts.map +1 -0
  130. package/dist/exporters/sqlite-exporter.js +20 -0
  131. package/dist/exporters/sqlite-exporter.js.map +1 -0
  132. package/dist/index.d.ts +13 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +14 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/inheritance/alias-resolver.d.ts +21 -0
  137. package/dist/inheritance/alias-resolver.d.ts.map +1 -0
  138. package/dist/inheritance/alias-resolver.js +40 -0
  139. package/dist/inheritance/alias-resolver.js.map +1 -0
  140. package/dist/inheritance/index.d.ts +9 -0
  141. package/dist/inheritance/index.d.ts.map +1 -0
  142. package/dist/inheritance/index.js +5 -0
  143. package/dist/inheritance/index.js.map +1 -0
  144. package/dist/inheritance/inheritance-resolver.d.ts +37 -0
  145. package/dist/inheritance/inheritance-resolver.d.ts.map +1 -0
  146. package/dist/inheritance/inheritance-resolver.js +164 -0
  147. package/dist/inheritance/inheritance-resolver.js.map +1 -0
  148. package/dist/inheritance/reference-parser.d.ts +27 -0
  149. package/dist/inheritance/reference-parser.d.ts.map +1 -0
  150. package/dist/inheritance/reference-parser.js +74 -0
  151. package/dist/inheritance/reference-parser.js.map +1 -0
  152. package/dist/inheritance/source-resolver.d.ts +29 -0
  153. package/dist/inheritance/source-resolver.d.ts.map +1 -0
  154. package/dist/inheritance/source-resolver.js +87 -0
  155. package/dist/inheritance/source-resolver.js.map +1 -0
  156. package/dist/model/category-registry.d.ts +48 -0
  157. package/dist/model/category-registry.d.ts.map +1 -0
  158. package/dist/model/category-registry.js +83 -0
  159. package/dist/model/category-registry.js.map +1 -0
  160. package/dist/model/document-meta.d.ts +38 -0
  161. package/dist/model/document-meta.d.ts.map +1 -0
  162. package/dist/model/document-meta.js +62 -0
  163. package/dist/model/document-meta.js.map +1 -0
  164. package/dist/model/document-parser.d.ts +17 -0
  165. package/dist/model/document-parser.d.ts.map +1 -0
  166. package/dist/model/document-parser.js +66 -0
  167. package/dist/model/document-parser.js.map +1 -0
  168. package/dist/model/document.d.ts +27 -0
  169. package/dist/model/document.d.ts.map +1 -0
  170. package/dist/model/document.js +42 -0
  171. package/dist/model/document.js.map +1 -0
  172. package/dist/model/element.d.ts +51 -0
  173. package/dist/model/element.d.ts.map +1 -0
  174. package/dist/model/element.js +78 -0
  175. package/dist/model/element.js.map +1 -0
  176. package/dist/model/graph.d.ts +42 -0
  177. package/dist/model/graph.d.ts.map +1 -0
  178. package/dist/model/graph.js +177 -0
  179. package/dist/model/graph.js.map +1 -0
  180. package/dist/model/index.d.ts +8 -0
  181. package/dist/model/index.d.ts.map +1 -0
  182. package/dist/model/index.js +7 -0
  183. package/dist/model/index.js.map +1 -0
  184. package/dist/parsers/base.d.ts +28 -0
  185. package/dist/parsers/base.d.ts.map +1 -0
  186. package/dist/parsers/base.js +19 -0
  187. package/dist/parsers/base.js.map +1 -0
  188. package/dist/parsers/index.d.ts +6 -0
  189. package/dist/parsers/index.d.ts.map +1 -0
  190. package/dist/parsers/index.js +6 -0
  191. package/dist/parsers/index.js.map +1 -0
  192. package/dist/parsers/markdown-parser.d.ts +12 -0
  193. package/dist/parsers/markdown-parser.d.ts.map +1 -0
  194. package/dist/parsers/markdown-parser.js +37 -0
  195. package/dist/parsers/markdown-parser.js.map +1 -0
  196. package/dist/parsers/registry.d.ts +11 -0
  197. package/dist/parsers/registry.d.ts.map +1 -0
  198. package/dist/parsers/registry.js +21 -0
  199. package/dist/parsers/registry.js.map +1 -0
  200. package/dist/parsers/typescript-parser.d.ts +12 -0
  201. package/dist/parsers/typescript-parser.d.ts.map +1 -0
  202. package/dist/parsers/typescript-parser.js +74 -0
  203. package/dist/parsers/typescript-parser.js.map +1 -0
  204. package/dist/parsers/yaml-parser.d.ts +12 -0
  205. package/dist/parsers/yaml-parser.d.ts.map +1 -0
  206. package/dist/parsers/yaml-parser.js +30 -0
  207. package/dist/parsers/yaml-parser.js.map +1 -0
  208. package/dist/provenance/index.d.ts +5 -0
  209. package/dist/provenance/index.d.ts.map +1 -0
  210. package/dist/provenance/index.js +4 -0
  211. package/dist/provenance/index.js.map +1 -0
  212. package/dist/provenance/review-hash.d.ts +11 -0
  213. package/dist/provenance/review-hash.d.ts.map +1 -0
  214. package/dist/provenance/review-hash.js +18 -0
  215. package/dist/provenance/review-hash.js.map +1 -0
  216. package/dist/provenance/schemas.d.ts +36 -0
  217. package/dist/provenance/schemas.d.ts.map +1 -0
  218. package/dist/provenance/schemas.js +26 -0
  219. package/dist/provenance/schemas.js.map +1 -0
  220. package/dist/provenance/staleness.d.ts +12 -0
  221. package/dist/provenance/staleness.d.ts.map +1 -0
  222. package/dist/provenance/staleness.js +46 -0
  223. package/dist/provenance/staleness.js.map +1 -0
  224. package/dist/refs/git-diff-tracer.d.ts +35 -0
  225. package/dist/refs/git-diff-tracer.d.ts.map +1 -0
  226. package/dist/refs/git-diff-tracer.js +143 -0
  227. package/dist/refs/git-diff-tracer.js.map +1 -0
  228. package/dist/schema/build-schema.d.ts +15 -0
  229. package/dist/schema/build-schema.d.ts.map +1 -0
  230. package/dist/schema/build-schema.js +83 -0
  231. package/dist/schema/build-schema.js.map +1 -0
  232. package/dist/schema/category-definition.d.ts +41 -0
  233. package/dist/schema/category-definition.d.ts.map +1 -0
  234. package/dist/schema/category-definition.js +22 -0
  235. package/dist/schema/category-definition.js.map +1 -0
  236. package/dist/schema/combined-schema.d.ts +17 -0
  237. package/dist/schema/combined-schema.d.ts.map +1 -0
  238. package/dist/schema/combined-schema.js +23 -0
  239. package/dist/schema/combined-schema.js.map +1 -0
  240. package/dist/schema/datetime.d.ts +11 -0
  241. package/dist/schema/datetime.d.ts.map +1 -0
  242. package/dist/schema/datetime.js +81 -0
  243. package/dist/schema/datetime.js.map +1 -0
  244. package/dist/schema/defaults-loader.d.ts +21 -0
  245. package/dist/schema/defaults-loader.d.ts.map +1 -0
  246. package/dist/schema/defaults-loader.js +55 -0
  247. package/dist/schema/defaults-loader.js.map +1 -0
  248. package/dist/schema/field-schema.d.ts +23 -0
  249. package/dist/schema/field-schema.d.ts.map +1 -0
  250. package/dist/schema/field-schema.js +18 -0
  251. package/dist/schema/field-schema.js.map +1 -0
  252. package/dist/schema/index.d.ts +17 -0
  253. package/dist/schema/index.d.ts.map +1 -0
  254. package/dist/schema/index.js +17 -0
  255. package/dist/schema/index.js.map +1 -0
  256. package/dist/schema/reserved-fields.d.ts +32 -0
  257. package/dist/schema/reserved-fields.d.ts.map +1 -0
  258. package/dist/schema/reserved-fields.js +42 -0
  259. package/dist/schema/reserved-fields.js.map +1 -0
  260. package/dist/schema/types.d.ts +7 -0
  261. package/dist/schema/types.d.ts.map +1 -0
  262. package/dist/schema/types.js +9 -0
  263. package/dist/schema/types.js.map +1 -0
  264. package/dist/utils/logger.d.ts +7 -0
  265. package/dist/utils/logger.d.ts.map +1 -0
  266. package/dist/utils/logger.js +16 -0
  267. package/dist/utils/logger.js.map +1 -0
  268. package/dist/utils/project-root.d.ts +14 -0
  269. package/dist/utils/project-root.d.ts.map +1 -0
  270. package/dist/utils/project-root.js +48 -0
  271. package/dist/utils/project-root.js.map +1 -0
  272. package/dist/validation/diagnostic.d.ts +23 -0
  273. package/dist/validation/diagnostic.d.ts.map +1 -0
  274. package/dist/validation/diagnostic.js +5 -0
  275. package/dist/validation/diagnostic.js.map +1 -0
  276. package/dist/validation/index.d.ts +6 -0
  277. package/dist/validation/index.d.ts.map +1 -0
  278. package/dist/validation/index.js +4 -0
  279. package/dist/validation/index.js.map +1 -0
  280. package/dist/validation/passes/coverage-pass.d.ts +10 -0
  281. package/dist/validation/passes/coverage-pass.d.ts.map +1 -0
  282. package/dist/validation/passes/coverage-pass.js +99 -0
  283. package/dist/validation/passes/coverage-pass.js.map +1 -0
  284. package/dist/validation/passes/index.d.ts +6 -0
  285. package/dist/validation/passes/index.d.ts.map +1 -0
  286. package/dist/validation/passes/index.js +19 -0
  287. package/dist/validation/passes/index.js.map +1 -0
  288. package/dist/validation/passes/schema-pass.d.ts +12 -0
  289. package/dist/validation/passes/schema-pass.d.ts.map +1 -0
  290. package/dist/validation/passes/schema-pass.js +38 -0
  291. package/dist/validation/passes/schema-pass.js.map +1 -0
  292. package/dist/validation/passes/semantic-pass.d.ts +8 -0
  293. package/dist/validation/passes/semantic-pass.d.ts.map +1 -0
  294. package/dist/validation/passes/semantic-pass.js +126 -0
  295. package/dist/validation/passes/semantic-pass.js.map +1 -0
  296. package/dist/validation/passes/structural-pass.d.ts +8 -0
  297. package/dist/validation/passes/structural-pass.d.ts.map +1 -0
  298. package/dist/validation/passes/structural-pass.js +150 -0
  299. package/dist/validation/passes/structural-pass.js.map +1 -0
  300. package/dist/validation/passes/traceability-pass.d.ts +9 -0
  301. package/dist/validation/passes/traceability-pass.d.ts.map +1 -0
  302. package/dist/validation/passes/traceability-pass.js +87 -0
  303. package/dist/validation/passes/traceability-pass.js.map +1 -0
  304. package/dist/validation/passes/user-rules-pass.d.ts +9 -0
  305. package/dist/validation/passes/user-rules-pass.d.ts.map +1 -0
  306. package/dist/validation/passes/user-rules-pass.js +72 -0
  307. package/dist/validation/passes/user-rules-pass.js.map +1 -0
  308. package/dist/validation/runner.d.ts +17 -0
  309. package/dist/validation/runner.d.ts.map +1 -0
  310. package/dist/validation/runner.js +33 -0
  311. package/dist/validation/runner.js.map +1 -0
  312. package/package.json +43 -0
  313. package/src/data/defaults.yaml +101 -0
@@ -0,0 +1,78 @@
1
+ /**
2
+ * A single GVP element (DEC-6.2, DEC-6.3, DEC-6.4).
3
+ *
4
+ * Identity: (source, documentPath, id)
5
+ * Equality: equals() compares identity tuple
6
+ * String reps: toString(), toLibraryId(), toCanonicalId()
7
+ */
8
+ export class Element {
9
+ id;
10
+ name;
11
+ status;
12
+ tags;
13
+ maps_to;
14
+ priority;
15
+ categoryName;
16
+ source;
17
+ documentPath;
18
+ /** All data including reserved + dynamic fields */
19
+ _data;
20
+ constructor(data, categoryName, source, documentPath) {
21
+ this.id = data.id;
22
+ this.name = data.name;
23
+ this.status = data.status ?? 'active';
24
+ this.tags = data.tags ?? [];
25
+ this.maps_to = data.maps_to ?? [];
26
+ this.priority = data.priority;
27
+ this.categoryName = categoryName;
28
+ this.source = source;
29
+ this.documentPath = documentPath;
30
+ this._data = data;
31
+ }
32
+ /** Get a dynamic field value by name */
33
+ get(fieldName) {
34
+ return this._data[fieldName];
35
+ }
36
+ /** Get all data as a plain record */
37
+ get data() {
38
+ return { ...this._data };
39
+ }
40
+ /**
41
+ * Human-readable display form (DEC-6.4).
42
+ * E.g., 'V1: "Alignment"'
43
+ */
44
+ toString() {
45
+ return `${this.id}: "${this.name}"`;
46
+ }
47
+ /**
48
+ * Within-library qualified reference (DEC-6.4, DEC-1.1c 2-segment).
49
+ * E.g., 'values:V1'
50
+ */
51
+ toLibraryId() {
52
+ return `${this.documentPath}:${this.id}`;
53
+ }
54
+ /**
55
+ * Fully qualified canonical ID (DEC-6.4, DEC-1.1b).
56
+ * E.g., '@github:company/org-gvp:values:V1'
57
+ */
58
+ toCanonicalId() {
59
+ return `${this.source}:${this.documentPath}:${this.id}`;
60
+ }
61
+ /**
62
+ * Stable hash key for use as Map key (DEC-6.2).
63
+ * Based on (source, documentPath, id) tuple.
64
+ */
65
+ hashKey() {
66
+ return `${this.source}:${this.documentPath}:${this.id}`;
67
+ }
68
+ /**
69
+ * Identity equality (DEC-6.2, DEC-6.3).
70
+ * Based on (source, documentPath, id). Priority does NOT affect equality.
71
+ */
72
+ equals(other) {
73
+ return (this.source === other.source &&
74
+ this.documentPath === other.documentPath &&
75
+ this.id === other.id);
76
+ }
77
+ }
78
+ //# sourceMappingURL=element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/model/element.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,OAAO,OAAO;IACT,EAAE,CAAS;IACX,IAAI,CAAS;IACb,MAAM,CAAS;IACf,IAAI,CAAW;IACf,OAAO,CAAW;IAClB,QAAQ,CAAqB;IAC7B,YAAY,CAAS;IACrB,MAAM,CAAS;IACf,YAAY,CAAS;IAE9B,mDAAmD;IAClC,KAAK,CAA0B;IAEhD,YACE,IAA6B,EAC7B,YAAoB,EACpB,MAAc,EACd,YAAoB;QAEpB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAY,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAc,CAAC;QAChC,IAAI,CAAC,MAAM,GAAI,IAAI,CAAC,MAAiB,IAAI,QAAQ,CAAC;QAClD,IAAI,CAAC,IAAI,GAAI,IAAI,CAAC,IAAiB,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,OAAoB,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAA8B,CAAC;QACpD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,wCAAwC;IACxC,GAAG,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAED,qCAAqC;IACrC,IAAI,IAAI;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,OAAO,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAc;QACnB,OAAO,CACL,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAC5B,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;YACxC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CACrB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,42 @@
1
+ import type { Element } from './element.js';
2
+ /**
3
+ * Immutable directed graph of elements (DEC-6.1).
4
+ * Returned by ancestors()/descendants(). Start element always included (DEC-6.5).
5
+ * Handles cycles via seen-set (DEC-6.7: maps_to cycles are allowed).
6
+ */
7
+ export declare class Graph {
8
+ private readonly _nodes;
9
+ private readonly _edges;
10
+ constructor(nodes: Map<string, Element>, edges: Map<string, Set<string>>);
11
+ /** All nodes in the graph */
12
+ get nodes(): Element[];
13
+ /** Number of nodes */
14
+ get size(): number;
15
+ /** All edges as [from, to] pairs */
16
+ get edges(): [Element, Element][];
17
+ /** Check if graph contains an element */
18
+ has(element: Element): boolean;
19
+ /** Get direct successors of an element */
20
+ successors(element: Element): Element[];
21
+ /** Nodes with no incoming edges */
22
+ roots(): Element[];
23
+ /** Nodes with no outgoing edges */
24
+ leaves(): Element[];
25
+ /** Find all paths from source to target */
26
+ pathsTo(source: Element, target: Element): Element[][];
27
+ /** Filter graph by predicate, returning a new immutable Graph */
28
+ filter(predicate: (element: Element) => boolean): Graph;
29
+ }
30
+ /**
31
+ * Build an ancestors graph for an element (DEC-6.1, DEC-6.5).
32
+ * Walks maps_to upward. Start element always included.
33
+ * Cycles handled via seen-set (DEC-6.7).
34
+ */
35
+ export declare function buildAncestorsGraph(element: Element, elementLookup: (ref: string) => Element | undefined): Graph;
36
+ /**
37
+ * Build a descendants graph for an element (DEC-6.1, DEC-6.5).
38
+ * Finds all elements that map TO this element, recursively.
39
+ * Start element always included.
40
+ */
41
+ export declare function buildDescendantsGraph(element: Element, allElements: Element[]): Graph;
42
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/model/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;;;GAIG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;gBAEtC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IASxE,6BAA6B;IAC7B,IAAI,KAAK,IAAI,OAAO,EAAE,CAErB;IAED,sBAAsB;IACtB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,oCAAoC;IACpC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAWhC;IAED,yCAAyC;IACzC,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAI9B,0CAA0C;IAC1C,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE;IAQvC,mCAAmC;IACnC,KAAK,IAAI,OAAO,EAAE;IAUlB,mCAAmC;IACnC,MAAM,IAAI,OAAO,EAAE;IASnB,2CAA2C;IAC3C,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,EAAE;IAsBtD,iEAAiE;IACjE,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,KAAK;CAexD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,GAClD,KAAK,CAuBP;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,OAAO,EAAE,GACrB,KAAK,CAoCP"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Immutable directed graph of elements (DEC-6.1).
3
+ * Returned by ancestors()/descendants(). Start element always included (DEC-6.5).
4
+ * Handles cycles via seen-set (DEC-6.7: maps_to cycles are allowed).
5
+ */
6
+ export class Graph {
7
+ _nodes; // hashKey -> Element
8
+ _edges; // from hashKey -> Set<to hashKey>
9
+ constructor(nodes, edges) {
10
+ this._nodes = new Map(nodes);
11
+ this._edges = new Map();
12
+ for (const [from, tos] of edges) {
13
+ this._edges.set(from, new Set(tos));
14
+ }
15
+ Object.freeze(this);
16
+ }
17
+ /** All nodes in the graph */
18
+ get nodes() {
19
+ return [...this._nodes.values()];
20
+ }
21
+ /** Number of nodes */
22
+ get size() {
23
+ return this._nodes.size;
24
+ }
25
+ /** All edges as [from, to] pairs */
26
+ get edges() {
27
+ const result = [];
28
+ for (const [fromKey, toKeys] of this._edges) {
29
+ const from = this._nodes.get(fromKey);
30
+ if (!from)
31
+ continue;
32
+ for (const toKey of toKeys) {
33
+ const to = this._nodes.get(toKey);
34
+ if (to)
35
+ result.push([from, to]);
36
+ }
37
+ }
38
+ return result;
39
+ }
40
+ /** Check if graph contains an element */
41
+ has(element) {
42
+ return this._nodes.has(element.hashKey());
43
+ }
44
+ /** Get direct successors of an element */
45
+ successors(element) {
46
+ const toKeys = this._edges.get(element.hashKey());
47
+ if (!toKeys)
48
+ return [];
49
+ return [...toKeys]
50
+ .map((k) => this._nodes.get(k))
51
+ .filter((e) => !!e);
52
+ }
53
+ /** Nodes with no incoming edges */
54
+ roots() {
55
+ const hasIncoming = new Set();
56
+ for (const toKeys of this._edges.values()) {
57
+ for (const k of toKeys)
58
+ hasIncoming.add(k);
59
+ }
60
+ return [...this._nodes.entries()]
61
+ .filter(([key]) => !hasIncoming.has(key))
62
+ .map(([, el]) => el);
63
+ }
64
+ /** Nodes with no outgoing edges */
65
+ leaves() {
66
+ return [...this._nodes.entries()]
67
+ .filter(([key]) => {
68
+ const tos = this._edges.get(key);
69
+ return !tos || tos.size === 0;
70
+ })
71
+ .map(([, el]) => el);
72
+ }
73
+ /** Find all paths from source to target */
74
+ pathsTo(source, target) {
75
+ const paths = [];
76
+ const dfs = (current, path, visited) => {
77
+ if (current.hashKey() === target.hashKey()) {
78
+ paths.push([...path, current]);
79
+ return;
80
+ }
81
+ visited.add(current.hashKey());
82
+ for (const next of this.successors(current)) {
83
+ if (!visited.has(next.hashKey())) {
84
+ dfs(next, [...path, current], visited);
85
+ }
86
+ }
87
+ };
88
+ dfs(source, [], new Set());
89
+ return paths;
90
+ }
91
+ /** Filter graph by predicate, returning a new immutable Graph */
92
+ filter(predicate) {
93
+ const nodes = new Map();
94
+ const edges = new Map();
95
+ for (const [key, el] of this._nodes) {
96
+ if (predicate(el)) {
97
+ nodes.set(key, el);
98
+ }
99
+ }
100
+ for (const [from, tos] of this._edges) {
101
+ if (!nodes.has(from))
102
+ continue;
103
+ const filtered = new Set([...tos].filter((k) => nodes.has(k)));
104
+ if (filtered.size > 0)
105
+ edges.set(from, filtered);
106
+ }
107
+ return new Graph(nodes, edges);
108
+ }
109
+ }
110
+ /**
111
+ * Build an ancestors graph for an element (DEC-6.1, DEC-6.5).
112
+ * Walks maps_to upward. Start element always included.
113
+ * Cycles handled via seen-set (DEC-6.7).
114
+ */
115
+ export function buildAncestorsGraph(element, elementLookup) {
116
+ const nodes = new Map();
117
+ const edges = new Map();
118
+ function walk(el, visited) {
119
+ const key = el.hashKey();
120
+ if (visited.has(key))
121
+ return; // Cycle handling (DEC-6.7)
122
+ visited.add(key);
123
+ nodes.set(key, el);
124
+ for (const ref of el.maps_to) {
125
+ const target = elementLookup(ref);
126
+ if (target) {
127
+ // Edge: el -> target (el maps to target)
128
+ if (!edges.has(key))
129
+ edges.set(key, new Set());
130
+ edges.get(key).add(target.hashKey());
131
+ walk(target, visited);
132
+ }
133
+ }
134
+ }
135
+ walk(element, new Set());
136
+ return new Graph(nodes, edges);
137
+ }
138
+ /**
139
+ * Build a descendants graph for an element (DEC-6.1, DEC-6.5).
140
+ * Finds all elements that map TO this element, recursively.
141
+ * Start element always included.
142
+ */
143
+ export function buildDescendantsGraph(element, allElements) {
144
+ const nodes = new Map();
145
+ const edges = new Map();
146
+ // Build reverse index: element hashKey -> elements that map to it
147
+ const reverseIndex = new Map();
148
+ for (const el of allElements) {
149
+ for (const ref of el.maps_to) {
150
+ // Try matching by libraryId or hashKey
151
+ const targets = allElements.filter((e) => e.toLibraryId() === ref || e.hashKey() === ref);
152
+ for (const target of targets) {
153
+ const targetKey = target.hashKey();
154
+ if (!reverseIndex.has(targetKey))
155
+ reverseIndex.set(targetKey, []);
156
+ reverseIndex.get(targetKey).push(el);
157
+ }
158
+ }
159
+ }
160
+ function walk(el, visited) {
161
+ const key = el.hashKey();
162
+ if (visited.has(key))
163
+ return;
164
+ visited.add(key);
165
+ nodes.set(key, el);
166
+ const children = reverseIndex.get(key) ?? [];
167
+ for (const child of children) {
168
+ if (!edges.has(child.hashKey()))
169
+ edges.set(child.hashKey(), new Set());
170
+ edges.get(child.hashKey()).add(key);
171
+ walk(child, visited);
172
+ }
173
+ }
174
+ walk(element, new Set());
175
+ return new Graph(nodes, edges);
176
+ }
177
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/model/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { Element } from './element.js';
2
+ export { Document } from './document.js';
3
+ export { CategoryRegistry } from './category-registry.js';
4
+ export { documentMetaSchema } from './document-meta.js';
5
+ export type { DocumentMeta } from './document-meta.js';
6
+ export { parseDocument, loadDocumentFromFile } from './document-parser.js';
7
+ export { Graph, buildAncestorsGraph, buildDescendantsGraph } from './graph.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { Element } from './element.js';
2
+ export { Document } from './document.js';
3
+ export { CategoryRegistry } from './category-registry.js';
4
+ export { documentMetaSchema } from './document-meta.js';
5
+ export { parseDocument, loadDocumentFromFile } from './document-parser.js';
6
+ export { Graph, buildAncestorsGraph, buildDescendantsGraph } from './graph.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Abstract base class for reference parsers (DEC-10.3).
3
+ * One core method: extractIdentifiers. extractBlock is a convenience wrapper.
4
+ */
5
+ export declare abstract class RefParser {
6
+ abstract readonly extensions: string[];
7
+ /**
8
+ * Core method: extract identifiers from file content.
9
+ * Each result has an identifier name and its content block.
10
+ *
11
+ * @param content - File content to parse
12
+ * @param matching - Optional filter string. When provided, only return
13
+ * identifiers that match (exact match). When omitted, return ALL
14
+ * identifiers found in the file.
15
+ */
16
+ abstract extractIdentifiers(content: string, matching?: string): Array<{
17
+ identifier: string;
18
+ block: string;
19
+ }>;
20
+ /**
21
+ * Convenience: extract a single content block by exact identifier name.
22
+ * Returns null if not found or if multiple matches (ambiguous).
23
+ */
24
+ extractBlock(content: string, identifier: string): string | null;
25
+ /** Check if this parser handles a given file extension. */
26
+ handles(extension: string): boolean;
27
+ }
28
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/parsers/base.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,8BAAsB,SAAS;IAC7B,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAEvC;;;;;;;;OAQG;IACH,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QACrE,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAEF;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKhE,2DAA2D;IAC3D,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;CAGpC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Abstract base class for reference parsers (DEC-10.3).
3
+ * One core method: extractIdentifiers. extractBlock is a convenience wrapper.
4
+ */
5
+ export class RefParser {
6
+ /**
7
+ * Convenience: extract a single content block by exact identifier name.
8
+ * Returns null if not found or if multiple matches (ambiguous).
9
+ */
10
+ extractBlock(content, identifier) {
11
+ const results = this.extractIdentifiers(content, identifier);
12
+ return results.length === 1 ? results[0].block : null;
13
+ }
14
+ /** Check if this parser handles a given file extension. */
15
+ handles(extension) {
16
+ return this.extensions.includes(extension.toLowerCase());
17
+ }
18
+ }
19
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/parsers/base.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAgB,SAAS;IAiB7B;;;OAGG;IACH,YAAY,CAAC,OAAe,EAAE,UAAkB;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC7D,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAED,2DAA2D;IAC3D,OAAO,CAAC,SAAiB;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export { RefParser } from './base.js';
2
+ export { MarkdownRefParser } from './markdown-parser.js';
3
+ export { TypeScriptRefParser } from './typescript-parser.js';
4
+ export { YamlRefParser } from './yaml-parser.js';
5
+ export { createRefParserRegistry, findParser } from './registry.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { RefParser } from './base.js';
2
+ export { MarkdownRefParser } from './markdown-parser.js';
3
+ export { TypeScriptRefParser } from './typescript-parser.js';
4
+ export { YamlRefParser } from './yaml-parser.js';
5
+ export { createRefParserRegistry, findParser } from './registry.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { RefParser } from './base.js';
2
+ /**
3
+ * Parser for Markdown files. Identifier = heading text (any level).
4
+ */
5
+ export declare class MarkdownRefParser extends RefParser {
6
+ readonly extensions: string[];
7
+ extractIdentifiers(content: string, matching?: string): Array<{
8
+ identifier: string;
9
+ block: string;
10
+ }>;
11
+ }
12
+ //# sourceMappingURL=markdown-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/markdown-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,SAAS;IAC9C,QAAQ,CAAC,UAAU,WAAwB;IAE3C,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAkCrG"}
@@ -0,0 +1,37 @@
1
+ import { RefParser } from './base.js';
2
+ /**
3
+ * Parser for Markdown files. Identifier = heading text (any level).
4
+ */
5
+ export class MarkdownRefParser extends RefParser {
6
+ extensions = ['.md', '.markdown'];
7
+ extractIdentifiers(content, matching) {
8
+ const results = [];
9
+ const lines = content.split('\n');
10
+ // Find all headings with their positions and levels
11
+ const headings = [];
12
+ for (let i = 0; i < lines.length; i++) {
13
+ const m = lines[i].match(/^(#{1,6})\s+(.+)$/);
14
+ if (m) {
15
+ headings.push({ text: m[2].trim(), level: m[1].length, lineIndex: i });
16
+ }
17
+ }
18
+ for (let h = 0; h < headings.length; h++) {
19
+ const heading = headings[h];
20
+ // Skip if filtering and doesn't match
21
+ if (matching && heading.text !== matching)
22
+ continue;
23
+ // Find end: next heading at same or higher (lower number) level
24
+ let endLine = lines.length;
25
+ for (let j = h + 1; j < headings.length; j++) {
26
+ if (headings[j].level <= heading.level) {
27
+ endLine = headings[j].lineIndex;
28
+ break;
29
+ }
30
+ }
31
+ const block = lines.slice(heading.lineIndex, endLine).join('\n');
32
+ results.push({ identifier: heading.text, block });
33
+ }
34
+ return results;
35
+ }
36
+ }
37
+ //# sourceMappingURL=markdown-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../src/parsers/markdown-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,SAAS;IACrC,UAAU,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAE3C,kBAAkB,CAAC,OAAe,EAAE,QAAiB;QACnD,MAAM,OAAO,GAAiD,EAAE,CAAC;QACjE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,oDAAoD;QACpD,MAAM,QAAQ,GAA8D,EAAE,CAAC;QAC/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC/C,IAAI,CAAC,EAAE,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;YAE7B,sCAAsC;YACtC,IAAI,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAEpD,gEAAgE;YAChE,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,IAAI,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBACxC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC;oBACjC,MAAM;gBACR,CAAC;YACH,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import type { RefParser } from './base.js';
2
+ /**
3
+ * Create the built-in ref parser registry (DEC-10.3).
4
+ */
5
+ export declare function createRefParserRegistry(): RefParser[];
6
+ /**
7
+ * Find a parser that handles the given file extension.
8
+ * Returns undefined for unknown extensions (graceful degradation, DEC-10.15).
9
+ */
10
+ export declare function findParser(extension: string, parsers: RefParser[]): RefParser | undefined;
11
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/parsers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAK3C;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,SAAS,EAAE,CAMrD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,SAAS,GAAG,SAAS,CAEzF"}
@@ -0,0 +1,21 @@
1
+ import { MarkdownRefParser } from './markdown-parser.js';
2
+ import { TypeScriptRefParser } from './typescript-parser.js';
3
+ import { YamlRefParser } from './yaml-parser.js';
4
+ /**
5
+ * Create the built-in ref parser registry (DEC-10.3).
6
+ */
7
+ export function createRefParserRegistry() {
8
+ return [
9
+ new MarkdownRefParser(),
10
+ new TypeScriptRefParser(),
11
+ new YamlRefParser(),
12
+ ];
13
+ }
14
+ /**
15
+ * Find a parser that handles the given file extension.
16
+ * Returns undefined for unknown extensions (graceful degradation, DEC-10.15).
17
+ */
18
+ export function findParser(extension, parsers) {
19
+ return parsers.find(p => p.handles(extension));
20
+ }
21
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/parsers/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,IAAI,iBAAiB,EAAE;QACvB,IAAI,mBAAmB,EAAE;QACzB,IAAI,aAAa,EAAE;KACpB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,SAAiB,EAAE,OAAoB;IAChE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { RefParser } from './base.js';
2
+ /**
3
+ * Parser for TypeScript/JavaScript files. Identifier = class/function name.
4
+ */
5
+ export declare class TypeScriptRefParser extends RefParser {
6
+ readonly extensions: string[];
7
+ extractIdentifiers(content: string, matching?: string): Array<{
8
+ identifier: string;
9
+ block: string;
10
+ }>;
11
+ }
12
+ //# sourceMappingURL=typescript-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/typescript-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,SAAS;IAChD,QAAQ,CAAC,UAAU,WAAkC;IAErD,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAkDrG"}
@@ -0,0 +1,74 @@
1
+ import { RefParser } from './base.js';
2
+ /**
3
+ * Parser for TypeScript/JavaScript files. Identifier = class/function name.
4
+ */
5
+ export class TypeScriptRefParser extends RefParser {
6
+ extensions = ['.ts', '.tsx', '.js', '.jsx'];
7
+ extractIdentifiers(content, matching) {
8
+ const results = [];
9
+ // Patterns that capture the identifier name
10
+ const patterns = [
11
+ /(?:export\s+)?(?:abstract\s+)?class\s+(\w+)/gm,
12
+ /(?:export\s+)?interface\s+(\w+)/gm,
13
+ /(?:export\s+)?type\s+(\w+)/gm,
14
+ /(?:export\s+)?(?:async\s+)?function\s+(\w+)/gm,
15
+ /(?:export\s+)?(?:const|let|var)\s+(\w+)\s*[=:]/gm,
16
+ ];
17
+ // Destructured imports/requires (T4)
18
+ const destructuredPattern = /(?:const|let|var)\s*\{([^}]+)\}\s*=\s*require/gm;
19
+ const seen = new Set(); // Avoid duplicates
20
+ for (const pattern of patterns) {
21
+ let match;
22
+ while ((match = pattern.exec(content)) !== null) {
23
+ const name = match[1];
24
+ if (seen.has(name))
25
+ continue;
26
+ if (matching && name !== matching)
27
+ continue;
28
+ seen.add(name);
29
+ const block = extractBraceBlock(content, match.index);
30
+ results.push({ identifier: name, block });
31
+ }
32
+ }
33
+ // Extract destructured names from require statements
34
+ {
35
+ let match;
36
+ while ((match = destructuredPattern.exec(content)) !== null) {
37
+ const names = match[1].split(',').map(s => s.trim().split(/\s+as\s+/).pop().trim()).filter(Boolean);
38
+ for (const name of names) {
39
+ if (seen.has(name))
40
+ continue;
41
+ if (matching && name !== matching)
42
+ continue;
43
+ seen.add(name);
44
+ // Use the full require statement as the block
45
+ const lineStart = content.lastIndexOf('\n', match.index) + 1;
46
+ const lineEnd = content.indexOf('\n', match.index + match[0].length);
47
+ const block = content.substring(lineStart, lineEnd === -1 ? content.length : lineEnd);
48
+ results.push({ identifier: name, block });
49
+ }
50
+ }
51
+ }
52
+ return results;
53
+ }
54
+ }
55
+ function extractBraceBlock(content, startIndex) {
56
+ let depth = 0;
57
+ let started = false;
58
+ let end = content.length;
59
+ for (let i = startIndex; i < content.length; i++) {
60
+ if (content[i] === '{') {
61
+ depth++;
62
+ started = true;
63
+ }
64
+ else if (content[i] === '}') {
65
+ depth--;
66
+ if (started && depth === 0) {
67
+ end = i + 1;
68
+ break;
69
+ }
70
+ }
71
+ }
72
+ return content.substring(startIndex, end);
73
+ }
74
+ //# sourceMappingURL=typescript-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-parser.js","sourceRoot":"","sources":["../../src/parsers/typescript-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { RefParser } from './base.js';
2
+ /**
3
+ * Parser for YAML files. Identifier = top-level key.
4
+ */
5
+ export declare class YamlRefParser extends RefParser {
6
+ readonly extensions: string[];
7
+ extractIdentifiers(content: string, matching?: string): Array<{
8
+ identifier: string;
9
+ block: string;
10
+ }>;
11
+ }
12
+ //# sourceMappingURL=yaml-parser.d.ts.map