@nicia-ai/typegraph 0.41.0 → 0.42.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/dist/backend/drizzle/indexes.cjs +9 -9
  2. package/dist/backend/drizzle/indexes.d.cts +1 -2
  3. package/dist/backend/drizzle/indexes.d.ts +1 -2
  4. package/dist/backend/drizzle/indexes.js +5 -5
  5. package/dist/backend/index.cjs +50 -50
  6. package/dist/backend/index.d.cts +3 -4
  7. package/dist/backend/index.d.ts +3 -4
  8. package/dist/backend/index.js +11 -11
  9. package/dist/backend/postgres/index.cjs +26 -26
  10. package/dist/backend/postgres/index.d.cts +5 -6
  11. package/dist/backend/postgres/index.d.ts +5 -6
  12. package/dist/backend/postgres/index.js +13 -13
  13. package/dist/backend/postgres/pglite-store.cjs +34 -34
  14. package/dist/backend/postgres/pglite-store.d.cts +7 -8
  15. package/dist/backend/postgres/pglite-store.d.ts +7 -8
  16. package/dist/backend/postgres/pglite-store.js +30 -30
  17. package/dist/backend/postgres/pglite.cjs +15 -15
  18. package/dist/backend/postgres/pglite.d.cts +2 -3
  19. package/dist/backend/postgres/pglite.d.ts +2 -3
  20. package/dist/backend/postgres/pglite.js +14 -14
  21. package/dist/backend/sqlite/index.cjs +23 -23
  22. package/dist/backend/sqlite/index.d.cts +5 -6
  23. package/dist/backend/sqlite/index.d.ts +5 -6
  24. package/dist/backend/sqlite/index.js +11 -11
  25. package/dist/backend/sqlite/libsql.cjs +17 -17
  26. package/dist/backend/sqlite/libsql.d.cts +2 -3
  27. package/dist/backend/sqlite/libsql.d.ts +2 -3
  28. package/dist/backend/sqlite/libsql.js +13 -13
  29. package/dist/backend/sqlite/local-store.cjs +35 -35
  30. package/dist/backend/sqlite/local-store.d.cts +7 -8
  31. package/dist/backend/sqlite/local-store.d.ts +7 -8
  32. package/dist/backend/sqlite/local-store.js +31 -31
  33. package/dist/backend/sqlite/local.cjs +16 -16
  34. package/dist/backend/sqlite/local.d.cts +2 -3
  35. package/dist/backend/sqlite/local.d.ts +2 -3
  36. package/dist/backend/sqlite/local.js +14 -14
  37. package/dist/{chunk-LOKG3KQV.cjs → chunk-277UZV7X.cjs} +1113 -1089
  38. package/dist/chunk-277UZV7X.cjs.map +1 -0
  39. package/dist/{chunk-2I3DNNBU.js → chunk-2G6ZEGYO.js} +4 -4
  40. package/dist/{chunk-2I3DNNBU.js.map → chunk-2G6ZEGYO.js.map} +1 -1
  41. package/dist/{chunk-76HE7DJP.js → chunk-2HKIID5K.js} +5 -5
  42. package/dist/{chunk-76HE7DJP.js.map → chunk-2HKIID5K.js.map} +1 -1
  43. package/dist/{chunk-QOHTVDHU.js → chunk-2OOY4OYT.js} +4 -4
  44. package/dist/{chunk-QOHTVDHU.js.map → chunk-2OOY4OYT.js.map} +1 -1
  45. package/dist/{chunk-UCHW2MGP.cjs → chunk-2SO5I5AI.cjs} +196 -196
  46. package/dist/{chunk-UCHW2MGP.cjs.map → chunk-2SO5I5AI.cjs.map} +1 -1
  47. package/dist/{chunk-LFFVD5ZR.cjs → chunk-33PAKPED.cjs} +41 -41
  48. package/dist/{chunk-LFFVD5ZR.cjs.map → chunk-33PAKPED.cjs.map} +1 -1
  49. package/dist/{chunk-QCKD3RCI.cjs → chunk-3RPQDGUE.cjs} +5 -5
  50. package/dist/{chunk-QCKD3RCI.cjs.map → chunk-3RPQDGUE.cjs.map} +1 -1
  51. package/dist/{chunk-PH4IJ3V5.js → chunk-3V6D5DEC.js} +3 -3
  52. package/dist/{chunk-PH4IJ3V5.js.map → chunk-3V6D5DEC.js.map} +1 -1
  53. package/dist/{chunk-Y5UC3IXF.js → chunk-42XYPKZU.js} +3 -3
  54. package/dist/{chunk-Y5UC3IXF.js.map → chunk-42XYPKZU.js.map} +1 -1
  55. package/dist/{chunk-XZA3Y4YH.js → chunk-4WYFRACU.js} +3 -3
  56. package/dist/{chunk-XZA3Y4YH.js.map → chunk-4WYFRACU.js.map} +1 -1
  57. package/dist/{chunk-AQVDAKXH.js → chunk-4XRP2N6B.js} +3 -3
  58. package/dist/{chunk-AQVDAKXH.js.map → chunk-4XRP2N6B.js.map} +1 -1
  59. package/dist/{chunk-PWXGB77L.cjs → chunk-5AERZSHC.cjs} +4 -4
  60. package/dist/{chunk-PWXGB77L.cjs.map → chunk-5AERZSHC.cjs.map} +1 -1
  61. package/dist/{chunk-K6CD6W5J.js → chunk-5C75HQYQ.js} +5 -5
  62. package/dist/{chunk-K6CD6W5J.js.map → chunk-5C75HQYQ.js.map} +1 -1
  63. package/dist/{chunk-2J5NMMVR.cjs → chunk-5GV4JQNA.cjs} +43 -43
  64. package/dist/{chunk-2J5NMMVR.cjs.map → chunk-5GV4JQNA.cjs.map} +1 -1
  65. package/dist/{chunk-KHNKYSGP.cjs → chunk-5P6IPIT6.cjs} +41 -41
  66. package/dist/{chunk-KHNKYSGP.cjs.map → chunk-5P6IPIT6.cjs.map} +1 -1
  67. package/dist/{chunk-M2RPZS7J.cjs → chunk-5Q3P6OIC.cjs} +12 -12
  68. package/dist/{chunk-M2RPZS7J.cjs.map → chunk-5Q3P6OIC.cjs.map} +1 -1
  69. package/dist/{chunk-QXKVUJLI.cjs → chunk-5ZPRE4CV.cjs} +206 -166
  70. package/dist/chunk-5ZPRE4CV.cjs.map +1 -0
  71. package/dist/{chunk-53BSOG3O.js → chunk-6NB73BXV.js} +11 -11
  72. package/dist/{chunk-53BSOG3O.js.map → chunk-6NB73BXV.js.map} +1 -1
  73. package/dist/{chunk-SE422RES.cjs → chunk-6TJ6PKPS.cjs} +27 -27
  74. package/dist/{chunk-SE422RES.cjs.map → chunk-6TJ6PKPS.cjs.map} +1 -1
  75. package/dist/{chunk-7WLEQIHA.cjs → chunk-7Y6BV3TK.cjs} +100 -100
  76. package/dist/{chunk-7WLEQIHA.cjs.map → chunk-7Y6BV3TK.cjs.map} +1 -1
  77. package/dist/{chunk-HP6LWBLB.cjs → chunk-AO2WPYFZ.cjs} +4 -4
  78. package/dist/{chunk-HP6LWBLB.cjs.map → chunk-AO2WPYFZ.cjs.map} +1 -1
  79. package/dist/{chunk-7UTUKH4E.cjs → chunk-AQR6BHB3.cjs} +10 -10
  80. package/dist/{chunk-7UTUKH4E.cjs.map → chunk-AQR6BHB3.cjs.map} +1 -1
  81. package/dist/{chunk-X4PVHAZ6.cjs → chunk-ARN3ZODS.cjs} +6 -6
  82. package/dist/{chunk-X4PVHAZ6.cjs.map → chunk-ARN3ZODS.cjs.map} +1 -1
  83. package/dist/{chunk-YYLMXERH.js → chunk-CDYRPI5U.js} +4 -4
  84. package/dist/{chunk-YYLMXERH.js.map → chunk-CDYRPI5U.js.map} +1 -1
  85. package/dist/{chunk-3LKL3S6X.js → chunk-CI5NPLXX.js} +3 -3
  86. package/dist/{chunk-3LKL3S6X.js.map → chunk-CI5NPLXX.js.map} +1 -1
  87. package/dist/{chunk-UUIBACKJ.js → chunk-CUPJL6TS.js} +3 -3
  88. package/dist/{chunk-UUIBACKJ.js.map → chunk-CUPJL6TS.js.map} +1 -1
  89. package/dist/{chunk-JZYMOHHM.cjs → chunk-CVK4T34X.cjs} +22 -22
  90. package/dist/{chunk-JZYMOHHM.cjs.map → chunk-CVK4T34X.cjs.map} +1 -1
  91. package/dist/{chunk-L3DDZUZP.js → chunk-CVNGKTHO.js} +4 -4
  92. package/dist/{chunk-L3DDZUZP.js.map → chunk-CVNGKTHO.js.map} +1 -1
  93. package/dist/{chunk-RW24SAHI.cjs → chunk-DMZEVJGL.cjs} +13 -13
  94. package/dist/{chunk-RW24SAHI.cjs.map → chunk-DMZEVJGL.cjs.map} +1 -1
  95. package/dist/{chunk-MQBF3XGY.js → chunk-DP7KC6CL.js} +47 -23
  96. package/dist/chunk-DP7KC6CL.js.map +1 -0
  97. package/dist/{chunk-QYDUCWD2.cjs → chunk-ECU53PMN.cjs} +4 -4
  98. package/dist/{chunk-QYDUCWD2.cjs.map → chunk-ECU53PMN.cjs.map} +1 -1
  99. package/dist/{chunk-SCTZRFW5.js → chunk-EQOQOT55.js} +5 -5
  100. package/dist/{chunk-SCTZRFW5.js.map → chunk-EQOQOT55.js.map} +1 -1
  101. package/dist/{chunk-JHK6NPFV.js → chunk-EVFL2ZY5.js} +9 -9
  102. package/dist/{chunk-JHK6NPFV.js.map → chunk-EVFL2ZY5.js.map} +1 -1
  103. package/dist/{chunk-SAMJLDGG.cjs → chunk-F2KVJ6FF.cjs} +112 -112
  104. package/dist/{chunk-SAMJLDGG.cjs.map → chunk-F2KVJ6FF.cjs.map} +1 -1
  105. package/dist/{chunk-NMQ6C6TS.cjs → chunk-F7TDKSVB.cjs} +4 -4
  106. package/dist/{chunk-NMQ6C6TS.cjs.map → chunk-F7TDKSVB.cjs.map} +1 -1
  107. package/dist/{chunk-HQRZEYYB.cjs → chunk-FFQGI67R.cjs} +44 -44
  108. package/dist/{chunk-HQRZEYYB.cjs.map → chunk-FFQGI67R.cjs.map} +1 -1
  109. package/dist/{chunk-YIRLBUNN.js → chunk-FMPZPOUD.js} +3 -3
  110. package/dist/{chunk-YIRLBUNN.js.map → chunk-FMPZPOUD.js.map} +1 -1
  111. package/dist/{chunk-LL5D5T5W.cjs → chunk-FSCJOTHF.cjs} +10 -10
  112. package/dist/{chunk-LL5D5T5W.cjs.map → chunk-FSCJOTHF.cjs.map} +1 -1
  113. package/dist/{chunk-2X73QTIC.cjs → chunk-FY4VY5EV.cjs} +20 -20
  114. package/dist/{chunk-2X73QTIC.cjs.map → chunk-FY4VY5EV.cjs.map} +1 -1
  115. package/dist/{chunk-3SHAUJRB.js → chunk-GT7NEXSU.js} +3 -3
  116. package/dist/{chunk-3SHAUJRB.js.map → chunk-GT7NEXSU.js.map} +1 -1
  117. package/dist/{chunk-W66YCXWT.js → chunk-HHBKGPEI.js} +11 -10
  118. package/dist/chunk-HHBKGPEI.js.map +1 -0
  119. package/dist/{chunk-CKFBZ4LV.cjs → chunk-I73ATSAH.cjs} +4 -4
  120. package/dist/{chunk-CKFBZ4LV.cjs.map → chunk-I73ATSAH.cjs.map} +1 -1
  121. package/dist/{chunk-ELA3V6UN.js → chunk-JOYPNY33.js} +9 -9
  122. package/dist/{chunk-ELA3V6UN.js.map → chunk-JOYPNY33.js.map} +1 -1
  123. package/dist/{chunk-YIX3BEBR.cjs → chunk-K2HHCWZO.cjs} +108 -108
  124. package/dist/{chunk-YIX3BEBR.cjs.map → chunk-K2HHCWZO.cjs.map} +1 -1
  125. package/dist/{chunk-SAFZ6JTI.cjs → chunk-KTBTSHU6.cjs} +19 -2
  126. package/dist/chunk-KTBTSHU6.cjs.map +1 -0
  127. package/dist/{chunk-KOI7UEI5.js → chunk-LDCWO5B6.js} +3 -3
  128. package/dist/{chunk-KOI7UEI5.js.map → chunk-LDCWO5B6.js.map} +1 -1
  129. package/dist/{chunk-I5CRUPKO.js → chunk-LQLVJWUH.js} +7 -7
  130. package/dist/{chunk-I5CRUPKO.js.map → chunk-LQLVJWUH.js.map} +1 -1
  131. package/dist/{chunk-6N7QBIWN.js → chunk-M4GYQF2H.js} +3 -3
  132. package/dist/{chunk-6N7QBIWN.js.map → chunk-M4GYQF2H.js.map} +1 -1
  133. package/dist/{chunk-ZE7E46IZ.js → chunk-NXIZL7ZZ.js} +6 -6
  134. package/dist/{chunk-ZE7E46IZ.js.map → chunk-NXIZL7ZZ.js.map} +1 -1
  135. package/dist/{chunk-XRU7V7FF.cjs → chunk-O2GZM7UK.cjs} +7 -7
  136. package/dist/{chunk-XRU7V7FF.cjs.map → chunk-O2GZM7UK.cjs.map} +1 -1
  137. package/dist/{chunk-ZE6NVENI.js → chunk-O3USVVWS.js} +3 -3
  138. package/dist/{chunk-ZE6NVENI.js.map → chunk-O3USVVWS.js.map} +1 -1
  139. package/dist/{chunk-UDS5DZNY.cjs → chunk-O7XVCLXW.cjs} +68 -67
  140. package/dist/chunk-O7XVCLXW.cjs.map +1 -0
  141. package/dist/{chunk-KLR77R5A.cjs → chunk-OM6RIOA5.cjs} +13 -13
  142. package/dist/{chunk-KLR77R5A.cjs.map → chunk-OM6RIOA5.cjs.map} +1 -1
  143. package/dist/{chunk-LLHMAHG4.cjs → chunk-OMQ2NBOR.cjs} +27 -27
  144. package/dist/{chunk-LLHMAHG4.cjs.map → chunk-OMQ2NBOR.cjs.map} +1 -1
  145. package/dist/{chunk-DPNA466P.js → chunk-OYJSYDIH.js} +19 -3
  146. package/dist/chunk-OYJSYDIH.js.map +1 -0
  147. package/dist/{chunk-V3S74J44.js → chunk-RAWG2FEU.js} +134 -22
  148. package/dist/chunk-RAWG2FEU.js.map +1 -0
  149. package/dist/{chunk-TAUGGLNQ.js → chunk-RXOAXO3R.js} +3 -3
  150. package/dist/{chunk-TAUGGLNQ.js.map → chunk-RXOAXO3R.js.map} +1 -1
  151. package/dist/{chunk-LLE25NRD.cjs → chunk-TRC646QQ.cjs} +7 -7
  152. package/dist/{chunk-LLE25NRD.cjs.map → chunk-TRC646QQ.cjs.map} +1 -1
  153. package/dist/chunk-U3YRCZ5L.cjs +12 -0
  154. package/dist/{chunk-IMQKXL4E.cjs.map → chunk-U3YRCZ5L.cjs.map} +1 -1
  155. package/dist/{chunk-ZVME6OSV.js → chunk-UJRWOV5B.js} +5 -5
  156. package/dist/{chunk-ZVME6OSV.js.map → chunk-UJRWOV5B.js.map} +1 -1
  157. package/dist/{chunk-HAQVISUF.cjs → chunk-UTTW2Q3M.cjs} +133 -133
  158. package/dist/{chunk-HAQVISUF.cjs.map → chunk-UTTW2Q3M.cjs.map} +1 -1
  159. package/dist/{chunk-L5ET7FYQ.js → chunk-UZLEQFTV.js} +3 -3
  160. package/dist/{chunk-L5ET7FYQ.js.map → chunk-UZLEQFTV.js.map} +1 -1
  161. package/dist/{chunk-JP5EICR6.cjs → chunk-V2GZBPY2.cjs} +179 -65
  162. package/dist/chunk-V2GZBPY2.cjs.map +1 -0
  163. package/dist/{chunk-BUZWMDNL.js → chunk-VC26BUNP.js} +5 -5
  164. package/dist/{chunk-BUZWMDNL.js.map → chunk-VC26BUNP.js.map} +1 -1
  165. package/dist/chunk-VGMNGWBR.cjs +12 -0
  166. package/dist/{chunk-5YBDB7UG.cjs.map → chunk-VGMNGWBR.cjs.map} +1 -1
  167. package/dist/{chunk-XMEYZYGE.js → chunk-WYQILW5V.js} +8 -8
  168. package/dist/{chunk-XMEYZYGE.js.map → chunk-WYQILW5V.js.map} +1 -1
  169. package/dist/{chunk-YX3H63VV.cjs → chunk-X2XOQZT3.cjs} +9 -9
  170. package/dist/{chunk-YX3H63VV.cjs.map → chunk-X2XOQZT3.cjs.map} +1 -1
  171. package/dist/{chunk-N2V3HJFV.cjs → chunk-XDMPDUKL.cjs} +9 -9
  172. package/dist/{chunk-N2V3HJFV.cjs.map → chunk-XDMPDUKL.cjs.map} +1 -1
  173. package/dist/{chunk-EFZ4S22A.js → chunk-YPVQYM3L.js} +107 -67
  174. package/dist/chunk-YPVQYM3L.js.map +1 -0
  175. package/dist/{chunk-5J4VNCUD.js → chunk-Z3WIL6S3.js} +5 -5
  176. package/dist/{chunk-5J4VNCUD.js.map → chunk-Z3WIL6S3.js.map} +1 -1
  177. package/dist/{chunk-MNURF4RF.cjs → chunk-ZBV4LQD2.cjs} +4 -4
  178. package/dist/{chunk-MNURF4RF.cjs.map → chunk-ZBV4LQD2.cjs.map} +1 -1
  179. package/dist/{chunk-YGX4PMG6.js → chunk-ZGOUVMVS.js} +5 -5
  180. package/dist/{chunk-YGX4PMG6.js.map → chunk-ZGOUVMVS.js.map} +1 -1
  181. package/dist/{chunk-QZYGZVUI.js → chunk-ZIRC2U6G.js} +11 -11
  182. package/dist/{chunk-QZYGZVUI.js.map → chunk-ZIRC2U6G.js.map} +1 -1
  183. package/dist/{chunk-6QP4QXBR.js → chunk-ZOHCFYXE.js} +3 -3
  184. package/dist/{chunk-6QP4QXBR.js.map → chunk-ZOHCFYXE.js.map} +1 -1
  185. package/dist/{chunk-VWEFXG73.js → chunk-ZP2KPDNN.js} +3 -3
  186. package/dist/{chunk-VWEFXG73.js.map → chunk-ZP2KPDNN.js.map} +1 -1
  187. package/dist/{chunk-NT6ILURI.cjs → chunk-ZPCKPLMX.cjs} +8 -8
  188. package/dist/{chunk-NT6ILURI.cjs.map → chunk-ZPCKPLMX.cjs.map} +1 -1
  189. package/dist/core/index.cjs +28 -28
  190. package/dist/core/index.d.cts +5 -6
  191. package/dist/core/index.d.ts +5 -6
  192. package/dist/core/index.js +8 -8
  193. package/dist/{ddl-BCXFRLWg.d.cts → ddl-3unqC-kg.d.cts} +3 -3
  194. package/dist/{ddl-ByLmGgn9.d.ts → ddl-Bc4Dl8fu.d.ts} +3 -3
  195. package/dist/{define-graph-BSviZubs.d.ts → define-graph-Byslw2OO.d.cts} +1 -2
  196. package/dist/{define-graph-XyJheaFm.d.cts → define-graph-DBFnc7u_.d.ts} +1 -2
  197. package/dist/graph-extension/index.cjs +20 -20
  198. package/dist/graph-extension/index.d.cts +4 -4
  199. package/dist/graph-extension/index.d.ts +4 -4
  200. package/dist/graph-extension/index.js +5 -5
  201. package/dist/graph-merge/index.cjs +105 -105
  202. package/dist/graph-merge/index.d.cts +8 -9
  203. package/dist/graph-merge/index.d.ts +8 -9
  204. package/dist/graph-merge/index.js +25 -25
  205. package/dist/{index-BD_3TCgh.d.ts → index-DHXw7QAl.d.cts} +19 -4
  206. package/dist/{index-BihFPsPu.d.cts → index-DQzVJBHa.d.ts} +19 -4
  207. package/dist/index.cjs +206 -202
  208. package/dist/index.d.cts +13 -15
  209. package/dist/index.d.ts +13 -15
  210. package/dist/index.js +35 -35
  211. package/dist/indexes/index.cjs +13 -13
  212. package/dist/indexes/index.d.cts +4 -5
  213. package/dist/indexes/index.d.ts +4 -5
  214. package/dist/indexes/index.js +6 -6
  215. package/dist/interchange/index.cjs +40 -40
  216. package/dist/interchange/index.d.cts +9 -10
  217. package/dist/interchange/index.d.ts +9 -10
  218. package/dist/interchange/index.js +14 -14
  219. package/dist/{manager-C7iC5bk_.d.ts → manager-Dl0-er1G.d.ts} +21 -156
  220. package/dist/{manager-Dm6MCYO7.d.cts → manager-U9_zopqr.d.cts} +21 -156
  221. package/dist/materialize-indexes-BM3u0aXE.d.ts +258 -0
  222. package/dist/materialize-indexes-DzMCetZe.d.cts +258 -0
  223. package/dist/{postgres-DZxwzCQ8.d.cts → postgres-C5-WMKFA.d.ts} +1 -1
  224. package/dist/{postgres-Cb6ceh4-.d.ts → postgres-DpJqtbSX.d.cts} +1 -1
  225. package/dist/profiler/index.d.cts +9 -10
  226. package/dist/profiler/index.d.ts +9 -10
  227. package/dist/provenance/index.cjs +39 -39
  228. package/dist/provenance/index.d.cts +7 -8
  229. package/dist/provenance/index.d.ts +7 -8
  230. package/dist/provenance/index.js +9 -9
  231. package/dist/schema/index.cjs +48 -39
  232. package/dist/schema/index.d.cts +7 -8
  233. package/dist/schema/index.d.ts +7 -8
  234. package/dist/schema/index.js +15 -14
  235. package/dist/{searchable-aUaKh3_r.d.cts → searchable-B4mUXZT6.d.cts} +2 -2
  236. package/dist/{searchable-Cet4Oztt.d.ts → searchable-C7jmPNLT.d.ts} +2 -2
  237. package/dist/{sqlite-Cb3Ilj9_.d.ts → sqlite-Ch5tSYQY.d.ts} +1 -1
  238. package/dist/{sqlite-Dxklpizv.d.cts → sqlite-Da7jiYu9.d.cts} +1 -1
  239. package/dist/{store-view-PCT7vTKH.d.cts → store-view-6C2vTWqf.d.ts} +8 -7
  240. package/dist/{store-view-BDjGFjpN.d.ts → store-view-CNcOG8bQ.d.cts} +8 -7
  241. package/dist/{temporal-CyFsSPe8.d.ts → temporal-BtrTYTiB.d.ts} +1 -1
  242. package/dist/{temporal-Dn_JADWY.d.cts → temporal-CMpigMCW.d.cts} +1 -1
  243. package/dist/{types-CFZiEEPh.d.ts → types-D2rU5Taq.d.ts} +1 -2
  244. package/dist/{types-D-vOo_pM.d.ts → types-Dh-EgT-w.d.cts} +569 -2
  245. package/dist/{types-ho4DJJb_.d.cts → types-Dh-EgT-w.d.ts} +569 -2
  246. package/dist/{types-CsaG00wS.d.cts → types-G4sVM-76.d.cts} +1 -2
  247. package/dist/{where-DLYaXa4L.d.ts → where-B8Y21kig.d.ts} +1 -2
  248. package/dist/{where-udes1WRA.d.cts → where-DbZ9XDOI.d.cts} +1 -2
  249. package/package.json +1 -1
  250. package/dist/chunk-5YBDB7UG.cjs +0 -12
  251. package/dist/chunk-DPNA466P.js.map +0 -1
  252. package/dist/chunk-EFZ4S22A.js.map +0 -1
  253. package/dist/chunk-IMQKXL4E.cjs +0 -12
  254. package/dist/chunk-JP5EICR6.cjs.map +0 -1
  255. package/dist/chunk-LOKG3KQV.cjs.map +0 -1
  256. package/dist/chunk-MQBF3XGY.js.map +0 -1
  257. package/dist/chunk-QXKVUJLI.cjs.map +0 -1
  258. package/dist/chunk-SAFZ6JTI.cjs.map +0 -1
  259. package/dist/chunk-UDS5DZNY.cjs.map +0 -1
  260. package/dist/chunk-V3S74J44.js.map +0 -1
  261. package/dist/chunk-W66YCXWT.js.map +0 -1
  262. package/dist/extension-types-BLEVH4SG.d.cts +0 -571
  263. package/dist/extension-types-BLEVH4SG.d.ts +0 -571
  264. package/dist/materialize-indexes-D4iei4Kp.d.ts +0 -90
  265. package/dist/materialize-indexes-ExQ6OrAh.d.cts +0 -90
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ontology/closures.ts","../src/graph-extension/errors.ts","../src/utils/result.ts","../src/graph-extension/extension-types.ts","../src/graph-extension/validation.ts"],"names":["index","TypeGraphError","ALL_META_EDGE_NAMES","encodeJsonPointerSegment","isPlainObject","compactUndefined","RESERVED_NODE_KEYS","RESERVED_EDGE_KEYS","assertJsonValue","ConfigurationError","freezeDeep"],"mappings":"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","file":"chunk-N2V3HJFV.cjs","sourcesContent":["/**\n * Transitive closure computation for ontology relationships.\n *\n * Uses Warshall's algorithm for efficient closure computation.\n */\n\n/**\n * Computes the transitive closure of a set of directed relations.\n *\n * Given relations like [A→B, B→C], computes all transitive paths [A→B, A→C, B→C].\n *\n * @param relations - Array of [from, to] pairs representing direct relationships\n * @returns Map from each 'from' to the set of all reachable 'to' values\n */\nexport function computeTransitiveClosure(\n relations: readonly (readonly [string, string])[],\n): ReadonlyMap<string, ReadonlySet<string>> {\n // Build mutable map for computation\n const closure = new Map<string, Set<string>>();\n\n // Collect all nodes\n const allNodes = new Set<string>();\n for (const [from, to] of relations) {\n allNodes.add(from);\n allNodes.add(to);\n }\n\n // Initialize empty sets for all nodes\n for (const node of allNodes) {\n closure.set(node, new Set());\n }\n\n // Add direct relationships\n for (const [from, to] of relations) {\n closure.get(from)?.add(to);\n }\n\n // Warshall's algorithm for transitive closure\n // For each intermediate node k, check if i→k and k→j implies i→j\n for (const k of allNodes) {\n for (const index of allNodes) {\n const indexReaches = closure.get(index);\n if (!indexReaches?.has(k)) continue;\n\n const kReaches = closure.get(k);\n if (!kReaches) continue;\n\n for (const index of kReaches) {\n indexReaches.add(index);\n }\n }\n }\n\n return closure;\n}\n\n/**\n * Computes the inverse of a transitive closure map.\n *\n * Given A→{B, C}, returns B→{A}, C→{A}.\n */\nexport function invertClosure(\n closure: ReadonlyMap<string, ReadonlySet<string>>,\n): ReadonlyMap<string, ReadonlySet<string>> {\n const result = new Map<string, Set<string>>();\n\n for (const [from, tos] of closure) {\n for (const to of tos) {\n const existing = result.get(to) ?? new Set();\n existing.add(from);\n result.set(to, existing);\n }\n }\n\n return result;\n}\n\n/**\n * Checks if there's a path from source to target in the closure.\n */\nexport function isReachable(\n closure: ReadonlyMap<string, ReadonlySet<string>>,\n source: string,\n target: string,\n): boolean {\n return closure.get(source)?.has(target) ?? false;\n}\n","/**\n * Errors raised across the graph-extension surface.\n *\n * Two flavours:\n *\n * - **Validation issues** (`GraphExtensionValidationError` +\n * `GraphExtensionIssue` / `GraphExtensionIssueCode`) — produced by\n * `validateGraphExtension`. The issue list batches every failure\n * with a JSON-pointer `path` so a UI can highlight every offending\n * field at once.\n * - **Operation errors** (every other class in this file, all extending\n * `GraphExtensionError`) — thrown one at a time from `evolve`,\n * `removeKinds`, `materializeIndexes`, search, etc. Each carries a\n * stable string `code` for logging / serialization PLUS a typed\n * shape so consumers can `instanceof` for control flow.\n */\nimport type { KindEntity } from \"../core/types\";\nimport { type ErrorCategory, TypeGraphError } from \"../errors\";\n\n// ============================================================\n// Validation issues (multi-issue batch)\n// ============================================================\n\n/**\n * One specific issue raised during graph-extension validation.\n */\nexport type GraphExtensionIssue = Readonly<{\n /**\n * JSON-pointer path to the offending value, rooted at the document\n * (e.g. `/nodes/Paper/properties/title/pattern`). The empty string\n * `\"\"` means \"the document itself\".\n */\n path: string;\n /** Human-readable explanation of the failure. */\n message: string;\n /**\n * Stable machine-readable code so callers (and tests) can branch on\n * specific failure modes without parsing messages. New codes are\n * additive.\n */\n code: GraphExtensionIssueCode;\n}>;\n\n/**\n * Stable machine codes for every validation failure produced by the\n * document validator. New codes are additive — existing codes never\n * change meaning.\n *\n * Note: codes here describe per-field validation problems. Operation-\n * level errors (kind not found, version mismatch on persisted doc,\n * compile-time-kind removal, etc.) surface as typed Error subclasses\n * exported below — not as issue codes.\n */\n/**\n * Every issue code emitted by `validateGraphExtension`. Const-array form\n * so tests, codegen, and runtime introspection can iterate the full set\n * without restating it.\n */\nexport const GRAPH_EXTENSION_ISSUE_CODES = [\n \"UNSUPPORTED_PROPERTY_TYPE\",\n \"INVALID_PROPERTY_REFINEMENT\",\n \"NESTED_ARRAY\",\n \"NESTED_OBJECT_TOO_DEEP\",\n \"INVALID_MODIFIER_TARGET\",\n \"INVALID_ENUM_VALUES\",\n \"INVALID_NUMBER_BOUNDS\",\n \"INVALID_LENGTH_BOUNDS\",\n \"INVALID_PATTERN\",\n \"INVALID_EMBEDDING_DIMENSIONS\",\n \"INVALID_SEARCHABLE_LANGUAGE\",\n \"RESERVED_PROPERTY_NAME\",\n \"INVALID_KIND_NAME\",\n \"DUPLICATE_KIND_NAME\",\n \"EMPTY_PROPERTIES\",\n \"EMPTY_FROM_OR_TO\",\n \"DUPLICATE_UNIQUE_CONSTRAINT\",\n \"EMPTY_UNIQUE_FIELDS\",\n \"DUPLICATE_UNIQUE_FIELD\",\n \"UNKNOWN_UNIQUE_FIELD\",\n \"INVALID_UNIQUE_WHERE_OP\",\n \"UNKNOWN_UNIQUE_WHERE_FIELD\",\n \"INVALID_ANNOTATION\",\n \"UNKNOWN_META_EDGE\",\n \"ONTOLOGY_CYCLE\",\n \"ONTOLOGY_SELF_LOOP\",\n \"ONTOLOGY_DISJOINT_CONFLICT\",\n \"DUPLICATE_ONTOLOGY_RELATION\",\n \"INVALID_DOCUMENT_SHAPE\",\n \"UNKNOWN_DOCUMENT_KEY\",\n \"UNSUPPORTED_STRING_FORMAT\",\n \"INVALID_INDEX_DECLARATION\",\n \"DUPLICATE_INDEX_NAME\",\n \"EMPTY_INDEX_FIELDS\",\n \"UNKNOWN_PROPERTY_KEY\",\n] as const;\n\nexport type GraphExtensionIssueCode =\n (typeof GRAPH_EXTENSION_ISSUE_CODES)[number];\n\n// ============================================================\n// Operation errors (typed, single-error throws)\n// ============================================================\n\n/**\n * Base class for every graph-extension error. Consumers can catch\n * the family with one `instanceof GraphExtensionError` check and\n * branch on the concrete subclass beneath. Carries the same\n * `code` / `category` / `details` slots as `TypeGraphError` so existing\n * `isTypeGraphError` / `isUserRecoverable` helpers continue to apply.\n */\nexport abstract class GraphExtensionError extends TypeGraphError {\n // The concrete `code` is set as a literal-typed property on each\n // subclass so consumers can branch on it with full type narrowing.\n declare readonly code: string;\n\n protected constructor(spec: {\n message: string;\n code: string;\n details: Readonly<Record<string, unknown>>;\n suggestion: string;\n category?: ErrorCategory;\n cause?: unknown;\n }) {\n super(spec.message, spec.code, {\n details: spec.details,\n category: spec.category ?? \"user\",\n suggestion: spec.suggestion,\n ...(spec.cause === undefined ? {} : { cause: spec.cause }),\n });\n // `new.target.name` resolves to the concrete subclass at construction\n // time, eliminating per-subclass `this.name = \"ClassName\"` repetition.\n this.name = new.target.name;\n }\n}\n\n/**\n * Thrown when `validateGraphExtension` (or `defineGraphExtension`)\n * rejects an input document for one or more shape/content reasons.\n *\n * The `issues` array carries every failure with a JSON-pointer\n * `path`, so callers presenting the document to a human reviewer can\n * highlight every offending field at once.\n */\nexport class GraphExtensionValidationError extends GraphExtensionError {\n override readonly code = \"GRAPH_EXTENSION_INVALID\" as const;\n readonly issues: readonly GraphExtensionIssue[];\n declare readonly details: Readonly<{\n issues: readonly GraphExtensionIssue[];\n }>;\n\n constructor(issues: readonly GraphExtensionIssue[], cause?: unknown) {\n const frozenIssues = Object.freeze([...issues]);\n super({\n message: `Graph extension document is invalid (${issues.length} issue${\n issues.length === 1 ? \"\" : \"s\"\n }): ${summarizeIssues(issues)}`,\n code: \"GRAPH_EXTENSION_INVALID\",\n details: { issues: frozenIssues },\n suggestion: `Inspect error.issues for per-field paths and codes; each issue's \"path\" is a JSON pointer into the source document.`,\n cause,\n });\n this.issues = frozenIssues;\n }\n}\n\n/**\n * Generic \"first N items + overflow tail\" summary for inclusion in an\n * Error message. Shared by `summarizeIssues` and `summarizeChanges`\n * because the overflow shape is identical; only the per-item\n * formatting differs.\n */\nfunction summarizeWithOverflow<T>(\n items: readonly T[],\n formatItem: (item: T) => string,\n emptyMessage: string,\n): string {\n if (items.length === 0) return emptyMessage;\n const head = items\n .slice(0, 3)\n .map((item) => formatItem(item))\n .join(\"; \");\n const overflow = items.length > 3 ? ` (+${items.length - 3} more)` : \"\";\n return `${head}${overflow}`;\n}\n\nfunction summarizeIssues(issues: readonly GraphExtensionIssue[]): string {\n return summarizeWithOverflow(\n issues,\n (issue) => `${issue.path || \"(root)\"} — ${issue.message}`,\n \"no specific issues recorded\",\n );\n}\n\n/**\n * Thrown when an extension declares a kind whose name collides with an\n * existing compile-time kind. The graph-extension contract is\n * additive: graph-extension-declared kinds cannot shadow compile-time kinds.\n */\nexport class KindCollisionError extends GraphExtensionError {\n override readonly code = \"KIND_COLLISION\" as const;\n readonly kindName: string;\n readonly entity: KindEntity;\n\n constructor(kindName: string, entity: KindEntity, graphId: string) {\n super({\n message: `Graph extension declares ${entity} kind \"${kindName}\" which already exists as a compile-time kind on graph \"${graphId}\". Graph-extension-declared kinds cannot collide with compile-time kinds.`,\n code: \"KIND_COLLISION\",\n details: { kindName, entity, graphId },\n suggestion:\n \"Pick a different graph-extension-declared kind name, or remove the compile-time declaration.\",\n });\n this.kindName = kindName;\n this.entity = entity;\n }\n}\n\n/**\n * One classified delta in a `IncompatibleChangeError`.\n *\n * `field` is `undefined` for kind-level changes (e.g. tightening edge\n * endpoints, adding a unique constraint to a populated kind). `detail`\n * is human-readable and intended for surfaces showing the change to a\n * reviewer (e.g. `\"minLength: 5 → 10\"`).\n */\n/**\n * Every incompatible-change classification produced by `evolve`'s\n * delta classifier. Const-array form so tests and reviewer UIs can\n * enumerate the set without restating it.\n */\nexport const INCOMPATIBLE_CHANGE_TYPES = [\n \"REMOVE_PROPERTY\",\n \"ADD_REQUIRED_PROPERTY\",\n \"TIGHTEN_OPTIONALITY\",\n \"TIGHTEN_CONSTRAINT\",\n \"ADD_PATTERN\",\n \"CHANGE_PATTERN\",\n \"ADD_FORMAT\",\n \"CHANGE_FORMAT\",\n \"TIGHTEN_INT\",\n \"TIGHTEN_ENUM\",\n \"TYPE_CHANGE\",\n \"ADD_UNIQUE_ON_POPULATED\",\n \"TIGHTEN_EDGE_ENDPOINTS\",\n] as const;\n\nexport type IncompatibleChangeType = (typeof INCOMPATIBLE_CHANGE_TYPES)[number];\n\nexport type IncompatibleChange = Readonly<{\n kind: string;\n field?: string;\n type: IncompatibleChangeType;\n detail?: string;\n}>;\n\n/**\n * Thrown when `evolve` rejects one or more deltas against an existing\n * extension kind. Carries a structured `changes` list so a reviewer\n * UI can show the incompatible deltas across every affected kind in\n * one shot.\n */\nexport class IncompatibleChangeError extends GraphExtensionError {\n override readonly code = \"INCOMPATIBLE_CHANGE\" as const;\n readonly changes: readonly IncompatibleChange[];\n\n constructor(changes: readonly IncompatibleChange[], graphId: string) {\n const frozenChanges = Object.freeze([...changes]);\n super({\n message: `Graph extension contains ${changes.length} incompatible change${\n changes.length === 1 ? \"\" : \"s\"\n } against existing graph-extension kinds on graph \"${graphId}\": ${summarizeChanges(changes)}`,\n code: \"INCOMPATIBLE_CHANGE\",\n details: { graphId, changes: frozenChanges },\n suggestion:\n \"Inspect error.changes for the per-field rejections. Compatible options: change the modification to an additive one (e.g. `optional: true`), or apply the change against an empty kind.\",\n });\n this.changes = frozenChanges;\n }\n}\n\nfunction summarizeChanges(changes: readonly IncompatibleChange[]): string {\n return summarizeWithOverflow(\n changes,\n (change) => {\n const field = change.field === undefined ? \"\" : `.${change.field}`;\n const detail = change.detail === undefined ? \"\" : ` (${change.detail})`;\n return `${change.kind}${field}: ${change.type}${detail}`;\n },\n \"(no specific changes recorded)\",\n );\n}\n\n/**\n * Thrown when an extension's edge or ontology endpoint references a\n * kind that exists in neither the extension nor the host graph.\n * Distinct from `KindNotFoundError` because the cause is a\n * stale persisted extension (a compile-time kind was removed from\n * source after the extension was committed) rather than a\n * call-site typo.\n */\nexport class GraphExtensionUnresolvedEndpointError extends GraphExtensionError {\n override readonly code = \"GRAPH_EXTENSION_UNRESOLVED_ENDPOINT\" as const;\n readonly edgeKind: string;\n readonly side: \"from\" | \"to\";\n readonly endpoint: string;\n\n constructor(\n edgeKind: string,\n side: \"from\" | \"to\",\n endpoint: string,\n graphId: string,\n ) {\n super({\n message: `Graph-extension edge \"${edgeKind}\" ${side}-endpoint \"${endpoint}\" does not resolve to any kind on graph \"${graphId}\". The compile-time kind may have been removed since the extension was committed.`,\n code: \"GRAPH_EXTENSION_UNRESOLVED_ENDPOINT\",\n details: { edgeKind, side, endpoint, graphId },\n suggestion:\n \"Restore the compile-time kind, or remove the graph-extension-declared kind via store.removeKinds before redeploying without it.\",\n });\n this.edgeKind = edgeKind;\n this.side = side;\n this.endpoint = endpoint;\n }\n}\n\n/**\n * Thrown by `removeKinds` when the removal list contains a compile-\n * time kind. Compile-time kinds are removed by recompiling and\n * redeploying — persisting \"removed-compile-time-kind\" state in\n * `schema_doc` is incoherent because the kind would resurrect on the\n * next deploy.\n */\nexport class RemoveCompileTimeKindError extends GraphExtensionError {\n override readonly code = \"REMOVE_COMPILE_TIME_KIND\" as const;\n readonly kindName: string;\n readonly entity: KindEntity;\n\n constructor(kindName: string, entity: KindEntity, graphId: string) {\n super({\n message: `Cannot remove compile-time ${entity} kind \"${kindName}\" via store.removeKinds. Compile-time kinds are removed by recompiling and redeploying without them on graph \"${graphId}\".`,\n code: \"REMOVE_COMPILE_TIME_KIND\",\n details: { kindName, entity, graphId },\n suggestion:\n \"Drop the kind from your defineGraph call and redeploy. Only graph-extension kinds (added via store.evolve) are removable through removeKinds.\",\n });\n this.kindName = kindName;\n this.entity = entity;\n }\n}\n\n/**\n * Thrown by `removeKinds` when a compile-time edge or ontology\n * relation references the graph-extension kind being removed. Removing the\n * kind would orphan compile-time references — incoherent at the next\n * deploy.\n */\nexport class KindHasReferentsError extends GraphExtensionError {\n override readonly code = \"KIND_HAS_REFERENTS\" as const;\n readonly kindName: string;\n readonly referents: readonly KindReferent[];\n\n constructor(\n kindName: string,\n referents: readonly KindReferent[],\n graphId: string,\n ) {\n const summary = referents\n .map((referent) => `${referent.type}:${referent.name}`)\n .join(\", \");\n const frozenReferents = Object.freeze([...referents]);\n super({\n message: `Cannot remove graph-extension kind \"${kindName}\" on graph \"${graphId}\" — it is referenced by compile-time declarations: ${summary}.`,\n code: \"KIND_HAS_REFERENTS\",\n details: { kindName, graphId, referents: frozenReferents },\n suggestion:\n \"Remove the compile-time references first (drop the edge or ontology relation from defineGraph), or pick a different kind to remove.\",\n });\n this.kindName = kindName;\n this.referents = frozenReferents;\n }\n}\n\nexport type KindReferent = Readonly<{\n type: \"compile-time-edge\" | \"compile-time-ontology\";\n name: string;\n}>;\n\n/**\n * Thrown when a persisted graph extension was authored against a\n * higher major version of the graph-extension format than the\n * current library supports. The library refuses to load it rather\n * than risk silently misreading newer fields.\n */\nexport class GraphExtensionVersionUnsupportedError extends GraphExtensionError {\n override readonly code = \"GRAPH_EXTENSION_VERSION_UNSUPPORTED\" as const;\n readonly persistedVersion: number;\n readonly currentVersion: number;\n\n constructor(persistedVersion: number, currentVersion: number) {\n super({\n message: `Persisted extension was authored against graph-extension format v${persistedVersion}, but this library only supports up to v${currentVersion}. Upgrade @nicia-ai/typegraph.`,\n code: \"GRAPH_EXTENSION_VERSION_UNSUPPORTED\",\n details: { persistedVersion, currentVersion },\n category: \"system\",\n suggestion: `Upgrade @nicia-ai/typegraph to a version that supports graph-extension format v${persistedVersion}, or downgrade the writer.`,\n });\n this.persistedVersion = persistedVersion;\n this.currentVersion = currentVersion;\n }\n}\n","/**\n * Result type for error handling without exceptions.\n * Use at service boundaries and for operations that can fail.\n */\nexport type Result<T, E = Error> =\n Readonly<{ success: true; data: T }> | Readonly<{ success: false; error: E }>;\n\n/**\n * Creates a successful result.\n */\nexport function ok<T = undefined>(data?: T): Result<T, never> {\n return { success: true, data: data as T };\n}\n\n/**\n * Creates a failed result.\n */\nexport function err<E>(error: E): Result<never, E> {\n return { success: false, error };\n}\n\n/**\n * Unwraps a result, throwing if it's an error.\n */\nexport function unwrap<T, E>(result: Result<T, E>): T {\n if (result.success) {\n return result.data;\n }\n throw result.error;\n}\n\n/**\n * Unwraps a result or returns a default value.\n */\nexport function unwrapOr<T, E>(result: Result<T, E>, defaultValue: T): T {\n if (result.success) {\n return result.data;\n }\n return defaultValue;\n}\n\n/**\n * Type guard to check if result is successful.\n *\n * Narrows to the `Readonly<{...}>` success arm so that an early-return on the\n * negative branch (`if (isErr(x)) return; x.data`) leaves the success arm\n * reachable — the union members are themselves `Readonly`, so a mutable\n * predicate target would subtract nothing and break narrowing for callers.\n */\nexport function isOk<T, E>(\n result: Result<T, E>,\n): result is Readonly<{ success: true; data: T }> {\n return result.success;\n}\n\n/**\n * Type guard to check if result is an error. See {@link isOk} for why the\n * predicate narrows to the `Readonly<{...}>` arm.\n */\nexport function isErr<T, E>(\n result: Result<T, E>,\n): result is Readonly<{ success: false; error: E }> {\n return !result.success;\n}\n\n/**\n * Transforms the success value of a result.\n */\nexport function map<T, U, E>(\n result: Result<T, E>,\n fn: (data: T) => U,\n): Result<U, E> {\n if (result.success) return ok(fn(result.data));\n return result;\n}\n\n/**\n * Transforms the error value of a result.\n */\nexport function mapErr<T, E, F>(\n result: Result<T, E>,\n fn: (error: E) => F,\n): Result<T, F> {\n if (result.success) return result;\n return err(fn(result.error));\n}\n\n/**\n * Chains an operation that returns a Result on the success value.\n */\nexport function flatMap<T, U, E>(\n result: Result<T, E>,\n fn: (data: T) => Result<U, E>,\n): Result<U, E> {\n if (result.success) return fn(result.data);\n return result;\n}\n\n/**\n * Recovers from an error by producing an alternative Result.\n */\nexport function orElse<T, E, F>(\n result: Result<T, E>,\n fn: (error: E) => Result<T, F>,\n): Result<T, F> {\n if (result.success) return result;\n return fn(result.error);\n}\n","/**\n * Pure-value document format for graph extensions.\n *\n * A `GraphExtension` is a plain JSON-serializable description of\n * additional node kinds, edge kinds, and ontology relations that should\n * be merged into a graph at runtime. The document is the canonical\n * artifact: every restart re-compiles it back to the same Zod-bearing\n * `NodeType` / `EdgeType` / `OntologyRelation` shapes.\n *\n * The supported property-type subset is intentionally narrower than full\n * JSON Schema — only what compiles cleanly to Zod and what real\n * agent-induced schemas use in practice. Anything outside this set fails\n * loudly at `defineGraphExtension(...)`.\n */\nimport { type KindAnnotations, type NullCheckOp } from \"../core/types\";\nimport { type MetaEdgeName } from \"../ontology/constants\";\n\n// ============================================================\n// Property Types\n// ============================================================\n\n/**\n * Per-property modifier: tag the field as fulltext-searchable.\n *\n * Compiles to a `searchable({ language })`-wrapped Zod string when applied\n * to a `string` property. Rejected on any other property type at validation\n * time.\n */\nexport type ExtensionSearchableModifier = Readonly<{\n language?: string;\n}>;\n\n/**\n * Per-property modifier: declare a vector embedding with the given\n * dimensionality. Compiles to `embedding(dimensions)` and is only valid on\n * `array` properties whose item type is `number`. Rejected elsewhere.\n */\nexport type ExtensionEmbeddingModifier = Readonly<{\n dimensions: number;\n}>;\n\n/**\n * Modifiers shared by every graph-extension property type.\n *\n * `optional: true` flips the field from required-with-graph-extension-validation\n * to `.optional()` and removes it from the parent object's `required`\n * list. `searchable` and `embedding` only apply to specific underlying\n * types — see the per-modifier docs.\n */\nexport type ExtensionPropertyModifiers = Readonly<{\n optional?: boolean;\n searchable?: ExtensionSearchableModifier;\n embedding?: ExtensionEmbeddingModifier;\n description?: string;\n}>;\n\n/**\n * String property. Compiles to `z.string()` plus the requested refinements.\n * `format` accepts the two formats motivated by induced schemas in\n * practice — covers ISO datetimes, URIs, email addresses, UUIDs, and\n * date-only strings. Each format routes to the corresponding Zod\n * factory (`z.iso.datetime()`, `z.url()`, `z.email()`, `z.uuid()`,\n * `z.iso.date()`); other JSON-Schema formats are deliberately not\n * supported in v1.\n */\nexport type ExtensionStringProperty = Readonly<{\n type: \"string\";\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n format?: \"datetime\" | \"uri\" | \"email\" | \"uuid\" | \"date\";\n}> &\n ExtensionPropertyModifiers;\n\n/**\n * Number property. `int: true` requires whole numbers; `min` / `max` are\n * inclusive bounds. Compiles to `z.number().int()?.min(...)?.max(...)`.\n */\nexport type ExtensionNumberProperty = Readonly<{\n type: \"number\";\n min?: number;\n max?: number;\n int?: boolean;\n}> &\n ExtensionPropertyModifiers;\n\n/**\n * Boolean property. Compiles to `z.boolean()`.\n */\nexport type ExtensionBooleanProperty = Readonly<{\n type: \"boolean\";\n}> &\n ExtensionPropertyModifiers;\n\n/**\n * Closed-set string enum. Compiles to `z.enum([...values])`. Must contain\n * at least one value; duplicate values are rejected at validation time.\n */\nexport type ExtensionEnumProperty = Readonly<{\n type: \"enum\";\n values: readonly string[];\n}> &\n ExtensionPropertyModifiers;\n\n/**\n * Array property. `items` is any of the scalar property types or an\n * object property — nested arrays are forbidden in v1. Compiles to\n * `z.array(<items>)`. The `embedding` modifier turns this into a\n * vector embedding instead of a generic array.\n */\nexport type ExtensionArrayProperty = Readonly<{\n type: \"array\";\n items: ExtensionArrayItemType;\n}> &\n ExtensionPropertyModifiers;\n\n/**\n * Element types allowed inside an array — every leaf property type plus\n * single-level object. Nesting an array inside an array is rejected at\n * validation time so the v1 surface stays a flat tree.\n */\nexport type ExtensionArrayItemType =\n | ExtensionStringProperty\n | ExtensionNumberProperty\n | ExtensionBooleanProperty\n | ExtensionEnumProperty\n | ExtensionObjectProperty;\n\n/**\n * Object property. `properties` is a single nesting level; deeper objects\n * are rejected at validation time so the v1 surface is auditable at a\n * glance.\n */\nexport type ExtensionObjectProperty = Readonly<{\n type: \"object\";\n properties: Readonly<Record<string, ExtensionObjectFieldProperty>>;\n}> &\n ExtensionPropertyModifiers;\n\n/**\n * Property types allowed inside an `object`'s `properties` — leaf scalars\n * and arrays only. Nested objects are blocked here to enforce the\n * single-nesting-level rule.\n */\nexport type ExtensionObjectFieldProperty =\n | ExtensionStringProperty\n | ExtensionNumberProperty\n | ExtensionBooleanProperty\n | ExtensionEnumProperty\n | ExtensionArrayProperty;\n\n/**\n * Top-level property descriptor for a node or edge field.\n *\n * The discriminated union covers every type in the v1 subset; arbitrary\n * `unknown` inputs are validated against this set at\n * `defineGraphExtension(...)` time.\n */\nexport type ExtensionPropertyType =\n | ExtensionStringProperty\n | ExtensionNumberProperty\n | ExtensionBooleanProperty\n | ExtensionEnumProperty\n | ExtensionArrayProperty\n | ExtensionObjectProperty;\n\n// ============================================================\n// Unique Constraints\n// ============================================================\n\n/**\n * Document-side `where` clause for a unique constraint.\n *\n * Mirrors `serializeWherePredicate`'s capability — the only operations\n * round-trippable through the persisted form are `isNull` and `isNotNull`.\n * Anything richer (equality, `in`, etc.) is rejected at validation time.\n */\nexport type ExtensionUniqueWhere = Readonly<{\n field: string;\n op: NullCheckOp;\n}>;\n\n/**\n * Unique constraint declaration. `fields` must reference declared\n * properties on the kind. Defaults match the existing `UniqueConstraint`:\n * `scope: \"kind\"`, `collation: \"binary\"`.\n */\nexport type ExtensionUniqueConstraint = Readonly<{\n name: string;\n fields: readonly string[];\n scope?: \"kind\" | \"kindWithSubClasses\";\n collation?: \"binary\" | \"caseInsensitive\";\n where?: ExtensionUniqueWhere;\n}>;\n\n// ============================================================\n// Node and Edge Documents\n// ============================================================\n\n/**\n * Graph-extension declaration of a node kind.\n *\n * Property names follow the same reserved-key rules as compile-time\n * `defineNode` (`id`, `kind`, `meta`, and the `$`-prefix accessor\n * namespace are forbidden). Annotation values must be JSON.\n */\nexport type ExtensionNodeDef = Readonly<{\n description?: string;\n annotations?: KindAnnotations;\n properties: Readonly<Record<string, ExtensionPropertyType>>;\n unique?: readonly ExtensionUniqueConstraint[];\n}>;\n\n/**\n * Graph-extension declaration of an edge kind.\n *\n * `from` / `to` reference node kind names — either kinds declared in this\n * same document or compile-time kinds the document is being merged into.\n * Endpoints that resolve to nothing within the document are flagged as\n * soft references at validation time but not rejected; the final\n * cross-graph check happens when the document is merged into a host\n * `GraphDef`.\n */\nexport type ExtensionEdgeDef = Readonly<{\n description?: string;\n annotations?: KindAnnotations;\n from: readonly string[];\n to: readonly string[];\n properties?: Readonly<Record<string, ExtensionPropertyType>>;\n}>;\n\n// ============================================================\n// Indexes (relational)\n// ============================================================\n\n/**\n * Document-level analogue of compile-time `defineNodeIndex` /\n * `defineEdgeIndex`. Mirrors `serializeWherePredicate`'s persistence-\n * round-trippable subset: only `isNull` / `isNotNull` predicates are\n * supported in v1, matching `ExtensionUniqueWhere`.\n */\nexport type ExtensionIndexWhere = Readonly<{\n field: string;\n op: NullCheckOp;\n}>;\n\n/**\n * Graph-extension-declared node index. `kind` references either a kind\n * declared in this same document or a compile-time host kind resolved\n * at merge time. `fields` and `coveringFields` are top-level property\n * names — JSON-pointer paths are not supported in v1, matching the\n * `ExtensionUniqueConstraint` v1 surface.\n */\nexport type ExtensionNodeIndex = Readonly<{\n entity: \"node\";\n kind: string;\n name?: string;\n fields: readonly string[];\n coveringFields?: readonly string[];\n unique?: boolean;\n scope?: \"graphAndKind\" | \"graph\" | \"none\";\n where?: ExtensionIndexWhere;\n}>;\n\n/**\n * Graph-extension-declared edge index. `direction` mirrors\n * `EdgeIndexDirection`; `kind` references a graph-extension or compile-time\n * edge kind.\n */\nexport type ExtensionEdgeIndex = Readonly<{\n entity: \"edge\";\n kind: string;\n name?: string;\n direction?: \"out\" | \"in\" | \"none\";\n fields: readonly string[];\n coveringFields?: readonly string[];\n unique?: boolean;\n scope?: \"graphAndKind\" | \"graph\" | \"none\";\n where?: ExtensionIndexWhere;\n}>;\n\nexport type ExtensionIndex = ExtensionNodeIndex | ExtensionEdgeIndex;\n\n// ============================================================\n// Ontology\n// ============================================================\n\n/**\n * Graph-extension ontology relation. `metaEdge` is one of the built-in\n * meta-edge names (subClassOf, broader, disjointWith, etc.).\n *\n * `from` / `to` are either node-kind names declared in this document or\n * external IRI strings. The pure-value document does not distinguish the\n * two — the compiler treats endpoints that match a declared kind as\n * `NodeType` references and falls back to passing the raw string for\n * IRIs (matching the existing `OntologyRelation` shape, where\n * `from`/`to` are `NodeType | EdgeType | string`).\n */\nexport type ExtensionOntologyRelation = Readonly<{\n metaEdge: MetaEdgeName;\n from: string;\n to: string;\n}>;\n\n// ============================================================\n// Document\n// ============================================================\n\n/**\n * Stable default major used when a stored document omits `version`.\n *\n * Pinned to `1` permanently. Pre-versioning documents (those persisted\n * before the field existed) and documents that explicitly omit\n * `version` are interpreted as `1` regardless of which major the\n * library currently supports. Splitting this from\n * `CURRENT_GRAPH_EXTENSION_VERSION` is load-bearing for future major\n * bumps: when v2 ships, `CURRENT` becomes `2` but `LEGACY` stays at\n * `1`, so a v1-era stored document still parses as v1 (and the\n * version-mismatch path can route it through a migration) rather than\n * being silently misinterpreted as v2.\n */\nexport const LEGACY_GRAPH_EXTENSION_VERSION = 1 as const;\n\n/**\n * Current major version of the `GraphExtension` format.\n *\n * Documents with a higher major version than this constant are\n * rejected with `GRAPH_EXTENSION_VERSION_UNSUPPORTED` — there is no\n * automatic downgrade path. Minor / additive changes ride forward-\n * compat via `.loose()` on every nested object schema.\n */\nexport const CURRENT_GRAPH_EXTENSION_VERSION = 1 as const;\n\n/**\n * Type of the `GraphExtension.version` field. Stays `number`\n * rather than `typeof CURRENT_GRAPH_EXTENSION_VERSION` because the\n * field can carry any major across the library version range a\n * stored document might have been written by — the\n * document-vs-supported check happens in the validator, not at the\n * type level. Pinning to the current literal would prevent a v1\n * v1 library from typing a v2 document at all, which is the wrong\n * relationship: we WANT a v1 library to receive v2 documents and\n * report `GRAPH_EXTENSION_VERSION_UNSUPPORTED` cleanly.\n */\nexport type GraphExtensionVersion = number;\n\n/**\n * The canonical pure-value graph-extension document.\n *\n * Frozen at construction. Round-trips losslessly through `JSON.stringify`\n * / `JSON.parse`; the `GraphExtension → CompiledExtension` direction\n * is provided by `compileGraphExtension(...)`. There is no\n * `Zod → GraphExtension` direction because graph-extension kinds always\n * originate as documents.\n *\n * `version` is the major-version tag for the document format. The\n * compiler accepts documents whose version is equal to the current\n * supported major (today: 1) or absent (the canonical persisted form\n * omits `version` when it equals the legacy default — see\n * `serializer.ts` — so the round-trip default is \"absent means legacy\n * major\"). Higher majors surface as\n * `GRAPH_EXTENSION_VERSION_UNSUPPORTED` so a newer-version extension\n * committed by a future writer can't be silently misread by an older\n * runtime. See `graph-extensions.md` for the format-versioning policy.\n */\nexport type GraphExtension = Readonly<{\n version?: GraphExtensionVersion;\n nodes?: Readonly<Record<string, ExtensionNodeDef>>;\n edges?: Readonly<Record<string, ExtensionEdgeDef>>;\n ontology?: readonly ExtensionOntologyRelation[];\n /**\n * Graph-extension-declared relational indexes. Each entry references a\n * node or edge kind by name — either declared in this document or\n * a compile-time host kind that the document is being merged into.\n * Vector indexes auto-derive from `embedding()` modifiers on\n * graph-extension kinds; this slot is for explicit relational indexes\n * (analogue of compile-time `defineGraph({ indexes: [...] })`).\n */\n indexes?: readonly ExtensionIndex[];\n}>;\n\n/**\n * Top-level v1 slots a `GraphExtension` document may carry. Single\n * source of truth for both the strict-authoring validator (typo rejection\n * via `defineGraphExtension`) and the persistence Zod schema (which\n * leaves the field set loose for forward compatibility but uses this\n * list to drive the Zod object shape).\n */\nexport const GRAPH_EXTENSION_TOP_LEVEL_KEYS = [\n \"version\",\n \"nodes\",\n \"edges\",\n \"ontology\",\n \"indexes\",\n] as const;\n\nexport type GraphExtensionTopLevelKey =\n (typeof GRAPH_EXTENSION_TOP_LEVEL_KEYS)[number];\n","/**\n * Pure structural validation for `GraphExtension`.\n *\n * Walks the document and accumulates every issue (no fail-fast) so a\n * caller showing the document to a human reviewer can surface all\n * problems in one round. Cross-document references — edge endpoints,\n * ontology endpoints — resolve only against this document; resolution\n * against an existing compile-time graph happens later, when the\n * document is merged into a host `GraphDef`.\n */\nimport { assertJsonValue } from \"../core/json-value\";\nimport {\n type KindAnnotations,\n type KindEntity,\n type NullCheckOp,\n} from \"../core/types\";\nimport { ConfigurationError } from \"../errors\";\nimport { computeTransitiveClosure } from \"../ontology/closures\";\nimport { ALL_META_EDGE_NAMES, type MetaEdgeName } from \"../ontology/constants\";\nimport { encodeJsonPointerSegment } from \"../query/json-pointer\";\nimport { RESERVED_EDGE_KEYS, RESERVED_NODE_KEYS } from \"../store/reserved-keys\";\nimport { compactUndefined, freezeDeep, isPlainObject } from \"../utils/object\";\nimport { err, ok, type Result } from \"../utils/result\";\nimport {\n type GraphExtensionIssue,\n type GraphExtensionIssueCode,\n GraphExtensionValidationError,\n GraphExtensionVersionUnsupportedError,\n} from \"./errors\";\nimport {\n CURRENT_GRAPH_EXTENSION_VERSION,\n type ExtensionArrayProperty,\n type ExtensionBooleanProperty,\n type ExtensionEdgeDef,\n type ExtensionEnumProperty,\n type ExtensionIndex,\n type ExtensionNodeDef,\n type ExtensionNumberProperty,\n type ExtensionObjectFieldProperty,\n type ExtensionObjectProperty,\n type ExtensionOntologyRelation,\n type ExtensionPropertyType,\n type ExtensionStringProperty,\n type ExtensionUniqueConstraint,\n GRAPH_EXTENSION_TOP_LEVEL_KEYS,\n type GraphExtension,\n type GraphExtensionVersion,\n LEGACY_GRAPH_EXTENSION_VERSION,\n} from \"./extension-types\";\n\nconst META_EDGE_NAME_SET: ReadonlySet<string> = new Set(ALL_META_EDGE_NAMES);\n\nconst SUPPORTED_PROPERTY_TYPES = new Set([\n \"string\",\n \"number\",\n \"boolean\",\n \"enum\",\n \"array\",\n \"object\",\n]);\n\n// Unknown per-property-type refinement keys are intentionally accepted\n// for forward compatibility: a future v1.x.y writer may emit additive\n// refinements an older v1 reader doesn't recognize. Recognized\n// refinements are read inline by the per-type validators\n// (e.g. `minLength` in `validateStringProperty`).\n\nconst SUPPORTED_STRING_FORMATS = new Set([\n \"datetime\",\n \"uri\",\n \"email\",\n \"uuid\",\n \"date\",\n]);\n\n/**\n * Recognized keys shared by every property-type descriptor. The strict\n * authoring path rejects unknown sibling keys against the union of this\n * set and the per-type allowlist below; the loose persistence-load path\n * passes them through untouched (a future v1.x.y writer may emit\n * additive keys an older v1 reader doesn't recognize).\n */\nconst COMMON_PROPERTY_KEYS: ReadonlySet<string> = new Set([\n \"type\",\n \"optional\",\n \"description\",\n \"searchable\",\n \"embedding\",\n]);\n\nconst PROPERTY_TYPE_KEYS: Readonly<Record<string, ReadonlySet<string>>> = {\n string: new Set([\"minLength\", \"maxLength\", \"pattern\", \"format\"]),\n number: new Set([\"min\", \"max\", \"int\"]),\n boolean: new Set(),\n enum: new Set([\"values\"]),\n array: new Set([\"items\"]),\n object: new Set([\"properties\"]),\n};\n\n/**\n * In strict mode, surface an `UNKNOWN_PROPERTY_KEY` issue for every\n * key on `raw` that's not in either allowlist. This is the LLM /\n * agent-trust-boundary check: a typo like `minLenght: 5` on a string\n * field, or a refinement key from a future v1.x that this library\n * doesn't recognize, would otherwise compile to a weaker schema with\n * no signal to the reviewer.\n */\nfunction rejectUnknownPropertyKeys(\n raw: Record<string, unknown>,\n type: string,\n path: string,\n issues: GraphExtensionIssue[],\n): void {\n const typeKeys = PROPERTY_TYPE_KEYS[type] ?? new Set<string>();\n const recognized = [...COMMON_PROPERTY_KEYS, ...typeKeys];\n for (const key of Object.keys(raw)) {\n if (COMMON_PROPERTY_KEYS.has(key) || typeKeys.has(key)) continue;\n issues.push({\n path: `${path}/${encodeJsonPointerSegment(key)}`,\n message: `Unknown property key \"${key}\" for type \"${type}\". Recognized keys: ${recognized.join(\", \")}.`,\n code: \"UNKNOWN_PROPERTY_KEY\",\n });\n }\n}\n\n/**\n * Sibling of `rejectUnknownPropertyKeys` for the non-property strict-mode\n * checks (top-level slots, node/edge/ontology body keys, unique constraint\n * body, where-clause body, …). Each call site previously open-coded the\n * same `for-key-of-Object.keys` walk — this helper consolidates them.\n */\nfunction rejectUnknownObjectKeys(\n raw: Readonly<Record<string, unknown>>,\n allowed: ReadonlySet<string>,\n label: string,\n path: string,\n code: GraphExtensionIssueCode,\n issues: GraphExtensionIssue[],\n): void {\n for (const key of Object.keys(raw)) {\n if (allowed.has(key)) continue;\n issues.push({\n path: `${path}/${encodeJsonPointerSegment(key)}`,\n message: `Unknown ${label} key \"${key}\". Allowed: ${[...allowed].join(\", \")}.`,\n code,\n });\n }\n}\n\n/**\n * Top-level slots accepted in v1 documents. Strict-authoring callers\n * reject unknown sibling keys to surface typos like `node` instead of\n * `nodes`; the loose persistence-load path leaves unknowns untouched\n * for forward compatibility.\n */\nconst KNOWN_DOCUMENT_KEYS: ReadonlySet<string> = new Set(\n GRAPH_EXTENSION_TOP_LEVEL_KEYS,\n);\n\n/**\n * Recognized body-level key sets — one per document-shape that the\n * strict-authoring path validates. Drives both the per-shape allowlist\n * check (`rejectUnknownObjectKeys`) and the human-readable \"Allowed:\"\n * tail in the error messages.\n */\nconst NODE_BODY_KEYS: ReadonlySet<string> = new Set([\n \"description\",\n \"annotations\",\n \"properties\",\n \"unique\",\n]);\nconst EDGE_BODY_KEYS: ReadonlySet<string> = new Set([\n \"description\",\n \"annotations\",\n \"from\",\n \"to\",\n \"properties\",\n]);\nconst ONTOLOGY_ENTRY_KEYS: ReadonlySet<string> = new Set([\n \"metaEdge\",\n \"from\",\n \"to\",\n]);\nconst UNIQUE_CONSTRAINT_KEYS: ReadonlySet<string> = new Set([\n \"name\",\n \"fields\",\n \"scope\",\n \"collation\",\n \"where\",\n]);\nconst WHERE_CLAUSE_KEYS: ReadonlySet<string> = new Set([\"field\", \"op\"]);\nconst NODE_INDEX_KEYS: ReadonlySet<string> = new Set([\n \"entity\",\n \"kind\",\n \"name\",\n \"fields\",\n \"coveringFields\",\n \"unique\",\n \"scope\",\n \"where\",\n]);\nconst EDGE_INDEX_KEYS: ReadonlySet<string> = new Set([\n \"entity\",\n \"kind\",\n \"name\",\n \"fields\",\n \"coveringFields\",\n \"unique\",\n \"scope\",\n \"direction\",\n \"where\",\n]);\n\ntype ValidateGraphExtensionOptions = Readonly<{\n /**\n * Reject unknown top-level keys and unsupported string formats.\n * Used by `defineGraphExtension`, where the document is being\n * authored fresh against the current library version — typos in\n * `nodes` / `format: \"date-time\"` etc. should fail loudly. The\n * persistence-load path leaves this off so a document committed by\n * a future v1.x writer with additive fields still parses on an\n * older v1 reader.\n */\n strict?: boolean;\n}>;\n\n/**\n * Validates a graph extension.\n *\n * Returns the (frozen, deeply normalized) extension on success, or a\n * `GraphExtensionValidationError` carrying every issue on authoring\n * failure. Unsupported future major versions throw\n * `GraphExtensionVersionUnsupportedError` immediately because the\n * current library cannot safely decode the rest of the document.\n * Callers that prefer exceptions for validation failures wrap the\n * returned `Result` with `unwrap()`.\n */\nexport function validateGraphExtension(\n input: unknown,\n options: ValidateGraphExtensionOptions = {},\n): Result<GraphExtension, GraphExtensionValidationError> {\n const issues: GraphExtensionIssue[] = [];\n const strict = options.strict === true;\n\n if (!isPlainObject(input)) {\n issues.push({\n path: \"\",\n message: \"Document must be a plain object.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return err(new GraphExtensionValidationError(issues));\n }\n\n const documentRecord = input;\n\n // Forward-compat: in non-strict (persistence-load) mode, unknown\n // top-level keys are intentionally NOT rejected. The persistence-\n // side zod schema is `.loose()` on every nested object, and the\n // documented format-versioning policy promises that additive minor\n // changes (a new top-level slice in a future v1.x.y) ride forward\n // without bumping the major. In strict (authoring) mode, unknown\n // keys surface as `UNKNOWN_DOCUMENT_KEY` so a typo like `node`\n // instead of `nodes` fails loudly instead of silently producing an\n // empty extension.\n if (strict) {\n for (const key of Object.keys(documentRecord)) {\n if (!KNOWN_DOCUMENT_KEYS.has(key)) {\n issues.push({\n path: `/${encodeJsonPointerSegment(key)}`,\n message: `Unknown top-level key \"${key}\". Did you mean one of: ${[...KNOWN_DOCUMENT_KEYS].join(\", \")}?`,\n code: \"UNKNOWN_DOCUMENT_KEY\",\n });\n }\n }\n }\n\n const version = validateVersion(documentRecord[\"version\"], issues);\n\n const nodes = validateNodesSection(documentRecord[\"nodes\"], issues, strict);\n const edges = validateEdgesSection(documentRecord[\"edges\"], issues, strict);\n\n // Edge endpoints can reference (a) kinds declared in this same document,\n // (b) compile-time host kinds resolved at merge time, or (c) external\n // IRIs. The cross-graph resolution check happens at merge time, not\n // here.\n\n const ontology = validateOntologySection(\n documentRecord[\"ontology\"],\n issues,\n strict,\n );\n if (ontology !== undefined) {\n validateOntology(ontology, nodes, issues);\n }\n\n const indexes = validateIndexesSection(\n documentRecord[\"indexes\"],\n issues,\n strict,\n );\n\n if (issues.length > 0) {\n return err(new GraphExtensionValidationError(issues));\n }\n\n return ok(freezeDocument({ version, nodes, edges, ontology, indexes }));\n}\n\n/**\n * Validates the `version` field against the current supported major.\n *\n * Absent → resolved to `LEGACY_GRAPH_EXTENSION_VERSION` (a stable\n * `1`). The serializer omits `version` from the canonical persisted\n * form when it equals the legacy default, so the on-disk shape is\n * always version-less for v1 documents — the validator's absent →\n * legacy mapping closes that round-trip. Splitting `LEGACY` from\n * `CURRENT` is forward-looking design for future major bumps: when\n * v2 ships, `CURRENT` becomes `2` but `LEGACY` stays `1`, so a v1-era\n * stored document still parses as v1.\n *\n * Equal to current → accepted. Higher major → rejected with\n * `GRAPH_EXTENSION_VERSION_UNSUPPORTED`. Non-integer / non-positive\n * → rejected with `INVALID_DOCUMENT_SHAPE`.\n */\nfunction validateVersion(\n raw: unknown,\n issues: GraphExtensionIssue[],\n): GraphExtensionVersion {\n if (raw === undefined) return LEGACY_GRAPH_EXTENSION_VERSION;\n if (typeof raw !== \"number\" || !Number.isInteger(raw) || raw < 1) {\n issues.push({\n path: \"/version\",\n message: `Document version must be a positive integer; received ${JSON.stringify(raw)}.`,\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return LEGACY_GRAPH_EXTENSION_VERSION;\n }\n if (raw > CURRENT_GRAPH_EXTENSION_VERSION) {\n // Version mismatch is unrecoverable — the rest of the document\n // may use fields the current library can't decode. Throw the\n // typed class directly rather than batching into the issue list,\n // which is reserved for per-field validation problems a UI can\n // surface alongside others.\n throw new GraphExtensionVersionUnsupportedError(\n raw,\n CURRENT_GRAPH_EXTENSION_VERSION,\n );\n }\n return raw;\n}\n\n// ============================================================\n// Section: nodes\n// ============================================================\n\nfunction validateNodesSection(\n rawNodes: unknown,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): Record<string, ExtensionNodeDef> | undefined {\n if (rawNodes === undefined) return undefined;\n\n if (!isPlainObject(rawNodes)) {\n issues.push({\n path: \"/nodes\",\n message: \"`nodes` must be a plain object keyed by node-kind name.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n const result: Record<string, ExtensionNodeDef> = {};\n const recorded = new Set<string>();\n\n for (const [kindName, rawNode] of Object.entries(rawNodes)) {\n const path = `/nodes/${encodeJsonPointerSegment(kindName)}`;\n\n if (!isValidKindName(kindName)) {\n issues.push({\n path,\n message: `Node kind name \"${kindName}\" must match /^[A-Za-z_][A-Za-z0-9_]*$/.`,\n code: \"INVALID_KIND_NAME\",\n });\n continue;\n }\n\n if (recorded.has(kindName)) {\n issues.push({\n path,\n message: `Duplicate node kind name \"${kindName}\".`,\n code: \"DUPLICATE_KIND_NAME\",\n });\n continue;\n }\n\n const node = validateNodeDocument(kindName, rawNode, path, issues, strict);\n if (node === undefined) continue;\n result[kindName] = node;\n recorded.add(kindName);\n }\n\n return result;\n}\n\nfunction validateNodeDocument(\n kindName: string,\n raw: unknown,\n path: string,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionNodeDef | undefined {\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message: `Node \"${kindName}\" must be a plain object.`,\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n if (strict) {\n rejectUnknownObjectKeys(\n raw,\n NODE_BODY_KEYS,\n \"node-level\",\n path,\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n }\n\n const description = validateOptionalString(\n raw[\"description\"],\n `${path}/description`,\n \"`description`\",\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n\n const annotations = validateAnnotations(\n raw[\"annotations\"],\n `${path}/annotations`,\n `Node \"${kindName}\"`,\n issues,\n );\n\n const propertiesRaw = raw[\"properties\"];\n const properties = validatePropertiesMap(\n propertiesRaw,\n `${path}/properties`,\n \"node\",\n kindName,\n issues,\n strict,\n );\n if (properties === undefined) return undefined;\n\n const uniqueRaw = raw[\"unique\"];\n const unique = validateUniqueConstraints(\n uniqueRaw,\n `${path}/unique`,\n properties,\n issues,\n strict,\n );\n\n return compactUndefined<ExtensionNodeDef>({\n description,\n annotations,\n properties,\n unique,\n });\n}\n\n// ============================================================\n// Section: edges\n// ============================================================\n\nfunction validateEdgesSection(\n rawEdges: unknown,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): Record<string, ExtensionEdgeDef> | undefined {\n if (rawEdges === undefined) return undefined;\n\n if (!isPlainObject(rawEdges)) {\n issues.push({\n path: \"/edges\",\n message: \"`edges` must be a plain object keyed by edge-kind name.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n const result: Record<string, ExtensionEdgeDef> = {};\n const recorded = new Set<string>();\n\n for (const [kindName, rawEdge] of Object.entries(rawEdges)) {\n const path = `/edges/${encodeJsonPointerSegment(kindName)}`;\n\n if (!isValidKindName(kindName)) {\n issues.push({\n path,\n message: `Edge kind name \"${kindName}\" must match /^[A-Za-z_][A-Za-z0-9_]*$/.`,\n code: \"INVALID_KIND_NAME\",\n });\n continue;\n }\n\n if (recorded.has(kindName)) {\n issues.push({\n path,\n message: `Duplicate edge kind name \"${kindName}\".`,\n code: \"DUPLICATE_KIND_NAME\",\n });\n continue;\n }\n\n const edge = validateEdgeDocument(kindName, rawEdge, path, issues, strict);\n if (edge === undefined) continue;\n result[kindName] = edge;\n recorded.add(kindName);\n }\n\n return result;\n}\n\nfunction validateEdgeDocument(\n kindName: string,\n raw: unknown,\n path: string,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionEdgeDef | undefined {\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message: `Edge \"${kindName}\" must be a plain object.`,\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n if (strict) {\n rejectUnknownObjectKeys(\n raw,\n EDGE_BODY_KEYS,\n \"edge-level\",\n path,\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n }\n\n const description = validateOptionalString(\n raw[\"description\"],\n `${path}/description`,\n \"`description`\",\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n\n const annotations = validateAnnotations(\n raw[\"annotations\"],\n `${path}/annotations`,\n `Edge \"${kindName}\"`,\n issues,\n );\n\n const from = validateEndpointList(raw[\"from\"], `${path}/from`, issues);\n const to = validateEndpointList(raw[\"to\"], `${path}/to`, issues);\n if (from === undefined || to === undefined) return undefined;\n\n const propertiesRaw = raw[\"properties\"];\n const properties =\n propertiesRaw === undefined ?\n {}\n : validatePropertiesMap(\n propertiesRaw,\n `${path}/properties`,\n \"edge\",\n kindName,\n issues,\n strict,\n );\n if (properties === undefined) return undefined;\n\n return compactUndefined<ExtensionEdgeDef>({\n description,\n annotations,\n from,\n to,\n properties,\n });\n}\n\nfunction validateEndpointList(\n raw: unknown,\n path: string,\n issues: GraphExtensionIssue[],\n): readonly string[] | undefined {\n if (!Array.isArray(raw)) {\n issues.push({\n path,\n message: \"Edge endpoint list must be an array of node-kind names.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n if (raw.length === 0) {\n issues.push({\n path,\n message: \"Edge endpoint list must contain at least one node-kind name.\",\n code: \"EMPTY_FROM_OR_TO\",\n });\n return undefined;\n }\n const names: string[] = [];\n for (const [index, value] of raw.entries()) {\n if (typeof value !== \"string\" || value.length === 0) {\n issues.push({\n path: `${path}/${index}`,\n message: \"Edge endpoint must be a non-empty string node-kind name.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n names.push(value);\n }\n return names;\n}\n\n// ============================================================\n// Section: ontology\n// ============================================================\n\nfunction validateOntologySection(\n raw: unknown,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionOntologyRelation[] | undefined {\n if (raw === undefined) return undefined;\n if (!Array.isArray(raw)) {\n issues.push({\n path: \"/ontology\",\n message: \"`ontology` must be an array of relation objects.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n const result: ExtensionOntologyRelation[] = [];\n for (const [index, entry] of raw.entries()) {\n const path = `/ontology/${index}`;\n if (!isPlainObject(entry)) {\n issues.push({\n path,\n message: \"Ontology entry must be a plain object.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n continue;\n }\n if (strict) {\n rejectUnknownObjectKeys(\n entry,\n ONTOLOGY_ENTRY_KEYS,\n \"ontology-entry\",\n path,\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n }\n\n const metaEdge = entry[\"metaEdge\"];\n const from = entry[\"from\"];\n const to = entry[\"to\"];\n\n if (typeof metaEdge !== \"string\" || !META_EDGE_NAME_SET.has(metaEdge)) {\n issues.push({\n path: `${path}/metaEdge`,\n message: `Unknown meta-edge ${describeUnknownValue(metaEdge)}. Allowed: ${[...ALL_META_EDGE_NAMES].join(\", \")}.`,\n code: \"UNKNOWN_META_EDGE\",\n });\n continue;\n }\n if (typeof from !== \"string\" || from.length === 0) {\n issues.push({\n path: `${path}/from`,\n message: \"Ontology relation `from` must be a non-empty string.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n continue;\n }\n if (typeof to !== \"string\" || to.length === 0) {\n issues.push({\n path: `${path}/to`,\n message: \"Ontology relation `to` must be a non-empty string.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n continue;\n }\n\n result.push({ metaEdge: metaEdge as MetaEdgeName, from, to });\n }\n return result;\n}\n\nfunction validateOntology(\n ontology: readonly ExtensionOntologyRelation[],\n _nodes: Record<string, ExtensionNodeDef> | undefined,\n issues: GraphExtensionIssue[],\n): void {\n const seenKey = new Set<string>();\n\n for (const [index, relation] of ontology.entries()) {\n const path = `/ontology/${index}`;\n\n if (\n relation.from === relation.to &&\n isStrictlyHierarchicalMetaEdge(relation.metaEdge)\n ) {\n issues.push({\n path,\n message: `Hierarchical meta-edge \"${relation.metaEdge}\" cannot be a self-loop (\"${relation.from}\" → \"${relation.to}\").`,\n code: \"ONTOLOGY_SELF_LOOP\",\n });\n }\n\n const key = `${relation.metaEdge}::${relation.from}->${relation.to}`;\n if (seenKey.has(key)) {\n issues.push({\n path,\n message: `Duplicate ontology relation \"${relation.metaEdge}\" (${relation.from} → ${relation.to}).`,\n code: \"DUPLICATE_ONTOLOGY_RELATION\",\n });\n continue;\n }\n seenKey.add(key);\n }\n\n // Cycle detection on transitive hierarchical relations declared *within*\n // this document. Cross-document cycles will be caught at evolve() time\n // when the graph extension is merged with the existing graph.\n detectHierarchicalCycles(ontology, issues);\n\n // disjointWith ↔ subClassOf contradictions: declaring two kinds as\n // both subclass-related (subClassOf, broader, narrower) AND\n // disjointWith is incoherent — a subclass instance is also an\n // instance of its parent, so they can't be in disjoint sets.\n // Detect within the document; cross-document detection happens at\n // merge time when the registry's closures are rebuilt.\n detectDisjointHierarchyContradictions(ontology, issues);\n}\n\nconst STRICTLY_HIERARCHICAL: ReadonlySet<MetaEdgeName> = new Set([\n \"subClassOf\",\n \"broader\",\n \"narrower\",\n \"partOf\",\n \"hasPart\",\n]);\n\nfunction isStrictlyHierarchicalMetaEdge(name: MetaEdgeName): boolean {\n return STRICTLY_HIERARCHICAL.has(name);\n}\n\n/**\n * Maps each hierarchical meta-edge to the canonical group it normalizes\n * into, mirroring the registry's relation-table flattening\n * (`computeClosuresFromOntology`). `narrower A→B` is the inverse of\n * `broader A→B`; `hasPart A→B` is the inverse of `partOf A→B`. Cycle\n * detection must run on the same normalized set the registry will, or\n * mixed-direction cycles like `broader A→B` + `narrower A→B` slip\n * through validation and surface only at runtime.\n */\nconst HIERARCHICAL_NORMALIZATION: ReadonlyMap<\n MetaEdgeName,\n Readonly<{ canonical: MetaEdgeName; flip: boolean }>\n> = new Map([\n [\"subClassOf\", { canonical: \"subClassOf\", flip: false }],\n [\"broader\", { canonical: \"broader\", flip: false }],\n [\"narrower\", { canonical: \"broader\", flip: true }],\n [\"partOf\", { canonical: \"partOf\", flip: false }],\n [\"hasPart\", { canonical: \"partOf\", flip: true }],\n]);\n\ntype NormalizedHierarchicalEdge = Readonly<{\n from: string;\n to: string;\n originalIndex: number;\n}>;\n\n/**\n * Group ontology relations by their canonical hierarchical meta-edge,\n * flipping `narrower` / `hasPart` entries into their canonical direction.\n * Mirrors `computeClosuresFromOntology`'s flattening so cycle and\n * disjoint-contradiction detection see the same edge set the registry\n * will. `skipSelfLoops` is set by the cycle detector (self-loops are\n * already reported by `detectOntologySelfLoops`) and unset by the\n * disjoint-contradiction detector (which still wants `(A, A)` in the\n * closure for a `disjointWith(A, A)` check).\n */\nfunction buildHierarchicalGroups(\n ontology: readonly ExtensionOntologyRelation[],\n options: Readonly<{ skipSelfLoops: boolean }>,\n): Map<MetaEdgeName, NormalizedHierarchicalEdge[]> {\n const groups = new Map<MetaEdgeName, NormalizedHierarchicalEdge[]>();\n for (const [index, relation] of ontology.entries()) {\n const normalization = HIERARCHICAL_NORMALIZATION.get(relation.metaEdge);\n if (normalization === undefined) continue;\n if (options.skipSelfLoops && relation.from === relation.to) continue;\n\n const from = normalization.flip ? relation.to : relation.from;\n const to = normalization.flip ? relation.from : relation.to;\n\n const list = groups.get(normalization.canonical) ?? [];\n list.push({ from, to, originalIndex: index });\n groups.set(normalization.canonical, list);\n }\n return groups;\n}\n\nfunction detectHierarchicalCycles(\n ontology: readonly ExtensionOntologyRelation[],\n issues: GraphExtensionIssue[],\n): void {\n const groups = buildHierarchicalGroups(ontology, { skipSelfLoops: true });\n\n for (const [name, edges] of groups) {\n const closure = computeTransitiveClosure(\n edges.map((edge) => [edge.from, edge.to] as const),\n );\n const reportedNodes = new Set<string>();\n for (const [from, reachable] of closure) {\n if (!reachable.has(from) || reportedNodes.has(from)) continue;\n reportedNodes.add(from);\n const offendingEdge = edges.find((edge) => edge.from === from);\n const path =\n offendingEdge === undefined ? \"/ontology\" : (\n `/ontology/${offendingEdge.originalIndex}`\n );\n issues.push({\n path,\n message: `Cycle detected in \"${name}\" relations involving \"${from}\".`,\n code: \"ONTOLOGY_CYCLE\",\n });\n }\n }\n}\n\n/**\n * Detects `disjointWith` ↔ subClassOf-family contradictions: declaring\n * `(A, B) disjointWith` AND `(A, B) subClassOf` (or any subclass-\n * relating meta-edge) in the same document is incoherent — a subclass\n * instance is also an instance of its parent, so they can't be in\n * disjoint sets.\n *\n * Detection runs against the closure of the hierarchical relations\n * because `(A, B) subClassOf` plus `(B, C) subClassOf` makes A and C\n * disjoint-incompatible too. `narrower` / `hasPart` are flipped to\n * their canonical direction during normalization, mirroring how\n * `detectHierarchicalCycles` builds its groups.\n *\n * Cross-document contradictions (extension declares `disjointWith(A,B)`\n * while a previously-evolved extension declared `subClassOf(A,B)`) are\n * caught at merge time when the registry's closures are rebuilt.\n */\nfunction detectDisjointHierarchyContradictions(\n ontology: readonly ExtensionOntologyRelation[],\n issues: GraphExtensionIssue[],\n): void {\n const disjointPairs = new Set<string>();\n const disjointPath = new Map<string, string>();\n for (const [index, relation] of ontology.entries()) {\n if (relation.metaEdge !== \"disjointWith\") continue;\n // disjointWith is symmetric; record both orderings so the closure\n // check below catches the contradiction regardless of which side\n // the subclass relation orders by.\n disjointPairs.add(`${relation.from}|${relation.to}`);\n disjointPairs.add(`${relation.to}|${relation.from}`);\n disjointPath.set(`${relation.from}|${relation.to}`, `/ontology/${index}`);\n disjointPath.set(`${relation.to}|${relation.from}`, `/ontology/${index}`);\n }\n if (disjointPairs.size === 0) return;\n\n // Walk the closure of every hierarchical group; any (from, reachable)\n // pair that also appears in `disjointPairs` is a contradiction.\n const groups = buildHierarchicalGroups(ontology, { skipSelfLoops: false });\n const reported = new Set<string>();\n for (const [name, edges] of groups) {\n const closure = computeTransitiveClosure(\n edges.map((edge) => [edge.from, edge.to] as const),\n );\n for (const [from, reachable] of closure) {\n for (const to of reachable) {\n const pairKey = `${from}|${to}`;\n if (!disjointPairs.has(pairKey)) continue;\n if (reported.has(pairKey)) continue;\n reported.add(pairKey);\n issues.push({\n path: disjointPath.get(pairKey) ?? \"/ontology\",\n message: `Contradiction: \"${from}\" and \"${to}\" are declared disjointWith but also related by \"${name}\" (directly or transitively).`,\n code: \"ONTOLOGY_DISJOINT_CONFLICT\",\n });\n }\n }\n }\n}\n\n// ============================================================\n// Section: indexes\n// ============================================================\n\nconst INDEX_SCOPE_VALUES = [\"graphAndKind\", \"graph\", \"none\"] as const;\nconst EDGE_INDEX_DIRECTION_VALUES = [\"out\", \"in\", \"none\"] as const;\n\nconst RUNTIME_INDEX_WHERE_OPS: ReadonlySet<string> = new Set([\n \"isNull\",\n \"isNotNull\",\n]);\n\nfunction validateIndexesSection(\n rawIndexes: unknown,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): readonly ExtensionIndex[] | undefined {\n if (rawIndexes === undefined) return undefined;\n if (!Array.isArray(rawIndexes)) {\n issues.push({\n path: \"/indexes\",\n message: \"`indexes` must be an array of index declarations.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n const result: ExtensionIndex[] = [];\n const seenNames = new Set<string>();\n\n for (const [arrayIndex, entry] of rawIndexes.entries()) {\n const path = `/indexes/${arrayIndex}`;\n const validated = validateIndexEntry(entry, path, issues, strict);\n if (validated === undefined) continue;\n\n if (validated.name !== undefined) {\n if (seenNames.has(validated.name)) {\n issues.push({\n path: `${path}/name`,\n message: `Duplicate index name \"${validated.name}\".`,\n code: \"DUPLICATE_INDEX_NAME\",\n });\n continue;\n }\n seenNames.add(validated.name);\n }\n result.push(validated);\n }\n\n return result;\n}\n\nfunction validateIndexEntry(\n raw: unknown,\n path: string,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionIndex | undefined {\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message: \"Index entry must be a plain object.\",\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n\n const entity = raw[\"entity\"];\n if (entity !== \"node\" && entity !== \"edge\") {\n issues.push({\n path: `${path}/entity`,\n message: `Index \\`entity\\` must be \"node\" or \"edge\"; received ${describeUnknownValue(entity)}.`,\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n\n // Strict-authoring typo check: `coveringField` (singular), `wheres`,\n // etc. would otherwise compile to a weaker index with no signal.\n // Allowlist switches on `entity` so edge-only `direction` is valid\n // on edges but flagged on nodes.\n if (strict) {\n rejectUnknownObjectKeys(\n raw,\n entity === \"node\" ? NODE_INDEX_KEYS : EDGE_INDEX_KEYS,\n `${entity}-index`,\n path,\n \"INVALID_INDEX_DECLARATION\",\n issues,\n );\n }\n\n if (typeof raw[\"kind\"] !== \"string\" || !isValidKindName(raw[\"kind\"])) {\n issues.push({\n path: `${path}/kind`,\n message:\n \"Index `kind` must be a non-empty kind name matching /^[A-Za-z_][A-Za-z0-9_]*$/.\",\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n\n const fields = validateStringList(raw[\"fields\"], `${path}/fields`, issues, {\n allowEmpty: false,\n label: \"fields\",\n emptyCode: \"EMPTY_INDEX_FIELDS\",\n });\n if (fields === undefined) return undefined;\n\n const coveringFields = validateStringList(\n raw[\"coveringFields\"],\n `${path}/coveringFields`,\n issues,\n { allowEmpty: true, label: \"coveringFields\" },\n );\n\n if (raw[\"unique\"] !== undefined && typeof raw[\"unique\"] !== \"boolean\") {\n issues.push({\n path: `${path}/unique`,\n message: \"Index `unique` must be a boolean.\",\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n\n let name: string | undefined;\n if (raw[\"name\"] !== undefined) {\n if (typeof raw[\"name\"] !== \"string\" || raw[\"name\"].length === 0) {\n issues.push({\n path: `${path}/name`,\n message: \"Index `name` must be a non-empty string.\",\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n name = raw[\"name\"];\n }\n\n const scopeResult = validateOptionalLiteral(\n raw[\"scope\"],\n INDEX_SCOPE_VALUES,\n `${path}/scope`,\n \"Index `scope`\",\n \"INVALID_INDEX_DECLARATION\",\n issues,\n );\n if (!scopeResult.ok) return undefined;\n const scope = scopeResult.value;\n\n const where = validateGraphExtensionIndexWhere(\n raw[\"where\"],\n `${path}/where`,\n issues,\n strict,\n );\n\n if (entity === \"node\") {\n return compactUndefined<ExtensionIndex>({\n entity: \"node\",\n kind: raw[\"kind\"],\n name,\n fields,\n coveringFields,\n unique: raw[\"unique\"],\n scope,\n where,\n });\n }\n\n const directionResult = validateOptionalLiteral(\n raw[\"direction\"],\n EDGE_INDEX_DIRECTION_VALUES,\n `${path}/direction`,\n \"Edge index `direction`\",\n \"INVALID_INDEX_DECLARATION\",\n issues,\n );\n if (!directionResult.ok) return undefined;\n const direction = directionResult.value;\n\n return compactUndefined<ExtensionIndex>({\n entity: \"edge\",\n kind: raw[\"kind\"],\n name,\n direction,\n fields,\n coveringFields,\n unique: raw[\"unique\"],\n scope,\n where,\n });\n}\n\nfunction validateStringList(\n raw: unknown,\n path: string,\n issues: GraphExtensionIssue[],\n options: Readonly<{\n allowEmpty: boolean;\n label: string;\n emptyCode?: GraphExtensionIssueCode;\n }>,\n): readonly string[] | undefined {\n if (raw === undefined) {\n if (options.allowEmpty) return undefined;\n issues.push({\n path,\n message: `\\`${options.label}\\` is required and must contain at least one entry.`,\n code: options.emptyCode ?? \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n if (!Array.isArray(raw)) {\n issues.push({\n path,\n message: `\\`${options.label}\\` must be an array of strings.`,\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n const seen = new Set<string>();\n const result: string[] = [];\n for (const [index, value] of raw.entries()) {\n if (typeof value !== \"string\" || value.length === 0) {\n issues.push({\n path: `${path}/${index}`,\n message: `\\`${options.label}[${index}]\\` must be a non-empty string.`,\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n if (seen.has(value)) {\n issues.push({\n path: `${path}/${index}`,\n message: `Duplicate ${options.label} entry \"${value}\".`,\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n seen.add(value);\n result.push(value);\n }\n if (!options.allowEmpty && result.length === 0) {\n issues.push({\n path,\n message: `\\`${options.label}\\` must contain at least one entry.`,\n code: options.emptyCode ?? \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n return result;\n}\n\nfunction validateGraphExtensionIndexWhere(\n raw: unknown,\n path: string,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionIndex[\"where\"] {\n if (raw === undefined) return undefined;\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message: \"Index `where` must be a plain object.\",\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n if (strict) {\n rejectUnknownObjectKeys(\n raw,\n WHERE_CLAUSE_KEYS,\n \"where-clause\",\n path,\n \"INVALID_INDEX_DECLARATION\",\n issues,\n );\n }\n if (typeof raw[\"field\"] !== \"string\" || raw[\"field\"].length === 0) {\n issues.push({\n path: `${path}/field`,\n message: \"`where.field` must be a non-empty string.\",\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n if (\n typeof raw[\"op\"] !== \"string\" ||\n !RUNTIME_INDEX_WHERE_OPS.has(raw[\"op\"])\n ) {\n issues.push({\n path: `${path}/op`,\n message: '`where.op` must be \"isNull\" or \"isNotNull\" in v1.',\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n return Object.freeze({\n field: raw[\"field\"],\n op: raw[\"op\"] as NullCheckOp,\n });\n}\n\n// ============================================================\n// Properties and refinements\n// ============================================================\n\nfunction validatePropertiesMap(\n raw: unknown,\n path: string,\n ownerType: KindEntity,\n ownerName: string,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): Record<string, ExtensionPropertyType> | undefined {\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message: `\\`properties\\` must be a plain object.`,\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n const reserved =\n ownerType === \"node\" ? RESERVED_NODE_KEYS : RESERVED_EDGE_KEYS;\n const result: Record<string, ExtensionPropertyType> = {};\n for (const [propertyName, propertyValue] of Object.entries(raw)) {\n const propertyPath = `${path}/${encodeJsonPointerSegment(propertyName)}`;\n if (reserved.has(propertyName)) {\n issues.push({\n path: propertyPath,\n message: `Property name \"${propertyName}\" is reserved for ${ownerType} \"${ownerName}\".`,\n code: \"RESERVED_PROPERTY_NAME\",\n });\n continue;\n }\n if (propertyName.startsWith(\"$\")) {\n issues.push({\n path: propertyPath,\n message: `Property name \"${propertyName}\" uses the reserved \"$\" prefix.`,\n code: \"RESERVED_PROPERTY_NAME\",\n });\n continue;\n }\n const validated = validateProperty(\n propertyValue,\n propertyPath,\n 0,\n issues,\n strict,\n );\n if (validated === undefined) continue;\n result[propertyName] = validated;\n }\n\n return result;\n}\n\nfunction validateProperty(\n raw: unknown,\n path: string,\n depth: number,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionPropertyType | undefined {\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message:\n \"Property descriptor must be a plain object with a `type` field.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n const property = raw;\n const type = property[\"type\"];\n if (typeof type !== \"string\" || !SUPPORTED_PROPERTY_TYPES.has(type)) {\n issues.push({\n path: `${path}/type`,\n message: `Unsupported property type ${describeUnknownValue(type)}. Supported: ${[...SUPPORTED_PROPERTY_TYPES].join(\", \")}.`,\n code: \"UNSUPPORTED_PROPERTY_TYPE\",\n });\n return undefined;\n }\n\n // Strict authoring mode: reject unknown sibling keys against the\n // per-type allowlist BEFORE dispatch. A typo like `minLenght` on a\n // string property would otherwise compile to a `z.string()` with no\n // length constraint and ship through to ingest. Persistence-load\n // mode skips this so a future v1.x.y writer's additive keys ride\n // forward.\n if (strict) rejectUnknownPropertyKeys(property, type, path, issues);\n\n switch (type) {\n case \"string\": {\n return validateStringProperty(property, path, issues, strict);\n }\n case \"number\": {\n return validateNumberProperty(property, path, issues);\n }\n case \"boolean\": {\n return validateBooleanProperty(property, path, issues);\n }\n case \"enum\": {\n return validateEnumProperty(property, path, issues);\n }\n case \"array\": {\n return validateArrayProperty(property, path, depth, issues, strict);\n }\n case \"object\": {\n return validateObjectProperty(property, path, depth, issues, strict);\n }\n }\n return undefined;\n}\n\nfunction validateStringProperty(\n raw: Record<string, unknown>,\n path: string,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionStringProperty | undefined {\n const minLength = validateNonNegativeInteger(\n raw[\"minLength\"],\n `${path}/minLength`,\n \"string.minLength\",\n \"INVALID_LENGTH_BOUNDS\",\n issues,\n );\n const maxLength = validateNonNegativeInteger(\n raw[\"maxLength\"],\n `${path}/maxLength`,\n \"string.maxLength\",\n \"INVALID_LENGTH_BOUNDS\",\n issues,\n );\n if (\n minLength !== undefined &&\n maxLength !== undefined &&\n minLength > maxLength\n ) {\n issues.push({\n path,\n message: `string.minLength (${minLength}) cannot exceed string.maxLength (${maxLength}).`,\n code: \"INVALID_LENGTH_BOUNDS\",\n });\n }\n\n let pattern: string | undefined;\n if (raw[\"pattern\"] !== undefined) {\n if (typeof raw[\"pattern\"] === \"string\") {\n try {\n new RegExp(raw[\"pattern\"]);\n pattern = raw[\"pattern\"];\n } catch (error) {\n issues.push({\n path: `${path}/pattern`,\n message: `Pattern is not a valid regular expression: ${\n error instanceof Error ? error.message : String(error)\n }`,\n code: \"INVALID_PATTERN\",\n });\n }\n } else {\n issues.push({\n path: `${path}/pattern`,\n message: \"`pattern` must be a string regular expression.\",\n code: \"INVALID_PATTERN\",\n });\n }\n }\n\n let format: ExtensionStringProperty[\"format\"];\n if (raw[\"format\"] !== undefined) {\n if (typeof raw[\"format\"] !== \"string\") {\n issues.push({\n path: `${path}/format`,\n message: `String format must be a string; received ${describeUnknownValue(raw[\"format\"])}.`,\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n } else if (SUPPORTED_STRING_FORMATS.has(raw[\"format\"])) {\n format = raw[\"format\"] as ExtensionStringProperty[\"format\"];\n } else if (strict) {\n // Authoring-mode reject. A typo like `\"date-time\"` (no\n // hyphen) silently compiled to a plain `z.string()` in earlier\n // versions, so `safeParse(\"not-a-date\")` succeeded — surfacing\n // the typo here is the contract.\n issues.push({\n path: `${path}/format`,\n message: `Unsupported string format \"${raw[\"format\"]}\". Supported: ${[...SUPPORTED_STRING_FORMATS].join(\", \")}.`,\n code: \"UNSUPPORTED_STRING_FORMAT\",\n });\n }\n // Non-strict (persistence-load) path: unknown format silently\n // drops to a plain `z.string()`. A future v1.x.y writer may\n // introduce a new format identifier; an older v1 reader still\n // parses the document, just without the new format's behaviour.\n }\n\n const modifiers = validatePropertyModifiers(raw, path, \"string\", issues);\n if (modifiers === undefined) return undefined;\n\n if (format !== undefined && modifiers.searchable !== undefined) {\n issues.push({\n path,\n message:\n \"`searchable` cannot be combined with `format` on a string property — the format-specific schema cannot carry the searchable brand. Drop one, or split into two fields.\",\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n return undefined;\n }\n\n if (\n format !== undefined &&\n (minLength !== undefined ||\n maxLength !== undefined ||\n pattern !== undefined)\n ) {\n issues.push({\n path,\n message:\n \"`format` cannot be combined with `minLength`, `maxLength`, or `pattern` on a string property — the format-routed schema (`z.iso.datetime` / `z.url`) is not a `z.ZodString` and cannot carry length or pattern refinements. Drop the refinement, or drop the format and validate the shape with `pattern`.\",\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n return undefined;\n }\n\n return finalizeProperty<ExtensionStringProperty>(\n \"string\",\n { minLength, maxLength, pattern, format },\n modifiers,\n );\n}\n\nfunction validateNumberProperty(\n raw: Record<string, unknown>,\n path: string,\n issues: GraphExtensionIssue[],\n): ExtensionNumberProperty | undefined {\n // Forward-compat: unknown refinement keys are silently accepted.\n const min = validateOptionalFiniteNumber(\n raw[\"min\"],\n `${path}/min`,\n \"`min`\",\n \"INVALID_NUMBER_BOUNDS\",\n issues,\n );\n const max = validateOptionalFiniteNumber(\n raw[\"max\"],\n `${path}/max`,\n \"`max`\",\n \"INVALID_NUMBER_BOUNDS\",\n issues,\n );\n if (min !== undefined && max !== undefined && min > max) {\n issues.push({\n path,\n message: `number.min (${min}) cannot exceed number.max (${max}).`,\n code: \"INVALID_NUMBER_BOUNDS\",\n });\n }\n\n const int = validateOptionalBoolean(\n raw[\"int\"],\n `${path}/int`,\n \"`int`\",\n \"INVALID_PROPERTY_REFINEMENT\",\n issues,\n );\n\n // Integer + non-integer bounds: reject early so the compiled Zod schema\n // doesn't silently swallow values like `min: 1.5, int: true`.\n if (int === true) {\n if (min !== undefined && !Number.isInteger(min)) {\n issues.push({\n path: `${path}/min`,\n message: \"`min` must be an integer when `int: true`.\",\n code: \"INVALID_NUMBER_BOUNDS\",\n });\n }\n if (max !== undefined && !Number.isInteger(max)) {\n issues.push({\n path: `${path}/max`,\n message: \"`max` must be an integer when `int: true`.\",\n code: \"INVALID_NUMBER_BOUNDS\",\n });\n }\n }\n\n const modifiers = validatePropertyModifiers(raw, path, \"number\", issues);\n if (modifiers === undefined) return undefined;\n\n return finalizeProperty<ExtensionNumberProperty>(\n \"number\",\n { min, max, int },\n modifiers,\n );\n}\n\nfunction validateBooleanProperty(\n raw: Record<string, unknown>,\n path: string,\n issues: GraphExtensionIssue[],\n): ExtensionBooleanProperty | undefined {\n const modifiers = validatePropertyModifiers(raw, path, \"boolean\", issues);\n if (modifiers === undefined) return undefined;\n return finalizeProperty<ExtensionBooleanProperty>(\"boolean\", {}, modifiers);\n}\n\nfunction validateEnumProperty(\n raw: Record<string, unknown>,\n path: string,\n issues: GraphExtensionIssue[],\n): ExtensionEnumProperty | undefined {\n // Forward-compat: unknown refinement keys are silently accepted.\n const valuesRaw = raw[\"values\"];\n if (!Array.isArray(valuesRaw) || valuesRaw.length === 0) {\n issues.push({\n path: `${path}/values`,\n message: \"`enum.values` must be a non-empty array of strings.\",\n code: \"INVALID_ENUM_VALUES\",\n });\n return undefined;\n }\n\n const values: string[] = [];\n const seen = new Set<string>();\n for (const [index, value] of valuesRaw.entries()) {\n if (typeof value !== \"string\") {\n issues.push({\n path: `${path}/values/${index}`,\n message: \"`enum.values` entries must be strings.\",\n code: \"INVALID_ENUM_VALUES\",\n });\n return undefined;\n }\n if (seen.has(value)) {\n issues.push({\n path: `${path}/values/${index}`,\n message: `Duplicate enum value \"${value}\".`,\n code: \"INVALID_ENUM_VALUES\",\n });\n return undefined;\n }\n seen.add(value);\n values.push(value);\n }\n\n const modifiers = validatePropertyModifiers(raw, path, \"enum\", issues);\n if (modifiers === undefined) return undefined;\n\n return finalizeProperty<ExtensionEnumProperty>(\"enum\", { values }, modifiers);\n}\n\nfunction validateArrayProperty(\n raw: Record<string, unknown>,\n path: string,\n depth: number,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionArrayProperty | undefined {\n // Forward-compat: unknown refinement keys are silently accepted.\n const itemsRaw = raw[\"items\"];\n if (itemsRaw === undefined) {\n issues.push({\n path: `${path}/items`,\n message: \"`array.items` is required.\",\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n return undefined;\n }\n if (!isPlainObject(itemsRaw)) {\n issues.push({\n path: `${path}/items`,\n message: \"`array.items` must be a plain property descriptor.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n const itemType = itemsRaw[\"type\"];\n if (itemType === \"array\") {\n issues.push({\n path: `${path}/items`,\n message: \"Nested arrays are not supported in v1.\",\n code: \"NESTED_ARRAY\",\n });\n return undefined;\n }\n const items = validateProperty(\n itemsRaw,\n `${path}/items`,\n depth + 1,\n issues,\n strict,\n );\n if (items === undefined) return undefined;\n if (items.type === \"array\") {\n // Type-narrow only: `validateProperty` returns the wider\n // `ExtensionPropertyType`, but `ExtensionArrayItemType` excludes\n // nested arrays. The earlier `itemType === \"array\"` check above\n // already rejected this at the raw-shape level, so this branch\n // is unreachable at runtime.\n return undefined;\n }\n\n const modifiers = validatePropertyModifiers(raw, path, \"array\", issues);\n if (modifiers === undefined) return undefined;\n\n return finalizeProperty<ExtensionArrayProperty>(\n \"array\",\n { items },\n modifiers,\n );\n}\n\nfunction validateObjectProperty(\n raw: Record<string, unknown>,\n path: string,\n depth: number,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionObjectProperty | undefined {\n // Forward-compat: unknown refinement keys are silently accepted.\n if (depth >= 1) {\n issues.push({\n path,\n message: \"Nested objects are limited to a single level in v1.\",\n code: \"NESTED_OBJECT_TOO_DEEP\",\n });\n return undefined;\n }\n\n const propertiesRaw = raw[\"properties\"];\n if (!isPlainObject(propertiesRaw)) {\n issues.push({\n path: `${path}/properties`,\n message: \"`object.properties` must be a plain object.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n const propertiesEntries = Object.entries(propertiesRaw);\n if (propertiesEntries.length === 0) {\n issues.push({\n path: `${path}/properties`,\n message: \"`object.properties` must declare at least one field.\",\n code: \"EMPTY_PROPERTIES\",\n });\n return undefined;\n }\n\n const fields: Record<string, ExtensionObjectFieldProperty> = {};\n for (const [name, value] of propertiesEntries) {\n const fieldPath = `${path}/properties/${encodeJsonPointerSegment(name)}`;\n if (!isPlainObject(value)) {\n issues.push({\n path: fieldPath,\n message: \"Object field descriptor must be a plain object.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n continue;\n }\n const fieldType = value[\"type\"];\n if (fieldType === \"object\") {\n issues.push({\n path: fieldPath,\n message: \"Nested objects are limited to a single level in v1.\",\n code: \"NESTED_OBJECT_TOO_DEEP\",\n });\n continue;\n }\n const field = validateProperty(value, fieldPath, depth + 1, issues, strict);\n if (field === undefined) continue;\n fields[name] = field as ExtensionObjectFieldProperty;\n }\n\n const modifiers = validatePropertyModifiers(raw, path, \"object\", issues);\n if (modifiers === undefined) return undefined;\n\n return finalizeProperty<ExtensionObjectProperty>(\n \"object\",\n { properties: fields },\n modifiers,\n );\n}\n\n// ============================================================\n// Modifiers\n// ============================================================\n\ntype NormalizedModifiers = Readonly<{\n optional?: boolean;\n searchable?: { language?: string };\n embedding?: { dimensions: number };\n description?: string;\n}>;\n\n/**\n * Assemble a final property descriptor from a type-specific field map\n * plus the already-validated modifiers. Centralizes the modifier-spread\n * boilerplate so adding a new modifier slot (or tweaking how undefineds\n * are pruned) touches one site instead of six.\n *\n * Callers run `validatePropertyModifiers` first because some types\n * (`string`) need cross-modifier validation (e.g. `format` ↔ `searchable`)\n * after the modifiers are known but before the final shape is built.\n */\nfunction finalizeProperty<T extends ExtensionPropertyType>(\n type: T[\"type\"],\n specific: Record<string, unknown>,\n modifiers: NormalizedModifiers,\n): T {\n return compactUndefined<Record<string, unknown>>({\n type,\n ...specific,\n optional: modifiers.optional,\n searchable: modifiers.searchable,\n embedding: modifiers.embedding,\n description: modifiers.description,\n }) as T;\n}\n\nfunction validatePropertyModifiers(\n raw: Record<string, unknown>,\n path: string,\n propertyType: ExtensionPropertyType[\"type\"],\n issues: GraphExtensionIssue[],\n): NormalizedModifiers | undefined {\n // Mirrors `issues.length` rather than carrying its own boolean: any\n // helper that pushes also signals failure here.\n const issuesAtEntry = issues.length;\n\n const optional = validateOptionalBoolean(\n raw[\"optional\"],\n `${path}/optional`,\n \"`optional`\",\n \"INVALID_PROPERTY_REFINEMENT\",\n issues,\n );\n\n let searchable: { language?: string } | undefined;\n if (raw[\"searchable\"] !== undefined) {\n if (propertyType !== \"string\") {\n issues.push({\n path: `${path}/searchable`,\n message: `\\`searchable\\` is only valid on string properties (got \"${propertyType}\").`,\n code: \"INVALID_MODIFIER_TARGET\",\n });\n } else if (isPlainObject(raw[\"searchable\"])) {\n const searchableRaw = raw[\"searchable\"];\n const language = searchableRaw[\"language\"];\n if (language === undefined) {\n searchable = {};\n } else {\n if (typeof language !== \"string\" || language.length === 0) {\n issues.push({\n path: `${path}/searchable/language`,\n message: \"`searchable.language` must be a non-empty string.\",\n code: \"INVALID_SEARCHABLE_LANGUAGE\",\n });\n } else {\n searchable = { language };\n }\n }\n } else {\n issues.push({\n path: `${path}/searchable`,\n message: \"`searchable` must be a plain object (use `{}` for defaults).\",\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n }\n }\n\n let embedding: { dimensions: number } | undefined;\n if (raw[\"embedding\"] !== undefined) {\n if (propertyType === \"array\") {\n const itemsRaw = raw[\"items\"];\n const itemType = isPlainObject(itemsRaw) ? itemsRaw[\"type\"] : undefined;\n if (itemType !== \"number\") {\n issues.push({\n path: `${path}/embedding`,\n message: '`embedding` requires `array.items.type === \"number\"`.',\n code: \"INVALID_MODIFIER_TARGET\",\n });\n } else if (isPlainObject(raw[\"embedding\"])) {\n const dim = raw[\"embedding\"][\"dimensions\"];\n if (typeof dim !== \"number\" || !Number.isInteger(dim) || dim <= 0) {\n issues.push({\n path: `${path}/embedding/dimensions`,\n message: \"`embedding.dimensions` must be a positive integer.\",\n code: \"INVALID_EMBEDDING_DIMENSIONS\",\n });\n } else {\n // `embedding(dimensions)` replaces the array's item validator with a\n // length+finite-number check; any extra refinements on the items\n // (min, max, int) would silently disappear at compile time.\n const itemsObject = isPlainObject(itemsRaw) ? itemsRaw : {};\n const extraneous = Object.keys(itemsObject).filter(\n (key) => key !== \"type\",\n );\n if (extraneous.length > 0) {\n issues.push({\n path: `${path}/items`,\n message: `\\`embedding\\` arrays must declare items as \\`{ type: \"number\" }\\` only — additional refinements (${extraneous.join(\", \")}) are silently dropped by the embedding schema. Drop the refinements, or drop \\`embedding\\` and use a plain array.`,\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n } else {\n embedding = { dimensions: dim };\n }\n }\n } else {\n issues.push({\n path: `${path}/embedding`,\n message:\n \"`embedding` must be a plain object with a `dimensions` field.\",\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n }\n } else {\n issues.push({\n path: `${path}/embedding`,\n message: `\\`embedding\\` is only valid on array-of-number properties (got \"${propertyType}\").`,\n code: \"INVALID_MODIFIER_TARGET\",\n });\n }\n }\n\n let description: string | undefined;\n if (raw[\"description\"] !== undefined) {\n if (typeof raw[\"description\"] === \"string\") {\n description = raw[\"description\"];\n } else {\n issues.push({\n path: `${path}/description`,\n message: \"`description` must be a string.\",\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n }\n }\n\n if (issues.length > issuesAtEntry) return undefined;\n return compactUndefined<NormalizedModifiers>({\n optional,\n searchable,\n embedding,\n description,\n });\n}\n\n// ============================================================\n// Unique constraints\n// ============================================================\n\nfunction validateUniqueConstraints(\n raw: unknown,\n path: string,\n properties: Record<string, ExtensionPropertyType>,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): readonly ExtensionUniqueConstraint[] | undefined {\n if (raw === undefined) return undefined;\n if (!Array.isArray(raw)) {\n issues.push({\n path,\n message: \"`unique` must be an array of constraint declarations.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n const result: ExtensionUniqueConstraint[] = [];\n const names = new Set<string>();\n for (const [index, entry] of raw.entries()) {\n const constraintPath = `${path}/${index}`;\n if (!isPlainObject(entry)) {\n issues.push({\n path: constraintPath,\n message: \"Unique constraint must be a plain object.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n continue;\n }\n\n if (strict) {\n rejectUnknownObjectKeys(\n entry,\n UNIQUE_CONSTRAINT_KEYS,\n \"unique-constraint\",\n constraintPath,\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n }\n\n const constraint = entry;\n const name = constraint[\"name\"];\n if (typeof name !== \"string\" || name.length === 0) {\n issues.push({\n path: `${constraintPath}/name`,\n message: \"Unique constraint `name` must be a non-empty string.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n continue;\n }\n if (names.has(name)) {\n issues.push({\n path: `${constraintPath}/name`,\n message: `Duplicate unique constraint name \"${name}\".`,\n code: \"DUPLICATE_UNIQUE_CONSTRAINT\",\n });\n continue;\n }\n names.add(name);\n\n const fieldsRaw = constraint[\"fields\"];\n if (!Array.isArray(fieldsRaw) || fieldsRaw.length === 0) {\n issues.push({\n path: `${constraintPath}/fields`,\n message:\n \"Unique constraint `fields` must be a non-empty array of property names.\",\n code: \"EMPTY_UNIQUE_FIELDS\",\n });\n continue;\n }\n\n const fields: string[] = [];\n const seenFields = new Set<string>();\n let fieldsValid = true;\n for (const [fieldIndex, field] of fieldsRaw.entries()) {\n if (typeof field !== \"string\" || field.length === 0) {\n issues.push({\n path: `${constraintPath}/fields/${fieldIndex}`,\n message: \"Unique constraint field must be a non-empty string.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n fieldsValid = false;\n break;\n }\n if (seenFields.has(field)) {\n issues.push({\n path: `${constraintPath}/fields/${fieldIndex}`,\n message: `Duplicate field \"${field}\" in unique constraint.`,\n code: \"DUPLICATE_UNIQUE_FIELD\",\n });\n fieldsValid = false;\n break;\n }\n if (!(field in properties)) {\n issues.push({\n path: `${constraintPath}/fields/${fieldIndex}`,\n message: `Unique constraint field \"${field}\" is not declared on this kind.`,\n code: \"UNKNOWN_UNIQUE_FIELD\",\n });\n fieldsValid = false;\n break;\n }\n seenFields.add(field);\n fields.push(field);\n }\n if (!fieldsValid) continue;\n\n const scopeResult = validateOptionalLiteral(\n constraint[\"scope\"],\n [\"kind\", \"kindWithSubClasses\"] as const,\n `${constraintPath}/scope`,\n \"Unique constraint `scope`\",\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n if (!scopeResult.ok) continue;\n const scope = scopeResult.value;\n\n const collationResult = validateOptionalLiteral(\n constraint[\"collation\"],\n [\"binary\", \"caseInsensitive\"] as const,\n `${constraintPath}/collation`,\n \"Unique constraint `collation`\",\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n if (!collationResult.ok) continue;\n const collation = collationResult.value;\n\n const where: { field: string; op: NullCheckOp } | undefined =\n constraint[\"where\"] === undefined ?\n undefined\n : validateUniqueWhere(\n constraint[\"where\"],\n `${constraintPath}/where`,\n properties,\n issues,\n strict,\n );\n if (constraint[\"where\"] !== undefined && where === undefined) continue;\n\n result.push(\n compactUndefined<ExtensionUniqueConstraint>({\n name,\n fields,\n scope,\n collation,\n where,\n }),\n );\n }\n\n return result;\n}\n\nfunction validateUniqueWhere(\n raw: unknown,\n path: string,\n properties: Record<string, ExtensionPropertyType>,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): { field: string; op: NullCheckOp } | undefined {\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message: \"Unique constraint `where` must be `{ field, op }`.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n if (strict) {\n rejectUnknownObjectKeys(\n raw,\n WHERE_CLAUSE_KEYS,\n \"where-clause\",\n path,\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n }\n const field = raw[\"field\"];\n const op = raw[\"op\"];\n if (typeof field !== \"string\" || field.length === 0) {\n issues.push({\n path: `${path}/field`,\n message: \"Unique `where.field` must be a non-empty string.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n if (!(field in properties)) {\n issues.push({\n path: `${path}/field`,\n message: `Unique \\`where.field\\` \"${field}\" is not declared on this kind.`,\n code: \"UNKNOWN_UNIQUE_WHERE_FIELD\",\n });\n return undefined;\n }\n if (op !== \"isNull\" && op !== \"isNotNull\") {\n issues.push({\n path: `${path}/op`,\n message: `Unique \\`where.op\\` must be \"isNull\" or \"isNotNull\" (got ${describeUnknownValue(op)}).`,\n code: \"INVALID_UNIQUE_WHERE_OP\",\n });\n return undefined;\n }\n return { field, op };\n}\n\n// ============================================================\n// Annotations\n// ============================================================\n\nfunction validateAnnotations(\n raw: unknown,\n path: string,\n ownerLabel: string,\n issues: GraphExtensionIssue[],\n): KindAnnotations | undefined {\n if (raw === undefined) return undefined;\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message: `Annotations must be a plain JSON object.`,\n code: \"INVALID_ANNOTATION\",\n });\n return undefined;\n }\n\n try {\n assertJsonValue(raw, \"annotations\", ownerLabel);\n } catch (error) {\n if (error instanceof ConfigurationError) {\n const detailPath = (error.details as Record<string, unknown>)[\"path\"];\n const annotationPath =\n typeof detailPath === \"string\" ?\n `${path}/${detailPath\n .replace(/^annotations\\.?/, \"\")\n .replaceAll(\".\", \"/\")}`\n : path;\n issues.push({\n path: annotationPath,\n message: error.message,\n code: \"INVALID_ANNOTATION\",\n });\n return undefined;\n }\n throw error;\n }\n\n return raw as KindAnnotations;\n}\n\n// ============================================================\n// Helpers\n// ============================================================\n\n// Two-mode unknown-key handling — see `rejectUnknownPropertyKeys`\n// above. Strict authoring (`defineGraphExtension`,\n// `validateGraphExtension(_, { strict: true })`) rejects unknown\n// sibling keys at every property level so a `minLenght`-style typo\n// from an LLM proposal surfaces with a JSON-pointer path instead of\n// silently compiling to a weaker schema. Persistence load\n// (`validateGraphExtension(_, { strict: false })`, used by the\n// `createStoreWithSchema` reader) ignores unknown keys so a future\n// v1.x.y writer with additive refinements still parses on an older\n// v1 reader — the older compiler builds the Zod schema from the\n// refinements it recognizes, and the new modifier's behavior simply\n// isn't applied. `ExtensionPropertyType` is exported so consumers\n// writing runtime-shape generators can add their own strict-key check\n// if needed for additional validation slots beyond what this\n// validator covers.\n\nfunction validateNonNegativeInteger(\n value: unknown,\n path: string,\n label: string,\n code: GraphExtensionIssueCode,\n issues: GraphExtensionIssue[],\n): number | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"number\" || !Number.isInteger(value) || value < 0) {\n issues.push({\n path,\n message: `${label} must be a non-negative integer.`,\n code,\n });\n return undefined;\n }\n return value;\n}\n\nfunction validateOptionalString(\n value: unknown,\n path: string,\n label: string,\n code: GraphExtensionIssueCode,\n issues: GraphExtensionIssue[],\n): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\") {\n issues.push({ path, message: `${label} must be a string.`, code });\n return undefined;\n }\n return value;\n}\n\nfunction validateOptionalBoolean(\n value: unknown,\n path: string,\n label: string,\n code: GraphExtensionIssueCode,\n issues: GraphExtensionIssue[],\n): boolean | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"boolean\") {\n issues.push({ path, message: `${label} must be a boolean.`, code });\n return undefined;\n }\n return value;\n}\n\nfunction validateOptionalFiniteNumber(\n value: unknown,\n path: string,\n label: string,\n code: GraphExtensionIssueCode,\n issues: GraphExtensionIssue[],\n): number | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n issues.push({ path, message: `${label} must be a finite number.`, code });\n return undefined;\n }\n return value;\n}\n\n/**\n * Discriminated result for optional-literal validation: callers branch\n * on `ok` so \"absent\" (`{ ok: true, value: undefined }`) is distinct from\n * \"invalid\" (`{ ok: false }`). Replaces the prior issue-counter trick\n * (`const before = issues.length; … if (issues.length > before) …`)\n * which conflated those two outcomes when the underlying helper\n * returned `T | undefined`.\n */\ntype OptionalLiteralResult<T> =\n Readonly<{ ok: true; value: T | undefined }> | Readonly<{ ok: false }>;\n\nfunction validateOptionalLiteral<T extends string>(\n value: unknown,\n allowed: readonly T[],\n path: string,\n label: string,\n code: GraphExtensionIssueCode,\n issues: GraphExtensionIssue[],\n): OptionalLiteralResult<T> {\n if (value === undefined) return { ok: true, value: undefined };\n if (typeof value !== \"string\" || !allowed.includes(value as T)) {\n const list = allowed.map((entry) => `\"${entry}\"`).join(\", \");\n issues.push({ path, message: `${label} must be one of: ${list}.`, code });\n return { ok: false };\n }\n return { ok: true, value: value as T };\n}\n\nfunction isValidKindName(name: string): boolean {\n return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name);\n}\n\n/**\n * Renders an unknown value for inclusion in an error message without\n * tripping `[object Object]` from a generic `String()` call. Strings\n * are quoted; numbers, booleans, and null pass through; other values\n * use `JSON.stringify` and fall back to `typeof` if that fails.\n */\nfunction describeUnknownValue(value: unknown): string {\n if (typeof value === \"string\") return `\"${value}\"`;\n if (\n value === null ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return JSON.stringify(value);\n }\n try {\n return JSON.stringify(value);\n } catch {\n return `(${typeof value})`;\n }\n}\n\n// ============================================================\n// Freezing\n// ============================================================\n\nfunction freezeDocument(input: {\n version: GraphExtensionVersion;\n nodes: Record<string, ExtensionNodeDef> | undefined;\n edges: Record<string, ExtensionEdgeDef> | undefined;\n ontology: readonly ExtensionOntologyRelation[] | undefined;\n indexes: readonly ExtensionIndex[] | undefined;\n}): GraphExtension {\n return Object.freeze(\n compactUndefined<{\n version: GraphExtensionVersion;\n nodes?: Record<string, ExtensionNodeDef>;\n edges?: Record<string, ExtensionEdgeDef>;\n ontology?: readonly ExtensionOntologyRelation[];\n indexes?: readonly ExtensionIndex[];\n }>({\n version: input.version,\n nodes: input.nodes === undefined ? undefined : freezeDeep(input.nodes),\n edges: input.edges === undefined ? undefined : freezeDeep(input.edges),\n ontology:\n input.ontology === undefined ?\n undefined\n : Object.freeze(\n input.ontology.map((entry) => Object.freeze({ ...entry })),\n ),\n indexes:\n input.indexes === undefined ?\n undefined\n : Object.freeze(input.indexes.map((entry) => freezeDeep({ ...entry }))),\n }),\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/ontology/closures.ts","../src/graph-extension/errors.ts","../src/utils/result.ts","../src/graph-extension/extension-types.ts","../src/graph-extension/validation.ts"],"names":["index","TypeGraphError","ALL_META_EDGE_NAMES","encodeJsonPointerSegment","isPlainObject","compactUndefined","RESERVED_NODE_KEYS","RESERVED_EDGE_KEYS","assertJsonValue","ConfigurationError","freezeDeep"],"mappings":"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","file":"chunk-XDMPDUKL.cjs","sourcesContent":["/**\n * Transitive closure computation for ontology relationships.\n *\n * Uses Warshall's algorithm for efficient closure computation.\n */\n\n/**\n * Computes the transitive closure of a set of directed relations.\n *\n * Given relations like [A→B, B→C], computes all transitive paths [A→B, A→C, B→C].\n *\n * @param relations - Array of [from, to] pairs representing direct relationships\n * @returns Map from each 'from' to the set of all reachable 'to' values\n */\nexport function computeTransitiveClosure(\n relations: readonly (readonly [string, string])[],\n): ReadonlyMap<string, ReadonlySet<string>> {\n // Build mutable map for computation\n const closure = new Map<string, Set<string>>();\n\n // Collect all nodes\n const allNodes = new Set<string>();\n for (const [from, to] of relations) {\n allNodes.add(from);\n allNodes.add(to);\n }\n\n // Initialize empty sets for all nodes\n for (const node of allNodes) {\n closure.set(node, new Set());\n }\n\n // Add direct relationships\n for (const [from, to] of relations) {\n closure.get(from)?.add(to);\n }\n\n // Warshall's algorithm for transitive closure\n // For each intermediate node k, check if i→k and k→j implies i→j\n for (const k of allNodes) {\n for (const index of allNodes) {\n const indexReaches = closure.get(index);\n if (!indexReaches?.has(k)) continue;\n\n const kReaches = closure.get(k);\n if (!kReaches) continue;\n\n for (const index of kReaches) {\n indexReaches.add(index);\n }\n }\n }\n\n return closure;\n}\n\n/**\n * Computes the inverse of a transitive closure map.\n *\n * Given A→{B, C}, returns B→{A}, C→{A}.\n */\nexport function invertClosure(\n closure: ReadonlyMap<string, ReadonlySet<string>>,\n): ReadonlyMap<string, ReadonlySet<string>> {\n const result = new Map<string, Set<string>>();\n\n for (const [from, tos] of closure) {\n for (const to of tos) {\n const existing = result.get(to) ?? new Set();\n existing.add(from);\n result.set(to, existing);\n }\n }\n\n return result;\n}\n\n/**\n * Checks if there's a path from source to target in the closure.\n */\nexport function isReachable(\n closure: ReadonlyMap<string, ReadonlySet<string>>,\n source: string,\n target: string,\n): boolean {\n return closure.get(source)?.has(target) ?? false;\n}\n","/**\n * Errors raised across the graph-extension surface.\n *\n * Two flavours:\n *\n * - **Validation issues** (`GraphExtensionValidationError` +\n * `GraphExtensionIssue` / `GraphExtensionIssueCode`) — produced by\n * `validateGraphExtension`. The issue list batches every failure\n * with a JSON-pointer `path` so a UI can highlight every offending\n * field at once.\n * - **Operation errors** (every other class in this file, all extending\n * `GraphExtensionError`) — thrown one at a time from `evolve`,\n * `removeKinds`, `materializeIndexes`, search, etc. Each carries a\n * stable string `code` for logging / serialization PLUS a typed\n * shape so consumers can `instanceof` for control flow.\n */\nimport type { KindEntity } from \"../core/types\";\nimport { type ErrorCategory, TypeGraphError } from \"../errors\";\n\n// ============================================================\n// Validation issues (multi-issue batch)\n// ============================================================\n\n/**\n * One specific issue raised during graph-extension validation.\n */\nexport type GraphExtensionIssue = Readonly<{\n /**\n * JSON-pointer path to the offending value, rooted at the document\n * (e.g. `/nodes/Paper/properties/title/pattern`). The empty string\n * `\"\"` means \"the document itself\".\n */\n path: string;\n /** Human-readable explanation of the failure. */\n message: string;\n /**\n * Stable machine-readable code so callers (and tests) can branch on\n * specific failure modes without parsing messages. New codes are\n * additive.\n */\n code: GraphExtensionIssueCode;\n}>;\n\n/**\n * Stable machine codes for every validation failure produced by the\n * document validator. New codes are additive — existing codes never\n * change meaning.\n *\n * Note: codes here describe per-field validation problems. Operation-\n * level errors (kind not found, version mismatch on persisted doc,\n * compile-time-kind removal, etc.) surface as typed Error subclasses\n * exported below — not as issue codes.\n */\n/**\n * Every issue code emitted by `validateGraphExtension`. Const-array form\n * so tests, codegen, and runtime introspection can iterate the full set\n * without restating it.\n */\nexport const GRAPH_EXTENSION_ISSUE_CODES = [\n \"UNSUPPORTED_PROPERTY_TYPE\",\n \"INVALID_PROPERTY_REFINEMENT\",\n \"NESTED_ARRAY\",\n \"NESTED_OBJECT_TOO_DEEP\",\n \"INVALID_MODIFIER_TARGET\",\n \"INVALID_ENUM_VALUES\",\n \"INVALID_NUMBER_BOUNDS\",\n \"INVALID_LENGTH_BOUNDS\",\n \"INVALID_PATTERN\",\n \"INVALID_EMBEDDING_DIMENSIONS\",\n \"INVALID_SEARCHABLE_LANGUAGE\",\n \"RESERVED_PROPERTY_NAME\",\n \"INVALID_KIND_NAME\",\n \"DUPLICATE_KIND_NAME\",\n \"EMPTY_PROPERTIES\",\n \"EMPTY_FROM_OR_TO\",\n \"DUPLICATE_UNIQUE_CONSTRAINT\",\n \"EMPTY_UNIQUE_FIELDS\",\n \"DUPLICATE_UNIQUE_FIELD\",\n \"UNKNOWN_UNIQUE_FIELD\",\n \"INVALID_UNIQUE_WHERE_OP\",\n \"UNKNOWN_UNIQUE_WHERE_FIELD\",\n \"INVALID_ANNOTATION\",\n \"UNKNOWN_META_EDGE\",\n \"ONTOLOGY_CYCLE\",\n \"ONTOLOGY_SELF_LOOP\",\n \"ONTOLOGY_DISJOINT_CONFLICT\",\n \"DUPLICATE_ONTOLOGY_RELATION\",\n \"INVALID_DOCUMENT_SHAPE\",\n \"UNKNOWN_DOCUMENT_KEY\",\n \"UNSUPPORTED_STRING_FORMAT\",\n \"INVALID_INDEX_DECLARATION\",\n \"DUPLICATE_INDEX_NAME\",\n \"EMPTY_INDEX_FIELDS\",\n \"UNKNOWN_PROPERTY_KEY\",\n] as const;\n\nexport type GraphExtensionIssueCode =\n (typeof GRAPH_EXTENSION_ISSUE_CODES)[number];\n\n// ============================================================\n// Operation errors (typed, single-error throws)\n// ============================================================\n\n/**\n * Base class for every graph-extension error. Consumers can catch\n * the family with one `instanceof GraphExtensionError` check and\n * branch on the concrete subclass beneath. Carries the same\n * `code` / `category` / `details` slots as `TypeGraphError` so existing\n * `isTypeGraphError` / `isUserRecoverable` helpers continue to apply.\n */\nexport abstract class GraphExtensionError extends TypeGraphError {\n // The concrete `code` is set as a literal-typed property on each\n // subclass so consumers can branch on it with full type narrowing.\n declare readonly code: string;\n\n protected constructor(spec: {\n message: string;\n code: string;\n details: Readonly<Record<string, unknown>>;\n suggestion: string;\n category?: ErrorCategory;\n cause?: unknown;\n }) {\n super(spec.message, spec.code, {\n details: spec.details,\n category: spec.category ?? \"user\",\n suggestion: spec.suggestion,\n ...(spec.cause === undefined ? {} : { cause: spec.cause }),\n });\n // `new.target.name` resolves to the concrete subclass at construction\n // time, eliminating per-subclass `this.name = \"ClassName\"` repetition.\n this.name = new.target.name;\n }\n}\n\n/**\n * Thrown when `validateGraphExtension` (or `defineGraphExtension`)\n * rejects an input document for one or more shape/content reasons.\n *\n * The `issues` array carries every failure with a JSON-pointer\n * `path`, so callers presenting the document to a human reviewer can\n * highlight every offending field at once.\n */\nexport class GraphExtensionValidationError extends GraphExtensionError {\n override readonly code = \"GRAPH_EXTENSION_INVALID\" as const;\n readonly issues: readonly GraphExtensionIssue[];\n declare readonly details: Readonly<{\n issues: readonly GraphExtensionIssue[];\n }>;\n\n constructor(issues: readonly GraphExtensionIssue[], cause?: unknown) {\n const frozenIssues = Object.freeze([...issues]);\n super({\n message: `Graph extension document is invalid (${issues.length} issue${\n issues.length === 1 ? \"\" : \"s\"\n }): ${summarizeIssues(issues)}`,\n code: \"GRAPH_EXTENSION_INVALID\",\n details: { issues: frozenIssues },\n suggestion: `Inspect error.issues for per-field paths and codes; each issue's \"path\" is a JSON pointer into the source document.`,\n cause,\n });\n this.issues = frozenIssues;\n }\n}\n\n/**\n * Generic \"first N items + overflow tail\" summary for inclusion in an\n * Error message. Shared by `summarizeIssues` and `summarizeChanges`\n * because the overflow shape is identical; only the per-item\n * formatting differs.\n */\nfunction summarizeWithOverflow<T>(\n items: readonly T[],\n formatItem: (item: T) => string,\n emptyMessage: string,\n): string {\n if (items.length === 0) return emptyMessage;\n const head = items\n .slice(0, 3)\n .map((item) => formatItem(item))\n .join(\"; \");\n const overflow = items.length > 3 ? ` (+${items.length - 3} more)` : \"\";\n return `${head}${overflow}`;\n}\n\nfunction summarizeIssues(issues: readonly GraphExtensionIssue[]): string {\n return summarizeWithOverflow(\n issues,\n (issue) => `${issue.path || \"(root)\"} — ${issue.message}`,\n \"no specific issues recorded\",\n );\n}\n\n/**\n * Thrown when an extension declares a kind whose name collides with an\n * existing compile-time kind. The graph-extension contract is\n * additive: graph-extension-declared kinds cannot shadow compile-time kinds.\n */\nexport class KindCollisionError extends GraphExtensionError {\n override readonly code = \"KIND_COLLISION\" as const;\n readonly kindName: string;\n readonly entity: KindEntity;\n\n constructor(kindName: string, entity: KindEntity, graphId: string) {\n super({\n message: `Graph extension declares ${entity} kind \"${kindName}\" which already exists as a compile-time kind on graph \"${graphId}\". Graph-extension-declared kinds cannot collide with compile-time kinds.`,\n code: \"KIND_COLLISION\",\n details: { kindName, entity, graphId },\n suggestion:\n \"Pick a different graph-extension-declared kind name, or remove the compile-time declaration.\",\n });\n this.kindName = kindName;\n this.entity = entity;\n }\n}\n\n/**\n * One classified delta in a `IncompatibleChangeError`.\n *\n * `field` is `undefined` for kind-level changes (e.g. tightening edge\n * endpoints, adding a unique constraint to a populated kind). `detail`\n * is human-readable and intended for surfaces showing the change to a\n * reviewer (e.g. `\"minLength: 5 → 10\"`).\n */\n/**\n * Every incompatible-change classification produced by `evolve`'s\n * delta classifier. Const-array form so tests and reviewer UIs can\n * enumerate the set without restating it.\n */\nexport const INCOMPATIBLE_CHANGE_TYPES = [\n \"REMOVE_PROPERTY\",\n \"ADD_REQUIRED_PROPERTY\",\n \"TIGHTEN_OPTIONALITY\",\n \"TIGHTEN_CONSTRAINT\",\n \"ADD_PATTERN\",\n \"CHANGE_PATTERN\",\n \"ADD_FORMAT\",\n \"CHANGE_FORMAT\",\n \"TIGHTEN_INT\",\n \"TIGHTEN_ENUM\",\n \"TYPE_CHANGE\",\n \"ADD_UNIQUE_ON_POPULATED\",\n \"TIGHTEN_EDGE_ENDPOINTS\",\n] as const;\n\nexport type IncompatibleChangeType = (typeof INCOMPATIBLE_CHANGE_TYPES)[number];\n\nexport type IncompatibleChange = Readonly<{\n kind: string;\n field?: string;\n type: IncompatibleChangeType;\n detail?: string;\n}>;\n\n/**\n * Thrown when `evolve` rejects one or more deltas against an existing\n * extension kind. Carries a structured `changes` list so a reviewer\n * UI can show the incompatible deltas across every affected kind in\n * one shot.\n */\nexport class IncompatibleChangeError extends GraphExtensionError {\n override readonly code = \"INCOMPATIBLE_CHANGE\" as const;\n readonly changes: readonly IncompatibleChange[];\n\n constructor(changes: readonly IncompatibleChange[], graphId: string) {\n const frozenChanges = Object.freeze([...changes]);\n super({\n message: `Graph extension contains ${changes.length} incompatible change${\n changes.length === 1 ? \"\" : \"s\"\n } against existing graph-extension kinds on graph \"${graphId}\": ${summarizeChanges(changes)}`,\n code: \"INCOMPATIBLE_CHANGE\",\n details: { graphId, changes: frozenChanges },\n suggestion:\n \"Inspect error.changes for the per-field rejections. Compatible options: change the modification to an additive one (e.g. `optional: true`), or apply the change against an empty kind.\",\n });\n this.changes = frozenChanges;\n }\n}\n\nfunction summarizeChanges(changes: readonly IncompatibleChange[]): string {\n return summarizeWithOverflow(\n changes,\n (change) => {\n const field = change.field === undefined ? \"\" : `.${change.field}`;\n const detail = change.detail === undefined ? \"\" : ` (${change.detail})`;\n return `${change.kind}${field}: ${change.type}${detail}`;\n },\n \"(no specific changes recorded)\",\n );\n}\n\n/**\n * Thrown when an extension's edge or ontology endpoint references a\n * kind that exists in neither the extension nor the host graph.\n * Distinct from `KindNotFoundError` because the cause is a\n * stale persisted extension (a compile-time kind was removed from\n * source after the extension was committed) rather than a\n * call-site typo.\n */\nexport class GraphExtensionUnresolvedEndpointError extends GraphExtensionError {\n override readonly code = \"GRAPH_EXTENSION_UNRESOLVED_ENDPOINT\" as const;\n readonly edgeKind: string;\n readonly side: \"from\" | \"to\";\n readonly endpoint: string;\n\n constructor(\n edgeKind: string,\n side: \"from\" | \"to\",\n endpoint: string,\n graphId: string,\n ) {\n super({\n message: `Graph-extension edge \"${edgeKind}\" ${side}-endpoint \"${endpoint}\" does not resolve to any kind on graph \"${graphId}\". The compile-time kind may have been removed since the extension was committed.`,\n code: \"GRAPH_EXTENSION_UNRESOLVED_ENDPOINT\",\n details: { edgeKind, side, endpoint, graphId },\n suggestion:\n \"Restore the compile-time kind, or remove the graph-extension-declared kind via store.removeKinds before redeploying without it.\",\n });\n this.edgeKind = edgeKind;\n this.side = side;\n this.endpoint = endpoint;\n }\n}\n\n/**\n * Thrown by `removeKinds` when the removal list contains a compile-\n * time kind. Compile-time kinds are removed by recompiling and\n * redeploying — persisting \"removed-compile-time-kind\" state in\n * `schema_doc` is incoherent because the kind would resurrect on the\n * next deploy.\n */\nexport class RemoveCompileTimeKindError extends GraphExtensionError {\n override readonly code = \"REMOVE_COMPILE_TIME_KIND\" as const;\n readonly kindName: string;\n readonly entity: KindEntity;\n\n constructor(kindName: string, entity: KindEntity, graphId: string) {\n super({\n message: `Cannot remove compile-time ${entity} kind \"${kindName}\" via store.removeKinds. Compile-time kinds are removed by recompiling and redeploying without them on graph \"${graphId}\".`,\n code: \"REMOVE_COMPILE_TIME_KIND\",\n details: { kindName, entity, graphId },\n suggestion:\n \"Drop the kind from your defineGraph call and redeploy. Only graph-extension kinds (added via store.evolve) are removable through removeKinds.\",\n });\n this.kindName = kindName;\n this.entity = entity;\n }\n}\n\n/**\n * Thrown by `removeKinds` when a compile-time edge or ontology\n * relation references the graph-extension kind being removed. Removing the\n * kind would orphan compile-time references — incoherent at the next\n * deploy.\n */\nexport class KindHasReferentsError extends GraphExtensionError {\n override readonly code = \"KIND_HAS_REFERENTS\" as const;\n readonly kindName: string;\n readonly referents: readonly KindReferent[];\n\n constructor(\n kindName: string,\n referents: readonly KindReferent[],\n graphId: string,\n ) {\n const summary = referents\n .map((referent) => `${referent.type}:${referent.name}`)\n .join(\", \");\n const frozenReferents = Object.freeze([...referents]);\n super({\n message: `Cannot remove graph-extension kind \"${kindName}\" on graph \"${graphId}\" — it is referenced by compile-time declarations: ${summary}.`,\n code: \"KIND_HAS_REFERENTS\",\n details: { kindName, graphId, referents: frozenReferents },\n suggestion:\n \"Remove the compile-time references first (drop the edge or ontology relation from defineGraph), or pick a different kind to remove.\",\n });\n this.kindName = kindName;\n this.referents = frozenReferents;\n }\n}\n\nexport type KindReferent = Readonly<{\n type: \"compile-time-edge\" | \"compile-time-ontology\";\n name: string;\n}>;\n\n/**\n * Thrown when a persisted graph extension was authored against a\n * higher major version of the graph-extension format than the\n * current library supports. The library refuses to load it rather\n * than risk silently misreading newer fields.\n */\nexport class GraphExtensionVersionUnsupportedError extends GraphExtensionError {\n override readonly code = \"GRAPH_EXTENSION_VERSION_UNSUPPORTED\" as const;\n readonly persistedVersion: number;\n readonly currentVersion: number;\n\n constructor(persistedVersion: number, currentVersion: number) {\n super({\n message: `Persisted extension was authored against graph-extension format v${persistedVersion}, but this library only supports up to v${currentVersion}. Upgrade @nicia-ai/typegraph.`,\n code: \"GRAPH_EXTENSION_VERSION_UNSUPPORTED\",\n details: { persistedVersion, currentVersion },\n category: \"system\",\n suggestion: `Upgrade @nicia-ai/typegraph to a version that supports graph-extension format v${persistedVersion}, or downgrade the writer.`,\n });\n this.persistedVersion = persistedVersion;\n this.currentVersion = currentVersion;\n }\n}\n","/**\n * Result type for error handling without exceptions.\n * Use at service boundaries and for operations that can fail.\n */\nexport type Result<T, E = Error> =\n Readonly<{ success: true; data: T }> | Readonly<{ success: false; error: E }>;\n\n/**\n * Creates a successful result.\n */\nexport function ok<T = undefined>(data?: T): Result<T, never> {\n return { success: true, data: data as T };\n}\n\n/**\n * Creates a failed result.\n */\nexport function err<E>(error: E): Result<never, E> {\n return { success: false, error };\n}\n\n/**\n * Unwraps a result, throwing if it's an error.\n */\nexport function unwrap<T, E>(result: Result<T, E>): T {\n if (result.success) {\n return result.data;\n }\n throw result.error;\n}\n\n/**\n * Unwraps a result or returns a default value.\n */\nexport function unwrapOr<T, E>(result: Result<T, E>, defaultValue: T): T {\n if (result.success) {\n return result.data;\n }\n return defaultValue;\n}\n\n/**\n * Type guard to check if result is successful.\n *\n * Narrows to the `Readonly<{...}>` success arm so that an early-return on the\n * negative branch (`if (isErr(x)) return; x.data`) leaves the success arm\n * reachable — the union members are themselves `Readonly`, so a mutable\n * predicate target would subtract nothing and break narrowing for callers.\n */\nexport function isOk<T, E>(\n result: Result<T, E>,\n): result is Readonly<{ success: true; data: T }> {\n return result.success;\n}\n\n/**\n * Type guard to check if result is an error. See {@link isOk} for why the\n * predicate narrows to the `Readonly<{...}>` arm.\n */\nexport function isErr<T, E>(\n result: Result<T, E>,\n): result is Readonly<{ success: false; error: E }> {\n return !result.success;\n}\n\n/**\n * Transforms the success value of a result.\n */\nexport function map<T, U, E>(\n result: Result<T, E>,\n fn: (data: T) => U,\n): Result<U, E> {\n if (result.success) return ok(fn(result.data));\n return result;\n}\n\n/**\n * Transforms the error value of a result.\n */\nexport function mapErr<T, E, F>(\n result: Result<T, E>,\n fn: (error: E) => F,\n): Result<T, F> {\n if (result.success) return result;\n return err(fn(result.error));\n}\n\n/**\n * Chains an operation that returns a Result on the success value.\n */\nexport function flatMap<T, U, E>(\n result: Result<T, E>,\n fn: (data: T) => Result<U, E>,\n): Result<U, E> {\n if (result.success) return fn(result.data);\n return result;\n}\n\n/**\n * Recovers from an error by producing an alternative Result.\n */\nexport function orElse<T, E, F>(\n result: Result<T, E>,\n fn: (error: E) => Result<T, F>,\n): Result<T, F> {\n if (result.success) return result;\n return fn(result.error);\n}\n","/**\n * Pure-value document format for graph extensions.\n *\n * A `GraphExtension` is a plain JSON-serializable description of\n * additional node kinds, edge kinds, and ontology relations that should\n * be merged into a graph at runtime. The document is the canonical\n * artifact: every restart re-compiles it back to the same Zod-bearing\n * `NodeType` / `EdgeType` / `OntologyRelation` shapes.\n *\n * The supported property-type subset is intentionally narrower than full\n * JSON Schema — only what compiles cleanly to Zod and what real\n * agent-induced schemas use in practice. Anything outside this set fails\n * loudly at `defineGraphExtension(...)`.\n */\nimport { type KindAnnotations, type NullCheckOp } from \"../core/types\";\nimport { type MetaEdgeName } from \"../ontology/constants\";\n\n// ============================================================\n// Property Types\n// ============================================================\n\n/**\n * Per-property modifier: tag the field as fulltext-searchable.\n *\n * Compiles to a `searchable({ language })`-wrapped Zod string when applied\n * to a `string` property. Rejected on any other property type at validation\n * time.\n */\nexport type ExtensionSearchableModifier = Readonly<{\n language?: string;\n}>;\n\n/**\n * Per-property modifier: declare a vector embedding with the given\n * dimensionality. Compiles to `embedding(dimensions)` and is only valid on\n * `array` properties whose item type is `number`. Rejected elsewhere.\n */\nexport type ExtensionEmbeddingModifier = Readonly<{\n dimensions: number;\n}>;\n\n/**\n * Modifiers shared by every graph-extension property type.\n *\n * `optional: true` flips the field from required-with-graph-extension-validation\n * to `.optional()` and removes it from the parent object's `required`\n * list. `searchable` and `embedding` only apply to specific underlying\n * types — see the per-modifier docs.\n */\nexport type ExtensionPropertyModifiers = Readonly<{\n optional?: boolean;\n searchable?: ExtensionSearchableModifier;\n embedding?: ExtensionEmbeddingModifier;\n description?: string;\n}>;\n\n/**\n * String property. Compiles to `z.string()` plus the requested refinements.\n * `format` accepts the two formats motivated by induced schemas in\n * practice — covers ISO datetimes, URIs, email addresses, UUIDs, and\n * date-only strings. Each format routes to the corresponding Zod\n * factory (`z.iso.datetime()`, `z.url()`, `z.email()`, `z.uuid()`,\n * `z.iso.date()`); other JSON-Schema formats are deliberately not\n * supported in v1.\n */\nexport type ExtensionStringProperty = Readonly<{\n type: \"string\";\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n format?: \"datetime\" | \"uri\" | \"email\" | \"uuid\" | \"date\";\n}> &\n ExtensionPropertyModifiers;\n\n/**\n * Number property. `int: true` requires whole numbers; `min` / `max` are\n * inclusive bounds. Compiles to `z.number().int()?.min(...)?.max(...)`.\n */\nexport type ExtensionNumberProperty = Readonly<{\n type: \"number\";\n min?: number;\n max?: number;\n int?: boolean;\n}> &\n ExtensionPropertyModifiers;\n\n/**\n * Boolean property. Compiles to `z.boolean()`.\n */\nexport type ExtensionBooleanProperty = Readonly<{\n type: \"boolean\";\n}> &\n ExtensionPropertyModifiers;\n\n/**\n * Closed-set string enum. Compiles to `z.enum([...values])`. Must contain\n * at least one value; duplicate values are rejected at validation time.\n */\nexport type ExtensionEnumProperty = Readonly<{\n type: \"enum\";\n values: readonly string[];\n}> &\n ExtensionPropertyModifiers;\n\n/**\n * Array property. `items` is any of the scalar property types or an\n * object property — nested arrays are forbidden in v1. Compiles to\n * `z.array(<items>)`. The `embedding` modifier turns this into a\n * vector embedding instead of a generic array.\n */\nexport type ExtensionArrayProperty = Readonly<{\n type: \"array\";\n items: ExtensionArrayItemType;\n}> &\n ExtensionPropertyModifiers;\n\n/**\n * Element types allowed inside an array — every leaf property type plus\n * single-level object. Nesting an array inside an array is rejected at\n * validation time so the v1 surface stays a flat tree.\n */\nexport type ExtensionArrayItemType =\n | ExtensionStringProperty\n | ExtensionNumberProperty\n | ExtensionBooleanProperty\n | ExtensionEnumProperty\n | ExtensionObjectProperty;\n\n/**\n * Object property. `properties` is a single nesting level; deeper objects\n * are rejected at validation time so the v1 surface is auditable at a\n * glance.\n */\nexport type ExtensionObjectProperty = Readonly<{\n type: \"object\";\n properties: Readonly<Record<string, ExtensionObjectFieldProperty>>;\n}> &\n ExtensionPropertyModifiers;\n\n/**\n * Property types allowed inside an `object`'s `properties` — leaf scalars\n * and arrays only. Nested objects are blocked here to enforce the\n * single-nesting-level rule.\n */\nexport type ExtensionObjectFieldProperty =\n | ExtensionStringProperty\n | ExtensionNumberProperty\n | ExtensionBooleanProperty\n | ExtensionEnumProperty\n | ExtensionArrayProperty;\n\n/**\n * Top-level property descriptor for a node or edge field.\n *\n * The discriminated union covers every type in the v1 subset; arbitrary\n * `unknown` inputs are validated against this set at\n * `defineGraphExtension(...)` time.\n */\nexport type ExtensionPropertyType =\n | ExtensionStringProperty\n | ExtensionNumberProperty\n | ExtensionBooleanProperty\n | ExtensionEnumProperty\n | ExtensionArrayProperty\n | ExtensionObjectProperty;\n\n// ============================================================\n// Unique Constraints\n// ============================================================\n\n/**\n * Document-side `where` clause for a unique constraint.\n *\n * Mirrors `serializeWherePredicate`'s capability — the only operations\n * round-trippable through the persisted form are `isNull` and `isNotNull`.\n * Anything richer (equality, `in`, etc.) is rejected at validation time.\n */\nexport type ExtensionUniqueWhere = Readonly<{\n field: string;\n op: NullCheckOp;\n}>;\n\n/**\n * Unique constraint declaration. `fields` must reference declared\n * properties on the kind. Defaults match the existing `UniqueConstraint`:\n * `scope: \"kind\"`, `collation: \"binary\"`.\n */\nexport type ExtensionUniqueConstraint = Readonly<{\n name: string;\n fields: readonly string[];\n scope?: \"kind\" | \"kindWithSubClasses\";\n collation?: \"binary\" | \"caseInsensitive\";\n where?: ExtensionUniqueWhere;\n}>;\n\n// ============================================================\n// Node and Edge Documents\n// ============================================================\n\n/**\n * Graph-extension declaration of a node kind.\n *\n * Property names follow the same reserved-key rules as compile-time\n * `defineNode` (`id`, `kind`, `meta`, and the `$`-prefix accessor\n * namespace are forbidden). Annotation values must be JSON.\n */\nexport type ExtensionNodeDef = Readonly<{\n description?: string;\n annotations?: KindAnnotations;\n properties: Readonly<Record<string, ExtensionPropertyType>>;\n unique?: readonly ExtensionUniqueConstraint[];\n}>;\n\n/**\n * Graph-extension declaration of an edge kind.\n *\n * `from` / `to` reference node kind names — either kinds declared in this\n * same document or compile-time kinds the document is being merged into.\n * Endpoints that resolve to nothing within the document are flagged as\n * soft references at validation time but not rejected; the final\n * cross-graph check happens when the document is merged into a host\n * `GraphDef`.\n */\nexport type ExtensionEdgeDef = Readonly<{\n description?: string;\n annotations?: KindAnnotations;\n from: readonly string[];\n to: readonly string[];\n properties?: Readonly<Record<string, ExtensionPropertyType>>;\n}>;\n\n// ============================================================\n// Indexes (relational)\n// ============================================================\n\n/**\n * Document-level analogue of compile-time `defineNodeIndex` /\n * `defineEdgeIndex`. Mirrors `serializeWherePredicate`'s persistence-\n * round-trippable subset: only `isNull` / `isNotNull` predicates are\n * supported in v1, matching `ExtensionUniqueWhere`.\n */\nexport type ExtensionIndexWhere = Readonly<{\n field: string;\n op: NullCheckOp;\n}>;\n\n/**\n * Graph-extension-declared node index. `kind` references either a kind\n * declared in this same document or a compile-time host kind resolved\n * at merge time. `fields` and `coveringFields` are top-level property\n * names — JSON-pointer paths are not supported in v1, matching the\n * `ExtensionUniqueConstraint` v1 surface.\n */\nexport type ExtensionNodeIndex = Readonly<{\n entity: \"node\";\n kind: string;\n name?: string;\n fields: readonly string[];\n coveringFields?: readonly string[];\n unique?: boolean;\n scope?: \"graphAndKind\" | \"graph\" | \"none\";\n where?: ExtensionIndexWhere;\n}>;\n\n/**\n * Graph-extension-declared edge index. `direction` mirrors\n * `EdgeIndexDirection`; `kind` references a graph-extension or compile-time\n * edge kind.\n */\nexport type ExtensionEdgeIndex = Readonly<{\n entity: \"edge\";\n kind: string;\n name?: string;\n direction?: \"out\" | \"in\" | \"none\";\n fields: readonly string[];\n coveringFields?: readonly string[];\n unique?: boolean;\n scope?: \"graphAndKind\" | \"graph\" | \"none\";\n where?: ExtensionIndexWhere;\n}>;\n\nexport type ExtensionIndex = ExtensionNodeIndex | ExtensionEdgeIndex;\n\n// ============================================================\n// Ontology\n// ============================================================\n\n/**\n * Graph-extension ontology relation. `metaEdge` is one of the built-in\n * meta-edge names (subClassOf, broader, disjointWith, etc.).\n *\n * `from` / `to` are either node-kind names declared in this document or\n * external IRI strings. The pure-value document does not distinguish the\n * two — the compiler treats endpoints that match a declared kind as\n * `NodeType` references and falls back to passing the raw string for\n * IRIs (matching the existing `OntologyRelation` shape, where\n * `from`/`to` are `NodeType | EdgeType | string`).\n */\nexport type ExtensionOntologyRelation = Readonly<{\n metaEdge: MetaEdgeName;\n from: string;\n to: string;\n}>;\n\n// ============================================================\n// Document\n// ============================================================\n\n/**\n * Stable default major used when a stored document omits `version`.\n *\n * Pinned to `1` permanently. Pre-versioning documents (those persisted\n * before the field existed) and documents that explicitly omit\n * `version` are interpreted as `1` regardless of which major the\n * library currently supports. Splitting this from\n * `CURRENT_GRAPH_EXTENSION_VERSION` is load-bearing for future major\n * bumps: when v2 ships, `CURRENT` becomes `2` but `LEGACY` stays at\n * `1`, so a v1-era stored document still parses as v1 (and the\n * version-mismatch path can route it through a migration) rather than\n * being silently misinterpreted as v2.\n */\nexport const LEGACY_GRAPH_EXTENSION_VERSION = 1 as const;\n\n/**\n * Current major version of the `GraphExtension` format.\n *\n * Documents with a higher major version than this constant are\n * rejected with `GRAPH_EXTENSION_VERSION_UNSUPPORTED` — there is no\n * automatic downgrade path. Minor / additive changes ride forward-\n * compat via `.loose()` on every nested object schema.\n */\nexport const CURRENT_GRAPH_EXTENSION_VERSION = 1 as const;\n\n/**\n * Type of the `GraphExtension.version` field. Stays `number`\n * rather than `typeof CURRENT_GRAPH_EXTENSION_VERSION` because the\n * field can carry any major across the library version range a\n * stored document might have been written by — the\n * document-vs-supported check happens in the validator, not at the\n * type level. Pinning to the current literal would prevent a v1\n * v1 library from typing a v2 document at all, which is the wrong\n * relationship: we WANT a v1 library to receive v2 documents and\n * report `GRAPH_EXTENSION_VERSION_UNSUPPORTED` cleanly.\n */\nexport type GraphExtensionVersion = number;\n\n/**\n * The canonical pure-value graph-extension document.\n *\n * Frozen at construction. Round-trips losslessly through `JSON.stringify`\n * / `JSON.parse`; the `GraphExtension → CompiledExtension` direction\n * is provided by `compileGraphExtension(...)`. There is no\n * `Zod → GraphExtension` direction because graph-extension kinds always\n * originate as documents.\n *\n * `version` is the major-version tag for the document format. The\n * compiler accepts documents whose version is equal to the current\n * supported major (today: 1) or absent (the canonical persisted form\n * omits `version` when it equals the legacy default — see\n * `serializer.ts` — so the round-trip default is \"absent means legacy\n * major\"). Higher majors surface as\n * `GRAPH_EXTENSION_VERSION_UNSUPPORTED` so a newer-version extension\n * committed by a future writer can't be silently misread by an older\n * runtime. See `graph-extensions.md` for the format-versioning policy.\n */\nexport type GraphExtension = Readonly<{\n version?: GraphExtensionVersion;\n nodes?: Readonly<Record<string, ExtensionNodeDef>>;\n edges?: Readonly<Record<string, ExtensionEdgeDef>>;\n ontology?: readonly ExtensionOntologyRelation[];\n /**\n * Graph-extension-declared relational indexes. Each entry references a\n * node or edge kind by name — either declared in this document or\n * a compile-time host kind that the document is being merged into.\n * Vector indexes auto-derive from `embedding()` modifiers on\n * graph-extension kinds; this slot is for explicit relational indexes\n * (analogue of compile-time `defineGraph({ indexes: [...] })`).\n */\n indexes?: readonly ExtensionIndex[];\n}>;\n\n/**\n * Top-level v1 slots a `GraphExtension` document may carry. Single\n * source of truth for both the strict-authoring validator (typo rejection\n * via `defineGraphExtension`) and the persistence Zod schema (which\n * leaves the field set loose for forward compatibility but uses this\n * list to drive the Zod object shape).\n */\nexport const GRAPH_EXTENSION_TOP_LEVEL_KEYS = [\n \"version\",\n \"nodes\",\n \"edges\",\n \"ontology\",\n \"indexes\",\n] as const;\n\nexport type GraphExtensionTopLevelKey =\n (typeof GRAPH_EXTENSION_TOP_LEVEL_KEYS)[number];\n","/**\n * Pure structural validation for `GraphExtension`.\n *\n * Walks the document and accumulates every issue (no fail-fast) so a\n * caller showing the document to a human reviewer can surface all\n * problems in one round. Cross-document references — edge endpoints,\n * ontology endpoints — resolve only against this document; resolution\n * against an existing compile-time graph happens later, when the\n * document is merged into a host `GraphDef`.\n */\nimport { assertJsonValue } from \"../core/json-value\";\nimport {\n type KindAnnotations,\n type KindEntity,\n type NullCheckOp,\n} from \"../core/types\";\nimport { ConfigurationError } from \"../errors\";\nimport { computeTransitiveClosure } from \"../ontology/closures\";\nimport { ALL_META_EDGE_NAMES, type MetaEdgeName } from \"../ontology/constants\";\nimport { encodeJsonPointerSegment } from \"../query/json-pointer\";\nimport { RESERVED_EDGE_KEYS, RESERVED_NODE_KEYS } from \"../store/reserved-keys\";\nimport { compactUndefined, freezeDeep, isPlainObject } from \"../utils/object\";\nimport { err, ok, type Result } from \"../utils/result\";\nimport {\n type GraphExtensionIssue,\n type GraphExtensionIssueCode,\n GraphExtensionValidationError,\n GraphExtensionVersionUnsupportedError,\n} from \"./errors\";\nimport {\n CURRENT_GRAPH_EXTENSION_VERSION,\n type ExtensionArrayProperty,\n type ExtensionBooleanProperty,\n type ExtensionEdgeDef,\n type ExtensionEnumProperty,\n type ExtensionIndex,\n type ExtensionNodeDef,\n type ExtensionNumberProperty,\n type ExtensionObjectFieldProperty,\n type ExtensionObjectProperty,\n type ExtensionOntologyRelation,\n type ExtensionPropertyType,\n type ExtensionStringProperty,\n type ExtensionUniqueConstraint,\n GRAPH_EXTENSION_TOP_LEVEL_KEYS,\n type GraphExtension,\n type GraphExtensionVersion,\n LEGACY_GRAPH_EXTENSION_VERSION,\n} from \"./extension-types\";\n\nconst META_EDGE_NAME_SET: ReadonlySet<string> = new Set(ALL_META_EDGE_NAMES);\n\nconst SUPPORTED_PROPERTY_TYPES = new Set([\n \"string\",\n \"number\",\n \"boolean\",\n \"enum\",\n \"array\",\n \"object\",\n]);\n\n// Unknown per-property-type refinement keys are intentionally accepted\n// for forward compatibility: a future v1.x.y writer may emit additive\n// refinements an older v1 reader doesn't recognize. Recognized\n// refinements are read inline by the per-type validators\n// (e.g. `minLength` in `validateStringProperty`).\n\nconst SUPPORTED_STRING_FORMATS = new Set([\n \"datetime\",\n \"uri\",\n \"email\",\n \"uuid\",\n \"date\",\n]);\n\n/**\n * Recognized keys shared by every property-type descriptor. The strict\n * authoring path rejects unknown sibling keys against the union of this\n * set and the per-type allowlist below; the loose persistence-load path\n * passes them through untouched (a future v1.x.y writer may emit\n * additive keys an older v1 reader doesn't recognize).\n */\nconst COMMON_PROPERTY_KEYS: ReadonlySet<string> = new Set([\n \"type\",\n \"optional\",\n \"description\",\n \"searchable\",\n \"embedding\",\n]);\n\nconst PROPERTY_TYPE_KEYS: Readonly<Record<string, ReadonlySet<string>>> = {\n string: new Set([\"minLength\", \"maxLength\", \"pattern\", \"format\"]),\n number: new Set([\"min\", \"max\", \"int\"]),\n boolean: new Set(),\n enum: new Set([\"values\"]),\n array: new Set([\"items\"]),\n object: new Set([\"properties\"]),\n};\n\n/**\n * In strict mode, surface an `UNKNOWN_PROPERTY_KEY` issue for every\n * key on `raw` that's not in either allowlist. This is the LLM /\n * agent-trust-boundary check: a typo like `minLenght: 5` on a string\n * field, or a refinement key from a future v1.x that this library\n * doesn't recognize, would otherwise compile to a weaker schema with\n * no signal to the reviewer.\n */\nfunction rejectUnknownPropertyKeys(\n raw: Record<string, unknown>,\n type: string,\n path: string,\n issues: GraphExtensionIssue[],\n): void {\n const typeKeys = PROPERTY_TYPE_KEYS[type] ?? new Set<string>();\n const recognized = [...COMMON_PROPERTY_KEYS, ...typeKeys];\n for (const key of Object.keys(raw)) {\n if (COMMON_PROPERTY_KEYS.has(key) || typeKeys.has(key)) continue;\n issues.push({\n path: `${path}/${encodeJsonPointerSegment(key)}`,\n message: `Unknown property key \"${key}\" for type \"${type}\". Recognized keys: ${recognized.join(\", \")}.`,\n code: \"UNKNOWN_PROPERTY_KEY\",\n });\n }\n}\n\n/**\n * Sibling of `rejectUnknownPropertyKeys` for the non-property strict-mode\n * checks (top-level slots, node/edge/ontology body keys, unique constraint\n * body, where-clause body, …). Each call site previously open-coded the\n * same `for-key-of-Object.keys` walk — this helper consolidates them.\n */\nfunction rejectUnknownObjectKeys(\n raw: Readonly<Record<string, unknown>>,\n allowed: ReadonlySet<string>,\n label: string,\n path: string,\n code: GraphExtensionIssueCode,\n issues: GraphExtensionIssue[],\n): void {\n for (const key of Object.keys(raw)) {\n if (allowed.has(key)) continue;\n issues.push({\n path: `${path}/${encodeJsonPointerSegment(key)}`,\n message: `Unknown ${label} key \"${key}\". Allowed: ${[...allowed].join(\", \")}.`,\n code,\n });\n }\n}\n\n/**\n * Top-level slots accepted in v1 documents. Strict-authoring callers\n * reject unknown sibling keys to surface typos like `node` instead of\n * `nodes`; the loose persistence-load path leaves unknowns untouched\n * for forward compatibility.\n */\nconst KNOWN_DOCUMENT_KEYS: ReadonlySet<string> = new Set(\n GRAPH_EXTENSION_TOP_LEVEL_KEYS,\n);\n\n/**\n * Recognized body-level key sets — one per document-shape that the\n * strict-authoring path validates. Drives both the per-shape allowlist\n * check (`rejectUnknownObjectKeys`) and the human-readable \"Allowed:\"\n * tail in the error messages.\n */\nconst NODE_BODY_KEYS: ReadonlySet<string> = new Set([\n \"description\",\n \"annotations\",\n \"properties\",\n \"unique\",\n]);\nconst EDGE_BODY_KEYS: ReadonlySet<string> = new Set([\n \"description\",\n \"annotations\",\n \"from\",\n \"to\",\n \"properties\",\n]);\nconst ONTOLOGY_ENTRY_KEYS: ReadonlySet<string> = new Set([\n \"metaEdge\",\n \"from\",\n \"to\",\n]);\nconst UNIQUE_CONSTRAINT_KEYS: ReadonlySet<string> = new Set([\n \"name\",\n \"fields\",\n \"scope\",\n \"collation\",\n \"where\",\n]);\nconst WHERE_CLAUSE_KEYS: ReadonlySet<string> = new Set([\"field\", \"op\"]);\nconst NODE_INDEX_KEYS: ReadonlySet<string> = new Set([\n \"entity\",\n \"kind\",\n \"name\",\n \"fields\",\n \"coveringFields\",\n \"unique\",\n \"scope\",\n \"where\",\n]);\nconst EDGE_INDEX_KEYS: ReadonlySet<string> = new Set([\n \"entity\",\n \"kind\",\n \"name\",\n \"fields\",\n \"coveringFields\",\n \"unique\",\n \"scope\",\n \"direction\",\n \"where\",\n]);\n\ntype ValidateGraphExtensionOptions = Readonly<{\n /**\n * Reject unknown top-level keys and unsupported string formats.\n * Used by `defineGraphExtension`, where the document is being\n * authored fresh against the current library version — typos in\n * `nodes` / `format: \"date-time\"` etc. should fail loudly. The\n * persistence-load path leaves this off so a document committed by\n * a future v1.x writer with additive fields still parses on an\n * older v1 reader.\n */\n strict?: boolean;\n}>;\n\n/**\n * Validates a graph extension.\n *\n * Returns the (frozen, deeply normalized) extension on success, or a\n * `GraphExtensionValidationError` carrying every issue on authoring\n * failure. Unsupported future major versions throw\n * `GraphExtensionVersionUnsupportedError` immediately because the\n * current library cannot safely decode the rest of the document.\n * Callers that prefer exceptions for validation failures wrap the\n * returned `Result` with `unwrap()`.\n */\nexport function validateGraphExtension(\n input: unknown,\n options: ValidateGraphExtensionOptions = {},\n): Result<GraphExtension, GraphExtensionValidationError> {\n const issues: GraphExtensionIssue[] = [];\n const strict = options.strict === true;\n\n if (!isPlainObject(input)) {\n issues.push({\n path: \"\",\n message: \"Document must be a plain object.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return err(new GraphExtensionValidationError(issues));\n }\n\n const documentRecord = input;\n\n // Forward-compat: in non-strict (persistence-load) mode, unknown\n // top-level keys are intentionally NOT rejected. The persistence-\n // side zod schema is `.loose()` on every nested object, and the\n // documented format-versioning policy promises that additive minor\n // changes (a new top-level slice in a future v1.x.y) ride forward\n // without bumping the major. In strict (authoring) mode, unknown\n // keys surface as `UNKNOWN_DOCUMENT_KEY` so a typo like `node`\n // instead of `nodes` fails loudly instead of silently producing an\n // empty extension.\n if (strict) {\n for (const key of Object.keys(documentRecord)) {\n if (!KNOWN_DOCUMENT_KEYS.has(key)) {\n issues.push({\n path: `/${encodeJsonPointerSegment(key)}`,\n message: `Unknown top-level key \"${key}\". Did you mean one of: ${[...KNOWN_DOCUMENT_KEYS].join(\", \")}?`,\n code: \"UNKNOWN_DOCUMENT_KEY\",\n });\n }\n }\n }\n\n const version = validateVersion(documentRecord[\"version\"], issues);\n\n const nodes = validateNodesSection(documentRecord[\"nodes\"], issues, strict);\n const edges = validateEdgesSection(documentRecord[\"edges\"], issues, strict);\n\n // Edge endpoints can reference (a) kinds declared in this same document,\n // (b) compile-time host kinds resolved at merge time, or (c) external\n // IRIs. The cross-graph resolution check happens at merge time, not\n // here.\n\n const ontology = validateOntologySection(\n documentRecord[\"ontology\"],\n issues,\n strict,\n );\n if (ontology !== undefined) {\n validateOntology(ontology, nodes, issues);\n }\n\n const indexes = validateIndexesSection(\n documentRecord[\"indexes\"],\n issues,\n strict,\n );\n\n if (issues.length > 0) {\n return err(new GraphExtensionValidationError(issues));\n }\n\n return ok(freezeDocument({ version, nodes, edges, ontology, indexes }));\n}\n\n/**\n * Validates the `version` field against the current supported major.\n *\n * Absent → resolved to `LEGACY_GRAPH_EXTENSION_VERSION` (a stable\n * `1`). The serializer omits `version` from the canonical persisted\n * form when it equals the legacy default, so the on-disk shape is\n * always version-less for v1 documents — the validator's absent →\n * legacy mapping closes that round-trip. Splitting `LEGACY` from\n * `CURRENT` is forward-looking design for future major bumps: when\n * v2 ships, `CURRENT` becomes `2` but `LEGACY` stays `1`, so a v1-era\n * stored document still parses as v1.\n *\n * Equal to current → accepted. Higher major → rejected with\n * `GRAPH_EXTENSION_VERSION_UNSUPPORTED`. Non-integer / non-positive\n * → rejected with `INVALID_DOCUMENT_SHAPE`.\n */\nfunction validateVersion(\n raw: unknown,\n issues: GraphExtensionIssue[],\n): GraphExtensionVersion {\n if (raw === undefined) return LEGACY_GRAPH_EXTENSION_VERSION;\n if (typeof raw !== \"number\" || !Number.isInteger(raw) || raw < 1) {\n issues.push({\n path: \"/version\",\n message: `Document version must be a positive integer; received ${JSON.stringify(raw)}.`,\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return LEGACY_GRAPH_EXTENSION_VERSION;\n }\n if (raw > CURRENT_GRAPH_EXTENSION_VERSION) {\n // Version mismatch is unrecoverable — the rest of the document\n // may use fields the current library can't decode. Throw the\n // typed class directly rather than batching into the issue list,\n // which is reserved for per-field validation problems a UI can\n // surface alongside others.\n throw new GraphExtensionVersionUnsupportedError(\n raw,\n CURRENT_GRAPH_EXTENSION_VERSION,\n );\n }\n return raw;\n}\n\n// ============================================================\n// Section: nodes\n// ============================================================\n\nfunction validateNodesSection(\n rawNodes: unknown,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): Record<string, ExtensionNodeDef> | undefined {\n if (rawNodes === undefined) return undefined;\n\n if (!isPlainObject(rawNodes)) {\n issues.push({\n path: \"/nodes\",\n message: \"`nodes` must be a plain object keyed by node-kind name.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n const result: Record<string, ExtensionNodeDef> = {};\n const recorded = new Set<string>();\n\n for (const [kindName, rawNode] of Object.entries(rawNodes)) {\n const path = `/nodes/${encodeJsonPointerSegment(kindName)}`;\n\n if (!isValidKindName(kindName)) {\n issues.push({\n path,\n message: `Node kind name \"${kindName}\" must match /^[A-Za-z_][A-Za-z0-9_]*$/.`,\n code: \"INVALID_KIND_NAME\",\n });\n continue;\n }\n\n if (recorded.has(kindName)) {\n issues.push({\n path,\n message: `Duplicate node kind name \"${kindName}\".`,\n code: \"DUPLICATE_KIND_NAME\",\n });\n continue;\n }\n\n const node = validateNodeDocument(kindName, rawNode, path, issues, strict);\n if (node === undefined) continue;\n result[kindName] = node;\n recorded.add(kindName);\n }\n\n return result;\n}\n\nfunction validateNodeDocument(\n kindName: string,\n raw: unknown,\n path: string,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionNodeDef | undefined {\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message: `Node \"${kindName}\" must be a plain object.`,\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n if (strict) {\n rejectUnknownObjectKeys(\n raw,\n NODE_BODY_KEYS,\n \"node-level\",\n path,\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n }\n\n const description = validateOptionalString(\n raw[\"description\"],\n `${path}/description`,\n \"`description`\",\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n\n const annotations = validateAnnotations(\n raw[\"annotations\"],\n `${path}/annotations`,\n `Node \"${kindName}\"`,\n issues,\n );\n\n const propertiesRaw = raw[\"properties\"];\n const properties = validatePropertiesMap(\n propertiesRaw,\n `${path}/properties`,\n \"node\",\n kindName,\n issues,\n strict,\n );\n if (properties === undefined) return undefined;\n\n const uniqueRaw = raw[\"unique\"];\n const unique = validateUniqueConstraints(\n uniqueRaw,\n `${path}/unique`,\n properties,\n issues,\n strict,\n );\n\n return compactUndefined<ExtensionNodeDef>({\n description,\n annotations,\n properties,\n unique,\n });\n}\n\n// ============================================================\n// Section: edges\n// ============================================================\n\nfunction validateEdgesSection(\n rawEdges: unknown,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): Record<string, ExtensionEdgeDef> | undefined {\n if (rawEdges === undefined) return undefined;\n\n if (!isPlainObject(rawEdges)) {\n issues.push({\n path: \"/edges\",\n message: \"`edges` must be a plain object keyed by edge-kind name.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n const result: Record<string, ExtensionEdgeDef> = {};\n const recorded = new Set<string>();\n\n for (const [kindName, rawEdge] of Object.entries(rawEdges)) {\n const path = `/edges/${encodeJsonPointerSegment(kindName)}`;\n\n if (!isValidKindName(kindName)) {\n issues.push({\n path,\n message: `Edge kind name \"${kindName}\" must match /^[A-Za-z_][A-Za-z0-9_]*$/.`,\n code: \"INVALID_KIND_NAME\",\n });\n continue;\n }\n\n if (recorded.has(kindName)) {\n issues.push({\n path,\n message: `Duplicate edge kind name \"${kindName}\".`,\n code: \"DUPLICATE_KIND_NAME\",\n });\n continue;\n }\n\n const edge = validateEdgeDocument(kindName, rawEdge, path, issues, strict);\n if (edge === undefined) continue;\n result[kindName] = edge;\n recorded.add(kindName);\n }\n\n return result;\n}\n\nfunction validateEdgeDocument(\n kindName: string,\n raw: unknown,\n path: string,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionEdgeDef | undefined {\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message: `Edge \"${kindName}\" must be a plain object.`,\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n if (strict) {\n rejectUnknownObjectKeys(\n raw,\n EDGE_BODY_KEYS,\n \"edge-level\",\n path,\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n }\n\n const description = validateOptionalString(\n raw[\"description\"],\n `${path}/description`,\n \"`description`\",\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n\n const annotations = validateAnnotations(\n raw[\"annotations\"],\n `${path}/annotations`,\n `Edge \"${kindName}\"`,\n issues,\n );\n\n const from = validateEndpointList(raw[\"from\"], `${path}/from`, issues);\n const to = validateEndpointList(raw[\"to\"], `${path}/to`, issues);\n if (from === undefined || to === undefined) return undefined;\n\n const propertiesRaw = raw[\"properties\"];\n const properties =\n propertiesRaw === undefined ?\n {}\n : validatePropertiesMap(\n propertiesRaw,\n `${path}/properties`,\n \"edge\",\n kindName,\n issues,\n strict,\n );\n if (properties === undefined) return undefined;\n\n return compactUndefined<ExtensionEdgeDef>({\n description,\n annotations,\n from,\n to,\n properties,\n });\n}\n\nfunction validateEndpointList(\n raw: unknown,\n path: string,\n issues: GraphExtensionIssue[],\n): readonly string[] | undefined {\n if (!Array.isArray(raw)) {\n issues.push({\n path,\n message: \"Edge endpoint list must be an array of node-kind names.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n if (raw.length === 0) {\n issues.push({\n path,\n message: \"Edge endpoint list must contain at least one node-kind name.\",\n code: \"EMPTY_FROM_OR_TO\",\n });\n return undefined;\n }\n const names: string[] = [];\n for (const [index, value] of raw.entries()) {\n if (typeof value !== \"string\" || value.length === 0) {\n issues.push({\n path: `${path}/${index}`,\n message: \"Edge endpoint must be a non-empty string node-kind name.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n names.push(value);\n }\n return names;\n}\n\n// ============================================================\n// Section: ontology\n// ============================================================\n\nfunction validateOntologySection(\n raw: unknown,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionOntologyRelation[] | undefined {\n if (raw === undefined) return undefined;\n if (!Array.isArray(raw)) {\n issues.push({\n path: \"/ontology\",\n message: \"`ontology` must be an array of relation objects.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n const result: ExtensionOntologyRelation[] = [];\n for (const [index, entry] of raw.entries()) {\n const path = `/ontology/${index}`;\n if (!isPlainObject(entry)) {\n issues.push({\n path,\n message: \"Ontology entry must be a plain object.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n continue;\n }\n if (strict) {\n rejectUnknownObjectKeys(\n entry,\n ONTOLOGY_ENTRY_KEYS,\n \"ontology-entry\",\n path,\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n }\n\n const metaEdge = entry[\"metaEdge\"];\n const from = entry[\"from\"];\n const to = entry[\"to\"];\n\n if (typeof metaEdge !== \"string\" || !META_EDGE_NAME_SET.has(metaEdge)) {\n issues.push({\n path: `${path}/metaEdge`,\n message: `Unknown meta-edge ${describeUnknownValue(metaEdge)}. Allowed: ${[...ALL_META_EDGE_NAMES].join(\", \")}.`,\n code: \"UNKNOWN_META_EDGE\",\n });\n continue;\n }\n if (typeof from !== \"string\" || from.length === 0) {\n issues.push({\n path: `${path}/from`,\n message: \"Ontology relation `from` must be a non-empty string.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n continue;\n }\n if (typeof to !== \"string\" || to.length === 0) {\n issues.push({\n path: `${path}/to`,\n message: \"Ontology relation `to` must be a non-empty string.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n continue;\n }\n\n result.push({ metaEdge: metaEdge as MetaEdgeName, from, to });\n }\n return result;\n}\n\nfunction validateOntology(\n ontology: readonly ExtensionOntologyRelation[],\n _nodes: Record<string, ExtensionNodeDef> | undefined,\n issues: GraphExtensionIssue[],\n): void {\n const seenKey = new Set<string>();\n\n for (const [index, relation] of ontology.entries()) {\n const path = `/ontology/${index}`;\n\n if (\n relation.from === relation.to &&\n isStrictlyHierarchicalMetaEdge(relation.metaEdge)\n ) {\n issues.push({\n path,\n message: `Hierarchical meta-edge \"${relation.metaEdge}\" cannot be a self-loop (\"${relation.from}\" → \"${relation.to}\").`,\n code: \"ONTOLOGY_SELF_LOOP\",\n });\n }\n\n const key = `${relation.metaEdge}::${relation.from}->${relation.to}`;\n if (seenKey.has(key)) {\n issues.push({\n path,\n message: `Duplicate ontology relation \"${relation.metaEdge}\" (${relation.from} → ${relation.to}).`,\n code: \"DUPLICATE_ONTOLOGY_RELATION\",\n });\n continue;\n }\n seenKey.add(key);\n }\n\n // Cycle detection on transitive hierarchical relations declared *within*\n // this document. Cross-document cycles will be caught at evolve() time\n // when the graph extension is merged with the existing graph.\n detectHierarchicalCycles(ontology, issues);\n\n // disjointWith ↔ subClassOf contradictions: declaring two kinds as\n // both subclass-related (subClassOf, broader, narrower) AND\n // disjointWith is incoherent — a subclass instance is also an\n // instance of its parent, so they can't be in disjoint sets.\n // Detect within the document; cross-document detection happens at\n // merge time when the registry's closures are rebuilt.\n detectDisjointHierarchyContradictions(ontology, issues);\n}\n\nconst STRICTLY_HIERARCHICAL: ReadonlySet<MetaEdgeName> = new Set([\n \"subClassOf\",\n \"broader\",\n \"narrower\",\n \"partOf\",\n \"hasPart\",\n]);\n\nfunction isStrictlyHierarchicalMetaEdge(name: MetaEdgeName): boolean {\n return STRICTLY_HIERARCHICAL.has(name);\n}\n\n/**\n * Maps each hierarchical meta-edge to the canonical group it normalizes\n * into, mirroring the registry's relation-table flattening\n * (`computeClosuresFromOntology`). `narrower A→B` is the inverse of\n * `broader A→B`; `hasPart A→B` is the inverse of `partOf A→B`. Cycle\n * detection must run on the same normalized set the registry will, or\n * mixed-direction cycles like `broader A→B` + `narrower A→B` slip\n * through validation and surface only at runtime.\n */\nconst HIERARCHICAL_NORMALIZATION: ReadonlyMap<\n MetaEdgeName,\n Readonly<{ canonical: MetaEdgeName; flip: boolean }>\n> = new Map([\n [\"subClassOf\", { canonical: \"subClassOf\", flip: false }],\n [\"broader\", { canonical: \"broader\", flip: false }],\n [\"narrower\", { canonical: \"broader\", flip: true }],\n [\"partOf\", { canonical: \"partOf\", flip: false }],\n [\"hasPart\", { canonical: \"partOf\", flip: true }],\n]);\n\ntype NormalizedHierarchicalEdge = Readonly<{\n from: string;\n to: string;\n originalIndex: number;\n}>;\n\n/**\n * Group ontology relations by their canonical hierarchical meta-edge,\n * flipping `narrower` / `hasPart` entries into their canonical direction.\n * Mirrors `computeClosuresFromOntology`'s flattening so cycle and\n * disjoint-contradiction detection see the same edge set the registry\n * will. `skipSelfLoops` is set by the cycle detector (self-loops are\n * already reported by `detectOntologySelfLoops`) and unset by the\n * disjoint-contradiction detector (which still wants `(A, A)` in the\n * closure for a `disjointWith(A, A)` check).\n */\nfunction buildHierarchicalGroups(\n ontology: readonly ExtensionOntologyRelation[],\n options: Readonly<{ skipSelfLoops: boolean }>,\n): Map<MetaEdgeName, NormalizedHierarchicalEdge[]> {\n const groups = new Map<MetaEdgeName, NormalizedHierarchicalEdge[]>();\n for (const [index, relation] of ontology.entries()) {\n const normalization = HIERARCHICAL_NORMALIZATION.get(relation.metaEdge);\n if (normalization === undefined) continue;\n if (options.skipSelfLoops && relation.from === relation.to) continue;\n\n const from = normalization.flip ? relation.to : relation.from;\n const to = normalization.flip ? relation.from : relation.to;\n\n const list = groups.get(normalization.canonical) ?? [];\n list.push({ from, to, originalIndex: index });\n groups.set(normalization.canonical, list);\n }\n return groups;\n}\n\nfunction detectHierarchicalCycles(\n ontology: readonly ExtensionOntologyRelation[],\n issues: GraphExtensionIssue[],\n): void {\n const groups = buildHierarchicalGroups(ontology, { skipSelfLoops: true });\n\n for (const [name, edges] of groups) {\n const closure = computeTransitiveClosure(\n edges.map((edge) => [edge.from, edge.to] as const),\n );\n const reportedNodes = new Set<string>();\n for (const [from, reachable] of closure) {\n if (!reachable.has(from) || reportedNodes.has(from)) continue;\n reportedNodes.add(from);\n const offendingEdge = edges.find((edge) => edge.from === from);\n const path =\n offendingEdge === undefined ? \"/ontology\" : (\n `/ontology/${offendingEdge.originalIndex}`\n );\n issues.push({\n path,\n message: `Cycle detected in \"${name}\" relations involving \"${from}\".`,\n code: \"ONTOLOGY_CYCLE\",\n });\n }\n }\n}\n\n/**\n * Detects `disjointWith` ↔ subClassOf-family contradictions: declaring\n * `(A, B) disjointWith` AND `(A, B) subClassOf` (or any subclass-\n * relating meta-edge) in the same document is incoherent — a subclass\n * instance is also an instance of its parent, so they can't be in\n * disjoint sets.\n *\n * Detection runs against the closure of the hierarchical relations\n * because `(A, B) subClassOf` plus `(B, C) subClassOf` makes A and C\n * disjoint-incompatible too. `narrower` / `hasPart` are flipped to\n * their canonical direction during normalization, mirroring how\n * `detectHierarchicalCycles` builds its groups.\n *\n * Cross-document contradictions (extension declares `disjointWith(A,B)`\n * while a previously-evolved extension declared `subClassOf(A,B)`) are\n * caught at merge time when the registry's closures are rebuilt.\n */\nfunction detectDisjointHierarchyContradictions(\n ontology: readonly ExtensionOntologyRelation[],\n issues: GraphExtensionIssue[],\n): void {\n const disjointPairs = new Set<string>();\n const disjointPath = new Map<string, string>();\n for (const [index, relation] of ontology.entries()) {\n if (relation.metaEdge !== \"disjointWith\") continue;\n // disjointWith is symmetric; record both orderings so the closure\n // check below catches the contradiction regardless of which side\n // the subclass relation orders by.\n disjointPairs.add(`${relation.from}|${relation.to}`);\n disjointPairs.add(`${relation.to}|${relation.from}`);\n disjointPath.set(`${relation.from}|${relation.to}`, `/ontology/${index}`);\n disjointPath.set(`${relation.to}|${relation.from}`, `/ontology/${index}`);\n }\n if (disjointPairs.size === 0) return;\n\n // Walk the closure of every hierarchical group; any (from, reachable)\n // pair that also appears in `disjointPairs` is a contradiction.\n const groups = buildHierarchicalGroups(ontology, { skipSelfLoops: false });\n const reported = new Set<string>();\n for (const [name, edges] of groups) {\n const closure = computeTransitiveClosure(\n edges.map((edge) => [edge.from, edge.to] as const),\n );\n for (const [from, reachable] of closure) {\n for (const to of reachable) {\n const pairKey = `${from}|${to}`;\n if (!disjointPairs.has(pairKey)) continue;\n if (reported.has(pairKey)) continue;\n reported.add(pairKey);\n issues.push({\n path: disjointPath.get(pairKey) ?? \"/ontology\",\n message: `Contradiction: \"${from}\" and \"${to}\" are declared disjointWith but also related by \"${name}\" (directly or transitively).`,\n code: \"ONTOLOGY_DISJOINT_CONFLICT\",\n });\n }\n }\n }\n}\n\n// ============================================================\n// Section: indexes\n// ============================================================\n\nconst INDEX_SCOPE_VALUES = [\"graphAndKind\", \"graph\", \"none\"] as const;\nconst EDGE_INDEX_DIRECTION_VALUES = [\"out\", \"in\", \"none\"] as const;\n\nconst RUNTIME_INDEX_WHERE_OPS: ReadonlySet<string> = new Set([\n \"isNull\",\n \"isNotNull\",\n]);\n\nfunction validateIndexesSection(\n rawIndexes: unknown,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): readonly ExtensionIndex[] | undefined {\n if (rawIndexes === undefined) return undefined;\n if (!Array.isArray(rawIndexes)) {\n issues.push({\n path: \"/indexes\",\n message: \"`indexes` must be an array of index declarations.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n const result: ExtensionIndex[] = [];\n const seenNames = new Set<string>();\n\n for (const [arrayIndex, entry] of rawIndexes.entries()) {\n const path = `/indexes/${arrayIndex}`;\n const validated = validateIndexEntry(entry, path, issues, strict);\n if (validated === undefined) continue;\n\n if (validated.name !== undefined) {\n if (seenNames.has(validated.name)) {\n issues.push({\n path: `${path}/name`,\n message: `Duplicate index name \"${validated.name}\".`,\n code: \"DUPLICATE_INDEX_NAME\",\n });\n continue;\n }\n seenNames.add(validated.name);\n }\n result.push(validated);\n }\n\n return result;\n}\n\nfunction validateIndexEntry(\n raw: unknown,\n path: string,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionIndex | undefined {\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message: \"Index entry must be a plain object.\",\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n\n const entity = raw[\"entity\"];\n if (entity !== \"node\" && entity !== \"edge\") {\n issues.push({\n path: `${path}/entity`,\n message: `Index \\`entity\\` must be \"node\" or \"edge\"; received ${describeUnknownValue(entity)}.`,\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n\n // Strict-authoring typo check: `coveringField` (singular), `wheres`,\n // etc. would otherwise compile to a weaker index with no signal.\n // Allowlist switches on `entity` so edge-only `direction` is valid\n // on edges but flagged on nodes.\n if (strict) {\n rejectUnknownObjectKeys(\n raw,\n entity === \"node\" ? NODE_INDEX_KEYS : EDGE_INDEX_KEYS,\n `${entity}-index`,\n path,\n \"INVALID_INDEX_DECLARATION\",\n issues,\n );\n }\n\n if (typeof raw[\"kind\"] !== \"string\" || !isValidKindName(raw[\"kind\"])) {\n issues.push({\n path: `${path}/kind`,\n message:\n \"Index `kind` must be a non-empty kind name matching /^[A-Za-z_][A-Za-z0-9_]*$/.\",\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n\n const fields = validateStringList(raw[\"fields\"], `${path}/fields`, issues, {\n allowEmpty: false,\n label: \"fields\",\n emptyCode: \"EMPTY_INDEX_FIELDS\",\n });\n if (fields === undefined) return undefined;\n\n const coveringFields = validateStringList(\n raw[\"coveringFields\"],\n `${path}/coveringFields`,\n issues,\n { allowEmpty: true, label: \"coveringFields\" },\n );\n\n if (raw[\"unique\"] !== undefined && typeof raw[\"unique\"] !== \"boolean\") {\n issues.push({\n path: `${path}/unique`,\n message: \"Index `unique` must be a boolean.\",\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n\n let name: string | undefined;\n if (raw[\"name\"] !== undefined) {\n if (typeof raw[\"name\"] !== \"string\" || raw[\"name\"].length === 0) {\n issues.push({\n path: `${path}/name`,\n message: \"Index `name` must be a non-empty string.\",\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n name = raw[\"name\"];\n }\n\n const scopeResult = validateOptionalLiteral(\n raw[\"scope\"],\n INDEX_SCOPE_VALUES,\n `${path}/scope`,\n \"Index `scope`\",\n \"INVALID_INDEX_DECLARATION\",\n issues,\n );\n if (!scopeResult.ok) return undefined;\n const scope = scopeResult.value;\n\n const where = validateGraphExtensionIndexWhere(\n raw[\"where\"],\n `${path}/where`,\n issues,\n strict,\n );\n\n if (entity === \"node\") {\n return compactUndefined<ExtensionIndex>({\n entity: \"node\",\n kind: raw[\"kind\"],\n name,\n fields,\n coveringFields,\n unique: raw[\"unique\"],\n scope,\n where,\n });\n }\n\n const directionResult = validateOptionalLiteral(\n raw[\"direction\"],\n EDGE_INDEX_DIRECTION_VALUES,\n `${path}/direction`,\n \"Edge index `direction`\",\n \"INVALID_INDEX_DECLARATION\",\n issues,\n );\n if (!directionResult.ok) return undefined;\n const direction = directionResult.value;\n\n return compactUndefined<ExtensionIndex>({\n entity: \"edge\",\n kind: raw[\"kind\"],\n name,\n direction,\n fields,\n coveringFields,\n unique: raw[\"unique\"],\n scope,\n where,\n });\n}\n\nfunction validateStringList(\n raw: unknown,\n path: string,\n issues: GraphExtensionIssue[],\n options: Readonly<{\n allowEmpty: boolean;\n label: string;\n emptyCode?: GraphExtensionIssueCode;\n }>,\n): readonly string[] | undefined {\n if (raw === undefined) {\n if (options.allowEmpty) return undefined;\n issues.push({\n path,\n message: `\\`${options.label}\\` is required and must contain at least one entry.`,\n code: options.emptyCode ?? \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n if (!Array.isArray(raw)) {\n issues.push({\n path,\n message: `\\`${options.label}\\` must be an array of strings.`,\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n const seen = new Set<string>();\n const result: string[] = [];\n for (const [index, value] of raw.entries()) {\n if (typeof value !== \"string\" || value.length === 0) {\n issues.push({\n path: `${path}/${index}`,\n message: `\\`${options.label}[${index}]\\` must be a non-empty string.`,\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n if (seen.has(value)) {\n issues.push({\n path: `${path}/${index}`,\n message: `Duplicate ${options.label} entry \"${value}\".`,\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n seen.add(value);\n result.push(value);\n }\n if (!options.allowEmpty && result.length === 0) {\n issues.push({\n path,\n message: `\\`${options.label}\\` must contain at least one entry.`,\n code: options.emptyCode ?? \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n return result;\n}\n\nfunction validateGraphExtensionIndexWhere(\n raw: unknown,\n path: string,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionIndex[\"where\"] {\n if (raw === undefined) return undefined;\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message: \"Index `where` must be a plain object.\",\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n if (strict) {\n rejectUnknownObjectKeys(\n raw,\n WHERE_CLAUSE_KEYS,\n \"where-clause\",\n path,\n \"INVALID_INDEX_DECLARATION\",\n issues,\n );\n }\n if (typeof raw[\"field\"] !== \"string\" || raw[\"field\"].length === 0) {\n issues.push({\n path: `${path}/field`,\n message: \"`where.field` must be a non-empty string.\",\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n if (\n typeof raw[\"op\"] !== \"string\" ||\n !RUNTIME_INDEX_WHERE_OPS.has(raw[\"op\"])\n ) {\n issues.push({\n path: `${path}/op`,\n message: '`where.op` must be \"isNull\" or \"isNotNull\" in v1.',\n code: \"INVALID_INDEX_DECLARATION\",\n });\n return undefined;\n }\n return Object.freeze({\n field: raw[\"field\"],\n op: raw[\"op\"] as NullCheckOp,\n });\n}\n\n// ============================================================\n// Properties and refinements\n// ============================================================\n\nfunction validatePropertiesMap(\n raw: unknown,\n path: string,\n ownerType: KindEntity,\n ownerName: string,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): Record<string, ExtensionPropertyType> | undefined {\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message: `\\`properties\\` must be a plain object.`,\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n const reserved =\n ownerType === \"node\" ? RESERVED_NODE_KEYS : RESERVED_EDGE_KEYS;\n const result: Record<string, ExtensionPropertyType> = {};\n for (const [propertyName, propertyValue] of Object.entries(raw)) {\n const propertyPath = `${path}/${encodeJsonPointerSegment(propertyName)}`;\n if (reserved.has(propertyName)) {\n issues.push({\n path: propertyPath,\n message: `Property name \"${propertyName}\" is reserved for ${ownerType} \"${ownerName}\".`,\n code: \"RESERVED_PROPERTY_NAME\",\n });\n continue;\n }\n if (propertyName.startsWith(\"$\")) {\n issues.push({\n path: propertyPath,\n message: `Property name \"${propertyName}\" uses the reserved \"$\" prefix.`,\n code: \"RESERVED_PROPERTY_NAME\",\n });\n continue;\n }\n const validated = validateProperty(\n propertyValue,\n propertyPath,\n 0,\n issues,\n strict,\n );\n if (validated === undefined) continue;\n result[propertyName] = validated;\n }\n\n return result;\n}\n\nfunction validateProperty(\n raw: unknown,\n path: string,\n depth: number,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionPropertyType | undefined {\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message:\n \"Property descriptor must be a plain object with a `type` field.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n const property = raw;\n const type = property[\"type\"];\n if (typeof type !== \"string\" || !SUPPORTED_PROPERTY_TYPES.has(type)) {\n issues.push({\n path: `${path}/type`,\n message: `Unsupported property type ${describeUnknownValue(type)}. Supported: ${[...SUPPORTED_PROPERTY_TYPES].join(\", \")}.`,\n code: \"UNSUPPORTED_PROPERTY_TYPE\",\n });\n return undefined;\n }\n\n // Strict authoring mode: reject unknown sibling keys against the\n // per-type allowlist BEFORE dispatch. A typo like `minLenght` on a\n // string property would otherwise compile to a `z.string()` with no\n // length constraint and ship through to ingest. Persistence-load\n // mode skips this so a future v1.x.y writer's additive keys ride\n // forward.\n if (strict) rejectUnknownPropertyKeys(property, type, path, issues);\n\n switch (type) {\n case \"string\": {\n return validateStringProperty(property, path, issues, strict);\n }\n case \"number\": {\n return validateNumberProperty(property, path, issues);\n }\n case \"boolean\": {\n return validateBooleanProperty(property, path, issues);\n }\n case \"enum\": {\n return validateEnumProperty(property, path, issues);\n }\n case \"array\": {\n return validateArrayProperty(property, path, depth, issues, strict);\n }\n case \"object\": {\n return validateObjectProperty(property, path, depth, issues, strict);\n }\n }\n return undefined;\n}\n\nfunction validateStringProperty(\n raw: Record<string, unknown>,\n path: string,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionStringProperty | undefined {\n const minLength = validateNonNegativeInteger(\n raw[\"minLength\"],\n `${path}/minLength`,\n \"string.minLength\",\n \"INVALID_LENGTH_BOUNDS\",\n issues,\n );\n const maxLength = validateNonNegativeInteger(\n raw[\"maxLength\"],\n `${path}/maxLength`,\n \"string.maxLength\",\n \"INVALID_LENGTH_BOUNDS\",\n issues,\n );\n if (\n minLength !== undefined &&\n maxLength !== undefined &&\n minLength > maxLength\n ) {\n issues.push({\n path,\n message: `string.minLength (${minLength}) cannot exceed string.maxLength (${maxLength}).`,\n code: \"INVALID_LENGTH_BOUNDS\",\n });\n }\n\n let pattern: string | undefined;\n if (raw[\"pattern\"] !== undefined) {\n if (typeof raw[\"pattern\"] === \"string\") {\n try {\n new RegExp(raw[\"pattern\"]);\n pattern = raw[\"pattern\"];\n } catch (error) {\n issues.push({\n path: `${path}/pattern`,\n message: `Pattern is not a valid regular expression: ${\n error instanceof Error ? error.message : String(error)\n }`,\n code: \"INVALID_PATTERN\",\n });\n }\n } else {\n issues.push({\n path: `${path}/pattern`,\n message: \"`pattern` must be a string regular expression.\",\n code: \"INVALID_PATTERN\",\n });\n }\n }\n\n let format: ExtensionStringProperty[\"format\"];\n if (raw[\"format\"] !== undefined) {\n if (typeof raw[\"format\"] !== \"string\") {\n issues.push({\n path: `${path}/format`,\n message: `String format must be a string; received ${describeUnknownValue(raw[\"format\"])}.`,\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n } else if (SUPPORTED_STRING_FORMATS.has(raw[\"format\"])) {\n format = raw[\"format\"] as ExtensionStringProperty[\"format\"];\n } else if (strict) {\n // Authoring-mode reject. A typo like `\"date-time\"` (no\n // hyphen) silently compiled to a plain `z.string()` in earlier\n // versions, so `safeParse(\"not-a-date\")` succeeded — surfacing\n // the typo here is the contract.\n issues.push({\n path: `${path}/format`,\n message: `Unsupported string format \"${raw[\"format\"]}\". Supported: ${[...SUPPORTED_STRING_FORMATS].join(\", \")}.`,\n code: \"UNSUPPORTED_STRING_FORMAT\",\n });\n }\n // Non-strict (persistence-load) path: unknown format silently\n // drops to a plain `z.string()`. A future v1.x.y writer may\n // introduce a new format identifier; an older v1 reader still\n // parses the document, just without the new format's behaviour.\n }\n\n const modifiers = validatePropertyModifiers(raw, path, \"string\", issues);\n if (modifiers === undefined) return undefined;\n\n if (format !== undefined && modifiers.searchable !== undefined) {\n issues.push({\n path,\n message:\n \"`searchable` cannot be combined with `format` on a string property — the format-specific schema cannot carry the searchable brand. Drop one, or split into two fields.\",\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n return undefined;\n }\n\n if (\n format !== undefined &&\n (minLength !== undefined ||\n maxLength !== undefined ||\n pattern !== undefined)\n ) {\n issues.push({\n path,\n message:\n \"`format` cannot be combined with `minLength`, `maxLength`, or `pattern` on a string property — the format-routed schema (`z.iso.datetime` / `z.url`) is not a `z.ZodString` and cannot carry length or pattern refinements. Drop the refinement, or drop the format and validate the shape with `pattern`.\",\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n return undefined;\n }\n\n return finalizeProperty<ExtensionStringProperty>(\n \"string\",\n { minLength, maxLength, pattern, format },\n modifiers,\n );\n}\n\nfunction validateNumberProperty(\n raw: Record<string, unknown>,\n path: string,\n issues: GraphExtensionIssue[],\n): ExtensionNumberProperty | undefined {\n // Forward-compat: unknown refinement keys are silently accepted.\n const min = validateOptionalFiniteNumber(\n raw[\"min\"],\n `${path}/min`,\n \"`min`\",\n \"INVALID_NUMBER_BOUNDS\",\n issues,\n );\n const max = validateOptionalFiniteNumber(\n raw[\"max\"],\n `${path}/max`,\n \"`max`\",\n \"INVALID_NUMBER_BOUNDS\",\n issues,\n );\n if (min !== undefined && max !== undefined && min > max) {\n issues.push({\n path,\n message: `number.min (${min}) cannot exceed number.max (${max}).`,\n code: \"INVALID_NUMBER_BOUNDS\",\n });\n }\n\n const int = validateOptionalBoolean(\n raw[\"int\"],\n `${path}/int`,\n \"`int`\",\n \"INVALID_PROPERTY_REFINEMENT\",\n issues,\n );\n\n // Integer + non-integer bounds: reject early so the compiled Zod schema\n // doesn't silently swallow values like `min: 1.5, int: true`.\n if (int === true) {\n if (min !== undefined && !Number.isInteger(min)) {\n issues.push({\n path: `${path}/min`,\n message: \"`min` must be an integer when `int: true`.\",\n code: \"INVALID_NUMBER_BOUNDS\",\n });\n }\n if (max !== undefined && !Number.isInteger(max)) {\n issues.push({\n path: `${path}/max`,\n message: \"`max` must be an integer when `int: true`.\",\n code: \"INVALID_NUMBER_BOUNDS\",\n });\n }\n }\n\n const modifiers = validatePropertyModifiers(raw, path, \"number\", issues);\n if (modifiers === undefined) return undefined;\n\n return finalizeProperty<ExtensionNumberProperty>(\n \"number\",\n { min, max, int },\n modifiers,\n );\n}\n\nfunction validateBooleanProperty(\n raw: Record<string, unknown>,\n path: string,\n issues: GraphExtensionIssue[],\n): ExtensionBooleanProperty | undefined {\n const modifiers = validatePropertyModifiers(raw, path, \"boolean\", issues);\n if (modifiers === undefined) return undefined;\n return finalizeProperty<ExtensionBooleanProperty>(\"boolean\", {}, modifiers);\n}\n\nfunction validateEnumProperty(\n raw: Record<string, unknown>,\n path: string,\n issues: GraphExtensionIssue[],\n): ExtensionEnumProperty | undefined {\n // Forward-compat: unknown refinement keys are silently accepted.\n const valuesRaw = raw[\"values\"];\n if (!Array.isArray(valuesRaw) || valuesRaw.length === 0) {\n issues.push({\n path: `${path}/values`,\n message: \"`enum.values` must be a non-empty array of strings.\",\n code: \"INVALID_ENUM_VALUES\",\n });\n return undefined;\n }\n\n const values: string[] = [];\n const seen = new Set<string>();\n for (const [index, value] of valuesRaw.entries()) {\n if (typeof value !== \"string\") {\n issues.push({\n path: `${path}/values/${index}`,\n message: \"`enum.values` entries must be strings.\",\n code: \"INVALID_ENUM_VALUES\",\n });\n return undefined;\n }\n if (seen.has(value)) {\n issues.push({\n path: `${path}/values/${index}`,\n message: `Duplicate enum value \"${value}\".`,\n code: \"INVALID_ENUM_VALUES\",\n });\n return undefined;\n }\n seen.add(value);\n values.push(value);\n }\n\n const modifiers = validatePropertyModifiers(raw, path, \"enum\", issues);\n if (modifiers === undefined) return undefined;\n\n return finalizeProperty<ExtensionEnumProperty>(\"enum\", { values }, modifiers);\n}\n\nfunction validateArrayProperty(\n raw: Record<string, unknown>,\n path: string,\n depth: number,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionArrayProperty | undefined {\n // Forward-compat: unknown refinement keys are silently accepted.\n const itemsRaw = raw[\"items\"];\n if (itemsRaw === undefined) {\n issues.push({\n path: `${path}/items`,\n message: \"`array.items` is required.\",\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n return undefined;\n }\n if (!isPlainObject(itemsRaw)) {\n issues.push({\n path: `${path}/items`,\n message: \"`array.items` must be a plain property descriptor.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n const itemType = itemsRaw[\"type\"];\n if (itemType === \"array\") {\n issues.push({\n path: `${path}/items`,\n message: \"Nested arrays are not supported in v1.\",\n code: \"NESTED_ARRAY\",\n });\n return undefined;\n }\n const items = validateProperty(\n itemsRaw,\n `${path}/items`,\n depth + 1,\n issues,\n strict,\n );\n if (items === undefined) return undefined;\n if (items.type === \"array\") {\n // Type-narrow only: `validateProperty` returns the wider\n // `ExtensionPropertyType`, but `ExtensionArrayItemType` excludes\n // nested arrays. The earlier `itemType === \"array\"` check above\n // already rejected this at the raw-shape level, so this branch\n // is unreachable at runtime.\n return undefined;\n }\n\n const modifiers = validatePropertyModifiers(raw, path, \"array\", issues);\n if (modifiers === undefined) return undefined;\n\n return finalizeProperty<ExtensionArrayProperty>(\n \"array\",\n { items },\n modifiers,\n );\n}\n\nfunction validateObjectProperty(\n raw: Record<string, unknown>,\n path: string,\n depth: number,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): ExtensionObjectProperty | undefined {\n // Forward-compat: unknown refinement keys are silently accepted.\n if (depth >= 1) {\n issues.push({\n path,\n message: \"Nested objects are limited to a single level in v1.\",\n code: \"NESTED_OBJECT_TOO_DEEP\",\n });\n return undefined;\n }\n\n const propertiesRaw = raw[\"properties\"];\n if (!isPlainObject(propertiesRaw)) {\n issues.push({\n path: `${path}/properties`,\n message: \"`object.properties` must be a plain object.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n const propertiesEntries = Object.entries(propertiesRaw);\n if (propertiesEntries.length === 0) {\n issues.push({\n path: `${path}/properties`,\n message: \"`object.properties` must declare at least one field.\",\n code: \"EMPTY_PROPERTIES\",\n });\n return undefined;\n }\n\n const fields: Record<string, ExtensionObjectFieldProperty> = {};\n for (const [name, value] of propertiesEntries) {\n const fieldPath = `${path}/properties/${encodeJsonPointerSegment(name)}`;\n if (!isPlainObject(value)) {\n issues.push({\n path: fieldPath,\n message: \"Object field descriptor must be a plain object.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n continue;\n }\n const fieldType = value[\"type\"];\n if (fieldType === \"object\") {\n issues.push({\n path: fieldPath,\n message: \"Nested objects are limited to a single level in v1.\",\n code: \"NESTED_OBJECT_TOO_DEEP\",\n });\n continue;\n }\n const field = validateProperty(value, fieldPath, depth + 1, issues, strict);\n if (field === undefined) continue;\n fields[name] = field as ExtensionObjectFieldProperty;\n }\n\n const modifiers = validatePropertyModifiers(raw, path, \"object\", issues);\n if (modifiers === undefined) return undefined;\n\n return finalizeProperty<ExtensionObjectProperty>(\n \"object\",\n { properties: fields },\n modifiers,\n );\n}\n\n// ============================================================\n// Modifiers\n// ============================================================\n\ntype NormalizedModifiers = Readonly<{\n optional?: boolean;\n searchable?: { language?: string };\n embedding?: { dimensions: number };\n description?: string;\n}>;\n\n/**\n * Assemble a final property descriptor from a type-specific field map\n * plus the already-validated modifiers. Centralizes the modifier-spread\n * boilerplate so adding a new modifier slot (or tweaking how undefineds\n * are pruned) touches one site instead of six.\n *\n * Callers run `validatePropertyModifiers` first because some types\n * (`string`) need cross-modifier validation (e.g. `format` ↔ `searchable`)\n * after the modifiers are known but before the final shape is built.\n */\nfunction finalizeProperty<T extends ExtensionPropertyType>(\n type: T[\"type\"],\n specific: Record<string, unknown>,\n modifiers: NormalizedModifiers,\n): T {\n return compactUndefined<Record<string, unknown>>({\n type,\n ...specific,\n optional: modifiers.optional,\n searchable: modifiers.searchable,\n embedding: modifiers.embedding,\n description: modifiers.description,\n }) as T;\n}\n\nfunction validatePropertyModifiers(\n raw: Record<string, unknown>,\n path: string,\n propertyType: ExtensionPropertyType[\"type\"],\n issues: GraphExtensionIssue[],\n): NormalizedModifiers | undefined {\n // Mirrors `issues.length` rather than carrying its own boolean: any\n // helper that pushes also signals failure here.\n const issuesAtEntry = issues.length;\n\n const optional = validateOptionalBoolean(\n raw[\"optional\"],\n `${path}/optional`,\n \"`optional`\",\n \"INVALID_PROPERTY_REFINEMENT\",\n issues,\n );\n\n let searchable: { language?: string } | undefined;\n if (raw[\"searchable\"] !== undefined) {\n if (propertyType !== \"string\") {\n issues.push({\n path: `${path}/searchable`,\n message: `\\`searchable\\` is only valid on string properties (got \"${propertyType}\").`,\n code: \"INVALID_MODIFIER_TARGET\",\n });\n } else if (isPlainObject(raw[\"searchable\"])) {\n const searchableRaw = raw[\"searchable\"];\n const language = searchableRaw[\"language\"];\n if (language === undefined) {\n searchable = {};\n } else {\n if (typeof language !== \"string\" || language.length === 0) {\n issues.push({\n path: `${path}/searchable/language`,\n message: \"`searchable.language` must be a non-empty string.\",\n code: \"INVALID_SEARCHABLE_LANGUAGE\",\n });\n } else {\n searchable = { language };\n }\n }\n } else {\n issues.push({\n path: `${path}/searchable`,\n message: \"`searchable` must be a plain object (use `{}` for defaults).\",\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n }\n }\n\n let embedding: { dimensions: number } | undefined;\n if (raw[\"embedding\"] !== undefined) {\n if (propertyType === \"array\") {\n const itemsRaw = raw[\"items\"];\n const itemType = isPlainObject(itemsRaw) ? itemsRaw[\"type\"] : undefined;\n if (itemType !== \"number\") {\n issues.push({\n path: `${path}/embedding`,\n message: '`embedding` requires `array.items.type === \"number\"`.',\n code: \"INVALID_MODIFIER_TARGET\",\n });\n } else if (isPlainObject(raw[\"embedding\"])) {\n const dim = raw[\"embedding\"][\"dimensions\"];\n if (typeof dim !== \"number\" || !Number.isInteger(dim) || dim <= 0) {\n issues.push({\n path: `${path}/embedding/dimensions`,\n message: \"`embedding.dimensions` must be a positive integer.\",\n code: \"INVALID_EMBEDDING_DIMENSIONS\",\n });\n } else {\n // `embedding(dimensions)` replaces the array's item validator with a\n // length+finite-number check; any extra refinements on the items\n // (min, max, int) would silently disappear at compile time.\n const itemsObject = isPlainObject(itemsRaw) ? itemsRaw : {};\n const extraneous = Object.keys(itemsObject).filter(\n (key) => key !== \"type\",\n );\n if (extraneous.length > 0) {\n issues.push({\n path: `${path}/items`,\n message: `\\`embedding\\` arrays must declare items as \\`{ type: \"number\" }\\` only — additional refinements (${extraneous.join(\", \")}) are silently dropped by the embedding schema. Drop the refinements, or drop \\`embedding\\` and use a plain array.`,\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n } else {\n embedding = { dimensions: dim };\n }\n }\n } else {\n issues.push({\n path: `${path}/embedding`,\n message:\n \"`embedding` must be a plain object with a `dimensions` field.\",\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n }\n } else {\n issues.push({\n path: `${path}/embedding`,\n message: `\\`embedding\\` is only valid on array-of-number properties (got \"${propertyType}\").`,\n code: \"INVALID_MODIFIER_TARGET\",\n });\n }\n }\n\n let description: string | undefined;\n if (raw[\"description\"] !== undefined) {\n if (typeof raw[\"description\"] === \"string\") {\n description = raw[\"description\"];\n } else {\n issues.push({\n path: `${path}/description`,\n message: \"`description` must be a string.\",\n code: \"INVALID_PROPERTY_REFINEMENT\",\n });\n }\n }\n\n if (issues.length > issuesAtEntry) return undefined;\n return compactUndefined<NormalizedModifiers>({\n optional,\n searchable,\n embedding,\n description,\n });\n}\n\n// ============================================================\n// Unique constraints\n// ============================================================\n\nfunction validateUniqueConstraints(\n raw: unknown,\n path: string,\n properties: Record<string, ExtensionPropertyType>,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): readonly ExtensionUniqueConstraint[] | undefined {\n if (raw === undefined) return undefined;\n if (!Array.isArray(raw)) {\n issues.push({\n path,\n message: \"`unique` must be an array of constraint declarations.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n\n const result: ExtensionUniqueConstraint[] = [];\n const names = new Set<string>();\n for (const [index, entry] of raw.entries()) {\n const constraintPath = `${path}/${index}`;\n if (!isPlainObject(entry)) {\n issues.push({\n path: constraintPath,\n message: \"Unique constraint must be a plain object.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n continue;\n }\n\n if (strict) {\n rejectUnknownObjectKeys(\n entry,\n UNIQUE_CONSTRAINT_KEYS,\n \"unique-constraint\",\n constraintPath,\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n }\n\n const constraint = entry;\n const name = constraint[\"name\"];\n if (typeof name !== \"string\" || name.length === 0) {\n issues.push({\n path: `${constraintPath}/name`,\n message: \"Unique constraint `name` must be a non-empty string.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n continue;\n }\n if (names.has(name)) {\n issues.push({\n path: `${constraintPath}/name`,\n message: `Duplicate unique constraint name \"${name}\".`,\n code: \"DUPLICATE_UNIQUE_CONSTRAINT\",\n });\n continue;\n }\n names.add(name);\n\n const fieldsRaw = constraint[\"fields\"];\n if (!Array.isArray(fieldsRaw) || fieldsRaw.length === 0) {\n issues.push({\n path: `${constraintPath}/fields`,\n message:\n \"Unique constraint `fields` must be a non-empty array of property names.\",\n code: \"EMPTY_UNIQUE_FIELDS\",\n });\n continue;\n }\n\n const fields: string[] = [];\n const seenFields = new Set<string>();\n let fieldsValid = true;\n for (const [fieldIndex, field] of fieldsRaw.entries()) {\n if (typeof field !== \"string\" || field.length === 0) {\n issues.push({\n path: `${constraintPath}/fields/${fieldIndex}`,\n message: \"Unique constraint field must be a non-empty string.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n fieldsValid = false;\n break;\n }\n if (seenFields.has(field)) {\n issues.push({\n path: `${constraintPath}/fields/${fieldIndex}`,\n message: `Duplicate field \"${field}\" in unique constraint.`,\n code: \"DUPLICATE_UNIQUE_FIELD\",\n });\n fieldsValid = false;\n break;\n }\n if (!(field in properties)) {\n issues.push({\n path: `${constraintPath}/fields/${fieldIndex}`,\n message: `Unique constraint field \"${field}\" is not declared on this kind.`,\n code: \"UNKNOWN_UNIQUE_FIELD\",\n });\n fieldsValid = false;\n break;\n }\n seenFields.add(field);\n fields.push(field);\n }\n if (!fieldsValid) continue;\n\n const scopeResult = validateOptionalLiteral(\n constraint[\"scope\"],\n [\"kind\", \"kindWithSubClasses\"] as const,\n `${constraintPath}/scope`,\n \"Unique constraint `scope`\",\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n if (!scopeResult.ok) continue;\n const scope = scopeResult.value;\n\n const collationResult = validateOptionalLiteral(\n constraint[\"collation\"],\n [\"binary\", \"caseInsensitive\"] as const,\n `${constraintPath}/collation`,\n \"Unique constraint `collation`\",\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n if (!collationResult.ok) continue;\n const collation = collationResult.value;\n\n const where: { field: string; op: NullCheckOp } | undefined =\n constraint[\"where\"] === undefined ?\n undefined\n : validateUniqueWhere(\n constraint[\"where\"],\n `${constraintPath}/where`,\n properties,\n issues,\n strict,\n );\n if (constraint[\"where\"] !== undefined && where === undefined) continue;\n\n result.push(\n compactUndefined<ExtensionUniqueConstraint>({\n name,\n fields,\n scope,\n collation,\n where,\n }),\n );\n }\n\n return result;\n}\n\nfunction validateUniqueWhere(\n raw: unknown,\n path: string,\n properties: Record<string, ExtensionPropertyType>,\n issues: GraphExtensionIssue[],\n strict: boolean,\n): { field: string; op: NullCheckOp } | undefined {\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message: \"Unique constraint `where` must be `{ field, op }`.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n if (strict) {\n rejectUnknownObjectKeys(\n raw,\n WHERE_CLAUSE_KEYS,\n \"where-clause\",\n path,\n \"INVALID_DOCUMENT_SHAPE\",\n issues,\n );\n }\n const field = raw[\"field\"];\n const op = raw[\"op\"];\n if (typeof field !== \"string\" || field.length === 0) {\n issues.push({\n path: `${path}/field`,\n message: \"Unique `where.field` must be a non-empty string.\",\n code: \"INVALID_DOCUMENT_SHAPE\",\n });\n return undefined;\n }\n if (!(field in properties)) {\n issues.push({\n path: `${path}/field`,\n message: `Unique \\`where.field\\` \"${field}\" is not declared on this kind.`,\n code: \"UNKNOWN_UNIQUE_WHERE_FIELD\",\n });\n return undefined;\n }\n if (op !== \"isNull\" && op !== \"isNotNull\") {\n issues.push({\n path: `${path}/op`,\n message: `Unique \\`where.op\\` must be \"isNull\" or \"isNotNull\" (got ${describeUnknownValue(op)}).`,\n code: \"INVALID_UNIQUE_WHERE_OP\",\n });\n return undefined;\n }\n return { field, op };\n}\n\n// ============================================================\n// Annotations\n// ============================================================\n\nfunction validateAnnotations(\n raw: unknown,\n path: string,\n ownerLabel: string,\n issues: GraphExtensionIssue[],\n): KindAnnotations | undefined {\n if (raw === undefined) return undefined;\n if (!isPlainObject(raw)) {\n issues.push({\n path,\n message: `Annotations must be a plain JSON object.`,\n code: \"INVALID_ANNOTATION\",\n });\n return undefined;\n }\n\n try {\n assertJsonValue(raw, \"annotations\", ownerLabel);\n } catch (error) {\n if (error instanceof ConfigurationError) {\n const detailPath = (error.details as Record<string, unknown>)[\"path\"];\n const annotationPath =\n typeof detailPath === \"string\" ?\n `${path}/${detailPath\n .replace(/^annotations\\.?/, \"\")\n .replaceAll(\".\", \"/\")}`\n : path;\n issues.push({\n path: annotationPath,\n message: error.message,\n code: \"INVALID_ANNOTATION\",\n });\n return undefined;\n }\n throw error;\n }\n\n return raw as KindAnnotations;\n}\n\n// ============================================================\n// Helpers\n// ============================================================\n\n// Two-mode unknown-key handling — see `rejectUnknownPropertyKeys`\n// above. Strict authoring (`defineGraphExtension`,\n// `validateGraphExtension(_, { strict: true })`) rejects unknown\n// sibling keys at every property level so a `minLenght`-style typo\n// from an LLM proposal surfaces with a JSON-pointer path instead of\n// silently compiling to a weaker schema. Persistence load\n// (`validateGraphExtension(_, { strict: false })`, used by the\n// `createStoreWithSchema` reader) ignores unknown keys so a future\n// v1.x.y writer with additive refinements still parses on an older\n// v1 reader — the older compiler builds the Zod schema from the\n// refinements it recognizes, and the new modifier's behavior simply\n// isn't applied. `ExtensionPropertyType` is exported so consumers\n// writing runtime-shape generators can add their own strict-key check\n// if needed for additional validation slots beyond what this\n// validator covers.\n\nfunction validateNonNegativeInteger(\n value: unknown,\n path: string,\n label: string,\n code: GraphExtensionIssueCode,\n issues: GraphExtensionIssue[],\n): number | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"number\" || !Number.isInteger(value) || value < 0) {\n issues.push({\n path,\n message: `${label} must be a non-negative integer.`,\n code,\n });\n return undefined;\n }\n return value;\n}\n\nfunction validateOptionalString(\n value: unknown,\n path: string,\n label: string,\n code: GraphExtensionIssueCode,\n issues: GraphExtensionIssue[],\n): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\") {\n issues.push({ path, message: `${label} must be a string.`, code });\n return undefined;\n }\n return value;\n}\n\nfunction validateOptionalBoolean(\n value: unknown,\n path: string,\n label: string,\n code: GraphExtensionIssueCode,\n issues: GraphExtensionIssue[],\n): boolean | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"boolean\") {\n issues.push({ path, message: `${label} must be a boolean.`, code });\n return undefined;\n }\n return value;\n}\n\nfunction validateOptionalFiniteNumber(\n value: unknown,\n path: string,\n label: string,\n code: GraphExtensionIssueCode,\n issues: GraphExtensionIssue[],\n): number | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n issues.push({ path, message: `${label} must be a finite number.`, code });\n return undefined;\n }\n return value;\n}\n\n/**\n * Discriminated result for optional-literal validation: callers branch\n * on `ok` so \"absent\" (`{ ok: true, value: undefined }`) is distinct from\n * \"invalid\" (`{ ok: false }`). Replaces the prior issue-counter trick\n * (`const before = issues.length; … if (issues.length > before) …`)\n * which conflated those two outcomes when the underlying helper\n * returned `T | undefined`.\n */\ntype OptionalLiteralResult<T> =\n Readonly<{ ok: true; value: T | undefined }> | Readonly<{ ok: false }>;\n\nfunction validateOptionalLiteral<T extends string>(\n value: unknown,\n allowed: readonly T[],\n path: string,\n label: string,\n code: GraphExtensionIssueCode,\n issues: GraphExtensionIssue[],\n): OptionalLiteralResult<T> {\n if (value === undefined) return { ok: true, value: undefined };\n if (typeof value !== \"string\" || !allowed.includes(value as T)) {\n const list = allowed.map((entry) => `\"${entry}\"`).join(\", \");\n issues.push({ path, message: `${label} must be one of: ${list}.`, code });\n return { ok: false };\n }\n return { ok: true, value: value as T };\n}\n\nfunction isValidKindName(name: string): boolean {\n return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name);\n}\n\n/**\n * Renders an unknown value for inclusion in an error message without\n * tripping `[object Object]` from a generic `String()` call. Strings\n * are quoted; numbers, booleans, and null pass through; other values\n * use `JSON.stringify` and fall back to `typeof` if that fails.\n */\nfunction describeUnknownValue(value: unknown): string {\n if (typeof value === \"string\") return `\"${value}\"`;\n if (\n value === null ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return JSON.stringify(value);\n }\n try {\n return JSON.stringify(value);\n } catch {\n return `(${typeof value})`;\n }\n}\n\n// ============================================================\n// Freezing\n// ============================================================\n\nfunction freezeDocument(input: {\n version: GraphExtensionVersion;\n nodes: Record<string, ExtensionNodeDef> | undefined;\n edges: Record<string, ExtensionEdgeDef> | undefined;\n ontology: readonly ExtensionOntologyRelation[] | undefined;\n indexes: readonly ExtensionIndex[] | undefined;\n}): GraphExtension {\n return Object.freeze(\n compactUndefined<{\n version: GraphExtensionVersion;\n nodes?: Record<string, ExtensionNodeDef>;\n edges?: Record<string, ExtensionEdgeDef>;\n ontology?: readonly ExtensionOntologyRelation[];\n indexes?: readonly ExtensionIndex[];\n }>({\n version: input.version,\n nodes: input.nodes === undefined ? undefined : freezeDeep(input.nodes),\n edges: input.edges === undefined ? undefined : freezeDeep(input.edges),\n ontology:\n input.ontology === undefined ?\n undefined\n : Object.freeze(\n input.ontology.map((entry) => Object.freeze({ ...entry })),\n ),\n indexes:\n input.indexes === undefined ?\n undefined\n : Object.freeze(input.indexes.map((entry) => freezeDeep({ ...entry }))),\n }),\n );\n}\n"]}