@maadb/core 0.0.1 → 0.7.9

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 (407) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +371 -3
  3. package/dist/architect.d.ts +2 -0
  4. package/dist/architect.d.ts.map +1 -0
  5. package/dist/architect.js +273 -0
  6. package/dist/architect.js.map +1 -0
  7. package/dist/auth/resolve.d.ts +36 -0
  8. package/dist/auth/resolve.d.ts.map +1 -0
  9. package/dist/auth/resolve.js +77 -0
  10. package/dist/auth/resolve.js.map +1 -0
  11. package/dist/auth/token-store.d.ts +82 -0
  12. package/dist/auth/token-store.d.ts.map +1 -0
  13. package/dist/auth/token-store.js +464 -0
  14. package/dist/auth/token-store.js.map +1 -0
  15. package/dist/auth/types.d.ts +75 -0
  16. package/dist/auth/types.d.ts.map +1 -0
  17. package/dist/auth/types.js +15 -0
  18. package/dist/auth/types.js.map +1 -0
  19. package/dist/backend/adapter.d.ts +57 -0
  20. package/dist/backend/adapter.d.ts.map +1 -0
  21. package/dist/backend/adapter.js +6 -0
  22. package/dist/backend/adapter.js.map +1 -0
  23. package/dist/backend/index.d.ts +3 -0
  24. package/dist/backend/index.d.ts.map +1 -0
  25. package/dist/backend/index.js +2 -0
  26. package/dist/backend/index.js.map +1 -0
  27. package/dist/backend/sqlite/index.d.ts +63 -0
  28. package/dist/backend/sqlite/index.d.ts.map +1 -0
  29. package/dist/backend/sqlite/index.js +521 -0
  30. package/dist/backend/sqlite/index.js.map +1 -0
  31. package/dist/backend/sqlite/schema.d.ts +2 -0
  32. package/dist/backend/sqlite/schema.d.ts.map +1 -0
  33. package/dist/backend/sqlite/schema.js +88 -0
  34. package/dist/backend/sqlite/schema.js.map +1 -0
  35. package/dist/claude-md.d.ts +2 -0
  36. package/dist/claude-md.d.ts.map +1 -0
  37. package/dist/claude-md.js +97 -0
  38. package/dist/claude-md.js.map +1 -0
  39. package/dist/cli/commands/audit.d.ts +4 -0
  40. package/dist/cli/commands/audit.d.ts.map +1 -0
  41. package/dist/cli/commands/audit.js +39 -0
  42. package/dist/cli/commands/audit.js.map +1 -0
  43. package/dist/cli/commands/auth.d.ts +8 -0
  44. package/dist/cli/commands/auth.d.ts.map +1 -0
  45. package/dist/cli/commands/auth.js +242 -0
  46. package/dist/cli/commands/auth.js.map +1 -0
  47. package/dist/cli/commands/discover.d.ts +5 -0
  48. package/dist/cli/commands/discover.d.ts.map +1 -0
  49. package/dist/cli/commands/discover.js +48 -0
  50. package/dist/cli/commands/discover.js.map +1 -0
  51. package/dist/cli/commands/maintain.d.ts +6 -0
  52. package/dist/cli/commands/maintain.d.ts.map +1 -0
  53. package/dist/cli/commands/maintain.js +168 -0
  54. package/dist/cli/commands/maintain.js.map +1 -0
  55. package/dist/cli/commands/read.d.ts +7 -0
  56. package/dist/cli/commands/read.d.ts.map +1 -0
  57. package/dist/cli/commands/read.js +139 -0
  58. package/dist/cli/commands/read.js.map +1 -0
  59. package/dist/cli/commands/write.d.ts +4 -0
  60. package/dist/cli/commands/write.d.ts.map +1 -0
  61. package/dist/cli/commands/write.js +99 -0
  62. package/dist/cli/commands/write.js.map +1 -0
  63. package/dist/cli/helpers.d.ts +8 -0
  64. package/dist/cli/helpers.d.ts.map +1 -0
  65. package/dist/cli/helpers.js +17 -0
  66. package/dist/cli/helpers.js.map +1 -0
  67. package/dist/cli/index.d.ts +3 -0
  68. package/dist/cli/index.d.ts.map +1 -0
  69. package/dist/cli/index.js +296 -0
  70. package/dist/cli/index.js.map +1 -0
  71. package/dist/cli.d.ts +3 -0
  72. package/dist/cli.d.ts.map +1 -0
  73. package/dist/cli.js +7 -0
  74. package/dist/cli.js.map +1 -0
  75. package/dist/engine/audit.d.ts +15 -0
  76. package/dist/engine/audit.d.ts.map +1 -0
  77. package/dist/engine/audit.js +42 -0
  78. package/dist/engine/audit.js.map +1 -0
  79. package/dist/engine/composites.d.ts +6 -0
  80. package/dist/engine/composites.d.ts.map +1 -0
  81. package/dist/engine/composites.js +102 -0
  82. package/dist/engine/composites.js.map +1 -0
  83. package/dist/engine/context.d.ts +47 -0
  84. package/dist/engine/context.d.ts.map +1 -0
  85. package/dist/engine/context.js +55 -0
  86. package/dist/engine/context.js.map +1 -0
  87. package/dist/engine/docid-safe.d.ts +8 -0
  88. package/dist/engine/docid-safe.d.ts.map +1 -0
  89. package/dist/engine/docid-safe.js +0 -0
  90. package/dist/engine/docid-safe.js.map +1 -0
  91. package/dist/engine/helpers.d.ts +8 -0
  92. package/dist/engine/helpers.d.ts.map +1 -0
  93. package/dist/engine/helpers.js +102 -0
  94. package/dist/engine/helpers.js.map +1 -0
  95. package/dist/engine/index.d.ts +209 -0
  96. package/dist/engine/index.d.ts.map +1 -0
  97. package/dist/engine/index.js +489 -0
  98. package/dist/engine/index.js.map +1 -0
  99. package/dist/engine/indexing.d.ts +14 -0
  100. package/dist/engine/indexing.d.ts.map +1 -0
  101. package/dist/engine/indexing.js +225 -0
  102. package/dist/engine/indexing.js.map +1 -0
  103. package/dist/engine/journal.d.ts +32 -0
  104. package/dist/engine/journal.d.ts.map +1 -0
  105. package/dist/engine/journal.js +111 -0
  106. package/dist/engine/journal.js.map +1 -0
  107. package/dist/engine/logger.d.ts +19 -0
  108. package/dist/engine/logger.d.ts.map +1 -0
  109. package/dist/engine/logger.js +40 -0
  110. package/dist/engine/logger.js.map +1 -0
  111. package/dist/engine/maintenance.d.ts +15 -0
  112. package/dist/engine/maintenance.d.ts.map +1 -0
  113. package/dist/engine/maintenance.js +87 -0
  114. package/dist/engine/maintenance.js.map +1 -0
  115. package/dist/engine/mutex.d.ts +24 -0
  116. package/dist/engine/mutex.d.ts.map +1 -0
  117. package/dist/engine/mutex.js +50 -0
  118. package/dist/engine/mutex.js.map +1 -0
  119. package/dist/engine/pathguard.d.ts +16 -0
  120. package/dist/engine/pathguard.d.ts.map +1 -0
  121. package/dist/engine/pathguard.js +41 -0
  122. package/dist/engine/pathguard.js.map +1 -0
  123. package/dist/engine/reads.d.ts +24 -0
  124. package/dist/engine/reads.d.ts.map +1 -0
  125. package/dist/engine/reads.js +701 -0
  126. package/dist/engine/reads.js.map +1 -0
  127. package/dist/engine/types.d.ts +350 -0
  128. package/dist/engine/types.d.ts.map +1 -0
  129. package/dist/engine/types.js +5 -0
  130. package/dist/engine/types.js.map +1 -0
  131. package/dist/engine/writes.d.ts +10 -0
  132. package/dist/engine/writes.d.ts.map +1 -0
  133. package/dist/engine/writes.js +606 -0
  134. package/dist/engine/writes.js.map +1 -0
  135. package/dist/engine.d.ts +3 -0
  136. package/dist/engine.d.ts.map +1 -0
  137. package/dist/engine.js +6 -0
  138. package/dist/engine.js.map +1 -0
  139. package/dist/errors.d.ts +20 -0
  140. package/dist/errors.d.ts.map +1 -0
  141. package/dist/errors.js +17 -0
  142. package/dist/errors.js.map +1 -0
  143. package/dist/extractor/fields.d.ts +3 -0
  144. package/dist/extractor/fields.d.ts.map +1 -0
  145. package/dist/extractor/fields.js +58 -0
  146. package/dist/extractor/fields.js.map +1 -0
  147. package/dist/extractor/index.d.ts +7 -0
  148. package/dist/extractor/index.d.ts.map +1 -0
  149. package/dist/extractor/index.js +22 -0
  150. package/dist/extractor/index.js.map +1 -0
  151. package/dist/extractor/normalizers.d.ts +22 -0
  152. package/dist/extractor/normalizers.d.ts.map +1 -0
  153. package/dist/extractor/normalizers.js +250 -0
  154. package/dist/extractor/normalizers.js.map +1 -0
  155. package/dist/extractor/objects.d.ts +3 -0
  156. package/dist/extractor/objects.d.ts.map +1 -0
  157. package/dist/extractor/objects.js +33 -0
  158. package/dist/extractor/objects.js.map +1 -0
  159. package/dist/extractor/relationships.d.ts +3 -0
  160. package/dist/extractor/relationships.d.ts.map +1 -0
  161. package/dist/extractor/relationships.js +58 -0
  162. package/dist/extractor/relationships.js.map +1 -0
  163. package/dist/git/commit.d.ts +63 -0
  164. package/dist/git/commit.d.ts.map +1 -0
  165. package/dist/git/commit.js +161 -0
  166. package/dist/git/commit.js.map +1 -0
  167. package/dist/git/diff.d.ts +4 -0
  168. package/dist/git/diff.d.ts.map +1 -0
  169. package/dist/git/diff.js +56 -0
  170. package/dist/git/diff.js.map +1 -0
  171. package/dist/git/index.d.ts +41 -0
  172. package/dist/git/index.d.ts.map +1 -0
  173. package/dist/git/index.js +86 -0
  174. package/dist/git/index.js.map +1 -0
  175. package/dist/git/log.d.ts +13 -0
  176. package/dist/git/log.d.ts.map +1 -0
  177. package/dist/git/log.js +116 -0
  178. package/dist/git/log.js.map +1 -0
  179. package/dist/git/snapshot.d.ts +4 -0
  180. package/dist/git/snapshot.d.ts.map +1 -0
  181. package/dist/git/snapshot.js +65 -0
  182. package/dist/git/snapshot.js.map +1 -0
  183. package/dist/instance/config.d.ts +19 -0
  184. package/dist/instance/config.d.ts.map +1 -0
  185. package/dist/instance/config.js +107 -0
  186. package/dist/instance/config.js.map +1 -0
  187. package/dist/instance/pool.d.ts +138 -0
  188. package/dist/instance/pool.d.ts.map +1 -0
  189. package/dist/instance/pool.js +335 -0
  190. package/dist/instance/pool.js.map +1 -0
  191. package/dist/instance/session.d.ts +140 -0
  192. package/dist/instance/session.d.ts.map +1 -0
  193. package/dist/instance/session.js +267 -0
  194. package/dist/instance/session.js.map +1 -0
  195. package/dist/logging.d.ts +108 -0
  196. package/dist/logging.d.ts.map +1 -0
  197. package/dist/logging.js +120 -0
  198. package/dist/logging.js.map +1 -0
  199. package/dist/maad-md.d.ts +11 -0
  200. package/dist/maad-md.d.ts.map +1 -0
  201. package/dist/maad-md.js +252 -0
  202. package/dist/maad-md.js.map +1 -0
  203. package/dist/mcp/bulk-cap.d.ts +10 -0
  204. package/dist/mcp/bulk-cap.d.ts.map +1 -0
  205. package/dist/mcp/bulk-cap.js +37 -0
  206. package/dist/mcp/bulk-cap.js.map +1 -0
  207. package/dist/mcp/config.d.ts +18 -0
  208. package/dist/mcp/config.d.ts.map +1 -0
  209. package/dist/mcp/config.js +20 -0
  210. package/dist/mcp/config.js.map +1 -0
  211. package/dist/mcp/ctx.d.ts +17 -0
  212. package/dist/mcp/ctx.d.ts.map +1 -0
  213. package/dist/mcp/ctx.js +7 -0
  214. package/dist/mcp/ctx.js.map +1 -0
  215. package/dist/mcp/guardrails.d.ts +21 -0
  216. package/dist/mcp/guardrails.d.ts.map +1 -0
  217. package/dist/mcp/guardrails.js +39 -0
  218. package/dist/mcp/guardrails.js.map +1 -0
  219. package/dist/mcp/idempotency.d.ts +69 -0
  220. package/dist/mcp/idempotency.d.ts.map +1 -0
  221. package/dist/mcp/idempotency.js +168 -0
  222. package/dist/mcp/idempotency.js.map +1 -0
  223. package/dist/mcp/instance-reload.d.ts +23 -0
  224. package/dist/mcp/instance-reload.d.ts.map +1 -0
  225. package/dist/mcp/instance-reload.js +126 -0
  226. package/dist/mcp/instance-reload.js.map +1 -0
  227. package/dist/mcp/kinds.d.ts +22 -0
  228. package/dist/mcp/kinds.d.ts.map +1 -0
  229. package/dist/mcp/kinds.js +110 -0
  230. package/dist/mcp/kinds.js.map +1 -0
  231. package/dist/mcp/lifecycle.d.ts +8 -0
  232. package/dist/mcp/lifecycle.d.ts.map +1 -0
  233. package/dist/mcp/lifecycle.js +65 -0
  234. package/dist/mcp/lifecycle.js.map +1 -0
  235. package/dist/mcp/notifications.d.ts +87 -0
  236. package/dist/mcp/notifications.d.ts.map +1 -0
  237. package/dist/mcp/notifications.js +154 -0
  238. package/dist/mcp/notifications.js.map +1 -0
  239. package/dist/mcp/query-depth.d.ts +28 -0
  240. package/dist/mcp/query-depth.d.ts.map +1 -0
  241. package/dist/mcp/query-depth.js +43 -0
  242. package/dist/mcp/query-depth.js.map +1 -0
  243. package/dist/mcp/rate-limit.d.ts +60 -0
  244. package/dist/mcp/rate-limit.d.ts.map +1 -0
  245. package/dist/mcp/rate-limit.js +203 -0
  246. package/dist/mcp/rate-limit.js.map +1 -0
  247. package/dist/mcp/reload-signal.d.ts +13 -0
  248. package/dist/mcp/reload-signal.d.ts.map +1 -0
  249. package/dist/mcp/reload-signal.js +68 -0
  250. package/dist/mcp/reload-signal.js.map +1 -0
  251. package/dist/mcp/response.d.ts +109 -0
  252. package/dist/mcp/response.d.ts.map +1 -0
  253. package/dist/mcp/response.js +132 -0
  254. package/dist/mcp/response.js.map +1 -0
  255. package/dist/mcp/roles.d.ts +7 -0
  256. package/dist/mcp/roles.d.ts.map +1 -0
  257. package/dist/mcp/roles.js +56 -0
  258. package/dist/mcp/roles.js.map +1 -0
  259. package/dist/mcp/server.d.ts +33 -0
  260. package/dist/mcp/server.d.ts.map +1 -0
  261. package/dist/mcp/server.js +242 -0
  262. package/dist/mcp/server.js.map +1 -0
  263. package/dist/mcp/shutdown.d.ts +32 -0
  264. package/dist/mcp/shutdown.d.ts.map +1 -0
  265. package/dist/mcp/shutdown.js +130 -0
  266. package/dist/mcp/shutdown.js.map +1 -0
  267. package/dist/mcp/tools/audit.d.ts +4 -0
  268. package/dist/mcp/tools/audit.d.ts.map +1 -0
  269. package/dist/mcp/tools/audit.js +45 -0
  270. package/dist/mcp/tools/audit.js.map +1 -0
  271. package/dist/mcp/tools/auth.d.ts +4 -0
  272. package/dist/mcp/tools/auth.d.ts.map +1 -0
  273. package/dist/mcp/tools/auth.js +181 -0
  274. package/dist/mcp/tools/auth.js.map +1 -0
  275. package/dist/mcp/tools/discover.d.ts +4 -0
  276. package/dist/mcp/tools/discover.d.ts.map +1 -0
  277. package/dist/mcp/tools/discover.js +83 -0
  278. package/dist/mcp/tools/discover.js.map +1 -0
  279. package/dist/mcp/tools/instance.d.ts +15 -0
  280. package/dist/mcp/tools/instance.d.ts.map +1 -0
  281. package/dist/mcp/tools/instance.js +207 -0
  282. package/dist/mcp/tools/instance.js.map +1 -0
  283. package/dist/mcp/tools/maintain.d.ts +4 -0
  284. package/dist/mcp/tools/maintain.d.ts.map +1 -0
  285. package/dist/mcp/tools/maintain.js +118 -0
  286. package/dist/mcp/tools/maintain.js.map +1 -0
  287. package/dist/mcp/tools/read.d.ts +4 -0
  288. package/dist/mcp/tools/read.d.ts.map +1 -0
  289. package/dist/mcp/tools/read.js +260 -0
  290. package/dist/mcp/tools/read.js.map +1 -0
  291. package/dist/mcp/tools/write.d.ts +4 -0
  292. package/dist/mcp/tools/write.d.ts.map +1 -0
  293. package/dist/mcp/tools/write.js +342 -0
  294. package/dist/mcp/tools/write.js.map +1 -0
  295. package/dist/mcp/transport/auth.d.ts +41 -0
  296. package/dist/mcp/transport/auth.d.ts.map +1 -0
  297. package/dist/mcp/transport/auth.js +115 -0
  298. package/dist/mcp/transport/auth.js.map +1 -0
  299. package/dist/mcp/transport/http.d.ts +62 -0
  300. package/dist/mcp/transport/http.d.ts.map +1 -0
  301. package/dist/mcp/transport/http.js +357 -0
  302. package/dist/mcp/transport/http.js.map +1 -0
  303. package/dist/mcp/transport/pin.d.ts +15 -0
  304. package/dist/mcp/transport/pin.d.ts.map +1 -0
  305. package/dist/mcp/transport/pin.js +71 -0
  306. package/dist/mcp/transport/pin.js.map +1 -0
  307. package/dist/mcp/transport/telemetry.d.ts +79 -0
  308. package/dist/mcp/transport/telemetry.d.ts.map +1 -0
  309. package/dist/mcp/transport/telemetry.js +97 -0
  310. package/dist/mcp/transport/telemetry.js.map +1 -0
  311. package/dist/mcp/with-session.d.ts +26 -0
  312. package/dist/mcp/with-session.d.ts.map +1 -0
  313. package/dist/mcp/with-session.js +275 -0
  314. package/dist/mcp/with-session.js.map +1 -0
  315. package/dist/parser/annotations.d.ts +3 -0
  316. package/dist/parser/annotations.d.ts.map +1 -0
  317. package/dist/parser/annotations.js +41 -0
  318. package/dist/parser/annotations.js.map +1 -0
  319. package/dist/parser/blocks.d.ts +3 -0
  320. package/dist/parser/blocks.d.ts.map +1 -0
  321. package/dist/parser/blocks.js +99 -0
  322. package/dist/parser/blocks.js.map +1 -0
  323. package/dist/parser/frontmatter.d.ts +9 -0
  324. package/dist/parser/frontmatter.d.ts.map +1 -0
  325. package/dist/parser/frontmatter.js +33 -0
  326. package/dist/parser/frontmatter.js.map +1 -0
  327. package/dist/parser/index.d.ts +11 -0
  328. package/dist/parser/index.d.ts.map +1 -0
  329. package/dist/parser/index.js +54 -0
  330. package/dist/parser/index.js.map +1 -0
  331. package/dist/parser/matter.d.ts +3 -0
  332. package/dist/parser/matter.d.ts.map +1 -0
  333. package/dist/parser/matter.js +32 -0
  334. package/dist/parser/matter.js.map +1 -0
  335. package/dist/parser/tags.d.ts +3 -0
  336. package/dist/parser/tags.d.ts.map +1 -0
  337. package/dist/parser/tags.js +32 -0
  338. package/dist/parser/tags.js.map +1 -0
  339. package/dist/parser/verbatim.d.ts +4 -0
  340. package/dist/parser/verbatim.d.ts.map +1 -0
  341. package/dist/parser/verbatim.js +121 -0
  342. package/dist/parser/verbatim.js.map +1 -0
  343. package/dist/parser/yaml-profile.d.ts +4 -0
  344. package/dist/parser/yaml-profile.d.ts.map +1 -0
  345. package/dist/parser/yaml-profile.js +73 -0
  346. package/dist/parser/yaml-profile.js.map +1 -0
  347. package/dist/registry/index.d.ts +2 -0
  348. package/dist/registry/index.d.ts.map +1 -0
  349. package/dist/registry/index.js +2 -0
  350. package/dist/registry/index.js.map +1 -0
  351. package/dist/registry/loader.d.ts +4 -0
  352. package/dist/registry/loader.d.ts.map +1 -0
  353. package/dist/registry/loader.js +147 -0
  354. package/dist/registry/loader.js.map +1 -0
  355. package/dist/registry/types.d.ts +2 -0
  356. package/dist/registry/types.d.ts.map +1 -0
  357. package/dist/registry/types.js +5 -0
  358. package/dist/registry/types.js.map +1 -0
  359. package/dist/scanner.d.ts +57 -0
  360. package/dist/scanner.d.ts.map +1 -0
  361. package/dist/scanner.js +223 -0
  362. package/dist/scanner.js.map +1 -0
  363. package/dist/schema/index.d.ts +3 -0
  364. package/dist/schema/index.d.ts.map +1 -0
  365. package/dist/schema/index.js +3 -0
  366. package/dist/schema/index.js.map +1 -0
  367. package/dist/schema/loader.d.ts +4 -0
  368. package/dist/schema/loader.d.ts.map +1 -0
  369. package/dist/schema/loader.js +303 -0
  370. package/dist/schema/loader.js.map +1 -0
  371. package/dist/schema/precision.d.ts +6 -0
  372. package/dist/schema/precision.d.ts.map +1 -0
  373. package/dist/schema/precision.js +59 -0
  374. package/dist/schema/precision.js.map +1 -0
  375. package/dist/schema/validator.d.ts +21 -0
  376. package/dist/schema/validator.d.ts.map +1 -0
  377. package/dist/schema/validator.js +200 -0
  378. package/dist/schema/validator.js.map +1 -0
  379. package/dist/schema-md.d.ts +8 -0
  380. package/dist/schema-md.d.ts.map +1 -0
  381. package/dist/schema-md.js +98 -0
  382. package/dist/schema-md.js.map +1 -0
  383. package/dist/skill-files.d.ts +3 -0
  384. package/dist/skill-files.d.ts.map +1 -0
  385. package/dist/skill-files.js +362 -0
  386. package/dist/skill-files.js.map +1 -0
  387. package/dist/skills-scaffold.d.ts +10 -0
  388. package/dist/skills-scaffold.d.ts.map +1 -0
  389. package/dist/skills-scaffold.js +52 -0
  390. package/dist/skills-scaffold.js.map +1 -0
  391. package/dist/types.d.ts +309 -0
  392. package/dist/types.d.ts.map +1 -0
  393. package/dist/types.js +111 -0
  394. package/dist/types.js.map +1 -0
  395. package/dist/writer/index.d.ts +7 -0
  396. package/dist/writer/index.d.ts.map +1 -0
  397. package/dist/writer/index.js +32 -0
  398. package/dist/writer/index.js.map +1 -0
  399. package/dist/writer/serializer.d.ts +4 -0
  400. package/dist/writer/serializer.d.ts.map +1 -0
  401. package/dist/writer/serializer.js +103 -0
  402. package/dist/writer/serializer.js.map +1 -0
  403. package/dist/writer/template.d.ts +3 -0
  404. package/dist/writer/template.d.ts.map +1 -0
  405. package/dist/writer/template.js +27 -0
  406. package/dist/writer/template.js.map +1 -0
  407. package/package.json +59 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/parser/frontmatter.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,qBAAqB;AACrB,oEAAoE;AACpE,+EAA+E;AAE/E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,EAAE,EAAE,SAAS,EAAe,MAAM,cAAc,CAAC;AAS1D,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,QAAkB;IAC9D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1F,OAAO,SAAS,CAAC,aAAa,EAAE,oCAAoC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7G,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAA+B,CAAC;QAE3D,sFAAsF;QACtF,oFAAoF;QACpF,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,yDAAyD;YACzD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YACjD,aAAa,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,yCAAyC;QACxE,CAAC;QAED,OAAO,EAAE,CAAC;YACR,WAAW;YACX,IAAI,EAAE,MAAM,CAAC,OAAO;YACpB,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;QACvE,OAAO,SAAS,CAAC,aAAa,EAAE,gCAAgC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAClH,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type Result } from '../errors.js';
