@nicia-ai/typegraph 0.28.1 → 0.30.0

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 (178) hide show
  1. package/dist/backend/postgres/index.cjs +24 -762
  2. package/dist/backend/postgres/index.cjs.map +1 -1
  3. package/dist/backend/postgres/index.d.cts +24 -5
  4. package/dist/backend/postgres/index.d.ts +24 -5
  5. package/dist/backend/postgres/index.js +11 -753
  6. package/dist/backend/postgres/index.js.map +1 -1
  7. package/dist/backend/postgres/pglite.cjs +52 -0
  8. package/dist/backend/postgres/pglite.cjs.map +1 -0
  9. package/dist/backend/postgres/pglite.d.cts +116 -0
  10. package/dist/backend/postgres/pglite.d.ts +116 -0
  11. package/dist/backend/postgres/pglite.js +50 -0
  12. package/dist/backend/postgres/pglite.js.map +1 -0
  13. package/dist/backend/sqlite/index.cjs +23 -27
  14. package/dist/backend/sqlite/index.d.cts +22 -15
  15. package/dist/backend/sqlite/index.d.ts +22 -15
  16. package/dist/backend/sqlite/index.js +10 -10
  17. package/dist/backend/sqlite/libsql.cjs +18 -14
  18. package/dist/backend/sqlite/libsql.cjs.map +1 -1
  19. package/dist/backend/sqlite/libsql.d.cts +3 -3
  20. package/dist/backend/sqlite/libsql.d.ts +3 -3
  21. package/dist/backend/sqlite/libsql.js +17 -13
  22. package/dist/backend/sqlite/libsql.js.map +1 -1
  23. package/dist/backend/sqlite/local.cjs +19 -17
  24. package/dist/backend/sqlite/local.cjs.map +1 -1
  25. package/dist/backend/sqlite/local.d.cts +9 -3
  26. package/dist/backend/sqlite/local.d.ts +9 -3
  27. package/dist/backend/sqlite/local.js +17 -15
  28. package/dist/backend/sqlite/local.js.map +1 -1
  29. package/dist/chunk-26HWIIVS.cjs +740 -0
  30. package/dist/chunk-26HWIIVS.cjs.map +1 -0
  31. package/dist/chunk-2QA5EHEN.js +181 -0
  32. package/dist/chunk-2QA5EHEN.js.map +1 -0
  33. package/dist/chunk-3IRMLJEK.js +206 -0
  34. package/dist/chunk-3IRMLJEK.js.map +1 -0
  35. package/dist/{chunk-5MTOKWDA.js → chunk-3JLRHQ67.js} +9 -9
  36. package/dist/{chunk-5MTOKWDA.js.map → chunk-3JLRHQ67.js.map} +1 -1
  37. package/dist/{chunk-WVQXAFP3.js → chunk-454I6GDF.js} +46 -5
  38. package/dist/chunk-454I6GDF.js.map +1 -0
  39. package/dist/{chunk-CTHNVU6K.cjs → chunk-4BXHVEFB.cjs} +16 -16
  40. package/dist/{chunk-CTHNVU6K.cjs.map → chunk-4BXHVEFB.cjs.map} +1 -1
  41. package/dist/{chunk-NMOE2ZEU.cjs → chunk-4LBO6KIF.cjs} +139 -128
  42. package/dist/chunk-4LBO6KIF.cjs.map +1 -0
  43. package/dist/chunk-633N7DSE.js +258 -0
  44. package/dist/chunk-633N7DSE.js.map +1 -0
  45. package/dist/{chunk-WFUN6DCM.cjs → chunk-7JGLPAFV.cjs} +11 -11
  46. package/dist/chunk-7JGLPAFV.cjs.map +1 -0
  47. package/dist/{chunk-ZTREJOGB.js → chunk-AI3RNREM.js} +140 -69
  48. package/dist/chunk-AI3RNREM.js.map +1 -0
  49. package/dist/{chunk-TSGBRPNE.js → chunk-ENDUY2CD.js} +46 -46
  50. package/dist/chunk-ENDUY2CD.js.map +1 -0
  51. package/dist/{chunk-7V335GHG.cjs → chunk-FLRCVI2G.cjs} +12 -2
  52. package/dist/chunk-FLRCVI2G.cjs.map +1 -0
  53. package/dist/chunk-FVIGJTS7.js +305 -0
  54. package/dist/chunk-FVIGJTS7.js.map +1 -0
  55. package/dist/chunk-FWBVPATK.cjs +208 -0
  56. package/dist/chunk-FWBVPATK.cjs.map +1 -0
  57. package/dist/chunk-IE6GN7L3.cjs +319 -0
  58. package/dist/chunk-IE6GN7L3.cjs.map +1 -0
  59. package/dist/{chunk-PGU2XKMA.js → chunk-IUIJJYPI.js} +117 -106
  60. package/dist/chunk-IUIJJYPI.js.map +1 -0
  61. package/dist/{chunk-E5ROA3MN.js → chunk-IX7RE7CG.js} +3 -3
  62. package/dist/{chunk-E5ROA3MN.js.map → chunk-IX7RE7CG.js.map} +1 -1
  63. package/dist/{chunk-YEDQLNVE.cjs → chunk-JIEJCTDS.cjs} +30 -2
  64. package/dist/chunk-JIEJCTDS.cjs.map +1 -0
  65. package/dist/{chunk-WZH2MKHW.cjs → chunk-K4N35E7B.cjs} +101 -101
  66. package/dist/{chunk-WZH2MKHW.cjs.map → chunk-K4N35E7B.cjs.map} +1 -1
  67. package/dist/{chunk-NZ5PMBTG.js → chunk-K5P5OZXS.js} +12 -3
  68. package/dist/chunk-K5P5OZXS.js.map +1 -0
  69. package/dist/chunk-K5VREXMZ.js +738 -0
  70. package/dist/chunk-K5VREXMZ.js.map +1 -0
  71. package/dist/chunk-LUHU4T2F.cjs +12 -0
  72. package/dist/{chunk-4FJVSF3K.cjs.map → chunk-LUHU4T2F.cjs.map} +1 -1
  73. package/dist/{chunk-O57GYGYK.js → chunk-M6OC455F.js} +32 -18
  74. package/dist/chunk-M6OC455F.js.map +1 -0
  75. package/dist/{chunk-OYLF3IC7.js → chunk-MAQJYNJR.js} +4 -4
  76. package/dist/chunk-MAQJYNJR.js.map +1 -0
  77. package/dist/{chunk-OOS2RKRH.js → chunk-MXE2U3EX.js} +4 -4
  78. package/dist/{chunk-OOS2RKRH.js.map → chunk-MXE2U3EX.js.map} +1 -1
  79. package/dist/{chunk-TKM2WDT4.js → chunk-N2OEOGBB.js} +386 -1093
  80. package/dist/chunk-N2OEOGBB.js.map +1 -0
  81. package/dist/{chunk-EJCDOA37.js → chunk-R4JOBEJU.js} +5 -5
  82. package/dist/{chunk-EJCDOA37.js.map → chunk-R4JOBEJU.js.map} +1 -1
  83. package/dist/{chunk-FFHW2JEK.cjs → chunk-RP7YITHX.cjs} +32 -17
  84. package/dist/chunk-RP7YITHX.cjs.map +1 -0
  85. package/dist/{chunk-PYJOBZR3.cjs → chunk-SGPXKJ4A.cjs} +60 -60
  86. package/dist/chunk-SGPXKJ4A.cjs.map +1 -0
  87. package/dist/{chunk-U5ROKVRF.js → chunk-TQOYM4LN.js} +29 -3
  88. package/dist/chunk-TQOYM4LN.js.map +1 -0
  89. package/dist/{chunk-PN37HVAV.cjs → chunk-UESTHN47.cjs} +153 -71
  90. package/dist/chunk-UESTHN47.cjs.map +1 -0
  91. package/dist/chunk-VFX3LC76.cjs +183 -0
  92. package/dist/chunk-VFX3LC76.cjs.map +1 -0
  93. package/dist/chunk-WEMZM7J7.cjs +270 -0
  94. package/dist/chunk-WEMZM7J7.cjs.map +1 -0
  95. package/dist/{chunk-NYQFPGYP.cjs → chunk-WFCECD6Q.cjs} +423 -1139
  96. package/dist/chunk-WFCECD6Q.cjs.map +1 -0
  97. package/dist/{chunk-EK6RJ373.cjs → chunk-YQGLVWB2.cjs} +7 -7
  98. package/dist/{chunk-EK6RJ373.cjs.map → chunk-YQGLVWB2.cjs.map} +1 -1
  99. package/dist/{chunk-X3244EKP.cjs → chunk-ZFWNO3GE.cjs} +48 -4
  100. package/dist/chunk-ZFWNO3GE.cjs.map +1 -0
  101. package/dist/ddl-BSFlbGQF.d.cts +38 -0
  102. package/dist/ddl-EdkIiFVU.d.ts +38 -0
  103. package/dist/{extension-types-B78CZfA5.d.cts → extension-types-CwHV-Uk4.d.cts} +4 -4
  104. package/dist/{extension-types-B78CZfA5.d.ts → extension-types-CwHV-Uk4.d.ts} +4 -4
  105. package/dist/graph-extension/index.cjs +19 -19
  106. package/dist/graph-extension/index.d.cts +4 -4
  107. package/dist/graph-extension/index.d.ts +4 -4
  108. package/dist/graph-extension/index.js +4 -4
  109. package/dist/{index-CWdBFWbI.d.ts → index-DzeIiMO3.d.ts} +30 -3
  110. package/dist/{index-Bilw0pYm.d.cts → index-Ln_KHTGA.d.cts} +30 -3
  111. package/dist/index.cjs +1542 -1011
  112. package/dist/index.cjs.map +1 -1
  113. package/dist/index.d.cts +142 -12
  114. package/dist/index.d.ts +142 -12
  115. package/dist/index.js +1138 -643
  116. package/dist/index.js.map +1 -1
  117. package/dist/indexes/index.cjs +19 -19
  118. package/dist/indexes/index.d.cts +9 -9
  119. package/dist/indexes/index.d.ts +9 -9
  120. package/dist/indexes/index.js +5 -5
  121. package/dist/interchange/index.cjs +8 -14
  122. package/dist/interchange/index.cjs.map +1 -1
  123. package/dist/interchange/index.d.cts +5 -16
  124. package/dist/interchange/index.d.ts +5 -16
  125. package/dist/interchange/index.js +3 -9
  126. package/dist/interchange/index.js.map +1 -1
  127. package/dist/{manager-ehLTTNq0.d.ts → manager-BbdyNhkv.d.ts} +2 -2
  128. package/dist/{manager-c1MGaVVR.d.cts → manager-wTDgjoXG.d.cts} +2 -2
  129. package/dist/{materialize-indexes-DFavFQah.d.ts → materialize-indexes-lkawaDor.d.ts} +1 -1
  130. package/dist/{materialize-indexes-BQfaAZKA.d.cts → materialize-indexes-oanE3RU0.d.cts} +1 -1
  131. package/dist/{ddl-0Ooc2dpL.d.ts → postgres-CK2ByP1q.d.cts} +2 -471
  132. package/dist/{ddl-Dza3kDrI.d.cts → postgres-ymXYC6Rr.d.ts} +2 -471
  133. package/dist/profiler/index.cjs +10 -10
  134. package/dist/profiler/index.d.cts +7 -7
  135. package/dist/profiler/index.d.ts +7 -7
  136. package/dist/profiler/index.js +3 -3
  137. package/dist/schema/index.cjs +33 -33
  138. package/dist/schema/index.d.cts +7 -7
  139. package/dist/schema/index.d.ts +7 -7
  140. package/dist/schema/index.js +10 -10
  141. package/dist/{sqlite-BxZUPbyD.d.ts → sqlite-DxH1lrwD.d.cts} +2 -468
  142. package/dist/{sqlite-mvpXjEeB.d.cts → sqlite-R8YGOqVQ.d.ts} +2 -468
  143. package/dist/{store-Ufc1Eoey.d.ts → store--z1Tmk7U.d.cts} +124 -5
  144. package/dist/{store-D7YEMg2v.d.cts → store-CNKM334w.d.ts} +124 -5
  145. package/dist/{types-CMQymcwk.d.cts → types-BBiDqJCU.d.ts} +252 -46
  146. package/dist/{types-B-sJJ4GQ.d.ts → types-CMvxx2kd.d.ts} +2 -2
  147. package/dist/{types-CmUA9sal.d.cts → types-D5B6Be5c.d.cts} +2 -2
  148. package/dist/{types-CQ7xXJMP.d.ts → types-dL-clxO3.d.cts} +252 -46
  149. package/dist/{where-CtrLu1Zf.d.ts → where-CAo6wsBZ.d.ts} +2 -2
  150. package/dist/{where-5zf15aFZ.d.cts → where-bJjuOCeV.d.cts} +2 -2
  151. package/package.json +20 -5
  152. package/dist/chunk-3EUKJEQ3.js +0 -77
  153. package/dist/chunk-3EUKJEQ3.js.map +0 -1
  154. package/dist/chunk-4FJVSF3K.cjs +0 -12
  155. package/dist/chunk-7V335GHG.cjs.map +0 -1
  156. package/dist/chunk-FFHW2JEK.cjs.map +0 -1
  157. package/dist/chunk-HTGDWIDE.cjs +0 -89
  158. package/dist/chunk-HTGDWIDE.cjs.map +0 -1
  159. package/dist/chunk-LYRUNG6E.cjs +0 -52
  160. package/dist/chunk-LYRUNG6E.cjs.map +0 -1
  161. package/dist/chunk-NMOE2ZEU.cjs.map +0 -1
  162. package/dist/chunk-NYQFPGYP.cjs.map +0 -1
  163. package/dist/chunk-NZ5PMBTG.js.map +0 -1
  164. package/dist/chunk-O57GYGYK.js.map +0 -1
  165. package/dist/chunk-OYLF3IC7.js.map +0 -1
  166. package/dist/chunk-PCHTTG42.js +0 -47
  167. package/dist/chunk-PCHTTG42.js.map +0 -1
  168. package/dist/chunk-PGU2XKMA.js.map +0 -1
  169. package/dist/chunk-PN37HVAV.cjs.map +0 -1
  170. package/dist/chunk-PYJOBZR3.cjs.map +0 -1
  171. package/dist/chunk-TKM2WDT4.js.map +0 -1
  172. package/dist/chunk-TSGBRPNE.js.map +0 -1
  173. package/dist/chunk-U5ROKVRF.js.map +0 -1
  174. package/dist/chunk-WFUN6DCM.cjs.map +0 -1
  175. package/dist/chunk-WVQXAFP3.js.map +0 -1
  176. package/dist/chunk-X3244EKP.cjs.map +0 -1
  177. package/dist/chunk-YEDQLNVE.cjs.map +0 -1
  178. package/dist/chunk-ZTREJOGB.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors/index.ts"],"names":[],"mappings":";AAyDA,SAAS,YAAY,KAAA,EAAwB;AAC3C,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,OAAO,KAAA,CAAM,SAAS,KAAA,CAAM,OAAA;AAAA,EAC9B;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IACE,OAAO,UAAU,QAAA,IACjB,OAAO,UAAU,SAAA,IACjB,OAAO,UAAU,QAAA,EACjB;AACA,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAM,WAAA,IAAe,QAAA;AAAA,EAC9B;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,eAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAC7B,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,CAAA,sBAAA,EACL,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,eAC3C,CAAA,CAAA;AAAA,EACF;AACF;AAYO,IAAM,cAAA,GAAN,cAA6B,KAAA,CAAM;AAAA;AAAA,EAE/B,IAAA;AAAA;AAAA,EAGA,QAAA;AAAA;AAAA,EAGA,OAAA;AAAA;AAAA,EAGA,UAAA;AAAA,EAET,WAAA,CAAY,OAAA,EAAiB,IAAA,EAAc,OAAA,EAAgC;AACzE,IAAA,KAAA,CAAM,OAAA,EAAS,QAAQ,KAAA,GAAQ,EAAE,OAAO,OAAA,CAAQ,KAAA,KAAU,MAAS,CAAA;AACnE,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AACxB,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,OAAA,IAAW,EAAE,CAAA;AAClD,IAAA,IAAI,OAAA,CAAQ,eAAe,MAAA,EAAW;AACpC,MAAA,IAAA,CAAK,aAAa,OAAA,CAAQ,UAAA;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAAwB;AACtB,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,OAAO,CAAA,EAAG,KAAK,OAAO;;AAAA,YAAA,EAAmB,KAAK,UAAU,CAAA,CAAA;AAAA,IAC1D;AACA,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAsB;AACpB,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,KAAK,OAAO,CAAA,CAAA;AAAA,MAC9B,CAAA,YAAA,EAAe,KAAK,QAAQ,CAAA;AAAA,KAC9B;AAEA,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,cAAA,EAAiB,IAAA,CAAK,UAAU,CAAA,CAAE,CAAA;AAAA,IAC/C;AAEA,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AAC3C,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,KAAA,CAAM,KAAK,CAAA,WAAA,EAAc,IAAA,CAAK,UAAU,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,IACzD;AAEA,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,KAAK,CAAA,SAAA,EAAY,WAAA,CAAY,IAAA,CAAK,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IAClD;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AACF;AAiDO,IAAM,eAAA,GAAN,cAA8B,cAAA,CAAe;AAAA,EAGlD,WAAA,CACE,OAAA,EACA,OAAA,EACA,OAAA,EACA;AACA,IAAA,MAAM,YACJ,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,CAAA,GACtB,QAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,IAAA,IAAQ,QAAQ,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAC/D,SAAA;AAEJ,IAAA,KAAA,CAAM,SAAS,kBAAA,EAAoB;AAAA,MACjC,OAAA;AAAA,MACA,QAAA,EAAU,MAAA;AAAA,MACV,UAAA,EACE,OAAA,EAAS,UAAA,IACT,CAAA,4BAAA,EAA+B,SAAS,CAAA,4DAAA,CAAA;AAAA,MAC1C,OAAO,OAAA,EAAS;AAAA,KACjB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF;AAoBO,IAAM,iBAAA,GAAN,cAAgC,cAAA,CAAe;AAAA,EACpD,WAAA,CAAY,IAAA,EAAc,EAAA,EAAY,OAAA,EAA+B;AACnE,IAAA,KAAA,CAAM,CAAA,gBAAA,EAAmB,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI,gBAAA,EAAkB;AAAA,MACvD,OAAA,EAAS,EAAE,IAAA,EAAM,EAAA,EAAG;AAAA,MACpB,QAAA,EAAU,MAAA;AAAA,MACV,UAAA,EAAY,uBAAuB,EAAE,CAAA,kCAAA,CAAA;AAAA,MACrC,OAAO,OAAA,EAAS;AAAA,KACjB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AAAA,EACd;AACF;AAKO,IAAM,iBAAA,GAAN,cAAgC,cAAA,CAAe;AAAA,EACpD,WAAA,CAAY,IAAA,EAAc,EAAA,EAAY,OAAA,EAA+B;AACnE,IAAA,KAAA,CAAM,CAAA,gBAAA,EAAmB,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI,gBAAA,EAAkB;AAAA,MACvD,OAAA,EAAS,EAAE,IAAA,EAAM,EAAA,EAAG;AAAA,MACpB,QAAA,EAAU,MAAA;AAAA,MACV,UAAA,EAAY,uBAAuB,EAAE,CAAA,kCAAA,CAAA;AAAA,MACrC,OAAO,OAAA,EAAS;AAAA,KACjB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AAAA,EACd;AACF;AAWO,IAAM,iBAAA,GAAN,cAAgC,cAAA,CAAe;AAAA,EAC3C,QAAA;AAAA,EACA,MAAA;AAAA,EAET,WAAA,CACE,QAAA,EACA,MAAA,EACA,OAAA,EAKA;AACA,IAAA,MAAM,QACJ,OAAA,EAAS,OAAA,KAAY,SAAY,EAAA,GAAK,CAAA,WAAA,EAAc,QAAQ,OAAO,CAAA,CAAA,CAAA;AACrE,IAAA,KAAA;AAAA,MACE,CAAA,EAAG,WAAW,MAAA,GAAS,MAAA,GAAS,MAAM,CAAA,OAAA,EAAU,QAAQ,sBAAsB,KAAK,CAAA,CAAA,CAAA;AAAA,MACnF,gBAAA;AAAA,MACA;AAAA,QACE,OAAA,EAAS;AAAA,UACP,QAAA;AAAA,UACA,MAAA;AAAA,UACA,GAAI,SAAS,OAAA,KAAY,MAAA,GACvB,EAAC,GACD,EAAE,OAAA,EAAS,OAAA,CAAQ,OAAA;AAAQ,SAC/B;AAAA,QACA,QAAA,EAAU,MAAA;AAAA,QACV,UAAA,EACE,SAAS,UAAA,IACT,iJAAA;AAAA,QACF,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF;AAKO,IAAM,2BAAA,GAAN,cAA0C,cAAA,CAAe;AAAA,EAC9D,WAAA,CACE,cAAA,EACA,IAAA,EACA,OAAA,EACA;AACA,IAAA,KAAA;AAAA,MACE,CAAA,uBAAA,EAA0B,cAAc,CAAA,gBAAA,EAAmB,IAAI,CAAA,CAAA,CAAA;AAAA,MAC/D,sBAAA;AAAA,MACA;AAAA,QACE,OAAA,EAAS,EAAE,cAAA,EAAgB,IAAA,EAAK;AAAA,QAChC,QAAA,EAAU,MAAA;AAAA,QACV,UAAA,EAAY,CAAA,4BAAA,EAA+B,cAAc,CAAA,4CAAA,EAA+C,IAAI,CAAA,EAAA,CAAA;AAAA,QAC5G,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,6BAAA;AAAA,EACd;AACF;AAKO,IAAM,sBAAA,GAAN,cAAqC,cAAA,CAAe;AAAA,EACzD,WAAA,CAAY,SAAA,EAAmB,IAAA,EAAc,OAAA,EAA+B;AAC1E,IAAA,KAAA;AAAA,MACE,CAAA,kBAAA,EAAqB,SAAS,CAAA,gBAAA,EAAmB,IAAI,CAAA,CAAA,CAAA;AAAA,MACrD,iBAAA;AAAA,MACA;AAAA,QACE,OAAA,EAAS,EAAE,SAAA,EAAW,IAAA,EAAK;AAAA,QAC3B,QAAA,EAAU,MAAA;AAAA,QACV,UAAA,EAAY,CAAA,uBAAA,EAA0B,SAAS,CAAA,uCAAA,EAA0C,IAAI,CAAA,yCAAA,CAAA;AAAA,QAC7F,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AAAA,EACd;AACF;AASO,IAAM,qBAAA,GAAN,cAAoC,cAAA,CAAe;AAAA,EACxD,WAAA,CACE,SAMA,OAAA,EACA;AACA,IAAA,KAAA;AAAA,MACE,CAAA,kCAAA,EAAqC,OAAA,CAAQ,QAAQ,CAAA,GAAA,EAAM,OAAA,CAAQ,QAAQ,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAM,CAAA,EAAA,EAAK,OAAA,CAAQ,QAAQ,CAAA,CAAA,CAAA;AAAA,MAClH,oBAAA;AAAA,MACA;AAAA,QACE,OAAA;AAAA,QACA,QAAA,EAAU,YAAA;AAAA,QACV,UAAA,EAAY,CAAA,WAAA,EAAc,OAAA,CAAQ,QAAQ,CAAA,sCAAA,CAAA;AAAA,QAC1C,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF;AAKO,IAAM,aAAA,GAAN,cAA4B,cAAA,CAAe;AAAA,EAChD,WAAA,CACE,SAMA,OAAA,EACA;AACA,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA;AACjD,IAAA,KAAA;AAAA,MACE,CAAA,QAAA,EAAW,OAAA,CAAQ,QAAQ,CAAA,oBAAA,EAAuB,OAAA,CAAQ,QAAQ,CAAA,QAAA,EAAW,OAAA,CAAQ,UAAU,CAAA,YAAA,EAAe,QAAQ,CAAA,CAAA;AAAA,MACtH,gBAAA;AAAA,MACA;AAAA,QACE,OAAA;AAAA,QACA,QAAA,EAAU,YAAA;AAAA,QACV,UAAA,EAAY,CAAA,mBAAA,EAAsB,QAAQ,CAAA,QAAA,EAAW,QAAQ,QAAQ,CAAA,UAAA,CAAA;AAAA,QACrE,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AACF;AAKO,IAAM,eAAA,GAAN,cAA8B,cAAA,CAAe;AAAA,EAClD,WAAA,CACE,SAOA,OAAA,EACA;AACA,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC1C,IAAA,KAAA;AAAA,MACE,CAAA,yBAAA,EAA4B,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkB,OAAA,CAAQ,cAAc,CAAA,WAAA,EAAc,SAAS,CAAA,+BAAA,EAAkC,OAAA,CAAQ,UAAU,CAAA,CAAA;AAAA,MAC3J,sBAAA;AAAA,MACA;AAAA,QACE,OAAA;AAAA,QACA,QAAA,EAAU,YAAA;AAAA,QACV,UAAA,EAAY,CAAA,8BAAA,EAAiC,SAAS,CAAA,4CAAA,EAA+C,QAAQ,UAAU,CAAA,SAAA,CAAA;AAAA,QACvH,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF;AAKO,IAAM,gBAAA,GAAN,cAA+B,cAAA,CAAe;AAAA,EACnD,WAAA,CACE,SAOA,OAAA,EACA;AACA,IAAA,KAAA;AAAA,MACE,CAAA,wBAAA,EAA2B,OAAA,CAAQ,QAAQ,CAAA,OAAA,EAAU,QAAQ,QAAQ,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAM,CAAA,SAAA,EAAY,OAAA,CAAQ,WAAW,CAAA,MAAA,EAAS,QAAQ,aAAa,CAAA,sBAAA,CAAA;AAAA,MACpJ,mBAAA;AAAA,MACA;AAAA,QACE,OAAA;AAAA,QACA,QAAA,EAAU,YAAA;AAAA,QACV,UAAA,EACE,OAAA,CAAQ,WAAA,KAAgB,KAAA,IAAS,OAAA,CAAQ,gBAAgB,QAAA,GACvD,CAAA,8EAAA,CAAA,GACA,CAAA,qCAAA,EAAwC,OAAA,CAAQ,WAAW,CAAA,+BAAA,CAAA;AAAA,QAC/D,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AACF;AAQO,IAAM,aAAA,GAAN,cAA4B,cAAA,CAAe;AAAA,EAChD,WAAA,CACE,SAKA,OAAA,EACA;AACA,IAAA,KAAA;AAAA,MACE,CAAA,6CAAA,EAAgD,QAAQ,aAAa,CAAA,UAAA,EAAa,QAAQ,MAAM,CAAA,4BAAA,EAA+B,QAAQ,eAAe,CAAA,CAAA;AAAA,MACtJ,gBAAA;AAAA,MACA;AAAA,QACE,OAAA;AAAA,QACA,QAAA,EAAU,YAAA;AAAA,QACV,UAAA,EAAY,kCAAkC,OAAA,CAAQ,aAAa,iCAAiC,OAAA,CAAQ,eAAe,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAM,CAAA,OAAA,CAAA;AAAA,QAC7I,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AACF;AAKO,IAAM,qBAAA,GAAN,cAAoC,cAAA,CAAe;AAAA,EACxD,WAAA,CACE,SAMA,OAAA,EACA;AACA,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AAC5C,IAAA,KAAA;AAAA,MACE,CAAA,cAAA,EAAiB,OAAA,CAAQ,QAAQ,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAM,CAAA,EAAA,EAAK,OAAA,CAAQ,SAAS,CAAA,0BAAA,EAA6B,QAAQ,CAAA,CAAA,CAAA;AAAA,MAC9G,mBAAA;AAAA,MACA;AAAA,QACE,OAAA;AAAA,QACA,QAAA,EAAU,YAAA;AAAA,QACV,UAAA,EAAY,CAAA,mIAAA,CAAA;AAAA,QACZ,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF;AAYO,IAAM,oBAAA,GAAN,cAAmC,cAAA,CAAe;AAAA,EACvD,WAAA,CACE,SAMA,OAAA,EACA;AACA,IAAA,KAAA;AAAA,MACE,CAAA,oBAAA,EAAuB,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI,OAAA,CAAQ,EAAE,CAAA,mBAAA,EAAsB,OAAA,CAAQ,eAAe,CAAA,QAAA,EAAW,OAAA,CAAQ,aAAa,CAAA,CAAA;AAAA,MAC9H,kBAAA;AAAA,MACA;AAAA,QACE,OAAA;AAAA,QACA,QAAA,EAAU,QAAA;AAAA,QACV,UAAA,EAAY,CAAA,6GAAA,CAAA;AAAA,QACZ,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AAAA,EACd;AACF;AASO,IAAM,mBAAA,GAAN,cAAkC,cAAA,CAAe;AAAA,EACtD,WAAA,CACE,SAKA,OAAA,EACA;AACA,IAAA,KAAA;AAAA,MACE,CAAA,2BAAA,EAA8B,QAAQ,OAAO,CAAA,2CAAA,CAAA;AAAA,MAC7C,iBAAA;AAAA,MACA;AAAA,QACE,OAAA;AAAA,QACA,QAAA,EAAU,QAAA;AAAA,QACV,UAAA,EAAY,CAAA,oGAAA,CAAA;AAAA,QACZ,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAAA,EACd;AACF;AAKO,IAAM,cAAA,GAAN,cAA6B,cAAA,CAAe;AAAA,EACjD,WAAA,CACE,OAAA,EACA,OAAA,EAMA,OAAA,EACA;AACA,IAAA,KAAA,CAAM,SAAS,iBAAA,EAAmB;AAAA,MAChC,OAAA;AAAA,MACA,QAAA,EAAU,QAAA;AAAA,MACV,UAAA,EAAY,CAAA,kGAAA,CAAA;AAAA,MACZ,OAAO,OAAA,EAAS;AAAA,KACjB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AAAA,EACd;AACF;AAgCO,IAAM,yBAAA,GAAN,cAAwC,cAAA,CAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnD,eAAA;AAAA,EAET,WAAA,CAAY,iBAA2C,OAAA,EAAiB;AACtE,IAAA,MAAM,KAAA,GAAQ,wBAAwB,eAAe,CAAA;AACrD,IAAA,KAAA;AAAA,MACE,CAAA,iCAAA,EAAoC,MAAM,MAAM,CAAA,qBAAA,EAAwB,OAAO,CAAA,GAAA,EAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,kKAAA,CAAA;AAAA,MACrG,8BAAA;AAAA,MACA;AAAA,QACE,OAAA,EAAS,EAAE,OAAA,EAAS,gBAAA,EAAkB,KAAA,EAAM;AAAA,QAC5C,QAAA,EAAU,QAAA;AAAA,QACV,UAAA,EAAY,CAAA,8JAAA;AAAA;AACd,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,2BAAA;AACZ,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,gBAAA,GAAsC;AACxC,IAAA,OAAO,uBAAA,CAAwB,KAAK,eAAe,CAAA;AAAA,EACrD;AACF;AAEA,SAAS,wBACP,eAAA,EACmB;AACnB,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,KAAA,IAAS,gBAAgB,OAAA,EAAS;AAC3C,IAAA,IAAI,MAAM,MAAA,KAAW,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,MAAM,SAAS,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,KAAA;AACT;AAcO,IAAM,iBAAA,GAAN,cAAgC,cAAA,CAAe;AAAA,EAOpD,WAAA,CACE,SAKA,OAAA,EACA;AACA,IAAA,KAAA;AAAA,MACE,CAAA,yDAAA,EAA4D,QAAQ,OAAO,CAAA,2BAAA,EAA8B,QAAQ,QAAQ,CAAA,YAAA,EAAe,QAAQ,MAAM,CAAA,CAAA;AAAA,MACtJ,sBAAA;AAAA,MACA;AAAA,QACE,OAAA;AAAA,QACA,QAAA,EAAU,QAAA;AAAA,QACV,UAAA,EAAY,CAAA,yGAAA,CAAA;AAAA,QACZ,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AAAA,EACd;AACF;AAYO,IAAM,0BAAA,GAAN,cAAyC,cAAA,CAAe;AAAA,EAQ7D,WAAA,CACE,SAMA,OAAA,EACA;AACA,IAAA,KAAA;AAAA,MACE,CAAA,mCAAA,EAAsC,OAAA,CAAQ,OAAO,CAAA,aAAA,EAAgB,OAAA,CAAQ,OAAO,CAAA,gBAAA,EAAmB,OAAA,CAAQ,YAAY,CAAA,4BAAA,EAA+B,OAAA,CAAQ,YAAY,CAAA,CAAA;AAAA,MAC9K,yBAAA;AAAA,MACA;AAAA,QACE,OAAA;AAAA,QACA,QAAA,EAAU,QAAA;AAAA,QACV,UAAA,EAAY,CAAA,yJAAA,CAAA;AAAA,QACZ,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,4BAAA;AAAA,EACd;AACF;AAYO,IAAM,kBAAA,GAAN,cAAiC,cAAA,CAAe;AAAA,EACrD,WAAA,CACE,OAAA,EACA,OAAA,GAAmC,IACnC,OAAA,EACA;AACA,IAAA,KAAA,CAAM,SAAS,qBAAA,EAAuB;AAAA,MACpC,OAAA;AAAA,MACA,QAAA,EAAU,MAAA;AAAA,MACV,UAAA,EACE,SAAS,UAAA,IAAc,CAAA,wCAAA,CAAA;AAAA,MACzB,OAAO,OAAA,EAAS;AAAA,KACjB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAAA,EACd;AACF;AAiBA,IAAM,mCAAA,GAEF;AAAA,EACF,OAAA,EAAS,oBAAA;AAAA,EACT,KAAA,EAAO,iEAAA;AAAA,EACP,MAAA,EAAQ;AACV,CAAA;AAaO,IAAM,wBAAA,GAAN,cAAuC,cAAA,CAAe;AAAA;AAAA;AAAA;AAAA,EAI3D,WAAA,CACE,OAAA,EACA,MAAA,EACA,OAAA,EACA;AACA,IAAA,KAAA;AAAA,MACE,CAAA,4BAAA,EAA+B,OAAO,CAAA,EAAA,EAAK,mCAAA,CAAoC,MAAM,CAAC,CAAA,mJAAA,CAAA;AAAA,MAGtF,uBAAA;AAAA,MACA;AAAA,QACE,SAAS,EAAE,OAAA,EAAS,MAAA,EAAQ,GAAG,SAAS,OAAA,EAAQ;AAAA,QAChD,QAAA,EAAU,MAAA;AAAA,QACV,UAAA,EACE,4KAAA;AAAA,QAGF,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AAAA,EACd;AACF;AAYO,IAAM,sBAAA,GAAN,cAAqC,cAAA,CAAe;AAAA,EACzD,WAAA,CACE,OAAA,EACA,OAAA,EACA,OAAA,EACA;AACA,IAAA,KAAA,CAAM,SAAS,0BAAA,EAA4B;AAAA,MACzC,OAAA;AAAA,MACA,QAAA,EAAU,QAAA;AAAA,MACV,UAAA,EAAY,CAAA,wJAAA,CAAA;AAAA,MACZ,OAAO,OAAA,EAAS;AAAA,KACjB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AAAA,EACd;AACF;AAeO,IAAM,8BAAA,GAAN,cAA6C,cAAA,CAAe;AAAA,EACjE,WAAA,CACE,OAAA,EACA,OAAA,EAMA,OAAA,EACA;AACA,IAAA,KAAA,CAAM,SAAS,6BAAA,EAA+B;AAAA,MAC5C,OAAA;AAAA,MACA,QAAA,EAAU,MAAA;AAAA,MACV,YAAY,CAAA,8BAAA,EAAiC,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAO,QAAQ,SAAS,CAAA,8FAAA,CAAA;AAAA,MACjF,OAAO,OAAA,EAAS;AAAA,KACjB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,gCAAA;AAAA,EACd;AACF;AASO,IAAM,yBAAA,GAAN,cAAwC,cAAA,CAAe;AAAA,EAC5D,WAAA,CACE,OAAA,EACA,OAAA,GAA6C,IAC7C,OAAA,EACA;AACA,IAAA,KAAA,CAAM,SAAS,uBAAA,EAAyB;AAAA,MACtC,OAAA;AAAA,MACA,QAAA,EAAU,QAAA;AAAA,MACV,UAAA,EACE,SAAS,UAAA,IACT,CAAA,+GAAA,CAAA;AAAA,MACF,OAAO,OAAA,EAAS;AAAA,KACjB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,2BAAA;AAAA,EACd;AACF;AAYO,IAAM,sBAAA,GAAN,cAAqC,cAAA,CAAe;AAAA,EACzD,WAAA,CACE,OAAA,EACA,OAAA,EACA,OAAA,EACA;AACA,IAAA,KAAA,CAAM,SAAS,0BAAA,EAA4B;AAAA,MACzC,OAAA,EAAS,WAAW,EAAC;AAAA,MACrB,QAAA,EAAU,QAAA;AAAA,MACV,UAAA,EAAY,CAAA,+FAAA,CAAA;AAAA,MACZ,OAAO,OAAA,EAAS;AAAA,KACjB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AAAA,EACd;AACF;AAaO,IAAM,oBAAA,GAAN,cAAmC,cAAA,CAAe;AAAA,EACvD,YAAY,OAAA,EAA+B;AACzC,IAAA,KAAA;AAAA,MACE,4FAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,QACE,QAAA,EAAU,QAAA;AAAA,QACV,UAAA,EACE,gJAAA;AAAA,QAEF,OAAO,OAAA,EAAS;AAAA;AAClB,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AAAA,EACd;AACF;AAoBO,SAAS,iBAAiB,KAAA,EAAyC;AACxE,EAAA,OAAO,KAAA,YAAiB,cAAA;AAC1B;AAmBO,SAAS,kBAAkB,KAAA,EAAyB;AACzD,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAK,CAAA,EAAG,OAAO,KAAA;AACrC,EAAA,OAAO,KAAA,CAAM,QAAA,KAAa,MAAA,IAAU,KAAA,CAAM,QAAA,KAAa,YAAA;AACzD;AAUO,SAAS,cAAc,KAAA,EAAyB;AACrD,EAAA,OAAO,gBAAA,CAAiB,KAAK,CAAA,IAAK,KAAA,CAAM,QAAA,KAAa,QAAA;AACvD;AAKO,SAAS,kBAAkB,KAAA,EAAyB;AACzD,EAAA,OAAO,gBAAA,CAAiB,KAAK,CAAA,IAAK,KAAA,CAAM,QAAA,KAAa,YAAA;AACvD;AAKO,SAAS,mBAAmB,KAAA,EAAoC;AACrE,EAAA,OAAO,gBAAA,CAAiB,KAAK,CAAA,GAAI,KAAA,CAAM,UAAA,GAAa,MAAA;AACtD","file":"chunk-TQOYM4LN.js","sourcesContent":["/**\n * TypeGraph Error Hierarchy\n *\n * All errors extend TypeGraphError with:\n * - `code`: Machine-readable error code for programmatic handling\n * - `category`: Classification for error handling strategies\n * - `suggestion`: Optional recovery guidance for users\n * - `details`: Structured context about the error\n *\n * @example\n * ```typescript\n * try {\n * await store.nodes.Person.create({ name: \"\" });\n * } catch (error) {\n * if (isTypeGraphError(error)) {\n * console.error(error.toUserMessage());\n * if (isUserRecoverable(error)) {\n * // Show to user for correction\n * }\n * }\n * }\n * ```\n */\n\nimport type { KindEntity } from \"../core/types\";\n// Type-only import: `materialize-indexes.ts` value-imports\n// `ConfigurationError` from this file, but type-only imports are erased\n// at runtime so this back-edge does not create a value cycle.\nimport type { MaterializeIndexesResult } from \"../store/materialize-indexes\";\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Error category for programmatic handling.\n *\n * - `user`: Caused by invalid input or incorrect usage. Recoverable by fixing input.\n * - `constraint`: Business rule or schema constraint violation. Recoverable by changing data.\n * - `system`: Internal error or infrastructure issue. May require investigation or retry.\n */\nexport type ErrorCategory = \"user\" | \"constraint\" | \"system\";\n\n/**\n * Options for TypeGraphError constructor.\n */\nexport type TypeGraphErrorOptions = Readonly<{\n /** Structured context about the error */\n details?: Record<string, unknown>;\n /** Error category for handling strategies */\n category: ErrorCategory;\n /** Recovery guidance for users */\n suggestion?: string;\n /** Underlying cause of the error */\n cause?: unknown;\n}>;\n\nfunction formatCause(cause: unknown): string {\n if (cause instanceof Error) {\n return cause.stack ?? cause.message;\n }\n if (typeof cause === \"string\") {\n return cause;\n }\n if (\n typeof cause === \"number\" ||\n typeof cause === \"boolean\" ||\n typeof cause === \"bigint\"\n ) {\n return String(cause);\n }\n if (typeof cause === \"symbol\") {\n return cause.description ?? \"Symbol\";\n }\n if (cause === undefined) {\n return \"Unknown cause\";\n }\n\n try {\n return JSON.stringify(cause);\n } catch (error) {\n return `Unserializable cause: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`;\n }\n}\n\n// ============================================================\n// Base Error\n// ============================================================\n\n/**\n * Base error class for all TypeGraph errors.\n *\n * Provides structured error information for both programmatic handling\n * and user-friendly messages.\n */\nexport class TypeGraphError extends Error {\n /** Machine-readable error code (e.g., \"VALIDATION_ERROR\") */\n readonly code: string;\n\n /** Error category for handling strategies */\n readonly category: ErrorCategory;\n\n /** Structured context about the error */\n readonly details: Readonly<Record<string, unknown>>;\n\n /** Recovery guidance for users */\n readonly suggestion?: string;\n\n constructor(message: string, code: string, options: TypeGraphErrorOptions) {\n super(message, options.cause ? { cause: options.cause } : undefined);\n this.name = \"TypeGraphError\";\n this.code = code;\n this.category = options.category;\n this.details = Object.freeze(options.details ?? {});\n if (options.suggestion !== undefined) {\n this.suggestion = options.suggestion;\n }\n }\n\n /**\n * Returns a user-friendly error message with suggestion if available.\n */\n toUserMessage(): string {\n if (this.suggestion) {\n return `${this.message}\\n\\nSuggestion: ${this.suggestion}`;\n }\n return this.message;\n }\n\n /**\n * Returns a detailed string representation for logging.\n */\n toLogString(): string {\n const lines = [\n `[${this.code}] ${this.message}`,\n ` Category: ${this.category}`,\n ];\n\n if (this.suggestion) {\n lines.push(` Suggestion: ${this.suggestion}`);\n }\n\n const detailKeys = Object.keys(this.details);\n if (detailKeys.length > 0) {\n lines.push(` Details: ${JSON.stringify(this.details)}`);\n }\n\n if (this.cause) {\n lines.push(` Cause: ${formatCause(this.cause)}`);\n }\n\n return lines.join(\"\\n\");\n }\n}\n\n// ============================================================\n// Validation Errors (category: \"user\")\n// ============================================================\n\n/**\n * Validation issue from Zod or custom validation.\n */\nexport type ValidationIssue = Readonly<{\n /** Path to the invalid field (e.g., \"address.city\") */\n path: string;\n /** Human-readable error message */\n message: string;\n /** Zod error code if from Zod validation */\n code?: string;\n}>;\n\n/**\n * Details for ValidationError.\n */\nexport type ValidationErrorDetails = Readonly<{\n /** Type of entity being validated */\n entityType?: KindEntity;\n /** Kind/type name of the entity */\n kind?: string;\n /** Operation being performed */\n operation?: \"create\" | \"update\";\n /** Entity ID if updating */\n id?: string;\n /** Individual validation issues */\n issues: readonly ValidationIssue[];\n}>;\n\n/**\n * Thrown when schema validation fails during node or edge operations.\n *\n * @example\n * ```typescript\n * try {\n * await store.nodes.Person.create({ email: \"invalid\" });\n * } catch (error) {\n * if (error instanceof ValidationError) {\n * console.log(error.details.issues);\n * // [{ path: \"email\", message: \"Invalid email\" }]\n * }\n * }\n * ```\n */\nexport class ValidationError extends TypeGraphError {\n declare readonly details: ValidationErrorDetails;\n\n constructor(\n message: string,\n details: ValidationErrorDetails,\n options?: { cause?: unknown; suggestion?: string },\n ) {\n const fieldList =\n details.issues.length > 0 ?\n details.issues.map((index) => index.path || \"(root)\").join(\", \")\n : \"unknown\";\n\n super(message, \"VALIDATION_ERROR\", {\n details,\n category: \"user\",\n suggestion:\n options?.suggestion ??\n `Check the following fields: ${fieldList}. See error.details.issues for specific validation failures.`,\n cause: options?.cause,\n });\n this.name = \"ValidationError\";\n }\n}\n\n// ============================================================\n// Not Found Errors (category: \"user\")\n// ============================================================\n\n/**\n * Thrown when a node is not found.\n *\n * @example\n * ```typescript\n * try {\n * await store.nodes.Person.get(\"nonexistent-id\");\n * } catch (error) {\n * if (error instanceof NodeNotFoundError) {\n * console.log(error.details.kind, error.details.id);\n * }\n * }\n * ```\n */\nexport class NodeNotFoundError extends TypeGraphError {\n constructor(kind: string, id: string, options?: { cause?: unknown }) {\n super(`Node not found: ${kind}/${id}`, \"NODE_NOT_FOUND\", {\n details: { kind, id },\n category: \"user\",\n suggestion: `Verify the node ID \"${id}\" exists and has not been deleted.`,\n cause: options?.cause,\n });\n this.name = \"NodeNotFoundError\";\n }\n}\n\n/**\n * Thrown when an edge is not found.\n */\nexport class EdgeNotFoundError extends TypeGraphError {\n constructor(kind: string, id: string, options?: { cause?: unknown }) {\n super(`Edge not found: ${kind}/${id}`, \"EDGE_NOT_FOUND\", {\n details: { kind, id },\n category: \"user\",\n suggestion: `Verify the edge ID \"${id}\" exists and has not been deleted.`,\n cause: options?.cause,\n });\n this.name = \"EdgeNotFoundError\";\n }\n}\n\n/**\n * Thrown when an operation references a kind that isn't registered on\n * the graph — `getNodeCollectionOrThrow` against an unknown kind, a\n * `materializeIndexes({ kinds })` filter naming a missing kind, an\n * extension referencing an unresolved endpoint, search facade typos,\n * etc. Carries the offending `kindName` and `entity` plus the host\n * `graphId` so logs are unambiguous when multiple stores share a\n * process.\n */\nexport class KindNotFoundError extends TypeGraphError {\n readonly kindName: string;\n readonly entity: KindEntity;\n\n constructor(\n kindName: string,\n entity: KindEntity,\n options?: Readonly<{\n graphId?: string;\n suggestion?: string;\n cause?: unknown;\n }>,\n ) {\n const where =\n options?.graphId === undefined ? \"\" : ` on graph \"${options.graphId}\"`;\n super(\n `${entity === \"node\" ? \"Node\" : \"Edge\"} kind \"${kindName}\" is not registered${where}.`,\n \"KIND_NOT_FOUND\",\n {\n details: {\n kindName,\n entity,\n ...(options?.graphId === undefined ?\n {}\n : { graphId: options.graphId }),\n },\n category: \"user\",\n suggestion:\n options?.suggestion ??\n \"Compile-time kinds come from defineGraph; extension kinds appear after store.evolve() returns. Check store.introspect() for the registered set.\",\n cause: options?.cause,\n },\n );\n this.name = \"KindNotFoundError\";\n this.kindName = kindName;\n this.entity = entity;\n }\n}\n\n/**\n * Thrown when a uniqueness constraint name is not found on a node kind.\n */\nexport class NodeConstraintNotFoundError extends TypeGraphError {\n constructor(\n constraintName: string,\n kind: string,\n options?: { cause?: unknown },\n ) {\n super(\n `Constraint not found: \"${constraintName}\" on node kind \"${kind}\"`,\n \"CONSTRAINT_NOT_FOUND\",\n {\n details: { constraintName, kind },\n category: \"user\",\n suggestion: `Verify the constraint name \"${constraintName}\" is defined in the unique constraints for \"${kind}\".`,\n cause: options?.cause,\n },\n );\n this.name = \"NodeConstraintNotFoundError\";\n }\n}\n\n/**\n * Thrown when a declared node index name is not found on a node kind.\n */\nexport class NodeIndexNotFoundError extends TypeGraphError {\n constructor(indexName: string, kind: string, options?: { cause?: unknown }) {\n super(\n `Index not found: \"${indexName}\" on node kind \"${kind}\"`,\n \"INDEX_NOT_FOUND\",\n {\n details: { indexName, kind },\n category: \"user\",\n suggestion: `Verify the index name \"${indexName}\" is declared via defineNodeIndex for \"${kind}\" and passed to defineGraph({ indexes }).`,\n cause: options?.cause,\n },\n );\n this.name = \"NodeIndexNotFoundError\";\n }\n}\n\n// ============================================================\n// Constraint Errors (category: \"constraint\")\n// ============================================================\n\n/**\n * Thrown when edge endpoint node does not exist or is deleted.\n */\nexport class EndpointNotFoundError extends TypeGraphError {\n constructor(\n details: Readonly<{\n edgeKind: string;\n endpoint: \"from\" | \"to\";\n nodeKind: string;\n nodeId: string;\n }>,\n options?: { cause?: unknown },\n ) {\n super(\n `Endpoint node not found for edge \"${details.edgeKind}\": ${details.nodeKind}/${details.nodeId} (${details.endpoint})`,\n \"ENDPOINT_NOT_FOUND\",\n {\n details,\n category: \"constraint\",\n suggestion: `Ensure the ${details.endpoint} node exists before creating the edge.`,\n cause: options?.cause,\n },\n );\n this.name = \"EndpointNotFoundError\";\n }\n}\n\n/**\n * Thrown when edge endpoint has wrong node type.\n */\nexport class EndpointError extends TypeGraphError {\n constructor(\n details: Readonly<{\n edgeKind: string;\n endpoint: \"from\" | \"to\";\n actualKind: string;\n expectedKinds: readonly string[];\n }>,\n options?: { cause?: unknown },\n ) {\n const expected = details.expectedKinds.join(\" | \");\n super(\n `Invalid ${details.endpoint} endpoint for edge \"${details.edgeKind}\": got \"${details.actualKind}\", expected ${expected}`,\n \"ENDPOINT_ERROR\",\n {\n details,\n category: \"constraint\",\n suggestion: `Use a node of type ${expected} as the ${details.endpoint} endpoint.`,\n cause: options?.cause,\n },\n );\n this.name = \"EndpointError\";\n }\n}\n\n/**\n * Thrown when uniqueness constraint is violated.\n */\nexport class UniquenessError extends TypeGraphError {\n constructor(\n details: Readonly<{\n constraintName: string;\n kind: string;\n existingId: string;\n newId: string;\n fields: readonly string[];\n }>,\n options?: { cause?: unknown },\n ) {\n const fieldList = details.fields.join(\", \");\n super(\n `Uniqueness violation on \"${details.kind}\": constraint \"${details.constraintName}\" (fields: ${fieldList}) conflicts with existing node ${details.existingId}`,\n \"UNIQUENESS_VIOLATION\",\n {\n details,\n category: \"constraint\",\n suggestion: `Change the values for fields [${fieldList}] to be unique, or update the existing node ${details.existingId} instead.`,\n cause: options?.cause,\n },\n );\n this.name = \"UniquenessError\";\n }\n}\n\n/**\n * Thrown when cardinality constraint is violated.\n */\nexport class CardinalityError extends TypeGraphError {\n constructor(\n details: Readonly<{\n edgeKind: string;\n fromKind: string;\n fromId: string;\n cardinality: string;\n existingCount: number;\n }>,\n options?: { cause?: unknown },\n ) {\n super(\n `Cardinality violation: \"${details.edgeKind}\" from ${details.fromKind}/${details.fromId} allows \"${details.cardinality}\" but ${details.existingCount} edge(s) already exist`,\n \"CARDINALITY_ERROR\",\n {\n details,\n category: \"constraint\",\n suggestion:\n details.cardinality === \"one\" || details.cardinality === \"unique\" ?\n `Delete the existing edge before creating a new one, or use cardinality \"many\".`\n : `Check if the cardinality constraint \"${details.cardinality}\" is correct for your use case.`,\n cause: options?.cause,\n },\n );\n this.name = \"CardinalityError\";\n }\n}\n\n/**\n * Thrown when disjointness constraint is violated.\n *\n * Disjoint types cannot share the same ID - a node cannot be both\n * a Person and an Organization if they are declared disjoint.\n */\nexport class DisjointError extends TypeGraphError {\n constructor(\n details: Readonly<{\n nodeId: string;\n attemptedKind: string;\n conflictingKind: string;\n }>,\n options?: { cause?: unknown },\n ) {\n super(\n `Disjoint constraint violation: cannot create ${details.attemptedKind} with ID \"${details.nodeId}\" - conflicts with existing ${details.conflictingKind}`,\n \"DISJOINT_ERROR\",\n {\n details,\n category: \"constraint\",\n suggestion: `Use a different ID for the new ${details.attemptedKind} node, or delete the existing ${details.conflictingKind}/${details.nodeId} first.`,\n cause: options?.cause,\n },\n );\n this.name = \"DisjointError\";\n }\n}\n\n/**\n * Thrown when deletion is blocked due to existing edges (restrict behavior).\n */\nexport class RestrictedDeleteError extends TypeGraphError {\n constructor(\n details: Readonly<{\n nodeKind: string;\n nodeId: string;\n edgeCount: number;\n edgeKinds: readonly string[];\n }>,\n options?: { cause?: unknown },\n ) {\n const edgeList = details.edgeKinds.join(\", \");\n super(\n `Cannot delete ${details.nodeKind}/${details.nodeId}: ${details.edgeCount} connected edge(s) exist (${edgeList})`,\n \"RESTRICTED_DELETE\",\n {\n details,\n category: \"constraint\",\n suggestion: `Delete the connected edges first, or change onDelete behavior to \"cascade\" (auto-delete edges) or \"disconnect\" (soft-delete edges).`,\n cause: options?.cause,\n },\n );\n this.name = \"RestrictedDeleteError\";\n }\n}\n\n// ============================================================\n// Concurrency Errors (category: \"system\")\n// ============================================================\n\n/**\n * Thrown when optimistic locking detects a concurrent modification.\n *\n * This occurs when two operations try to update the same entity simultaneously.\n * The operation with the stale version fails.\n */\nexport class VersionConflictError extends TypeGraphError {\n constructor(\n details: Readonly<{\n kind: string;\n id: string;\n expectedVersion: number;\n actualVersion: number;\n }>,\n options?: { cause?: unknown },\n ) {\n super(\n `Version conflict on ${details.kind}/${details.id}: expected version ${details.expectedVersion}, found ${details.actualVersion}`,\n \"VERSION_CONFLICT\",\n {\n details,\n category: \"system\",\n suggestion: `Fetch the latest version of the entity and retry the operation. This error indicates concurrent modification.`,\n cause: options?.cause,\n },\n );\n this.name = \"VersionConflictError\";\n }\n}\n\n// ============================================================\n// Schema Errors (category: \"system\")\n// ============================================================\n\n/**\n * Thrown when the schema in code doesn't match the schema in the database.\n */\nexport class SchemaMismatchError extends TypeGraphError {\n constructor(\n details: Readonly<{\n graphId: string;\n expectedHash: string;\n actualHash: string;\n }>,\n options?: { cause?: unknown },\n ) {\n super(\n `Schema mismatch for graph \"${details.graphId}\": code schema differs from database schema`,\n \"SCHEMA_MISMATCH\",\n {\n details,\n category: \"system\",\n suggestion: `Run schema migration to update the database, or use createStoreWithSchema() for automatic migration.`,\n cause: options?.cause,\n },\n );\n this.name = \"SchemaMismatchError\";\n }\n}\n\n/**\n * Thrown when schema migration fails.\n */\nexport class MigrationError extends TypeGraphError {\n constructor(\n message: string,\n details: Readonly<{\n graphId: string;\n fromVersion: number;\n toVersion: number;\n reason?: string;\n }>,\n options?: { cause?: unknown },\n ) {\n super(message, \"MIGRATION_ERROR\", {\n details,\n category: \"system\",\n suggestion: `Review the schema changes and ensure they are backwards compatible, or implement a data migration.`,\n cause: options?.cause,\n });\n this.name = \"MigrationError\";\n }\n}\n\n/**\n * Thrown by `Store.evolve(extension, { eager })` when the schema\n * commit succeeded but the follow-on `materializeIndexes()` produced\n * one or more failed entries.\n *\n * Recovery: the schema commit is NOT rolled back. The new `Store` is\n * fully constructed and (when `options.ref` was supplied) `ref.current`\n * already points to it — the caller can read the new store via the ref\n * and decide how to handle the failed indexes (retry, skip, alert).\n * The full `MaterializeIndexesResult` is attached as `.materialization`.\n *\n * @example\n * ```ts\n * const ref = { current: store };\n * try {\n * await store.evolve(extension, { ref, eager: {} });\n * } catch (error) {\n * if (error instanceof EagerMaterializationError) {\n * // schema is committed; ref.current is the new store\n * log.warn(\n * { failed: error.failedIndexNames },\n * \"indexes did not materialize; will retry\",\n * );\n * await ref.current.materializeIndexes();\n * } else {\n * throw error;\n * }\n * }\n * ```\n */\nexport class EagerMaterializationError extends TypeGraphError {\n /**\n * The full materialization result, including successful and failed\n * entries. Same shape as `Store.materializeIndexes()` returns.\n */\n readonly materialization: MaterializeIndexesResult;\n\n constructor(materialization: MaterializeIndexesResult, graphId: string) {\n const names = collectFailedIndexNames(materialization);\n super(\n `Eager materialization failed for ${names.length} index(es) on graph \"${graphId}\": ${names.join(\", \")}. The schema commit succeeded; the new Store is available via the ref handle (when supplied) and the failed indexes can be retried via store.materializeIndexes().`,\n \"EAGER_MATERIALIZATION_FAILED\",\n {\n details: { graphId, failedIndexNames: names },\n category: \"system\",\n suggestion: `Inspect error.materialization for per-index errors. Each failure preserves any prior successful materialization timestamp; the schema is committed regardless.`,\n },\n );\n this.name = \"EagerMaterializationError\";\n this.materialization = materialization;\n }\n\n /**\n * Names of just the indexes that failed — derived from\n * `materialization.results` so the two views can never disagree.\n */\n get failedIndexNames(): readonly string[] {\n return collectFailedIndexNames(this.materialization);\n }\n}\n\nfunction collectFailedIndexNames(\n materialization: MaterializeIndexesResult,\n): readonly string[] {\n const names: string[] = [];\n for (const entry of materialization.results) {\n if (entry.status === \"failed\") names.push(entry.indexName);\n }\n return names;\n}\n\n/**\n * Thrown by `commitSchemaVersion` and `setActiveVersion` when the\n * caller's view of the active schema version is out of date — another\n * writer has already advanced it.\n *\n * Recovery: re-read the active version with `getActiveSchema(graphId)`,\n * recompute against the new baseline, and retry. This is a routine\n * concurrency signal, not a bug.\n *\n * `actual` is `0` when no active version exists yet (initial-commit race\n * where another writer initialized first).\n */\nexport class StaleVersionError extends TypeGraphError {\n declare readonly details: Readonly<{\n graphId: string;\n expected: number;\n actual: number;\n }>;\n\n constructor(\n details: Readonly<{\n graphId: string;\n expected: number;\n actual: number;\n }>,\n options?: { cause?: unknown },\n ) {\n super(\n `Schema version was advanced by another writer for graph \"${details.graphId}\": expected active version ${details.expected}, actual is ${details.actual}`,\n \"STALE_SCHEMA_VERSION\",\n {\n details,\n category: \"system\",\n suggestion: `Re-read the active schema version, recompute the new version against that baseline, and retry the commit.`,\n cause: options?.cause,\n },\n );\n this.name = \"StaleVersionError\";\n }\n}\n\n/**\n * Thrown by `commitSchemaVersion` when a row already exists at the\n * target version with a *different* schema hash — i.e. two writers\n * committed materially different schemas at the same version number.\n *\n * Distinct from `StaleVersionError`: this is not a refetch-and-retry\n * situation, it's a content disagreement that needs operator\n * intervention. Typically caused by inconsistent application\n * deployments writing schemas that hash differently.\n */\nexport class SchemaContentConflictError extends TypeGraphError {\n declare readonly details: Readonly<{\n graphId: string;\n version: number;\n existingHash: string;\n incomingHash: string;\n }>;\n\n constructor(\n details: Readonly<{\n graphId: string;\n version: number;\n existingHash: string;\n incomingHash: string;\n }>,\n options?: { cause?: unknown },\n ) {\n super(\n `Schema content conflict for graph \"${details.graphId}\" at version ${details.version}: existing hash ${details.existingHash} differs from incoming hash ${details.incomingHash}`,\n \"SCHEMA_CONTENT_CONFLICT\",\n {\n details,\n category: \"system\",\n suggestion: `Two writers committed different schemas at the same version. Reconcile the application deployments so they produce the same canonical schema, then retry.`,\n cause: options?.cause,\n },\n );\n this.name = \"SchemaContentConflictError\";\n }\n}\n\n// ============================================================\n// Configuration Errors (category: \"user\")\n// ============================================================\n\n/**\n * Thrown when graph configuration is invalid.\n *\n * This includes invalid schema definitions, ontology conflicts,\n * and other configuration issues detected at graph creation time.\n */\nexport class ConfigurationError extends TypeGraphError {\n constructor(\n message: string,\n details: Record<string, unknown> = {},\n options?: { cause?: unknown; suggestion?: string },\n ) {\n super(message, \"CONFIGURATION_ERROR\", {\n details,\n category: \"user\",\n suggestion:\n options?.suggestion ?? `Review your graph definition for errors.`,\n cause: options?.cause,\n });\n this.name = \"ConfigurationError\";\n }\n}\n\n/**\n * Why a store's strategy-owned storage is not usable on the current\n * connection. Drives the {@link StoreNotInitializedError} message and\n * is surfaced in `details.reason` for programmatic handling.\n *\n * - `missing`: no durable materialization marker exists — the database\n * was never initialized for this graph's runtime contributions.\n * - `stale`: a marker exists but its recorded signature no longer\n * matches the resolved contribution DDL (strategy swap or DDL drift).\n * The hot path refuses rather than silently re-materializing.\n * - `failed`: the most recent boot-time materialization attempt\n * recorded an error. Boot may retry; the hot path refuses.\n */\nexport type StoreNotInitializedReason = \"missing\" | \"stale\" | \"failed\";\n\nconst STORE_NOT_INITIALIZED_REASON_PHRASE: Readonly<\n Record<StoreNotInitializedReason, string>\n> = {\n missing: \"is not initialized\",\n stale: \"is stale (recorded materialization signature no longer matches)\",\n failed: \"failed its last initialization attempt\",\n};\n\n/**\n * Thrown when a fulltext-dependent operation runs against a connection\n * whose strategy-owned storage has not been durably materialized.\n *\n * `createStore()` is a synchronous, zero-I/O attach: it never creates\n * tables, repairs DDL, or writes materialization markers. The durable\n * marker is written exclusively by the async boot path\n * (`createStoreWithSchema`). When a fulltext read/write — or an\n * adopted/business transaction — observes no valid marker, it refuses\n * loudly here instead of lazily emitting DDL on the hot path.\n */\nexport class StoreNotInitializedError extends TypeGraphError {\n // `graphId`/`reason` are positional and required: both are\n // load-bearing for the message and for programmatic handling via\n // `details.reason`. Caller `details` merge on top.\n constructor(\n graphId: string,\n reason: StoreNotInitializedReason,\n options?: { cause?: unknown; details?: Record<string, unknown> },\n ) {\n super(\n `fulltext storage for graph \"${graphId}\" ${STORE_NOT_INITIALIZED_REASON_PHRASE[reason]}. ` +\n `Run createStoreWithSchema(graph, backend) during application boot, ` +\n `outside request handlers and adopted transactions, before using createStore().`,\n \"STORE_NOT_INITIALIZED\",\n {\n details: { graphId, reason, ...options?.details },\n category: \"user\",\n suggestion:\n \"Call createStoreWithSchema(graph, backend) once at application \" +\n \"startup. createStore() attaches to an already-initialized \" +\n \"database and does not materialize storage itself.\",\n cause: options?.cause,\n },\n );\n this.name = \"StoreNotInitializedError\";\n }\n}\n\n// ============================================================\n// Database Errors (category: \"system\")\n// ============================================================\n\n/**\n * Thrown when a database operation fails unexpectedly.\n *\n * This indicates a system-level failure in the database backend,\n * not a user-recoverable error.\n */\nexport class DatabaseOperationError extends TypeGraphError {\n constructor(\n message: string,\n details: Readonly<{ operation: string; entity: string }>,\n options?: { cause?: unknown },\n ) {\n super(message, \"DATABASE_OPERATION_ERROR\", {\n details,\n category: \"system\",\n suggestion: `This is a system-level database error. Check the database connection and retry the operation. If the problem persists, investigate the underlying cause.`,\n cause: options?.cause,\n });\n this.name = \"DatabaseOperationError\";\n }\n}\n\n// ============================================================\n// Vector / Embedding Errors (category: \"user\")\n// ============================================================\n\n/**\n * Thrown when an embedding field's declared dimension no longer matches the\n * dimension of its materialized per-field storage — i.e. a field's\n * `embedding(N)` was changed to `embedding(M)`. The stored vectors are invalid\n * under the new dimension and cannot be converted, only recomputed, so this is\n * a deliberate app-driven migration: call\n * `store.reembedVectorField(kind, fieldPath, ...)` to recreate the storage at\n * the new dimension and re-embed existing rows.\n */\nexport class EmbeddingDimensionChangedError extends TypeGraphError {\n constructor(\n message: string,\n details: Readonly<{\n kind: string;\n fieldPath: string;\n declaredDimensions?: number;\n storedDimensions?: number;\n }>,\n options?: { cause?: unknown },\n ) {\n super(message, \"EMBEDDING_DIMENSION_CHANGED\", {\n details,\n category: \"user\",\n suggestion: `Run store.reembedVectorField(\"${details.kind}\", \"${details.fieldPath}\", { embed }) to recreate the field's storage at the new dimension and re-embed existing rows.`,\n cause: options?.cause,\n });\n this.name = \"EmbeddingDimensionChangedError\";\n }\n}\n\n// ============================================================\n// Query Errors (category: \"system\")\n// ============================================================\n\n/**\n * Thrown when a query predicate cannot be compiled for the target database.\n */\nexport class UnsupportedPredicateError extends TypeGraphError {\n constructor(\n message: string,\n details: Readonly<Record<string, unknown>> = {},\n options?: { cause?: unknown; suggestion?: string },\n ) {\n super(message, \"UNSUPPORTED_PREDICATE\", {\n details,\n category: \"system\",\n suggestion:\n options?.suggestion ??\n `This predicate may not be supported by your database backend. Check the documentation for supported predicates.`,\n cause: options?.cause,\n });\n this.name = \"UnsupportedPredicateError\";\n }\n}\n\n// ============================================================\n// Compiler Errors (category: \"system\")\n// ============================================================\n\n/**\n * Thrown when a compiler invariant is violated.\n *\n * This indicates a bug in the query compiler — the compiler reached\n * a state that should be unreachable. These errors are not user-recoverable.\n */\nexport class CompilerInvariantError extends TypeGraphError {\n constructor(\n message: string,\n details?: Readonly<Record<string, unknown>>,\n options?: { cause?: unknown },\n ) {\n super(message, \"COMPILER_INVARIANT_ERROR\", {\n details: details ?? {},\n category: \"system\",\n suggestion: `This is an internal compiler error. Please report it as a bug with the query that triggered it.`,\n cause: options?.cause,\n });\n this.name = \"CompilerInvariantError\";\n }\n}\n\n// ============================================================\n// Lifecycle Errors (category: \"system\")\n// ============================================================\n\n/**\n * Thrown when an operation is attempted on a backend that has been disposed.\n *\n * This typically occurs during runtime teardown — for example, when a\n * Cloudflare Workers test runner resets Durable Object storage while\n * the TypeGraph backend still has queued operations.\n */\nexport class BackendDisposedError extends TypeGraphError {\n constructor(options?: { cause?: unknown }) {\n super(\n \"Backend has been disposed — the underlying database connection is no longer available\",\n \"BACKEND_DISPOSED\",\n {\n category: \"system\",\n suggestion:\n \"Ensure all store operations complete before calling backend.close(). \" +\n \"In test environments, await store teardown before resetting the database.\",\n cause: options?.cause,\n },\n );\n this.name = \"BackendDisposedError\";\n }\n}\n\n// ============================================================\n// Utility Functions\n// ============================================================\n\n/**\n * Type guard for TypeGraphError.\n *\n * @example\n * ```typescript\n * try {\n * await store.nodes.Person.create({});\n * } catch (error) {\n * if (isTypeGraphError(error)) {\n * console.log(error.code, error.category);\n * }\n * }\n * ```\n */\nexport function isTypeGraphError(error: unknown): error is TypeGraphError {\n return error instanceof TypeGraphError;\n}\n\n/**\n * Check if error is recoverable by user action (user or constraint error).\n *\n * User-recoverable errors can typically be resolved by:\n * - Fixing invalid input data\n * - Using different IDs or values\n * - Deleting conflicting data first\n *\n * @example\n * ```typescript\n * if (isUserRecoverable(error)) {\n * showErrorToUser(error.toUserMessage());\n * } else {\n * logAndAlertOps(error);\n * }\n * ```\n */\nexport function isUserRecoverable(error: unknown): boolean {\n if (!isTypeGraphError(error)) return false;\n return error.category === \"user\" || error.category === \"constraint\";\n}\n\n/**\n * Check if error indicates a system/infrastructure issue.\n *\n * System errors typically require:\n * - Retry logic (for transient failures)\n * - Investigation (for persistent failures)\n * - Ops team notification\n */\nexport function isSystemError(error: unknown): boolean {\n return isTypeGraphError(error) && error.category === \"system\";\n}\n\n/**\n * Check if error is a constraint violation.\n */\nexport function isConstraintError(error: unknown): boolean {\n return isTypeGraphError(error) && error.category === \"constraint\";\n}\n\n/**\n * Extract suggestion from error if available.\n */\nexport function getErrorSuggestion(error: unknown): string | undefined {\n return isTypeGraphError(error) ? error.suggestion : undefined;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk7V335GHG_cjs = require('./chunk-7V335GHG.cjs');
