@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 @@
1
+ {"version":3,"file":"json-exporter.js","sourceRoot":"","sources":["../../src/exporters/json-exporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAsB,MAAM,WAAW,CAAC;AAEzD;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,QAAQ;IAC/B,GAAG,GAAG,MAAM,CAAC;IACb,IAAI,GAAG,MAAM,CAAC;IACd,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IAEjD,MAAM,CAAC,OAAgB,EAAE,OAAuB;QAC9C,MAAM,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,IAAI,KAAK,CAAC;QAE9D,MAAM,MAAM,GAAG;YACb,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE;oBACJ,GAAG,GAAG,CAAC,IAAI;oBACX,uDAAuD;oBACvD,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI;oBACnC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI;oBACnC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI;oBACzC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI;iBAC9B;gBACD,QAAQ,EAAE,GAAG,CAAC,cAAc,EAAE;qBAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,IAAI,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC;qBAC3D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACT,GAAG,CAAC,CAAC,IAAI;oBACT,SAAS,EAAE,CAAC,CAAC,YAAY;oBACzB,UAAU,EAAE,CAAC,CAAC,WAAW,EAAE;oBAC3B,YAAY,EAAE,CAAC,CAAC,aAAa,EAAE;iBAChC,CAAC,CAAC;aACN,CAAC,CAAC;YACH,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,UAAU;YACvC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE;SACxB,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ import type { Catalog } from '../catalog/catalog.js';
3
+ import { Exporter, type ExportOptions } from './base.js';
4
+ /**
5
+ * Per-document Markdown exporter.
6
+ * Groups elements by document and category, rendering human-readable markdown.
7
+ */
8
+ export declare class MarkdownExporter extends Exporter {
9
+ readonly key = "markdown";
10
+ readonly name = "Markdown";
11
+ readonly optionsSchema: z.ZodOptional<z.ZodObject<{}, z.core.$strip>>;
12
+ export(catalog: Catalog, options?: ExportOptions): string;
13
+ }
14
+ //# sourceMappingURL=markdown-exporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-exporter.d.ts","sourceRoot":"","sources":["../../src/exporters/markdown-exporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAEzD;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,GAAG,cAAc;IAC1B,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,aAAa,gDAA2B;IAEjD,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM;CAgE1D"}
@@ -0,0 +1,65 @@
1
+ import { z } from 'zod';
2
+ import { Exporter } from './base.js';
3
+ /**
4
+ * Per-document Markdown exporter.
5
+ * Groups elements by document and category, rendering human-readable markdown.
6
+ */
7
+ export class MarkdownExporter extends Exporter {
8
+ key = 'markdown';
9
+ name = 'Markdown';
10
+ optionsSchema = z.object({}).optional();
11
+ export(catalog, options) {
12
+ const includeDeprecated = options?.includeDeprecated ?? false;
13
+ const sections = [];
14
+ for (const doc of catalog.documents) {
15
+ sections.push(`# ${doc.name}\n`);
16
+ for (const catName of catalog.registry.categoryNames) {
17
+ const catDef = catalog.registry.getByName(catName);
18
+ if (!catDef)
19
+ continue;
20
+ const elements = doc.getElementsByCategory(catName)
21
+ .filter(e => includeDeprecated || e.status !== 'deprecated');
22
+ if (elements.length === 0)
23
+ continue;
24
+ const displayLabel = catDef.display_label ??
25
+ catName.charAt(0).toUpperCase() + catName.slice(1) + 's';
26
+ sections.push(`## ${displayLabel}\n`);
27
+ for (const el of elements) {
28
+ sections.push(`### ${el.id}: ${el.name}\n`);
29
+ if (el.status !== 'active') {
30
+ sections.push(`**Status:** ${el.status}\n`);
31
+ }
32
+ // Primary field
33
+ const primaryField = catDef.primary_field ?? 'statement';
34
+ const primaryValue = el.get(primaryField);
35
+ if (primaryValue) {
36
+ sections.push(`${String(primaryValue).trim()}\n`);
37
+ }
38
+ // Tags
39
+ if (el.tags.length > 0) {
40
+ sections.push(`**Tags:** ${el.tags.join(', ')}\n`);
41
+ }
42
+ // Maps to
43
+ if (el.maps_to.length > 0) {
44
+ sections.push(`**Maps to:** ${el.maps_to.join(', ')}\n`);
45
+ }
46
+ // Considered alternatives (for decisions)
47
+ const considered = el.get('considered');
48
+ if (considered && typeof considered === 'object') {
49
+ sections.push(`**Considered alternatives:**\n`);
50
+ for (const [altName, altDef] of Object.entries(considered)) {
51
+ const displayName = altName
52
+ .replace(/_/g, ' ')
53
+ .replace(/\b\w/g, c => c.toUpperCase());
54
+ const rationale = altDef?.rationale ?? '';
55
+ sections.push(`- **${displayName}** — *${rationale}*`);
56
+ }
57
+ sections.push('');
58
+ }
59
+ }
60
+ }
61
+ }
62
+ return sections.join('\n');
63
+ }
64
+ }
65
+ //# sourceMappingURL=markdown-exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-exporter.js","sourceRoot":"","sources":["../../src/exporters/markdown-exporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Exporter } from './base.js';
2
+ /** Built-in exporter registry */
3
+ export declare function createExporterRegistry(): Map<string, Exporter>;
4
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/exporters/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAO1C,iCAAiC;AACjC,wBAAgB,sBAAsB,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAc9D"}
@@ -0,0 +1,20 @@
1
+ import { JsonExporter } from './json-exporter.js';
2
+ import { CsvExporter } from './csv-exporter.js';
3
+ import { MarkdownExporter } from './markdown-exporter.js';
4
+ import { DotExporter } from './dot-exporter.js';
5
+ import { SqliteExporter } from './sqlite-exporter.js';
6
+ /** Built-in exporter registry */
7
+ export function createExporterRegistry() {
8
+ const registry = new Map();
9
+ const exporters = [new JsonExporter(), new CsvExporter(), new MarkdownExporter()];
10
+ for (const exp of exporters) {
11
+ registry.set(exp.key, exp);
12
+ }
13
+ // Optional exporters (may require external dependencies)
14
+ const optionalExporters = [new DotExporter(), new SqliteExporter()];
15
+ for (const exp of optionalExporters) {
16
+ registry.set(exp.key, exp);
17
+ }
18
+ return registry;
19
+ }
20
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/exporters/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,iCAAiC;AACjC,MAAM,UAAU,sBAAsB;IACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC7C,MAAM,SAAS,GAAG,CAAC,IAAI,YAAY,EAAE,EAAE,IAAI,WAAW,EAAE,EAAE,IAAI,gBAAgB,EAAE,CAAC,CAAC;IAClF,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,yDAAyD;IACzD,MAAM,iBAAiB,GAAG,CAAC,IAAI,WAAW,EAAE,EAAE,IAAI,cAAc,EAAE,CAAC,CAAC;IACpE,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { z } from 'zod';
2
+ import type { Catalog } from '../catalog/catalog.js';
3
+ import { Exporter, type ExportOptions } from './base.js';
4
+ export declare class SqliteExporter extends Exporter {
5
+ readonly key = "sqlite";
6
+ readonly name = "SQLite";
7
+ readonly optionsSchema: z.ZodOptional<z.ZodObject<{}, z.core.$strip>>;
8
+ export(_catalog: Catalog, _options?: ExportOptions): string;
9
+ }
10
+ //# sourceMappingURL=sqlite-exporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-exporter.d.ts","sourceRoot":"","sources":["../../src/exporters/sqlite-exporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAEzD,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,QAAQ,CAAC,GAAG,YAAY;IACxB,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,aAAa,gDAA2B;IAEjD,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,MAAM;CAa5D"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ import { Exporter } from './base.js';
3
+ export class SqliteExporter extends Exporter {
4
+ key = 'sqlite';
5
+ name = 'SQLite';
6
+ optionsSchema = z.object({}).optional();
7
+ export(_catalog, _options) {
8
+ // Check for dependency
9
+ try {
10
+ require('better-sqlite3');
11
+ }
12
+ catch {
13
+ throw new Error('SQLite export requires the "better-sqlite3" package. ' +
14
+ 'Install with: npm install better-sqlite3');
15
+ }
16
+ // Full implementation deferred — dependency not bundled by default (DEC-7.4)
17
+ throw new Error('SQLite export not yet fully implemented');
18
+ }
19
+ }
20
+ //# sourceMappingURL=sqlite-exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-exporter.js","sourceRoot":"","sources":["../../src/exporters/sqlite-exporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAsB,MAAM,WAAW,CAAC;AAEzD,MAAM,OAAO,cAAe,SAAQ,QAAQ;IACjC,GAAG,GAAG,QAAQ,CAAC;IACf,IAAI,GAAG,QAAQ,CAAC;IAChB,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IAEjD,MAAM,CAAC,QAAiB,EAAE,QAAwB;QAChD,uBAAuB;QACvB,IAAI,CAAC;YACH,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,uDAAuD;gBACrD,0CAA0C,CAC7C,CAAC;QACJ,CAAC;QACD,6EAA6E;QAC7E,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ export declare const VERSION = "1.0.0";
2
+ export { GVPError, SchemaError, InheritanceError, ConfigError, ValidationError, ProvenanceError, SourceResolutionError, CatalogError, DuplicateIdPrefixError, DuplicateYamlKeyError, InvalidMappingRuleRefError, CircularInheritanceError, MissingMappingRulesError } from './errors.js';
3
+ export * from './schema/index.js';
4
+ export * from './config/index.js';
5
+ export * from './model/index.js';
6
+ export * from './inheritance/index.js';
7
+ export * from './catalog/index.js';
8
+ export * from './validation/index.js';
9
+ export * from './provenance/index.js';
10
+ export * from './exporters/index.js';
11
+ export * from './parsers/index.js';
12
+ export * from './analysis/index.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,EAAE,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACzR,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ // GVP v1 - Goals, Values, and Principles framework
2
+ export const VERSION = '1.0.0';
3
+ export { GVPError, SchemaError, InheritanceError, ConfigError, ValidationError, ProvenanceError, SourceResolutionError, CatalogError, DuplicateIdPrefixError, DuplicateYamlKeyError, InvalidMappingRuleRefError, CircularInheritanceError, MissingMappingRulesError } from './errors.js';
4
+ export * from './schema/index.js';
5
+ export * from './config/index.js';
6
+ export * from './model/index.js';
7
+ export * from './inheritance/index.js';
8
+ export * from './catalog/index.js';
9
+ export * from './validation/index.js';
10
+ export * from './provenance/index.js';
11
+ export * from './exporters/index.js';
12
+ export * from './parsers/index.js';
13
+ export * from './analysis/index.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,EAAE,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACzR,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { DocumentMeta } from '../model/document-meta.js';
2
+ /**
3
+ * Alias map: alias name -> canonical source path.
4
+ * Per DEC-1.1a: document-scoped, inherited by children, descendant wins.
5
+ */
6
+ export type AliasMap = Map<string, string>;
7
+ /**
8
+ * Build an alias map for a document by combining parent aliases with the document's own aliases.
9
+ * Descendant wins on conflict (DEC-1.1a).
10
+ *
11
+ * @param docMeta - The document's meta block
12
+ * @param parentAliases - Aliases inherited from parent documents
13
+ * @returns Combined alias map where the document's aliases override parents'
14
+ */
15
+ export declare function buildAliasMap(docMeta: DocumentMeta, parentAliases?: AliasMap): AliasMap;
16
+ /**
17
+ * Resolve a source alias to its canonical source path.
18
+ * If the source is an alias, replace it. Otherwise, return as-is.
19
+ */
20
+ export declare function resolveAlias(source: string, aliases: AliasMap): string;
21
+ //# sourceMappingURL=alias-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias-resolver.d.ts","sourceRoot":"","sources":["../../src/inheritance/alias-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAkB3C;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,YAAY,EACrB,aAAa,GAAE,QAAoB,GAClC,QAAQ,CASV;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,MAAM,CAEtE"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Extract alias entries from a document's meta.inherits.
3
+ * Only object-form entries with an `as` field create aliases.
4
+ */
5
+ function extractAliases(inherits) {
6
+ const aliases = new Map();
7
+ if (!inherits || !Array.isArray(inherits))
8
+ return aliases;
9
+ for (const entry of inherits) {
10
+ if (typeof entry === 'object' && entry !== null && 'source' in entry && 'as' in entry && entry.as) {
11
+ aliases.set(entry.as, entry.source);
12
+ }
13
+ }
14
+ return aliases;
15
+ }
16
+ /**
17
+ * Build an alias map for a document by combining parent aliases with the document's own aliases.
18
+ * Descendant wins on conflict (DEC-1.1a).
19
+ *
20
+ * @param docMeta - The document's meta block
21
+ * @param parentAliases - Aliases inherited from parent documents
22
+ * @returns Combined alias map where the document's aliases override parents'
23
+ */
24
+ export function buildAliasMap(docMeta, parentAliases = new Map()) {
25
+ const ownAliases = extractAliases(docMeta.inherits);
26
+ // Start with parent aliases, overlay with own (descendant wins)
27
+ const combined = new Map(parentAliases);
28
+ for (const [alias, source] of ownAliases) {
29
+ combined.set(alias, source);
30
+ }
31
+ return combined;
32
+ }
33
+ /**
34
+ * Resolve a source alias to its canonical source path.
35
+ * If the source is an alias, replace it. Otherwise, return as-is.
36
+ */
37
+ export function resolveAlias(source, aliases) {
38
+ return aliases.get(source) ?? source;
39
+ }
40
+ //# sourceMappingURL=alias-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias-resolver.js","sourceRoot":"","sources":["../../src/inheritance/alias-resolver.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,SAAS,cAAc,CAAC,QAAkC;IACxD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IAE1D,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;YAClG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAqB,EACrB,gBAA0B,IAAI,GAAG,EAAE;IAEnC,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEpD,gEAAgE;IAChE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IACxC,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QACzC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,OAAiB;IAC5D,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;AACvC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type { ElementReference } from './reference-parser.js';
2
+ export { parseReference } from './reference-parser.js';
3
+ export type { SourceResolver } from './source-resolver.js';
4
+ export { LocalSourceResolver, GitSourceResolver, createSourceResolver } from './source-resolver.js';
5
+ export type { AliasMap } from './alias-resolver.js';
6
+ export { buildAliasMap, resolveAlias } from './alias-resolver.js';
7
+ export type { DocumentLoader, ResolvedInheritance } from './inheritance-resolver.js';
8
+ export { resolveInheritance } from './inheritance-resolver.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/inheritance/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACpG,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAClE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { parseReference } from './reference-parser.js';
2
+ export { LocalSourceResolver, GitSourceResolver, createSourceResolver } from './source-resolver.js';
3
+ export { buildAliasMap, resolveAlias } from './alias-resolver.js';
4
+ export { resolveInheritance } from './inheritance-resolver.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/inheritance/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEpG,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { Document } from '../model/document.js';
2
+ import type { AliasMap } from './alias-resolver.js';
3
+ /**
4
+ * Callback type for loading documents during inheritance resolution.
5
+ * The resolver doesn't know how to load documents — the caller provides this.
6
+ */
7
+ export type DocumentLoader = (source: string, documentPath: string) => Document;
8
+ /**
9
+ * Result of resolving a document's inheritance tree.
10
+ */
11
+ export interface ResolvedInheritance {
12
+ /** Documents in DFS order, ancestors first (DEC-1.3: ancestors have highest priority) */
13
+ orderedDocuments: Document[];
14
+ /** Accumulated alias map for the entry document */
15
+ aliasMap: AliasMap;
16
+ /** Strongly connected components with >1 member (DEC-1.8) */
17
+ sccs: Document[][];
18
+ }
19
+ /**
20
+ * Resolve a document's full inheritance tree via DFS (DEC-1.0, DEC-1.3, DEC-1.8).
21
+ *
22
+ * DFS Algorithm (DEC-1.3):
23
+ * For document D with inherits: [A, E] where A inherits [B, C]:
24
+ * 1. Recurse into A → recurse into B (leaf, add B), recurse into C (leaf, add C), add A
25
+ * 2. Recurse into E (leaf, add E)
26
+ * 3. Add D
27
+ * Result: [B, C, A, E, D] — ancestors first, entry document last
28
+ *
29
+ * Cycle Detection (DEC-1.8):
30
+ * Track visiting set during DFS. On back-edge, skip the node (cycle-breaking).
31
+ *
32
+ * Tarjan's SCC (DEC-1.8):
33
+ * After DFS, find strongly connected components. SCCs with >1 member
34
+ * grant mutual element access.
35
+ */
36
+ export declare function resolveInheritance(entryDoc: Document, loader: DocumentLoader): ResolvedInheritance;
37
+ //# sourceMappingURL=inheritance-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inheritance-resolver.d.ts","sourceRoot":"","sources":["../../src/inheritance/inheritance-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAIpD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,QAAQ,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,yFAAyF;IACzF,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IAC7B,mDAAmD;IACnD,QAAQ,EAAE,QAAQ,CAAC;IACnB,6DAA6D;IAC7D,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,cAAc,GACrB,mBAAmB,CAmFrB"}
@@ -0,0 +1,164 @@
1
+ import { buildAliasMap } from './alias-resolver.js';
2
+ import { InheritanceError } from '../errors.js';
3
+ /**
4
+ * Resolve a document's full inheritance tree via DFS (DEC-1.0, DEC-1.3, DEC-1.8).
5
+ *
6
+ * DFS Algorithm (DEC-1.3):
7
+ * For document D with inherits: [A, E] where A inherits [B, C]:
8
+ * 1. Recurse into A → recurse into B (leaf, add B), recurse into C (leaf, add C), add A
9
+ * 2. Recurse into E (leaf, add E)
10
+ * 3. Add D
11
+ * Result: [B, C, A, E, D] — ancestors first, entry document last
12
+ *
13
+ * Cycle Detection (DEC-1.8):
14
+ * Track visiting set during DFS. On back-edge, skip the node (cycle-breaking).
15
+ *
16
+ * Tarjan's SCC (DEC-1.8):
17
+ * After DFS, find strongly connected components. SCCs with >1 member
18
+ * grant mutual element access.
19
+ */
20
+ export function resolveInheritance(entryDoc, loader) {
21
+ const ordered = [];
22
+ const visited = new Set(); // fully-processed keys
23
+ const visiting = new Set(); // cycle detection (in-progress DFS path)
24
+ const docMap = new Map(); // cache loaded docs by key
25
+ // Register the entry document
26
+ const entryKey = docKey(entryDoc);
27
+ docMap.set(entryKey, entryDoc);
28
+ function dfs(doc, parentAliases) {
29
+ const key = docKey(doc);
30
+ if (visiting.has(key)) {
31
+ // Cycle detected — skip (DEC-1.8 cycle-breaking)
32
+ return parentAliases;
33
+ }
34
+ if (visited.has(key)) {
35
+ // Already processed — skip but don't error
36
+ return parentAliases;
37
+ }
38
+ visiting.add(key);
39
+ // Build alias map for this document (DEC-1.1a)
40
+ const aliases = buildAliasMap(doc.meta, parentAliases);
41
+ // Process inherits entries
42
+ const inherits = doc.meta.inherits;
43
+ if (inherits && Array.isArray(inherits)) {
44
+ for (const entry of inherits) {
45
+ let source;
46
+ let docPath;
47
+ if (typeof entry === 'string') {
48
+ // Local document reference (same source)
49
+ source = doc.source;
50
+ docPath = entry;
51
+ }
52
+ else if (typeof entry === 'object' && entry !== null && 'source' in entry) {
53
+ // External source reference
54
+ source = entry.source;
55
+ docPath = '';
56
+ }
57
+ else {
58
+ continue;
59
+ }
60
+ // Try to load the parent document
61
+ const parentKey = `${source}:${docPath}`;
62
+ let parent = docMap.get(parentKey);
63
+ if (!parent) {
64
+ try {
65
+ parent = loader(source, docPath);
66
+ docMap.set(parentKey, parent);
67
+ }
68
+ catch (e) {
69
+ throw new InheritanceError(`Failed to load inherited document '${docPath}' from source '${source}': ${e.message}`);
70
+ }
71
+ }
72
+ // Recurse into parent (DFS — process parents before self)
73
+ dfs(parent, aliases);
74
+ }
75
+ }
76
+ visiting.delete(key);
77
+ visited.add(key);
78
+ ordered.push(doc);
79
+ return aliases;
80
+ }
81
+ const finalAliases = dfs(entryDoc, new Map());
82
+ // Tarjan's SCC post-pass (DEC-1.8)
83
+ const sccs = findSCCs(ordered, docMap);
84
+ return {
85
+ orderedDocuments: ordered,
86
+ aliasMap: finalAliases,
87
+ sccs,
88
+ };
89
+ }
90
+ /** Stable key for a document: source:documentPath */
91
+ function docKey(doc) {
92
+ return `${doc.source}:${doc.documentPath}`;
93
+ }
94
+ /**
95
+ * Tarjan's SCC algorithm (DEC-1.8).
96
+ * Returns SCCs with >1 member (mutual access groups).
97
+ */
98
+ function findSCCs(documents, docMap) {
99
+ let index = 0;
100
+ const stack = [];
101
+ const onStack = new Set();
102
+ const indices = new Map();
103
+ const lowlinks = new Map();
104
+ const sccs = [];
105
+ function strongconnect(doc) {
106
+ const k = docKey(doc);
107
+ indices.set(k, index);
108
+ lowlinks.set(k, index);
109
+ index++;
110
+ stack.push(k);
111
+ onStack.add(k);
112
+ // Process successors (documents this doc inherits from)
113
+ const inherits = doc.meta.inherits;
114
+ if (inherits && Array.isArray(inherits)) {
115
+ for (const entry of inherits) {
116
+ let successorKey;
117
+ if (typeof entry === 'string') {
118
+ successorKey = `${doc.source}:${entry}`;
119
+ }
120
+ else if (typeof entry === 'object' &&
121
+ entry !== null &&
122
+ 'source' in entry) {
123
+ successorKey = `${entry.source}:`;
124
+ }
125
+ else {
126
+ continue;
127
+ }
128
+ if (!indices.has(successorKey)) {
129
+ const successor = docMap.get(successorKey);
130
+ if (successor) {
131
+ strongconnect(successor);
132
+ lowlinks.set(k, Math.min(lowlinks.get(k), lowlinks.get(successorKey)));
133
+ }
134
+ }
135
+ else if (onStack.has(successorKey)) {
136
+ lowlinks.set(k, Math.min(lowlinks.get(k), indices.get(successorKey)));
137
+ }
138
+ }
139
+ }
140
+ // If this is a root node of an SCC
141
+ if (lowlinks.get(k) === indices.get(k)) {
142
+ const scc = [];
143
+ let w;
144
+ do {
145
+ w = stack.pop();
146
+ onStack.delete(w);
147
+ const sccDoc = docMap.get(w);
148
+ if (sccDoc)
149
+ scc.push(sccDoc);
150
+ } while (w !== k);
151
+ // Only include SCCs with >1 member (mutual access groups)
152
+ if (scc.length > 1) {
153
+ sccs.push(scc);
154
+ }
155
+ }
156
+ }
157
+ for (const doc of documents) {
158
+ if (!indices.has(docKey(doc))) {
159
+ strongconnect(doc);
160
+ }
161
+ }
162
+ return sccs;
163
+ }
164
+ //# sourceMappingURL=inheritance-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inheritance-resolver.js","sourceRoot":"","sources":["../../src/inheritance/inheritance-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Parsed element reference (DEC-1.1c).
3
+ * Segment count determines scope:
4
+ * - 1 segment: element only (same document)
5
+ * - 2 segments: document:element (same library)
6
+ * - 3 segments: source:document:element (cross-library)
7
+ */
8
+ export interface ElementReference {
9
+ source?: string;
10
+ document?: string;
11
+ element: string;
12
+ segmentCount: 1 | 2 | 3;
13
+ }
14
+ /**
15
+ * Parse an element reference string.
16
+ *
17
+ * The colon `:` is the delimiter. Split into at most 3 parts.
18
+ * A segment containing `/` is a document path, not a source+document split.
19
+ *
20
+ * Examples:
21
+ * "V1" -> { element: "V1", segmentCount: 1 }
22
+ * "values:V1" -> { document: "values", element: "V1", segmentCount: 2 }
23
+ * "org:values:V1" -> { source: "org", document: "values", element: "V1", segmentCount: 3 }
24
+ * "@github:foo/bar:values:V1" -> { source: "@github:foo/bar", document: "values", element: "V1", segmentCount: 3 }
25
+ */
26
+ export declare function parseReference(ref: string): ElementReference;
27
+ //# sourceMappingURL=reference-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-parser.d.ts","sourceRoot":"","sources":["../../src/inheritance/reference-parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAiE5D"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Parse an element reference string.
3
+ *
4
+ * The colon `:` is the delimiter. Split into at most 3 parts.
5
+ * A segment containing `/` is a document path, not a source+document split.
6
+ *
7
+ * Examples:
8
+ * "V1" -> { element: "V1", segmentCount: 1 }
9
+ * "values:V1" -> { document: "values", element: "V1", segmentCount: 2 }
10
+ * "org:values:V1" -> { source: "org", document: "values", element: "V1", segmentCount: 3 }
11
+ * "@github:foo/bar:values:V1" -> { source: "@github:foo/bar", document: "values", element: "V1", segmentCount: 3 }
12
+ */
13
+ export function parseReference(ref) {
14
+ // Handle @source: prefixes that contain colons (e.g., @github:foo/bar)
15
+ // Pattern: @provider:path is always a source prefix
16
+ let source;
17
+ let remainder = ref;
18
+ if (ref.startsWith('@')) {
19
+ // Find the source boundary: @provider:path is the source
20
+ // The source ends at the colon that separates it from the document
21
+ // @github:foo/bar:values:V1 -> source=@github:foo/bar, rest=values:V1
22
+ // Strategy: @provider:path where path contains / — everything up to the colon
23
+ // after which the next segment does NOT contain /
24
+ const parts = ref.split(':');
25
+ // Build source from the front, stopping when we hit a segment that looks like a document:element
26
+ let sourceEnd = 1; // At least @provider
27
+ for (let i = 1; i < parts.length; i++) {
28
+ if (parts[i].includes('/')) {
29
+ sourceEnd = i + 1; // This segment is part of the source path
30
+ }
31
+ else {
32
+ break;
33
+ }
34
+ }
35
+ if (sourceEnd < parts.length) {
36
+ source = parts.slice(0, sourceEnd).join(':');
37
+ remainder = parts.slice(sourceEnd).join(':');
38
+ }
39
+ else {
40
+ // Entire string is a source with no document:element
41
+ return { element: ref, segmentCount: 1 };
42
+ }
43
+ }
44
+ // Split remainder into segments
45
+ // For non-@ references, we can have up to 3 colon-separated segments:
46
+ // element | document:element | source:document:element
47
+ // For @ references, source is already extracted, so remainder is:
48
+ // element | document:element
49
+ const parts = remainder.split(':');
50
+ if (source) {
51
+ // Source already extracted from @ prefix
52
+ if (parts.length === 1) {
53
+ // source:element (unusual but valid)
54
+ return { source, element: parts[0], segmentCount: 3 };
55
+ }
56
+ // source:document:element — document may contain colons (unlikely but safe)
57
+ const element = parts[parts.length - 1];
58
+ const document = parts.slice(0, -1).join(':');
59
+ return { source, document, element, segmentCount: 3 };
60
+ }
61
+ // No @ prefix: split into 1, 2, or 3 segments
62
+ if (parts.length === 1) {
63
+ return { element: parts[0], segmentCount: 1 };
64
+ }
65
+ if (parts.length === 2) {
66
+ return { document: parts[0], element: parts[1], segmentCount: 2 };
67
+ }
68
+ // 3+ segments: first is source, last is element, middle is document
69
+ const element = parts[parts.length - 1];
70
+ const src = parts[0];
71
+ const document = parts.slice(1, -1).join(':');
72
+ return { source: src, document, element, segmentCount: 3 };
73
+ }
74
+ //# sourceMappingURL=reference-parser.js.map