2
+ import { type FilePath, type ParsedDocument, type Primitive } from '../types.js';
3
+ export { parseFrontmatter } from './frontmatter.js';
4
+ export { parseBlocks } from './blocks.js';
5
+ export { findVerbatimZones, isInVerbatimZone } from './verbatim.js';
6
+ export { extractValueCalls } from './tags.js';
7
+ export { extractAnnotations } from './annotations.js';
8
+ export { validateYamlProfile } from './yaml-profile.js';
9
+ export declare function parseDocument(path: FilePath, subtypeMap: Record<string, Primitive>): Promise<Result<ParsedDocument>>;
10
+ export declare function parseDocumentFromContent(raw: string, path: FilePath, subtypeMap: Record<string, Primitive>): Result<ParsedDocument>;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAA0B,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAQzG,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,wBAAsB,aAAa,CACjC,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACpC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAUjC;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACpC,MAAM,CAAC,cAAc,CAAC,CAwBxB"}
@@ -0,0 +1,54 @@
1
+ // ============================================================================
2
+ // Document Parser — Public API
3
+ // Composes frontmatter, blocks, verbatim zones, value calls, and annotations
4
+ // into a single ParsedDocument.
5
+ // ============================================================================
6
+ import { createHash } from 'node:crypto';
7
+ import { readFile } from 'node:fs/promises';
8
+ import { ok, singleErr } from '../errors.js';
9
+ import { parseFrontmatter } from './frontmatter.js';
10
+ import { parseBlocks } from './blocks.js';
11
+ import { findVerbatimZones } from './verbatim.js';
12
+ import { extractValueCalls } from './tags.js';
13
+ import { extractAnnotations } from './annotations.js';
14
+ import { validateYamlProfile } from './yaml-profile.js';
15
+ export { parseFrontmatter } from './frontmatter.js';
16
+ export { parseBlocks } from './blocks.js';
17
+ export { findVerbatimZones, isInVerbatimZone } from './verbatim.js';
18
+ export { extractValueCalls } from './tags.js';
19
+ export { extractAnnotations } from './annotations.js';
20
+ export { validateYamlProfile } from './yaml-profile.js';
21
+ export async function parseDocument(path, subtypeMap) {
22
+ let raw;
23
+ try {
24
+ raw = await readFile(path, 'utf-8');
25
+ }
26
+ catch (e) {
27
+ const message = e instanceof Error ? e.message : 'Unknown read error';
28
+ return singleErr('FILE_READ_ERROR', `Failed to read file: ${message}`, { file: path, line: 0, col: 0 });
29
+ }
30
+ return parseDocumentFromContent(raw, path, subtypeMap);
31
+ }
32
+ export function parseDocumentFromContent(raw, path, subtypeMap) {
33
+ const hash = createHash('sha256').update(raw).digest('hex');
34
+ const fm = parseFrontmatter(raw, path);
35
+ if (!fm.ok)
36
+ return fm;
37
+ const profileResult = validateYamlProfile(fm.value.frontmatter, path);
38
+ if (!profileResult.ok)
39
+ return profileResult;
40
+ const { frontmatter, body, bodyStartLine } = fm.value;
41
+ const verbatimZones = findVerbatimZones(body, bodyStartLine);
42
+ const blocks = parseBlocks(body, bodyStartLine);
43
+ const valueCalls = extractValueCalls(body, bodyStartLine, path, verbatimZones);
44
+ const annotations = extractAnnotations(body, bodyStartLine, path, subtypeMap, verbatimZones);
45
+ return ok({
46
+ filePath: path,
47
+ fileHash: hash,
48
+ frontmatter,
49
+ blocks,
50
+ valueCalls,
51
+ annotations,
52
+ });
53
+ }
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import matter from 'gray-matter';
2
+ export declare function parseMatter(raw: string): matter.GrayMatterFile<string>;
3
+ //# sourceMappingURL=matter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matter.d.ts","sourceRoot":"","sources":["../../src/parser/matter.ts"],"names":[],"mappings":"AAkBA,OAAO,MAAM,MAAM,aAAa,CAAC;AAcjC,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAEtE"}
@@ -0,0 +1,32 @@
1
+ // ============================================================================
2
+ // gray-matter wrapper with a string-preserving YAML engine.
3
+ //
4
+ // Why: js-yaml's DEFAULT_SCHEMA resolves `!!timestamp` scalars into JS Date
5
+ // objects. Downstream code (writer/serializer, indexer, extractor, reads,
6
+ // writes) then normalizes Dates via `.toISOString().slice(0, 10)`, silently
7
+ // truncating any finer-than-day precision on round-trip. That is a hard
8
+ // blocker for 0.6.7 schema precision contracts — see
9
+ // docs/specs/0.6.7-schema-precision.md §"Round-trip precision preservation".
10
+ //
11
+ // Fix: use yaml.CORE_SCHEMA (null/bool/int/float/str/seq/map, NO timestamp).
12
+ // Datetime-looking scalars stay as literal strings end-to-end.
13
+ //
14
+ // Every matter(...) call in the codebase goes through parseMatter() so we
15
+ // cannot regress this invariant by adding a new caller that forgets the
16
+ // engine option.
17
+ // ============================================================================
18
+ import matter from 'gray-matter';
19
+ import yaml from 'js-yaml';
20
+ const stringPreservingYamlEngine = {
21
+ // yaml.load returns `unknown` (could be primitive / null on malformed YAML),
22
+ // but gray-matter's engine type demands `object`. Cast is safe: downstream
23
+ // code in parser/frontmatter.ts already validates that `.data` is a plain
24
+ // object and rejects other shapes.
25
+ parse: (raw) => yaml.load(raw, { schema: yaml.CORE_SCHEMA }),
26
+ stringify: (obj) => yaml.dump(obj),
27
+ };
28
+ const MATTER_OPTIONS = { engines: { yaml: stringPreservingYamlEngine } };
29
+ export function parseMatter(raw) {
30
+ return matter(raw, MATTER_OPTIONS);
31
+ }
32
+ //# sourceMappingURL=matter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matter.js","sourceRoot":"","sources":["../../src/parser/matter.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4DAA4D;AAC5D,EAAE;AACF,4EAA4E;AAC5E,0EAA0E;AAC1E,4EAA4E;AAC5E,wEAAwE;AACxE,qDAAqD;AACrD,6EAA6E;AAC7E,EAAE;AACF,6EAA6E;AAC7E,+DAA+D;AAC/D,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,iBAAiB;AACjB,+EAA+E;AAE/E,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,MAAM,0BAA0B,GAAG;IACjC,6EAA6E;IAC7E,2EAA2E;IAC3E,0EAA0E;IAC1E,mCAAmC;IACnC,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CAAW;IAC9E,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;CAC3C,CAAC;AAEF,MAAM,cAAc,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,EAAW,CAAC;AAElF,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FilePath, ValueCall, VerbatimZone } from '../types.js';
2
+ export declare function extractValueCalls(body: string, bodyStartLine: number, filePath: FilePath, verbatimZones: VerbatimZone[]): ValueCall[];
3
+ //# sourceMappingURL=tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/parser/tags.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKrE,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,YAAY,EAAE,GAC5B,SAAS,EAAE,CA4Bb"}
@@ -0,0 +1,32 @@
1
+ // ============================================================================
2
+ // Value Call Extractor
3
+ // Extracts {{field}} references from markdown body.
4
+ // Skips matches inside verbatim zones (code blocks, code spans).
5
+ // ============================================================================
6
+ import { isInVerbatimZone } from './verbatim.js';
7
+ const VALUE_CALL_REGEX = /\{\{([a-zA-Z_][a-zA-Z0-9_.]*)\}\}/g;
8
+ export function extractValueCalls(body, bodyStartLine, filePath, verbatimZones) {
9
+ const calls = [];
10
+ const lines = body.split('\n');
11
+ for (let i = 0; i < lines.length; i++) {
12
+ const line = lines[i];
13
+ const absoluteLine = bodyStartLine + i;
14
+ let match;
15
+ VALUE_CALL_REGEX.lastIndex = 0;
16
+ while ((match = VALUE_CALL_REGEX.exec(line)) !== null) {
17
+ const col = match.index;
18
+ if (isInVerbatimZone(absoluteLine, col, verbatimZones))
19
+ continue;
20
+ calls.push({
21
+ field: match[1],
22
+ location: {
23
+ file: filePath,
24
+ line: absoluteLine,
25
+ col,
26
+ },
27
+ });
28
+ }
29
+ }
30
+ return calls;
31
+ }
32
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/parser/tags.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,uBAAuB;AACvB,oDAAoD;AACpD,iEAAiE;AACjE,+EAA+E;AAG/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,gBAAgB,GAAG,oCAAoC,CAAC;AAE9D,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,aAAqB,EACrB,QAAkB,EAClB,aAA6B;IAE7B,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,MAAM,YAAY,GAAG,aAAa,GAAG,CAAC,CAAC;QAEvC,IAAI,KAA6B,CAAC;QAClC,gBAAgB,CAAC,SAAS,GAAG,CAAC,CAAC;QAE/B,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACtD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;YAExB,IAAI,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,aAAa,CAAC;gBAAE,SAAS;YAEjE,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,KAAK,CAAC,CAAC,CAAE;gBAChB,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,YAAY;oBAClB,GAAG;iBACJ;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { VerbatimZone } from '../types.js';
2
+ export declare function findVerbatimZones(body: string, bodyStartLine: number): VerbatimZone[];
3
+ export declare function isInVerbatimZone(line: number, col: number, zones: VerbatimZone[]): boolean;
4
+ //# sourceMappingURL=verbatim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verbatim.d.ts","sourceRoot":"","sources":["../../src/parser/verbatim.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,YAAY,EAAE,CAsDrF;AAkDD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,YAAY,EAAE,GACpB,OAAO,CAmBT"}
@@ -0,0 +1,121 @@
1
+ // ============================================================================
2
+ // Verbatim Zone Detection
3
+ // Identifies fenced code blocks, indented code blocks, and inline code spans
4
+ // where MAAD custom syntax ({{...}}, [[...]]) must NOT be parsed.
5
+ // ============================================================================
6
+ const FENCE_OPEN_REGEX = /^(\s*(`{3,}|~{3,}))/;
7
+ export function findVerbatimZones(body, bodyStartLine) {
8
+ const zones = [];
9
+ const lines = body.split('\n');
10
+ let inFence = false;
11
+ let fenceChar = '';
12
+ let fenceLen = 0;
13
+ let fenceStart = 0;
14
+ for (let i = 0; i < lines.length; i++) {
15
+ const line = lines[i];
16
+ const absoluteLine = bodyStartLine + i;
17
+ // Fenced code blocks
18
+ const fenceMatch = FENCE_OPEN_REGEX.exec(line);
19
+ if (fenceMatch) {
20
+ const fence = fenceMatch[2];
21
+ if (!inFence) {
22
+ inFence = true;
23
+ fenceChar = fence[0];
24
+ fenceLen = fence.length;
25
+ fenceStart = absoluteLine;
26
+ continue;
27
+ }
28
+ // Check if this is a closing fence
29
+ const trimmed = line.trimStart();
30
+ if (trimmed[0] === fenceChar && !inFenceHasExtra(trimmed, fenceChar, fenceLen)) {
31
+ zones.push({
32
+ startLine: fenceStart,
33
+ endLine: absoluteLine,
34
+ inline: false,
35
+ });
36
+ inFence = false;
37
+ continue;
38
+ }
39
+ }
40
+ if (inFence)
41
+ continue;
42
+ // Inline code spans — find ` pairs within the line
43
+ findInlineCodeSpans(line, absoluteLine, zones);
44
+ }
45
+ // If we're still in a fence at EOF, close it
46
+ if (inFence) {
47
+ zones.push({
48
+ startLine: fenceStart,
49
+ endLine: bodyStartLine + lines.length - 1,
50
+ inline: false,
51
+ });
52
+ }
53
+ return zones;
54
+ }
55
+ function inFenceHasExtra(trimmed, char, minLen) {
56
+ // A closing fence is: same char repeated >= fenceLen, optionally followed by whitespace only
57
+ let count = 0;
58
+ for (const c of trimmed) {
59
+ if (c === char)
60
+ count++;
61
+ else
62
+ break;
63
+ }
64
+ if (count < minLen)
65
+ return true; // not enough chars, not a closer
66
+ // Check remainder is whitespace only
67
+ const remainder = trimmed.slice(count).trim();
68
+ return remainder.length > 0;
69
+ }
70
+ function findInlineCodeSpans(line, absoluteLine, zones) {
71
+ let i = 0;
72
+ while (i < line.length) {
73
+ if (line[i] === '`') {
74
+ // Count opening backticks
75
+ let openLen = 0;
76
+ const openStart = i;
77
+ while (i < line.length && line[i] === '`') {
78
+ openLen++;
79
+ i++;
80
+ }
81
+ // Find matching closing backticks
82
+ const closeTarget = '`'.repeat(openLen);
83
+ const closeIndex = line.indexOf(closeTarget, i);
84
+ if (closeIndex !== -1) {
85
+ zones.push({
86
+ startLine: absoluteLine,
87
+ endLine: absoluteLine,
88
+ startCol: openStart,
89
+ endCol: closeIndex + openLen,
90
+ inline: true,
91
+ });
92
+ i = closeIndex + openLen;
93
+ }
94
+ }
95
+ else {
96
+ i++;
97
+ }
98
+ }
99
+ }
100
+ export function isInVerbatimZone(line, col, zones) {
101
+ for (const zone of zones) {
102
+ if (zone.inline) {
103
+ // Inline code span: same line, check column range
104
+ if (line === zone.startLine &&
105
+ zone.startCol !== undefined &&
106
+ zone.endCol !== undefined &&
107
+ col >= zone.startCol &&
108
+ col < zone.endCol) {
109
+ return true;
110
+ }
111
+ }
112
+ else {
113
+ // Block zone: check line range
114
+ if (line >= zone.startLine && line <= zone.endLine) {
115
+ return true;
116
+ }
117
+ }
118
+ }
119
+ return false;
120
+ }
121
+ //# sourceMappingURL=verbatim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verbatim.js","sourceRoot":"","sources":["../../src/parser/verbatim.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type Result } from '../errors.js';
2
+ import type { FilePath } from '../types.js';
3
+ export declare function validateYamlProfile(frontmatter: Record<string, unknown>, filePath: FilePath): Result<Record<string, unknown>>;
4
+ //# sourceMappingURL=yaml-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-profile.d.ts","sourceRoot":"","sources":["../../src/parser/yaml-profile.ts"],"names":[],"mappings":"AAMA,OAAO,EAAiB,KAAK,MAAM,EAAkB,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,QAAQ,EAAE,QAAQ,GACjB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAyBjC"}
@@ -0,0 +1,73 @@
1
+ // ============================================================================
2
+ // MAAD YAML Profile Validator
3
+ // Enforces the constrained YAML subset: no anchors, no aliases, no deep
4
+ // nesting, no complex keys. Runs after gray-matter parse, before schema.
5
+ // ============================================================================
6
+ import { ok, maadError } from '../errors.js';
7
+ const MAX_DEPTH = 2;
8
+ export function validateYamlProfile(frontmatter, filePath) {
9
+ const errors = [];
10
+ const loc = { file: filePath, line: 1, col: 1 };
11
+ for (const [key, value] of Object.entries(frontmatter)) {
12
+ // Keys must be plain strings
13
+ if (typeof key !== 'string') {
14
+ errors.push(maadError('YAML_PROFILE_VIOLATION', `Key must be a string, got ${typeof key}`, loc));
15
+ continue;
16
+ }
17
+ // Check for anchor/alias artifacts — gray-matter resolves these but we detect
18
+ // circular references or shared references that indicate alias usage
19
+ // (In practice, gray-matter silently resolves them, so we check value depth/shape)
20
+ // Validate value depth and types
21
+ const depthErrors = validateValue(key, value, 0, filePath);
22
+ errors.push(...depthErrors);
23
+ }
24
+ if (errors.length > 0) {
25
+ return { ok: false, errors };
26
+ }
27
+ return ok(frontmatter);
28
+ }
29
+ function validateValue(path, value, depth, filePath) {
30
+ const errors = [];
31
+ const loc = { file: filePath, line: 1, col: 1 };
32
+ if (value === null || value === undefined)
33
+ return errors;
34
+ if (typeof value === 'string')
35
+ return errors;
36
+ if (typeof value === 'number')
37
+ return errors;
38
+ if (typeof value === 'boolean')
39
+ return errors;
40
+ if (value instanceof Date)
41
+ return errors; // gray-matter may parse dates
42
+ if (Array.isArray(value)) {
43
+ if (depth >= MAX_DEPTH) {
44
+ errors.push(maadError('YAML_PROFILE_VIOLATION', `"${path}": array at depth ${depth} exceeds max nesting depth of ${MAX_DEPTH}`, loc));
45
+ return errors;
46
+ }
47
+ for (let i = 0; i < value.length; i++) {
48
+ const item = value[i];
49
+ // Recurse into array items at depth + 1
50
+ errors.push(...validateValue(`${path}[${i}]`, item, depth + 1, filePath));
51
+ }
52
+ return errors;
53
+ }
54
+ if (typeof value === 'object') {
55
+ if (depth >= MAX_DEPTH) {
56
+ errors.push(maadError('YAML_PROFILE_VIOLATION', `"${path}": object at depth ${depth} exceeds max nesting depth of ${MAX_DEPTH}`, loc));
57
+ return errors;
58
+ }
59
+ const obj = value;
60
+ for (const [key, childValue] of Object.entries(obj)) {
61
+ if (typeof key !== 'string') {
62
+ errors.push(maadError('YAML_PROFILE_VIOLATION', `"${path}": non-string key "${String(key)}" not allowed`, loc));
63
+ continue;
64
+ }
65
+ errors.push(...validateValue(`${path}.${key}`, childValue, depth + 1, filePath));
66
+ }
67
+ return errors;
68
+ }
69
+ // Unknown type
70
+ errors.push(maadError('YAML_PROFILE_VIOLATION', `"${path}": unsupported value type ${typeof value}`, loc));
71
+ return errors;
72
+ }
73
+ //# sourceMappingURL=yaml-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-profile.js","sourceRoot":"","sources":["../../src/parser/yaml-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { loadRegistry } from './loader.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { loadRegistry } from './loader.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type Result } from '../errors.js';
2
+ import { type Registry } from '../types.js';
3
+ export declare function loadRegistry(projectRoot: string): Promise<Result<Registry>>;
4
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"AASA,OAAO,EAAiC,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE1E,OAAO,EAML,KAAK,QAAQ,EAId,MAAM,aAAa,CAAC;AAKrB,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAmJjF"}
@@ -0,0 +1,147 @@
1
+ // ============================================================================
2
+ // Registry Loader
3
+ // Reads and validates _registry/object_types.yaml
4
+ // ============================================================================
5
+ import { readFile } from 'node:fs/promises';
6
+ import { existsSync, mkdirSync } from 'node:fs';
7
+ import path from 'node:path';
8
+ import { parseMatter } from '../parser/matter.js';
9
+ import { ok, err, singleErr, maadError } from '../errors.js';
10
+ import { isContainedIn } from '../engine/pathguard.js';
11
+ import { docType, schemaRef, PRIMITIVES, DEFAULT_SUBTYPE_MAP, buildSubtypeMap, } from '../types.js';
12
+ const VALID_NAME_REGEX = /^[a-z][a-z0-9_]*$/;
13
+ const VALID_PREFIX_REGEX = /^[a-z0-9]{2,5}$/;
14
+ export async function loadRegistry(projectRoot) {
15
+ const registryPath = path.join(projectRoot, '_registry', 'object_types.yaml');
16
+ if (!existsSync(registryPath)) {
17
+ return singleErr('REGISTRY_NOT_FOUND', `Registry file not found: ${registryPath}`);
18
+ }
19
+ let raw;
20
+ try {
21
+ raw = await readFile(registryPath, 'utf-8');
22
+ }
23
+ catch (e) {
24
+ const message = e instanceof Error ? e.message : 'Unknown read error';
25
+ return singleErr('FILE_READ_ERROR', `Failed to read registry: ${message}`);
26
+ }
27
+ let data;
28
+ try {
29
+ // gray-matter can parse bare YAML files (no frontmatter delimiters needed)
30
+ // but we need to handle both cases
31
+ if (raw.trimStart().startsWith('---')) {
32
+ const parsed = parseMatter(raw);
33
+ data = parsed.data;
34
+ }
35
+ else {
36
+ // Parse as bare YAML — wrap in frontmatter delimiters for gray-matter
37
+ const parsed = parseMatter(`---\n${raw}\n---`);
38
+ data = parsed.data;
39
+ }
40
+ }
41
+ catch (e) {
42
+ const message = e instanceof Error ? e.message : 'Unknown parse error';
43
+ return singleErr('PARSE_ERROR', `Failed to parse registry YAML: ${message}`);
44
+ }
45
+ const errors = [];
46
+ const types = new Map();
47
+ const seenPrefixes = new Map();
48
+ // Parse types
49
+ const typesRaw = data['types'];
50
+ if (typesRaw === undefined || typesRaw === null || typeof typesRaw !== 'object') {
51
+ return singleErr('REGISTRY_INVALID', 'Registry must contain a "types" mapping');
52
+ }
53
+ for (const [name, def] of Object.entries(typesRaw)) {
54
+ if (typeof def !== 'object' || def === null) {
55
+ errors.push(maadError('REGISTRY_INVALID', `Type "${name}" must be a mapping`));
56
+ continue;
57
+ }
58
+ const typeDef = def;
59
+ // Validate name
60
+ if (!VALID_NAME_REGEX.test(name)) {
61
+ errors.push(maadError('REGISTRY_INVALID', `Type name "${name}" must be lowercase alphanumeric with underscores, starting with a letter`));
62
+ }
63
+ // Validate path
64
+ const typePath = typeDef['path'];
65
+ if (typeof typePath !== 'string' || typePath.length === 0) {
66
+ errors.push(maadError('REGISTRY_INVALID', `Type "${name}" must have a "path" string`));
67
+ continue;
68
+ }
69
+ const resolvedPath = path.join(projectRoot, typePath);
70
+ if (!isContainedIn(resolvedPath, projectRoot)) {
71
+ errors.push(maadError('REGISTRY_INVALID', `Type "${name}" path escapes project root: ${typePath}`));
72
+ continue;
73
+ }
74
+ if (!existsSync(resolvedPath)) {
75
+ mkdirSync(resolvedPath, { recursive: true });
76
+ }
77
+ // Validate id_prefix
78
+ const idPrefix = typeDef['id_prefix'];
79
+ if (typeof idPrefix !== 'string' || !VALID_PREFIX_REGEX.test(idPrefix)) {
80
+ errors.push(maadError('REGISTRY_INVALID', `Type "${name}" id_prefix must be 2-5 lowercase alphanumeric characters, got: ${String(idPrefix)}`));
81
+ continue;
82
+ }
83
+ // Check for duplicate prefixes
84
+ const existingType = seenPrefixes.get(idPrefix);
85
+ if (existingType !== undefined) {
86
+ errors.push(maadError('DUPLICATE_PREFIX', `Type "${name}" has duplicate id_prefix "${idPrefix}" (also used by "${existingType}")`));
87
+ }
88
+ seenPrefixes.set(idPrefix, name);
89
+ // Validate schema ref
90
+ const schemaValue = typeDef['schema'];
91
+ if (typeof schemaValue !== 'string' || schemaValue.length === 0) {
92
+ errors.push(maadError('REGISTRY_INVALID', `Type "${name}" must have a "schema" string`));
93
+ continue;
94
+ }
95
+ const schemaFilePath = path.join(projectRoot, '_schema', `${schemaValue}.yaml`);
96
+ if (!existsSync(schemaFilePath)) {
97
+ errors.push(maadError('SCHEMA_NOT_FOUND', `Type "${name}" references schema "${schemaValue}" but file not found: ${schemaFilePath}`));
98
+ }
99
+ // Optional template
100
+ const template = typeof typeDef['template'] === 'string' ? typeDef['template'] : null;
101
+ if (template !== null) {
102
+ const templatePath = path.join(projectRoot, template);
103
+ if (!isContainedIn(templatePath, projectRoot)) {
104
+ errors.push(maadError('REGISTRY_INVALID', `Type "${name}" template escapes project root: ${template}`));
105
+ }
106
+ else if (!existsSync(templatePath)) {
107
+ errors.push(maadError('FILE_NOT_FOUND', `Type "${name}" references template "${template}" but file not found`));
108
+ }
109
+ }
110
+ types.set(name, {
111
+ name: docType(name),
112
+ path: typePath,
113
+ idPrefix: idPrefix,
114
+ schemaRef: schemaRef(schemaValue),
115
+ template,
116
+ });
117
+ }
118
+ // Parse extraction config
119
+ let extraction = { subtypes: {} };
120
+ const extractionRaw = data['extraction'];
121
+ if (extractionRaw !== undefined && typeof extractionRaw === 'object' && extractionRaw !== null) {
122
+ const extDef = extractionRaw;
123
+ const subtypesRaw = extDef['subtypes'];
124
+ if (subtypesRaw !== undefined && typeof subtypesRaw === 'object' && subtypesRaw !== null) {
125
+ const subtypes = {};
126
+ for (const [subtype, primitive] of Object.entries(subtypesRaw)) {
127
+ if (typeof primitive === 'string' && PRIMITIVES.includes(primitive)) {
128
+ subtypes[subtype] = primitive;
129
+ }
130
+ else {
131
+ errors.push(maadError('REGISTRY_INVALID', `Extraction subtype "${subtype}" maps to invalid primitive "${String(primitive)}". Valid: ${PRIMITIVES.join(', ')}`));
132
+ }
133
+ }
134
+ extraction = { subtypes };
135
+ }
136
+ }
137
+ if (errors.length > 0) {
138
+ return err(errors);
139
+ }
140
+ const subtypeMap = buildSubtypeMap(DEFAULT_SUBTYPE_MAP, extraction.subtypes);
141
+ return ok({
142
+ types: types,
143
+ extraction,
144
+ subtypeMap,
145
+ });
146
+ }
147
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export type { Registry, RegistryType, ExtractionConfig, DocType, SchemaRef, FilePath, Primitive, } from '../types.js';
2
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,SAAS,EACT,QAAQ,EACR,SAAS,GACV,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ // ============================================================================
2
+ // Registry Types — re-exported from core types for module-local use
3
+ // ============================================================================
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,oEAAoE;AACpE,+EAA+E"}