3
+ var chunkFLRCVI2G_cjs = require('./chunk-FLRCVI2G.cjs');
4
4
  var drizzleOrm = require('drizzle-orm');
5
5
  var casing = require('drizzle-orm/casing');
6
6
  var pgCore = require('drizzle-orm/pg-core');
@@ -391,7 +391,7 @@ function toPostgresPath(pointer) {
391
391
  if (!pointer || pointer === "" || pointer === "/") {
392
392
  return drizzleOrm.sql.raw("ARRAY[]::text[]");
393
393
  }
394
- const segments = chunk7V335GHG_cjs.parseJsonPointer(pointer);
394
+ const segments = chunkFLRCVI2G_cjs.parseJsonPointer(pointer);
395
395
  if (segments.length === 0) {
396
396
  return drizzleOrm.sql.raw("ARRAY[]::text[]");
397
397
  }
@@ -403,7 +403,6 @@ var postgresDialect = {
403
403
  capabilities: {
404
404
  standardQueryStrategy: "cte_project",
405
405
  recursiveQueryStrategy: "recursive_cte",
406
- setOperationStrategy: "standard_parenthesized",
407
406
  materializeIntermediateTraversalCtes: false,
408
407
  emitNotMaterializedHint: true,
409
408
  forceRecursiveWorktableOuterJoinOrder: false,
@@ -480,12 +479,24 @@ var postgresDialect = {
480
479
  return drizzleOrm.sql`(${column} #> ${path} IS NOT NULL AND ${column} #>> ${path} != 'null')`;
481
480
  },
482
481
  // ============================================================
482
+ // Comparison Operations
483
+ // ============================================================
484
+ nullSafeEquals(left, right) {
485
+ return drizzleOrm.sql`${left} IS NOT DISTINCT FROM ${right}`;
486
+ },
487
+ // ============================================================
483
488
  // String Operations
484
489
  // ============================================================
485
490
  ilike(column, pattern) {
486
491
  return drizzleOrm.sql`${column} ILIKE ${pattern}`;
487
492
  },
488
493
  // ============================================================
494
+ // Set Operations
495
+ // ============================================================
496
+ wrapSetOperationOperand(inner) {
497
+ return drizzleOrm.sql`(${inner})`;
498
+ },
499
+ // ============================================================
489
500
  // Recursive CTE Path Operations
490
501
  // ============================================================
491
502
  initializePath(nodeId) {
@@ -521,36 +532,9 @@ var postgresDialect = {
521
532
  // ============================================================
522
533
  // Vector Operations
523
534
  // ============================================================
535
+ // Compile-time gate for `field.similarTo(...)`; the active
536
+ // `VectorStrategy` (pgvector) owns the distance SQL.
524
537
  supportsVectors: true,
525
- vectorDistance(column, embedding, metric) {
526
- const formatted = this.formatEmbedding(embedding);
527
- switch (metric) {
528
- case "cosine": {
529
- return drizzleOrm.sql`(${column} <=> ${formatted})`;
530
- }
531
- case "l2": {
532
- return drizzleOrm.sql`(${column} <-> ${formatted})`;
533
- }
534
- case "inner_product": {
535
- return drizzleOrm.sql`(${column} <#> ${formatted})`;
536
- }
537
- default: {
538
- const _exhaustive = metric;
539
- throw new Error("Unsupported vector metric: " + String(_exhaustive));
540
- }
541
- }
542
- },
543
- formatEmbedding(embedding) {
544
- for (const [index, value] of embedding.entries()) {
545
- if (typeof value !== "number" || !Number.isFinite(value)) {
546
- throw new TypeError(
547
- `embedding[${index}] must be a finite number, got: ${value}`
548
- );
549
- }
550
- }
551
- const asString = `[${embedding.join(",")}]`;
552
- return drizzleOrm.sql`${asString}::vector`;
553
- },
554
538
  // ============================================================
555
539
  // Fulltext Operations
556
540
  // ============================================================
@@ -563,7 +547,7 @@ function toSqlitePath(pointer) {
563
547
  if (!pointer || pointer === "" || pointer === "/") {
564
548
  return "$";
565
549
  }
566
- const segments = chunk7V335GHG_cjs.parseJsonPointer(pointer);
550
+ const segments = chunkFLRCVI2G_cjs.parseJsonPointer(pointer);
567
551
  const parts = ["$"];
568
552
  for (const segment of segments) {
569
553
  if (isArrayIndex(segment)) {
@@ -582,7 +566,6 @@ var sqliteDialect = {
582
566
  capabilities: {
583
567
  standardQueryStrategy: "cte_project",
584
568
  recursiveQueryStrategy: "recursive_cte",
585
- setOperationStrategy: "sqlite_compound",
586
569
  materializeIntermediateTraversalCtes: true,
587
570
  emitNotMaterializedHint: false,
588
571
  forceRecursiveWorktableOuterJoinOrder: true,
@@ -661,12 +644,24 @@ var sqliteDialect = {
661
644
  return drizzleOrm.sql`(json_extract(${column}, ${pathSql}) IS NOT NULL AND json_type(${column}, ${pathSql}) != 'null')`;
662
645
  },
663
646
  // ============================================================
647
+ // Comparison Operations
648
+ // ============================================================
649
+ nullSafeEquals(left, right) {
650
+ return drizzleOrm.sql`${left} IS ${right}`;
651
+ },
652
+ // ============================================================
664
653
  // String Operations
665
654
  // ============================================================
666
655
  ilike(column, pattern) {
667
656
  return drizzleOrm.sql`LOWER(${column}) LIKE LOWER(${pattern})`;
668
657
  },
669
658
  // ============================================================
659
+ // Set Operations
660
+ // ============================================================
661
+ wrapSetOperationOperand(inner) {
662
+ return drizzleOrm.sql`SELECT * FROM (${inner})`;
663
+ },
664
+ // ============================================================
670
665
  // Recursive CTE Path Operations
671
666
  // ============================================================
672
667
  initializePath(nodeId) {
@@ -705,43 +700,105 @@ var sqliteDialect = {
705
700
  // ============================================================
706
701
  // Vector Operations
707
702
  // ============================================================
703
+ // Compile-time gate for `field.similarTo(...)`; the active
704
+ // `VectorStrategy` (sqlite-vec / libSQL-native) owns the distance SQL.
708
705
  supportsVectors: true,
709
- vectorDistance(column, embedding, metric) {
710
- const formatted = this.formatEmbedding(embedding);
711
- switch (metric) {
712
- case "cosine": {
713
- return drizzleOrm.sql`vec_distance_cosine(${column}, ${formatted})`;
714
- }
715
- case "l2": {
716
- return drizzleOrm.sql`vec_distance_l2(${column}, ${formatted})`;
717
- }
718
- case "inner_product": {
719
- throw new Error(
720
- "Inner product distance is not supported by sqlite-vec. Use 'cosine' or 'l2' metrics instead."
721
- );
722
- }
723
- default: {
724
- const _exhaustive = metric;
725
- throw new Error("Unsupported vector metric: " + String(_exhaustive));
726
- }
727
- }
728
- },
729
- formatEmbedding(embedding) {
730
- for (const [index, value] of embedding.entries()) {
731
- if (typeof value !== "number" || !Number.isFinite(value)) {
732
- throw new TypeError(
733
- `embedding[${index}] must be a finite number, got: ${value}`
734
- );
735
- }
736
- }
737
- const asJson = JSON.stringify(embedding);
738
- return drizzleOrm.sql`vec_f32(${asJson})`;
739
- },
740
706
  // ============================================================
741
707
  // Fulltext Operations
742
708
  // ============================================================
743
709
  fulltext: fts5Strategy
744
710
  };
711
+ var VECTOR_CONTRIBUTION_PREFIX = "vector";
712
+ function buildVectorCapabilities(strategy) {
713
+ return strategy.capabilities;
714
+ }
715
+ function vectorScoreExpression(distanceExpression, metric) {
716
+ switch (metric) {
717
+ case "cosine": {
718
+ return drizzleOrm.sql`(1 - (${distanceExpression}))`;
719
+ }
720
+ case "l2":
721
+ case "inner_product": {
722
+ return distanceExpression;
723
+ }
724
+ default: {
725
+ const _exhaustive = metric;
726
+ throw new Error(`Unsupported vector metric: ${String(_exhaustive)}`);
727
+ }
728
+ }
729
+ }
730
+ function vectorMinScoreCondition(distanceExpression, metric, minScore) {
731
+ assertVectorMinScore(minScore, metric);
732
+ switch (metric) {
733
+ case "cosine": {
734
+ return drizzleOrm.sql`${distanceExpression} <= ${1 - minScore}`;
735
+ }
736
+ case "l2": {
737
+ return drizzleOrm.sql`${distanceExpression} <= ${minScore}`;
738
+ }
739
+ case "inner_product": {
740
+ return drizzleOrm.sql`${distanceExpression} <= ${-minScore}`;
741
+ }
742
+ default: {
743
+ const _exhaustive = metric;
744
+ throw new Error(`Unsupported vector metric: ${String(_exhaustive)}`);
745
+ }
746
+ }
747
+ }
748
+ function assertFiniteEmbedding(embedding, name) {
749
+ for (const [index, value] of embedding.entries()) {
750
+ if (typeof value !== "number" || !Number.isFinite(value)) {
751
+ throw new TypeError(
752
+ `${name}[${index}] must be a finite number, got: ${value}`
753
+ );
754
+ }
755
+ }
756
+ }
757
+ function assertVectorSearchLimit(limit) {
758
+ if (!Number.isInteger(limit) || limit <= 0) {
759
+ throw new RangeError(
760
+ `vectorSearch limit must be a positive integer, got: ${limit}`
761
+ );
762
+ }
763
+ }
764
+ function assertVectorMinScore(minScore, metric, label = "minScore") {
765
+ if (!Number.isFinite(minScore)) {
766
+ throw new RangeError(`${label} must be a finite number, got: ${minScore}`);
767
+ }
768
+ if (metric === "cosine" && (minScore < -1 || minScore > 1)) {
769
+ throw new RangeError(
770
+ `${label} for the cosine metric must be between -1 and 1, got: ${minScore}`
771
+ );
772
+ }
773
+ }
774
+ var MAX_VECTOR_IDENTIFIER_LENGTH = 63;
775
+ function sanitizeIdentifierPart(value) {
776
+ return value.toLowerCase().replaceAll(/[^a-z0-9_]/g, "_");
777
+ }
778
+ function shortHash(input) {
779
+ let h1 = 3735928559;
780
+ let h2 = 1103547991;
781
+ for (let index = 0; index < input.length; index++) {
782
+ const ch = input.codePointAt(index);
783
+ h1 = Math.imul(h1 ^ ch, 2654435761);
784
+ h2 = Math.imul(h2 ^ ch, 1597334677);
785
+ }
786
+ h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909);
787
+ h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909);
788
+ const hi = (h2 >>> 0).toString(16).padStart(8, "0");
789
+ const lo = (h1 >>> 0).toString(16).padStart(8, "0");
790
+ return `${hi}${lo}`.slice(0, 8);
791
+ }
792
+ function vectorPhysicalName(prefix, graphId, nodeKind, fieldPath) {
793
+ const readable = `${prefix}_${sanitizeIdentifierPart(graphId)}_${sanitizeIdentifierPart(nodeKind)}_${sanitizeIdentifierPart(fieldPath)}`;
794
+ const hash = shortHash(JSON.stringify([graphId, nodeKind, fieldPath]));
795
+ const full = `${readable}_${hash}`;
796
+ if (full.length <= MAX_VECTOR_IDENTIFIER_LENGTH) return full;
797
+ return `${readable.slice(0, MAX_VECTOR_IDENTIFIER_LENGTH - 1 - hash.length)}_${hash}`;
798
+ }
799
+ function quoteIdentifier2(name) {
800
+ return `"${name.replaceAll('"', '""')}"`;
801
+ }
745
802
 
746
803
  // src/query/dialect/index.ts
747
804
  var DIALECT_ADAPTERS = {
@@ -797,6 +854,20 @@ function compileEdgeIndexKeys(index, dialect, propsColumn, systemColumn) {
797
854
  }
798
855
  return { keys };
799
856
  }
857
+ function compileNodeIndexFieldKeys(index, ctx) {
858
+ const adapter = getDialect(ctx.dialect);
859
+ const keys = [];
860
+ for (const [position, pointer] of index.fields.entries()) {
861
+ const extracted = compileIndexKeyValue(
862
+ adapter,
863
+ ctx.propsColumn,
864
+ pointer,
865
+ index.fieldValueTypes[position]
866
+ );
867
+ keys.push(drizzleOrm.sql`(${extracted})`);
868
+ }
869
+ return keys;
870
+ }
800
871
  function compileIndexKeyValue(dialect, propsColumn, pointer, valueType) {
801
872
  switch (valueType) {
802
873
  case "number": {
@@ -898,7 +969,7 @@ function compileIndexWhereOperand(ctx, operand) {
898
969
  return ctx.systemColumn(operand.column);
899
970
  }
900
971
  const adapter = getDialect(ctx.dialect);
901
- const pointer = chunk7V335GHG_cjs.jsonPointer([operand.field]);
972
+ const pointer = chunkFLRCVI2G_cjs.jsonPointer([operand.field]);
902
973
  switch (operand.valueType) {
903
974
  case "number": {
904
975
  return adapter.jsonExtractNumber(ctx.propsColumn, pointer);
@@ -985,7 +1056,7 @@ function generateEdgeIndexDDL(index, dialect, options = {}) {
985
1056
  function generateTableIndexDDL(index, dialect, tableName, options) {
986
1057
  const ifNotExists = options.ifNotExists ?? true;
987
1058
  const propsColumn = drizzleOrm.sql.raw('"props"');
988
- const systemColumn = (column) => drizzleOrm.sql.raw(quoteIdentifier2(column));
1059
+ const systemColumn = (column) => drizzleOrm.sql.raw(quoteIdentifier3(column));
989
1060
  const keys = index.entity === "node" ? compileNodeIndexKeys(index, dialect, propsColumn, systemColumn).keys : compileEdgeIndexKeys(index, dialect, propsColumn, systemColumn).keys;
990
1061
  const whereSql = index.where ? sqlToInlineString(
991
1062
  compileIndexWhere(
@@ -1003,9 +1074,9 @@ function generateTableIndexDDL(index, dialect, tableName, options) {
1003
1074
  const concurrent = options.concurrent === true && dialect === "postgres" ? "CONCURRENTLY " : "";
1004
1075
  const ifNotExistsSql = ifNotExists ? "IF NOT EXISTS " : "";
1005
1076
  const whereClause = whereSql ? ` WHERE ${whereSql}` : "";
1006
- return `CREATE ${unique}INDEX ${concurrent}${ifNotExistsSql}${quoteIdentifier2(index.name)} ON ${quoteIdentifier2(tableName)} (${keySql})${whereClause};`;
1077
+ return `CREATE ${unique}INDEX ${concurrent}${ifNotExistsSql}${quoteIdentifier3(index.name)} ON ${quoteIdentifier3(tableName)} (${keySql})${whereClause};`;
1007
1078
  }
1008
- function quoteIdentifier2(identifier) {
1079
+ function quoteIdentifier3(identifier) {
1009
1080
  return `"${identifier.replaceAll('"', '""')}"`;
1010
1081
  }
1011
1082
  function sqlToInlineString(object, dialect) {
@@ -1367,12 +1438,19 @@ function notWhere(predicate) {
1367
1438
  }
1368
1439
 
1369
1440
  exports.BASE_CONTRIBUTION_OWNER = BASE_CONTRIBUTION_OWNER;
1441
+ exports.VECTOR_CONTRIBUTION_PREFIX = VECTOR_CONTRIBUTION_PREFIX;
1370
1442
  exports.andWhere = andWhere;
1443
+ exports.assertFiniteEmbedding = assertFiniteEmbedding;
1444
+ exports.assertVectorMinScore = assertVectorMinScore;
1445
+ exports.assertVectorSearchLimit = assertVectorSearchLimit;
1371
1446
  exports.buildFulltextCapabilities = buildFulltextCapabilities;
1372
1447
  exports.buildPostgresEdgeIndexBuilders = buildPostgresEdgeIndexBuilders;
1373
1448
  exports.buildPostgresNodeIndexBuilders = buildPostgresNodeIndexBuilders;
1374
1449
  exports.buildSqliteEdgeIndexBuilders = buildSqliteEdgeIndexBuilders;
1375
1450
  exports.buildSqliteNodeIndexBuilders = buildSqliteNodeIndexBuilders;
1451
+ exports.buildVectorCapabilities = buildVectorCapabilities;
1452
+ exports.compileIndexWhere = compileIndexWhere;
1453
+ exports.compileNodeIndexFieldKeys = compileNodeIndexFieldKeys;
1376
1454
  exports.edgeColumnList = edgeColumnList;
1377
1455
  exports.fts5Strategy = fts5Strategy;
1378
1456
  exports.generateEdgeIndexDDL = generateEdgeIndexDDL;
@@ -1382,11 +1460,15 @@ exports.getDialect = getDialect;
1382
1460
  exports.nodeColumnList = nodeColumnList;
1383
1461
  exports.notWhere = notWhere;
1384
1462
  exports.orWhere = orWhere;
1463
+ exports.quoteIdentifier = quoteIdentifier2;
1385
1464
  exports.quotedColumn = quotedColumn;
1386
1465
  exports.quotedTableName = quotedTableName;
1387
1466
  exports.sqlNull = sqlNull;
1388
1467
  exports.toDeclaredIndex = toDeclaredIndex;
1389
1468
  exports.toDeclaredIndexes = toDeclaredIndexes;
1390
1469
  exports.tsvectorStrategy = tsvectorStrategy;
1391
- //# sourceMappingURL=chunk-PN37HVAV.cjs.map
1392
- //# sourceMappingURL=chunk-PN37HVAV.cjs.map
1470
+ exports.vectorMinScoreCondition = vectorMinScoreCondition;
1471
+ exports.vectorPhysicalName = vectorPhysicalName;
1472
+ exports.vectorScoreExpression = vectorScoreExpression;
1473
+ //# sourceMappingURL=chunk-UESTHN47.cjs.map
1474
+ //# sourceMappingURL=chunk-UESTHN47.cjs.map