@nicia-ai/typegraph 0.49.0 → 0.50.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 (327) hide show
  1. package/dist/backend/drizzle/indexes.cjs +9 -9
  2. package/dist/backend/drizzle/indexes.d.cts +1 -1
  3. package/dist/backend/drizzle/indexes.d.ts +1 -1
  4. package/dist/backend/drizzle/indexes.js +5 -5
  5. package/dist/backend/index.cjs +56 -52
  6. package/dist/backend/index.d.cts +3 -3
  7. package/dist/backend/index.d.ts +3 -3
  8. package/dist/backend/index.js +11 -11
  9. package/dist/backend/postgres/index.cjs +34 -28
  10. package/dist/backend/postgres/index.d.cts +7 -7
  11. package/dist/backend/postgres/index.d.ts +7 -7
  12. package/dist/backend/postgres/index.js +17 -15
  13. package/dist/backend/postgres/pglite-store.cjs +36 -35
  14. package/dist/backend/postgres/pglite-store.cjs.map +1 -1
  15. package/dist/backend/postgres/pglite-store.d.cts +8 -8
  16. package/dist/backend/postgres/pglite-store.d.ts +8 -8
  17. package/dist/backend/postgres/pglite-store.js +32 -31
  18. package/dist/backend/postgres/pglite-store.js.map +1 -1
  19. package/dist/backend/postgres/pglite.cjs +19 -17
  20. package/dist/backend/postgres/pglite.d.cts +3 -3
  21. package/dist/backend/postgres/pglite.d.ts +3 -3
  22. package/dist/backend/postgres/pglite.js +18 -16
  23. package/dist/backend/sqlite/index.cjs +31 -25
  24. package/dist/backend/sqlite/index.d.cts +7 -7
  25. package/dist/backend/sqlite/index.d.ts +7 -7
  26. package/dist/backend/sqlite/index.js +15 -13
  27. package/dist/backend/sqlite/libsql.cjs +22 -20
  28. package/dist/backend/sqlite/libsql.cjs.map +1 -1
  29. package/dist/backend/sqlite/libsql.d.cts +3 -3
  30. package/dist/backend/sqlite/libsql.d.ts +3 -3
  31. package/dist/backend/sqlite/libsql.js +17 -15
  32. package/dist/backend/sqlite/libsql.js.map +1 -1
  33. package/dist/backend/sqlite/local-store.cjs +37 -36
  34. package/dist/backend/sqlite/local-store.cjs.map +1 -1
  35. package/dist/backend/sqlite/local-store.d.cts +8 -8
  36. package/dist/backend/sqlite/local-store.d.ts +8 -8
  37. package/dist/backend/sqlite/local-store.js +33 -32
  38. package/dist/backend/sqlite/local-store.js.map +1 -1
  39. package/dist/backend/sqlite/local.cjs +20 -18
  40. package/dist/backend/sqlite/local.d.cts +3 -3
  41. package/dist/backend/sqlite/local.d.ts +3 -3
  42. package/dist/backend/sqlite/local.js +18 -16
  43. package/dist/{chunk-LTXQOEIC.js → chunk-2CYI5HRH.js} +248 -203
  44. package/dist/chunk-2CYI5HRH.js.map +1 -0
  45. package/dist/{chunk-KF6K7TGH.js → chunk-2GIV5X4P.js} +702 -422
  46. package/dist/chunk-2GIV5X4P.js.map +1 -0
  47. package/dist/{chunk-2TYSSBU5.js → chunk-2Q45FAIE.js} +15 -15
  48. package/dist/{chunk-2TYSSBU5.js.map → chunk-2Q45FAIE.js.map} +1 -1
  49. package/dist/{chunk-WODMN3Q2.cjs → chunk-45YZXI6X.cjs} +27 -27
  50. package/dist/{chunk-WODMN3Q2.cjs.map → chunk-45YZXI6X.cjs.map} +1 -1
  51. package/dist/{chunk-3DMMGT6S.js → chunk-46UGOVRW.js} +3 -3
  52. package/dist/{chunk-3DMMGT6S.js.map → chunk-46UGOVRW.js.map} +1 -1
  53. package/dist/{chunk-GLHXM7C4.js → chunk-5LKOVCPP.js} +60 -23
  54. package/dist/chunk-5LKOVCPP.js.map +1 -0
  55. package/dist/{chunk-JFRT7S3B.cjs → chunk-5OWHU7Z7.cjs} +261 -459
  56. package/dist/chunk-5OWHU7Z7.cjs.map +1 -0
  57. package/dist/{chunk-7SQSZN2J.js → chunk-5PP4KRPV.js} +5 -5
  58. package/dist/{chunk-7SQSZN2J.js.map → chunk-5PP4KRPV.js.map} +1 -1
  59. package/dist/chunk-6KQEICJ6.cjs +12 -0
  60. package/dist/{chunk-MKJ4KXL5.cjs.map → chunk-6KQEICJ6.cjs.map} +1 -1
  61. package/dist/{chunk-6SWPJEYN.js → chunk-6LEOAIIB.js} +40 -6
  62. package/dist/chunk-6LEOAIIB.js.map +1 -0
  63. package/dist/{chunk-DZAICA5J.js → chunk-6NKSE5AU.js} +4 -4
  64. package/dist/{chunk-DZAICA5J.js.map → chunk-6NKSE5AU.js.map} +1 -1
  65. package/dist/{chunk-OVI7IXYX.js → chunk-6S3PTHL4.js} +3 -3
  66. package/dist/{chunk-OVI7IXYX.js.map → chunk-6S3PTHL4.js.map} +1 -1
  67. package/dist/{chunk-3FPR224C.cjs → chunk-7CCMCMJO.cjs} +102 -102
  68. package/dist/{chunk-3FPR224C.cjs.map → chunk-7CCMCMJO.cjs.map} +1 -1
  69. package/dist/{chunk-SHFBB23Q.js → chunk-7OWE7WD6.js} +6 -4
  70. package/dist/chunk-7OWE7WD6.js.map +1 -0
  71. package/dist/chunk-7PRMDZIA.cjs +182 -0
  72. package/dist/chunk-7PRMDZIA.cjs.map +1 -0
  73. package/dist/{chunk-CHAOFCHV.js → chunk-AH2A74OZ.js} +3 -3
  74. package/dist/{chunk-CHAOFCHV.js.map → chunk-AH2A74OZ.js.map} +1 -1
  75. package/dist/{chunk-OORXGFL5.cjs → chunk-BYBDM423.cjs} +48 -48
  76. package/dist/{chunk-OORXGFL5.cjs.map → chunk-BYBDM423.cjs.map} +1 -1
  77. package/dist/{chunk-JB6T4GLL.cjs → chunk-C76WFIVZ.cjs} +808 -519
  78. package/dist/chunk-C76WFIVZ.cjs.map +1 -0
  79. package/dist/{chunk-3G5W2U2L.cjs → chunk-CS6JTQQ2.cjs} +302 -257
  80. package/dist/chunk-CS6JTQQ2.cjs.map +1 -0
  81. package/dist/{chunk-AOSSQDVO.cjs → chunk-CSNOYIB4.cjs} +13 -13
  82. package/dist/{chunk-AOSSQDVO.cjs.map → chunk-CSNOYIB4.cjs.map} +1 -1
  83. package/dist/{chunk-HEV35TGT.js → chunk-DI6VC62F.js} +13 -4
  84. package/dist/chunk-DI6VC62F.js.map +1 -0
  85. package/dist/{chunk-2QGYQBS2.cjs → chunk-DWUDZ66O.cjs} +10 -10
  86. package/dist/{chunk-2QGYQBS2.cjs.map → chunk-DWUDZ66O.cjs.map} +1 -1
  87. package/dist/{chunk-ZDKTPBGV.js → chunk-EDLKIQRI.js} +4 -4
  88. package/dist/{chunk-ZDKTPBGV.js.map → chunk-EDLKIQRI.js.map} +1 -1
  89. package/dist/chunk-EH3JZJUM.cjs +567 -0
  90. package/dist/chunk-EH3JZJUM.cjs.map +1 -0
  91. package/dist/{chunk-S5TERQVW.js → chunk-FX5ZW6PN.js} +196 -33
  92. package/dist/chunk-FX5ZW6PN.js.map +1 -0
  93. package/dist/{chunk-XVWOYKIK.js → chunk-FZHF5UWR.js} +3 -3
  94. package/dist/{chunk-XVWOYKIK.js.map → chunk-FZHF5UWR.js.map} +1 -1
  95. package/dist/{chunk-BFUOME67.cjs → chunk-G2TLHH6T.cjs} +20 -11
  96. package/dist/chunk-G2TLHH6T.cjs.map +1 -0
  97. package/dist/{chunk-5PRKMB24.cjs → chunk-GHZPZNFC.cjs} +12 -4
  98. package/dist/chunk-GHZPZNFC.cjs.map +1 -0
  99. package/dist/{chunk-ZFMCDJGB.js → chunk-GVYVGGPJ.js} +11 -199
  100. package/dist/chunk-GVYVGGPJ.js.map +1 -0
  101. package/dist/{chunk-SDBBMD4N.js → chunk-H3XP6BAV.js} +3 -3
  102. package/dist/{chunk-SDBBMD4N.js.map → chunk-H3XP6BAV.js.map} +1 -1
  103. package/dist/{chunk-ROR5ZR6A.cjs → chunk-HSEZ7X6Y.cjs} +45 -45
  104. package/dist/{chunk-ROR5ZR6A.cjs.map → chunk-HSEZ7X6Y.cjs.map} +1 -1
  105. package/dist/{chunk-LRQKXRXO.cjs → chunk-HY5BNOUN.cjs} +4 -4
  106. package/dist/{chunk-LRQKXRXO.cjs.map → chunk-HY5BNOUN.cjs.map} +1 -1
  107. package/dist/chunk-HZUB5CON.js +27 -0
  108. package/dist/chunk-HZUB5CON.js.map +1 -0
  109. package/dist/{chunk-MYKHJI2J.js → chunk-I5C6OTKR.js} +3 -3
  110. package/dist/{chunk-MYKHJI2J.js.map → chunk-I5C6OTKR.js.map} +1 -1
  111. package/dist/{chunk-3U5ABFDW.cjs → chunk-IHK5KA2Q.cjs} +31 -28
  112. package/dist/chunk-IHK5KA2Q.cjs.map +1 -0
  113. package/dist/{chunk-26YKDNUD.cjs → chunk-IPRP6TDL.cjs} +12 -10
  114. package/dist/chunk-IPRP6TDL.cjs.map +1 -0
  115. package/dist/{chunk-UGHG7PGX.js → chunk-IRPYOHRC.js} +26 -4
  116. package/dist/chunk-IRPYOHRC.js.map +1 -0
  117. package/dist/{chunk-7UOLHNWC.cjs → chunk-ISKCIQF2.cjs} +20 -20
  118. package/dist/{chunk-7UOLHNWC.cjs.map → chunk-ISKCIQF2.cjs.map} +1 -1
  119. package/dist/{chunk-7LZJNLA5.js → chunk-JG5XIJDY.js} +57 -31
  120. package/dist/chunk-JG5XIJDY.js.map +1 -0
  121. package/dist/{chunk-YYUHLYM2.cjs → chunk-K2XYLVVB.cjs} +134 -133
  122. package/dist/chunk-K2XYLVVB.cjs.map +1 -0
  123. package/dist/{chunk-5K2BKEBD.js → chunk-K46SDNQD.js} +10 -4
  124. package/dist/chunk-K46SDNQD.js.map +1 -0
  125. package/dist/{chunk-TZEGUG6D.cjs → chunk-K6VKTBST.cjs} +4 -4
  126. package/dist/{chunk-TZEGUG6D.cjs.map → chunk-K6VKTBST.cjs.map} +1 -1
  127. package/dist/chunk-KWNWG4RC.cjs +12 -0
  128. package/dist/{chunk-CICO5GXD.cjs.map → chunk-KWNWG4RC.cjs.map} +1 -1
  129. package/dist/{chunk-FQPEMEWX.cjs → chunk-LLVOQOWE.cjs} +80 -32
  130. package/dist/chunk-LLVOQOWE.cjs.map +1 -0
  131. package/dist/{chunk-TQHGE7UC.cjs → chunk-M5MSP3BI.cjs} +18 -10
  132. package/dist/chunk-M5MSP3BI.cjs.map +1 -0
  133. package/dist/{chunk-Z2JCLZFJ.js → chunk-MJPZNEJZ.js} +273 -291
  134. package/dist/chunk-MJPZNEJZ.js.map +1 -0
  135. package/dist/{chunk-TUNPBZY3.cjs → chunk-MM3JHVKZ.cjs} +4 -4
  136. package/dist/{chunk-TUNPBZY3.cjs.map → chunk-MM3JHVKZ.cjs.map} +1 -1
  137. package/dist/{chunk-BRRP76WO.js → chunk-MX7EKQPM.js} +457 -299
  138. package/dist/chunk-MX7EKQPM.js.map +1 -0
  139. package/dist/{chunk-D4QLTJSM.js → chunk-MZ34E2GN.js} +13 -12
  140. package/dist/chunk-MZ34E2GN.js.map +1 -0
  141. package/dist/{chunk-EDN4Y4ZG.cjs → chunk-OJHD3LXJ.cjs} +9 -9
  142. package/dist/{chunk-EDN4Y4ZG.cjs.map → chunk-OJHD3LXJ.cjs.map} +1 -1
  143. package/dist/{chunk-DO7SAMEK.cjs → chunk-ON47CBE4.cjs} +47 -47
  144. package/dist/{chunk-DO7SAMEK.cjs.map → chunk-ON47CBE4.cjs.map} +1 -1
  145. package/dist/{chunk-6LN7FIVU.js → chunk-PALYTHGM.js} +11 -4
  146. package/dist/chunk-PALYTHGM.js.map +1 -0
  147. package/dist/{chunk-YVF2EM7B.js → chunk-R7MRFE5P.js} +3 -3
  148. package/dist/{chunk-YVF2EM7B.js.map → chunk-R7MRFE5P.js.map} +1 -1
  149. package/dist/{chunk-EZEEWCFJ.cjs → chunk-RDP6ZRSM.cjs} +435 -265
  150. package/dist/chunk-RDP6ZRSM.cjs.map +1 -0
  151. package/dist/{chunk-GYEG3ZLZ.cjs → chunk-RJMHU2MG.cjs} +121 -18
  152. package/dist/chunk-RJMHU2MG.cjs.map +1 -0
  153. package/dist/chunk-RWUWTJQY.cjs +30 -0
  154. package/dist/chunk-RWUWTJQY.cjs.map +1 -0
  155. package/dist/{chunk-JPD2CTC3.js → chunk-S33YQEL7.js} +7 -7
  156. package/dist/{chunk-JPD2CTC3.js.map → chunk-S33YQEL7.js.map} +1 -1
  157. package/dist/chunk-S3SDEQMC.js +532 -0
  158. package/dist/chunk-S3SDEQMC.js.map +1 -0
  159. package/dist/{chunk-OI2GQ25X.cjs → chunk-SHC7BCG5.cjs} +7 -7
  160. package/dist/{chunk-OI2GQ25X.cjs.map → chunk-SHC7BCG5.cjs.map} +1 -1
  161. package/dist/{chunk-L3LQNR34.cjs → chunk-TEC24ZDA.cjs} +161 -161
  162. package/dist/{chunk-L3LQNR34.cjs.map → chunk-TEC24ZDA.cjs.map} +1 -1
  163. package/dist/{chunk-HDL2ARHX.cjs → chunk-TP4NJTI3.cjs} +63 -27
  164. package/dist/chunk-TP4NJTI3.cjs.map +1 -0
  165. package/dist/{chunk-UMGZDVOA.cjs → chunk-TTCOPKUL.cjs} +124 -124
  166. package/dist/{chunk-UMGZDVOA.cjs.map → chunk-TTCOPKUL.cjs.map} +1 -1
  167. package/dist/chunk-TUVD4DFR.cjs +1207 -0
  168. package/dist/chunk-TUVD4DFR.cjs.map +1 -0
  169. package/dist/{chunk-UGHQV7MP.cjs → chunk-TYGGUWMS.cjs} +178 -152
  170. package/dist/chunk-TYGGUWMS.cjs.map +1 -0
  171. package/dist/{chunk-WIC7DRXW.js → chunk-U3Z7XKAG.js} +7 -7
  172. package/dist/{chunk-WIC7DRXW.js.map → chunk-U3Z7XKAG.js.map} +1 -1
  173. package/dist/{chunk-NACVVDWB.js → chunk-U5EL6JUV.js} +10 -10
  174. package/dist/{chunk-NACVVDWB.js.map → chunk-U5EL6JUV.js.map} +1 -1
  175. package/dist/{chunk-OMZ37BM2.js → chunk-V76FGHY3.js} +5 -5
  176. package/dist/{chunk-OMZ37BM2.js.map → chunk-V76FGHY3.js.map} +1 -1
  177. package/dist/{chunk-6NGW27EO.cjs → chunk-VLBTRXA2.cjs} +10 -10
  178. package/dist/{chunk-6NGW27EO.cjs.map → chunk-VLBTRXA2.cjs.map} +1 -1
  179. package/dist/chunk-VTJVMP4I.js +1182 -0
  180. package/dist/chunk-VTJVMP4I.js.map +1 -0
  181. package/dist/{chunk-QTD6HX4O.js → chunk-W5SOCUBL.js} +5 -5
  182. package/dist/{chunk-QTD6HX4O.js.map → chunk-W5SOCUBL.js.map} +1 -1
  183. package/dist/{chunk-SR725PWF.cjs → chunk-WCLMKNQE.cjs} +1750 -1592
  184. package/dist/chunk-WCLMKNQE.cjs.map +1 -0
  185. package/dist/{chunk-2O4PCIZ6.cjs → chunk-WK23PGTP.cjs} +13 -13
  186. package/dist/{chunk-2O4PCIZ6.cjs.map → chunk-WK23PGTP.cjs.map} +1 -1
  187. package/dist/{chunk-KKBDXCLQ.js → chunk-WQBAQZHR.js} +4 -4
  188. package/dist/{chunk-KKBDXCLQ.js.map → chunk-WQBAQZHR.js.map} +1 -1
  189. package/dist/{chunk-MRDBBHIZ.cjs → chunk-X4GDXBOP.cjs} +2 -2
  190. package/dist/chunk-X4GDXBOP.cjs.map +1 -0
  191. package/dist/{chunk-3QNZ5SAJ.cjs → chunk-XMY2SXOH.cjs} +437 -455
  192. package/dist/chunk-XMY2SXOH.cjs.map +1 -0
  193. package/dist/{chunk-D5R42W5D.js → chunk-XZW2CTNO.js} +115 -12
  194. package/dist/chunk-XZW2CTNO.js.map +1 -0
  195. package/dist/{chunk-NVY5CJFP.js → chunk-Y55DLLEG.js} +9 -6
  196. package/dist/chunk-Y55DLLEG.js.map +1 -0
  197. package/dist/chunk-YA36ABIL.js +174 -0
  198. package/dist/chunk-YA36ABIL.js.map +1 -0
  199. package/dist/{chunk-ZLONH2UD.js → chunk-YDEJQWOL.js} +2 -2
  200. package/dist/chunk-YDEJQWOL.js.map +1 -0
  201. package/dist/{chunk-JONXFAPO.js → chunk-ZAQUKCUC.js} +5 -5
  202. package/dist/{chunk-JONXFAPO.js.map → chunk-ZAQUKCUC.js.map} +1 -1
  203. package/dist/{chunk-SIT26LAZ.cjs → chunk-ZBFZGLZE.cjs} +29 -5
  204. package/dist/chunk-ZBFZGLZE.cjs.map +1 -0
  205. package/dist/{chunk-P6YLZTRE.js → chunk-ZRJTM7MT.js} +3 -3
  206. package/dist/{chunk-P6YLZTRE.js.map → chunk-ZRJTM7MT.js.map} +1 -1
  207. package/dist/core/index.cjs +29 -28
  208. package/dist/core/index.d.cts +4 -4
  209. package/dist/core/index.d.ts +4 -4
  210. package/dist/core/index.js +9 -8
  211. package/dist/{ddl-D_oW-EVO.d.ts → ddl-B49O7dB_.d.ts} +3 -3
  212. package/dist/{ddl-BL1NZLMY.d.cts → ddl-DcZG660s.d.cts} +3 -3
  213. package/dist/graph-extension/index.cjs +21 -20
  214. package/dist/graph-extension/index.d.cts +4 -4
  215. package/dist/graph-extension/index.d.ts +4 -4
  216. package/dist/graph-extension/index.js +5 -4
  217. package/dist/graph-merge/index.cjs +305 -303
  218. package/dist/graph-merge/index.cjs.map +1 -1
  219. package/dist/graph-merge/index.d.cts +9 -9
  220. package/dist/graph-merge/index.d.ts +9 -9
  221. package/dist/graph-merge/index.js +29 -27
  222. package/dist/graph-merge/index.js.map +1 -1
  223. package/dist/{index-D7d1u2gr.d.ts → index-B0PrmE3K.d.cts} +16 -2
  224. package/dist/{index-COs_z6nV.d.cts → index-CwcXsL5R.d.ts} +16 -2
  225. package/dist/index.cjs +223 -222
  226. package/dist/index.cjs.map +1 -1
  227. package/dist/index.d.cts +12 -12
  228. package/dist/index.d.ts +12 -12
  229. package/dist/index.js +37 -36
  230. package/dist/index.js.map +1 -1
  231. package/dist/indexes/index.cjs +13 -13
  232. package/dist/indexes/index.d.cts +4 -4
  233. package/dist/indexes/index.d.ts +4 -4
  234. package/dist/indexes/index.js +6 -6
  235. package/dist/{ingestion-import-target-dNeL7iAv.d.ts → ingestion-import-target-CI8OWIkM.d.ts} +1 -1
  236. package/dist/{ingestion-import-target-XPxZYw89.d.cts → ingestion-import-target-DCpfM1PX.d.cts} +1 -1
  237. package/dist/interchange/index.cjs +55 -54
  238. package/dist/interchange/index.cjs.map +1 -1
  239. package/dist/interchange/index.d.cts +19 -8
  240. package/dist/interchange/index.d.ts +19 -8
  241. package/dist/interchange/index.js +19 -18
  242. package/dist/interchange/index.js.map +1 -1
  243. package/dist/{manager-D9eRT_ns.d.ts → manager-Cfg1ENj1.d.ts} +30 -2
  244. package/dist/{manager-CYaff3n3.d.cts → manager-D348fa6W.d.cts} +30 -2
  245. package/dist/{materialize-indexes-DJ3ykH59.d.ts → materialize-indexes-C9GG3O3C.d.ts} +1 -1
  246. package/dist/{materialize-indexes-DTtAnvfY.d.cts → materialize-indexes-CrSiW_lT.d.cts} +1 -1
  247. package/dist/{postgres-CcL4bAHS.d.ts → postgres-CH1kkM5J.d.cts} +279 -2
  248. package/dist/{postgres-DMj39MEu.d.cts → postgres-UStOycLI.d.ts} +279 -2
  249. package/dist/profiler/index.d.cts +9 -9
  250. package/dist/profiler/index.d.ts +9 -9
  251. package/dist/provenance/index.cjs +46 -44
  252. package/dist/provenance/index.cjs.map +1 -1
  253. package/dist/provenance/index.d.cts +7 -7
  254. package/dist/provenance/index.d.ts +7 -7
  255. package/dist/provenance/index.js +12 -10
  256. package/dist/provenance/index.js.map +1 -1
  257. package/dist/{repair-validity-windows-DlUSqwCg.d.ts → repair-validity-windows-BtOEe2pS.d.ts} +2 -2
  258. package/dist/{repair-validity-windows-BFNZvd_H.d.cts → repair-validity-windows-aWX7VNvv.d.cts} +2 -2
  259. package/dist/schema/index.cjs +46 -46
  260. package/dist/schema/index.d.cts +6 -6
  261. package/dist/schema/index.d.ts +6 -6
  262. package/dist/schema/index.js +19 -19
  263. package/dist/{searchable-DHJMh_nj.d.cts → searchable-C8-RrL3l.d.cts} +1 -1
  264. package/dist/{searchable-bpE1bBfc.d.ts → searchable-z4BiFfHI.d.ts} +1 -1
  265. package/dist/{sqlite-YppHrNFb.d.cts → sqlite-Cyx9j9o6.d.cts} +309 -2
  266. package/dist/{sqlite-D7Oz0SQh.d.ts → sqlite-axLw5Lo5.d.ts} +309 -2
  267. package/dist/{store-bphCSo7z.d.cts → store-CTfQ9taw.d.ts} +102 -13
  268. package/dist/{store-DRrFCx5x.d.ts → store-DR9J7JVB.d.cts} +102 -13
  269. package/dist/{temporal-5GqpYCk2.d.cts → temporal-B4Ky4wzh.d.cts} +1 -1
  270. package/dist/{temporal-CbnLzTmM.d.ts → temporal-CBOrERz5.d.ts} +1 -1
  271. package/dist/{types-CXAhpW-c.d.cts → types-BE921wRl.d.cts} +1 -1
  272. package/dist/{types-Bx74kaTt.d.ts → types-BScHXVM7.d.ts} +1 -1
  273. package/dist/{types-BqFZTQmV.d.cts → types-CWg4dTjj.d.cts} +257 -6
  274. package/dist/{types-BqFZTQmV.d.ts → types-CWg4dTjj.d.ts} +257 -6
  275. package/dist/{where-O-k2wgYm.d.ts → where-BWXUPV3C.d.ts} +1 -1
  276. package/dist/{where-DI_Fqz-X.d.cts → where-CNtx1aLc.d.cts} +1 -1
  277. package/package.json +3 -2
  278. package/dist/chunk-26YKDNUD.cjs.map +0 -1
  279. package/dist/chunk-3G5W2U2L.cjs.map +0 -1
  280. package/dist/chunk-3KOY4FH3.cjs +0 -934
  281. package/dist/chunk-3KOY4FH3.cjs.map +0 -1
  282. package/dist/chunk-3QNZ5SAJ.cjs.map +0 -1
  283. package/dist/chunk-3U5ABFDW.cjs.map +0 -1
  284. package/dist/chunk-5K2BKEBD.js.map +0 -1
  285. package/dist/chunk-5PRKMB24.cjs.map +0 -1
  286. package/dist/chunk-6LN7FIVU.js.map +0 -1
  287. package/dist/chunk-6SWPJEYN.js.map +0 -1
  288. package/dist/chunk-7LZJNLA5.js.map +0 -1
  289. package/dist/chunk-BFUOME67.cjs.map +0 -1
  290. package/dist/chunk-BRRP76WO.js.map +0 -1
  291. package/dist/chunk-CICO5GXD.cjs +0 -12
  292. package/dist/chunk-D4QLTJSM.js.map +0 -1
  293. package/dist/chunk-D5R42W5D.js.map +0 -1
  294. package/dist/chunk-EZEEWCFJ.cjs.map +0 -1
  295. package/dist/chunk-FA2AFWLP.cjs +0 -167
  296. package/dist/chunk-FA2AFWLP.cjs.map +0 -1
  297. package/dist/chunk-FQPEMEWX.cjs.map +0 -1
  298. package/dist/chunk-GLHXM7C4.js.map +0 -1
  299. package/dist/chunk-GYEG3ZLZ.cjs.map +0 -1
  300. package/dist/chunk-HDL2ARHX.cjs.map +0 -1
  301. package/dist/chunk-HEV35TGT.js.map +0 -1
  302. package/dist/chunk-I4GAZH5Z.js +0 -913
  303. package/dist/chunk-I4GAZH5Z.js.map +0 -1
  304. package/dist/chunk-JB6T4GLL.cjs.map +0 -1
  305. package/dist/chunk-JBQQ7THH.js +0 -20
  306. package/dist/chunk-JBQQ7THH.js.map +0 -1
  307. package/dist/chunk-JFRT7S3B.cjs.map +0 -1
  308. package/dist/chunk-KF6K7TGH.js.map +0 -1
  309. package/dist/chunk-LTXQOEIC.js.map +0 -1
  310. package/dist/chunk-MKJ4KXL5.cjs +0 -12
  311. package/dist/chunk-MRDBBHIZ.cjs.map +0 -1
  312. package/dist/chunk-NVY5CJFP.js.map +0 -1
  313. package/dist/chunk-PWLJ77UV.cjs +0 -23
  314. package/dist/chunk-PWLJ77UV.cjs.map +0 -1
  315. package/dist/chunk-S5TERQVW.js.map +0 -1
  316. package/dist/chunk-SHFBB23Q.js.map +0 -1
  317. package/dist/chunk-SIT26LAZ.cjs.map +0 -1
  318. package/dist/chunk-SR725PWF.cjs.map +0 -1
  319. package/dist/chunk-TQHGE7UC.cjs.map +0 -1
  320. package/dist/chunk-UGHG7PGX.js.map +0 -1
  321. package/dist/chunk-UGHQV7MP.cjs.map +0 -1
  322. package/dist/chunk-YIURNGXI.js +0 -155
  323. package/dist/chunk-YIURNGXI.js.map +0 -1
  324. package/dist/chunk-YYUHLYM2.cjs.map +0 -1
  325. package/dist/chunk-Z2JCLZFJ.js.map +0 -1
  326. package/dist/chunk-ZFMCDJGB.js.map +0 -1
  327. package/dist/chunk-ZLONH2UD.js.map +0 -1
@@ -0,0 +1,1182 @@
1
+ import { purgeEdgeClaims } from './chunk-YA36ABIL.js';
2
+ import { validateNodeProps, constraintFenceRefusal } from './chunk-FX5ZW6PN.js';
3
+ import { canonicalEqual } from './chunk-IRPYOHRC.js';
4
+ import { rowPropsToObject } from './chunk-PALYTHGM.js';
5
+ import { uniquenessClaimTarget, DISJOINT_CONSTRAINT_NAME, disjointnessClaimAxis, checkWherePredicate, computeUniqueKey, uniquenessProbeKinds, isSameClaimOwner, claimOwnerKey, compareClaimTargets, encodeTupleKey } from './chunk-5LKOVCPP.js';
6
+ import { assertsStoredLowerBound } from './chunk-K46SDNQD.js';
7
+ import { typeGraphGlobalSymbol } from './chunk-46UGOVRW.js';
8
+ import { resolveEmbeddingFields, getSearchableFields, DEFAULT_SEARCHABLE_LANGUAGE } from './chunk-PC2UBAUB.js';
9
+ import { ConfigurationError, ValidationError, UniquenessError, RestrictedDeleteError, DisjointError } from './chunk-YDEJQWOL.js';
10
+ import { readOwnProperty, requireDefined } from './chunk-DYATYRY4.js';
11
+
12
+ // src/store/types.ts
13
+ var AUTO_REFRESH_STATISTICS_ROW_THRESHOLD = 1e3;
14
+ var TRANSACTION_RUNTIME = typeGraphGlobalSymbol(
15
+ "transaction-runtime-v1"
16
+ );
17
+
18
+ // src/store/runtime-port.ts
19
+ var STORE_RUNTIME = typeGraphGlobalSymbol("store-runtime-v1");
20
+ function storeRuntime(store) {
21
+ const runtime = store[STORE_RUNTIME];
22
+ if (runtime === void 0) {
23
+ throw new TypeError(
24
+ "Cannot access this Store's runtime port. The Store may come from an incompatible TypeGraph version."
25
+ );
26
+ }
27
+ return runtime;
28
+ }
29
+ function storeBackend(store) {
30
+ return storeRuntime(store).backend;
31
+ }
32
+ function transactionBackend(transaction) {
33
+ const runtime = transaction[TRANSACTION_RUNTIME];
34
+ if (runtime === void 0) {
35
+ throw new TypeError(
36
+ "Cannot access this transaction's runtime port. The transaction may come from an incompatible TypeGraph version."
37
+ );
38
+ }
39
+ return runtime.backend;
40
+ }
41
+ function transactionNodeOperationHookRunner(transaction) {
42
+ const runtime = transaction[TRANSACTION_RUNTIME];
43
+ if (runtime === void 0) {
44
+ throw new TypeError(
45
+ "Cannot access this transaction's runtime port. The transaction may come from an incompatible TypeGraph version."
46
+ );
47
+ }
48
+ return runtime.runNodeOperationHooks;
49
+ }
50
+
51
+ // src/store/claims/sites.ts
52
+ function disjointnessSites(registry, kind) {
53
+ return registry.getDisjointKinds(kind).map((otherKind) => ({
54
+ axis: disjointnessClaimAxis(kind, otherKind, registry),
55
+ constraintName: DISJOINT_CONSTRAINT_NAME,
56
+ needsLockFence: true,
57
+ placement: "pre-insert",
58
+ refusalReason: "nodeDisjointness",
59
+ refusal: { kind: "disjointness", ownKind: kind, otherKind }
60
+ }));
61
+ }
62
+ function nodeClaimSites(registry, kind, uniqueConstraints, operation) {
63
+ const uniqueness = uniqueConstraints.map((constraint) => {
64
+ const target = uniquenessClaimTarget(kind, constraint.scope, registry);
65
+ return {
66
+ axis: target.axis,
67
+ constraintName: constraint.name,
68
+ needsLockFence: target.crossKind,
69
+ placement: operation !== "create" || target.crossKind ? "pre-insert" : "post-insert",
70
+ refusalReason: target.crossKind ? "nodeUniquenessScope" : "nodeUniquenessClaim",
71
+ refusal: { kind: "uniqueness", constraint }
72
+ };
73
+ });
74
+ return operation === "update" ? uniqueness : [...disjointnessSites(registry, kind), ...uniqueness];
75
+ }
76
+
77
+ // src/store/claims/node-claims.ts
78
+ function createUniquenessContext(graphId, registry, backend) {
79
+ return { graphId, registry, backend };
80
+ }
81
+ function claimKeyFor(refusal, id, props) {
82
+ if (refusal.kind === "disjointness") return id;
83
+ return checkWherePredicate(refusal.constraint, props) ? computeUniqueKey(
84
+ props,
85
+ refusal.constraint.fields,
86
+ refusal.constraint.collation
87
+ ) : void 0;
88
+ }
89
+ function nodeClaimEntries(registry, kind, id, props, constraints, operation) {
90
+ return nodeClaimSites(registry, kind, constraints, operation).flatMap(
91
+ (site) => {
92
+ const key = claimKeyFor(site.refusal, id, props);
93
+ return key === void 0 ? [] : [
94
+ {
95
+ axis: site.axis,
96
+ constraintName: site.constraintName,
97
+ key,
98
+ placement: site.placement,
99
+ refusalReason: site.refusalReason,
100
+ refusal: site.refusal
101
+ }
102
+ ];
103
+ }
104
+ );
105
+ }
106
+ function mapClaimRefusal(error, entries) {
107
+ const owed = entries.find(
108
+ (entry) => entry.refusal.kind === "disjointness" && entry.constraintName === error.details.constraintName && entry.key === error.details.newId && (error.details.axis === void 0 || entry.axis === error.details.axis)
109
+ );
110
+ if (owed === void 0) throw error;
111
+ throw new DisjointError(
112
+ {
113
+ nodeId: error.details.newId,
114
+ attemptedKind: owed.refusal.ownKind,
115
+ conflictingKind: error.details.kind
116
+ },
117
+ { cause: error }
118
+ );
119
+ }
120
+ async function issuingClaims(entries, issue) {
121
+ try {
122
+ await issue();
123
+ } catch (error) {
124
+ if (error instanceof UniquenessError) mapClaimRefusal(error, entries);
125
+ throw error;
126
+ }
127
+ }
128
+ function claimFenceRefusal(ctx, backend, entries) {
129
+ const gating = entries.find((entry) => entry.placement === "pre-insert");
130
+ if (gating === void 0) return void 0;
131
+ return constraintFenceRefusal(ctx, backend, gating.refusalReason);
132
+ }
133
+ function isUniquenessClaimEntry(entry) {
134
+ return entry.refusal.kind === "uniqueness";
135
+ }
136
+ async function probeUniqueKey(ctx, kind, id, entry) {
137
+ const mine = { concreteKind: kind, nodeId: id };
138
+ let heldByThisNode = false;
139
+ for (const kindToCheck of uniquenessProbeKinds(
140
+ kind,
141
+ entry.refusal.constraint.scope,
142
+ ctx.registry
143
+ )) {
144
+ const existing = await ctx.backend.checkUnique({
145
+ graphId: ctx.graphId,
146
+ nodeKind: kindToCheck,
147
+ constraintName: entry.constraintName,
148
+ key: entry.key
149
+ });
150
+ if (existing === void 0) continue;
151
+ if (!isSameClaimOwner(
152
+ { concreteKind: existing.concrete_kind, nodeId: existing.node_id },
153
+ mine
154
+ )) {
155
+ throw new UniquenessError({
156
+ constraintName: entry.constraintName,
157
+ kind: existing.concrete_kind,
158
+ existingId: existing.node_id,
159
+ newId: id,
160
+ fields: entry.refusal.constraint.fields
161
+ });
162
+ }
163
+ if (kindToCheck === entry.axis) heldByThisNode = true;
164
+ }
165
+ return heldByThisNode;
166
+ }
167
+ async function checkUniquenessConstraints(ctx, kind, id, props, constraints) {
168
+ for (const entry of nodeClaimEntries(
169
+ ctx.registry,
170
+ kind,
171
+ id,
172
+ props,
173
+ constraints,
174
+ "create"
175
+ )) {
176
+ if (isUniquenessClaimEntry(entry))
177
+ await probeUniqueKey(ctx, kind, id, entry);
178
+ }
179
+ }
180
+ function claimTarget(graphId, entry) {
181
+ return {
182
+ relation: "uniques",
183
+ graphId,
184
+ axis: entry.axis,
185
+ constraintName: entry.constraintName,
186
+ key: entry.key
187
+ };
188
+ }
189
+ function claimInsertParams(graphId, claim) {
190
+ return {
191
+ graphId,
192
+ nodeKind: claim.entry.axis,
193
+ constraintName: claim.entry.constraintName,
194
+ key: claim.entry.key,
195
+ nodeId: claim.item.id,
196
+ concreteKind: claim.item.kind
197
+ };
198
+ }
199
+ async function issueClaimsIndividually(ctx, claims, onIssued) {
200
+ for (const claim of claims) {
201
+ await issuingClaims(
202
+ [claim.entry],
203
+ () => ctx.backend.insertUnique(claimInsertParams(ctx.graphId, claim))
204
+ );
205
+ onIssued?.([claim]);
206
+ }
207
+ }
208
+ async function issueClaimsBatched(ctx, claims, onIssued) {
209
+ if (claims.length === 0) return;
210
+ const batch = ctx.backend.insertUniqueBatch;
211
+ if (batch === void 0) {
212
+ await issueClaimsIndividually(ctx, claims, onIssued);
213
+ return;
214
+ }
215
+ await issuingClaims(
216
+ claims.map((claim) => claim.entry),
217
+ async () => {
218
+ await batch(claims.map((claim) => claimInsertParams(ctx.graphId, claim)));
219
+ }
220
+ );
221
+ onIssued?.(claims);
222
+ }
223
+ async function claimGroupThenWrite(ctx, issue, gating, gatedWrite) {
224
+ const issued = [];
225
+ try {
226
+ await issue(ctx, gating, (landed) => {
227
+ issued.push(...landed);
228
+ });
229
+ return await gatedWrite();
230
+ } catch (error) {
231
+ for (const claim of issued.toReversed()) {
232
+ await releaseClaimedUniqueKeys(ctx, claim.item.kind, claim.item.id, [
233
+ {
234
+ axis: claim.entry.axis,
235
+ constraintName: claim.entry.constraintName,
236
+ key: claim.entry.key
237
+ }
238
+ ]);
239
+ }
240
+ throw error;
241
+ }
242
+ }
243
+ async function withNodeCreateClaimsIssuedBy(ctx, items, backend, issue, gatedInsert) {
244
+ const claimContext = createUniquenessContext(
245
+ ctx.graphId,
246
+ ctx.registry,
247
+ backend
248
+ );
249
+ const claims = items.flatMap(
250
+ (item) => nodeClaimEntries(
251
+ ctx.registry,
252
+ item.kind,
253
+ item.id,
254
+ item.props,
255
+ item.constraints,
256
+ "create"
257
+ ).map((entry) => ({
258
+ item,
259
+ entry,
260
+ target: claimTarget(ctx.graphId, entry)
261
+ }))
262
+ );
263
+ const refusal = claimFenceRefusal(
264
+ ctx,
265
+ backend,
266
+ claims.map((claim) => claim.entry)
267
+ );
268
+ if (refusal !== void 0) throw refusal;
269
+ const inPlacement = (placement) => claims.filter((claim) => claim.entry.placement === placement).toSorted(
270
+ (left, right) => compareClaimTargets(left.target, right.target)
271
+ );
272
+ const result = await claimGroupThenWrite(
273
+ claimContext,
274
+ issue,
275
+ inPlacement("pre-insert"),
276
+ gatedInsert
277
+ );
278
+ await issue(claimContext, inPlacement("post-insert"));
279
+ return result;
280
+ }
281
+ function withNodeCreateClaims(ctx, item, backend, gatedInsert) {
282
+ return withNodeCreateClaimsIssuedBy(
283
+ ctx,
284
+ [item],
285
+ backend,
286
+ issueClaimsIndividually,
287
+ gatedInsert
288
+ );
289
+ }
290
+ function withNodeCreateClaimsBatch(ctx, items, backend, gatedInsert) {
291
+ return withNodeCreateClaimsIssuedBy(
292
+ ctx,
293
+ items,
294
+ backend,
295
+ issueClaimsBatched,
296
+ gatedInsert
297
+ );
298
+ }
299
+ function alreadyAppliedRowWrite() {
300
+ return Promise.resolve(void 0);
301
+ }
302
+ async function deleteUniquenessEntries(ctx, kind, id, props, constraints) {
303
+ await releaseOwnedUniqueKeys(
304
+ ctx,
305
+ kind,
306
+ id,
307
+ nodeClaimEntries(ctx.registry, kind, id, props, constraints, "create")
308
+ );
309
+ }
310
+ async function hardDeleteClaimsByNodeIds(ctx, concreteKind, nodeIds) {
311
+ await requireDefined(ctx.backend.hardDeleteUniquesByNodeIds)({
312
+ graphId: ctx.graphId,
313
+ concreteKind,
314
+ nodeIds
315
+ });
316
+ }
317
+ async function planNodeClaimUpdate(ctx, kind, id, oldProps, newProps, constraints) {
318
+ const oldKeys = new Map(
319
+ nodeClaimEntries(
320
+ ctx.registry,
321
+ kind,
322
+ id,
323
+ oldProps,
324
+ constraints,
325
+ "update"
326
+ ).map((entry) => [entry.constraintName, entry.key])
327
+ );
328
+ const newEntries = new Map(
329
+ nodeClaimEntries(ctx.registry, kind, id, newProps, constraints, "update").filter(
330
+ (entry) => isUniquenessClaimEntry(entry)
331
+ ).map((entry) => [entry.constraintName, entry])
332
+ );
333
+ const pending = [];
334
+ for (const constraint of constraints) {
335
+ const oldKey = oldKeys.get(constraint.name);
336
+ const newEntry = newEntries.get(constraint.name);
337
+ if (oldKey === void 0 && newEntry === void 0) continue;
338
+ if (oldKey !== void 0 && oldKey === newEntry?.key) continue;
339
+ const alreadyHeld = newEntry === void 0 ? false : await probeUniqueKey(ctx, kind, id, newEntry);
340
+ pending.push({
341
+ constraintName: constraint.name,
342
+ release: oldKey,
343
+ claim: newEntry === void 0 || alreadyHeld ? void 0 : newEntry
344
+ });
345
+ }
346
+ return pending;
347
+ }
348
+ async function planNodeClaimReinsert(ctx, kind, id, props, constraints) {
349
+ const pending = [];
350
+ for (const entry of nodeClaimEntries(
351
+ ctx.registry,
352
+ kind,
353
+ id,
354
+ props,
355
+ constraints,
356
+ "resurrect"
357
+ )) {
358
+ const alreadyHeld = isUniquenessClaimEntry(entry) ? await probeUniqueKey(ctx, kind, id, entry) : false;
359
+ pending.push({
360
+ constraintName: entry.constraintName,
361
+ release: void 0,
362
+ claim: alreadyHeld ? void 0 : entry
363
+ });
364
+ }
365
+ return pending;
366
+ }
367
+ async function releaseOwnedUniqueKeys(ctx, kind, id, keys) {
368
+ for (const entry of keys) {
369
+ await ctx.backend.deleteUnique({
370
+ graphId: ctx.graphId,
371
+ constraintName: entry.constraintName,
372
+ key: entry.key,
373
+ concreteKind: kind,
374
+ nodeId: id
375
+ });
376
+ }
377
+ }
378
+ async function releaseClaimedUniqueKeys(ctx, kind, id, keys) {
379
+ for (const entry of keys) {
380
+ await ctx.backend.deleteUnique({
381
+ graphId: ctx.graphId,
382
+ nodeKind: entry.axis,
383
+ constraintName: entry.constraintName,
384
+ key: entry.key,
385
+ concreteKind: kind,
386
+ nodeId: id
387
+ });
388
+ }
389
+ }
390
+ async function claimUniqueKeysThen(ctx, kind, id, plan, gatedWrite) {
391
+ const claimed = [];
392
+ try {
393
+ for (const mutation of plan) {
394
+ const claim = mutation.claim;
395
+ if (claim === void 0) continue;
396
+ await issuingClaims(
397
+ [claim],
398
+ () => ctx.backend.insertUnique({
399
+ graphId: ctx.graphId,
400
+ nodeKind: claim.axis,
401
+ constraintName: mutation.constraintName,
402
+ key: claim.key,
403
+ nodeId: id,
404
+ concreteKind: kind
405
+ })
406
+ );
407
+ claimed.push({
408
+ axis: claim.axis,
409
+ constraintName: mutation.constraintName,
410
+ key: claim.key
411
+ });
412
+ }
413
+ return await gatedWrite();
414
+ } catch (error) {
415
+ await releaseClaimedUniqueKeys(ctx, kind, id, claimed);
416
+ throw error;
417
+ }
418
+ }
419
+ async function withNodeClaimTransition(ctx, kind, id, plan, gatedWrite) {
420
+ const refusal = claimFenceRefusal(
421
+ ctx,
422
+ ctx.backend,
423
+ plan.flatMap(
424
+ (mutation) => mutation.claim === void 0 ? [] : [mutation.claim]
425
+ )
426
+ );
427
+ if (refusal !== void 0) throw refusal;
428
+ const result = await claimUniqueKeysThen(ctx, kind, id, plan, gatedWrite);
429
+ await releaseOwnedUniqueKeys(
430
+ ctx,
431
+ kind,
432
+ id,
433
+ plan.flatMap(
434
+ (mutation) => mutation.release === void 0 ? [] : [{ constraintName: mutation.constraintName, key: mutation.release }]
435
+ )
436
+ );
437
+ return result;
438
+ }
439
+
440
+ // src/store/claims/resolved-node-claims.ts
441
+ function claimRowKey(entry) {
442
+ return encodeTupleKey([entry.constraintName, entry.key]);
443
+ }
444
+ function claimsCompete(left, right) {
445
+ return claimRowKey(left.entry) === claimRowKey(right.entry) && (right.probeKinds.includes(left.entry.axis) || left.probeKinds.includes(right.entry.axis));
446
+ }
447
+ function proposedClaimRefusal(incumbent, challenger) {
448
+ return new UniquenessError({
449
+ constraintName: challenger.entry.constraintName,
450
+ kind: incumbent.owner.concreteKind,
451
+ existingId: incumbent.owner.nodeId,
452
+ newId: challenger.owner.nodeId,
453
+ fields: challenger.entry.refusal.constraint.fields
454
+ });
455
+ }
456
+ function proposedClaims(ctx, upserts) {
457
+ const accepted = [];
458
+ for (const upsert of upserts) {
459
+ const owner = {
460
+ concreteKind: upsert.kind,
461
+ nodeId: upsert.id
462
+ };
463
+ const entries = nodeClaimEntries(
464
+ ctx.registry,
465
+ upsert.kind,
466
+ upsert.id,
467
+ { ...upsert.props },
468
+ upsert.constraints,
469
+ "create"
470
+ );
471
+ for (const entry of entries) {
472
+ if (!isUniquenessClaimEntry(entry)) continue;
473
+ const proposal = {
474
+ owner,
475
+ entry,
476
+ probeKinds: uniquenessProbeKinds(
477
+ upsert.kind,
478
+ entry.refusal.constraint.scope,
479
+ ctx.registry
480
+ )
481
+ };
482
+ const incumbent = accepted.find(
483
+ (candidate) => !isSameClaimOwner(candidate.owner, proposal.owner) && claimsCompete(candidate, proposal)
484
+ );
485
+ if (incumbent !== void 0) {
486
+ throw proposedClaimRefusal(incumbent, proposal);
487
+ }
488
+ accepted.push(proposal);
489
+ }
490
+ }
491
+ return accepted;
492
+ }
493
+ function groupClaimsForProbe(claims) {
494
+ const groups = /* @__PURE__ */ new Map();
495
+ for (const claim of claims) {
496
+ for (const probeKind of claim.probeKinds) {
497
+ const groupKey = encodeTupleKey([probeKind, claim.entry.constraintName]);
498
+ const existing = groups.get(groupKey);
499
+ if (existing === void 0) {
500
+ groups.set(groupKey, {
501
+ probeKind,
502
+ constraintName: claim.entry.constraintName,
503
+ claimsByKey: /* @__PURE__ */ new Map([[claim.entry.key, claim]])
504
+ });
505
+ continue;
506
+ }
507
+ existing.claimsByKey.set(claim.entry.key, claim);
508
+ }
509
+ }
510
+ return [...groups.values()];
511
+ }
512
+ function requireBatchProbe(ctx) {
513
+ const checkUniqueBatch = ctx.backend.checkUniqueBatch;
514
+ if (checkUniqueBatch === void 0) {
515
+ throw new ConfigurationError(
516
+ "Resolved node writes require batched uniqueness probes",
517
+ { code: "RESOLVED_NODE_UNIQUENESS_UNSUPPORTED" }
518
+ );
519
+ }
520
+ return checkUniqueBatch;
521
+ }
522
+ async function validateResolvedNodeClaims(ctx, upserts, releases = []) {
523
+ const checkUniqueBatch = requireBatchProbe(ctx);
524
+ const claims = proposedClaims(ctx, upserts);
525
+ if (claims.length === 0) return;
526
+ const affectedOwners = new Set(
527
+ [...upserts, ...releases].map(
528
+ (reference) => claimOwnerKey({ concreteKind: reference.kind, nodeId: reference.id })
529
+ )
530
+ );
531
+ for (const group of groupClaimsForProbe(claims)) {
532
+ const existingRows = await checkUniqueBatch({
533
+ graphId: ctx.graphId,
534
+ nodeKind: group.probeKind,
535
+ constraintName: group.constraintName,
536
+ keys: [...group.claimsByKey.keys()]
537
+ });
538
+ for (const existing of existingRows) {
539
+ if (affectedOwners.has(
540
+ claimOwnerKey({
541
+ concreteKind: existing.concrete_kind,
542
+ nodeId: existing.node_id
543
+ })
544
+ )) {
545
+ continue;
546
+ }
547
+ const claim = group.claimsByKey.get(existing.key);
548
+ if (claim === void 0) continue;
549
+ throw new UniquenessError({
550
+ constraintName: group.constraintName,
551
+ // The holder's own kind, never `group.probeKind`: that is the claim
552
+ // AXIS, which a shared scope folds across kinds and which the caller
553
+ // never wrote. The probe and the fence report the same value.
554
+ kind: existing.concrete_kind,
555
+ existingId: existing.node_id,
556
+ newId: claim.owner.nodeId,
557
+ fields: claim.entry.refusal.constraint.fields
558
+ });
559
+ }
560
+ }
561
+ }
562
+ async function prepareResolvedNodeClaims(ctx, upserts, releases) {
563
+ const hardDeleteUniquesByNodeIds = ctx.backend.hardDeleteUniquesByNodeIds;
564
+ if (ctx.backend.checkUniqueBatch === void 0 || ctx.backend.insertUniqueBatch === void 0 || hardDeleteUniquesByNodeIds === void 0) {
565
+ throw new ConfigurationError(
566
+ "Resolved node writes require batched uniqueness operations",
567
+ { code: "RESOLVED_NODE_UNIQUENESS_UNSUPPORTED" }
568
+ );
569
+ }
570
+ await validateResolvedNodeClaims(ctx, upserts, releases);
571
+ const idsByKind = /* @__PURE__ */ new Map();
572
+ for (const reference of [...upserts, ...releases]) {
573
+ const ids = idsByKind.get(reference.kind) ?? /* @__PURE__ */ new Set();
574
+ ids.add(reference.id);
575
+ idsByKind.set(reference.kind, ids);
576
+ }
577
+ for (const [concreteKind, nodeIds] of idsByKind) {
578
+ await hardDeleteUniquesByNodeIds({
579
+ graphId: ctx.graphId,
580
+ concreteKind,
581
+ nodeIds: [...nodeIds]
582
+ });
583
+ }
584
+ }
585
+ async function applyResolvedNodeClaims(ctx, backend, upserts, releases, apply) {
586
+ const claimContext = {
587
+ graphId: ctx.graphId,
588
+ registry: ctx.registry,
589
+ backend
590
+ };
591
+ await prepareResolvedNodeClaims(claimContext, upserts, releases);
592
+ const result = await apply();
593
+ await withNodeCreateClaimsBatch(
594
+ ctx,
595
+ upserts.map((upsert) => ({
596
+ kind: upsert.kind,
597
+ id: upsert.id,
598
+ props: { ...upsert.props },
599
+ constraints: upsert.constraints
600
+ })),
601
+ backend,
602
+ alreadyAppliedRowWrite
603
+ );
604
+ return result;
605
+ }
606
+
607
+ // src/store/embedding-sync.ts
608
+ var embeddingFieldsCache = /* @__PURE__ */ new WeakMap();
609
+ function getEmbeddingFields(schema) {
610
+ const cached = embeddingFieldsCache.get(schema);
611
+ if (cached) return cached;
612
+ const fields = resolveEmbeddingFields(schema);
613
+ embeddingFieldsCache.set(schema, fields);
614
+ return fields;
615
+ }
616
+ async function syncEmbeddings(ctx, schema, props) {
617
+ const { backend } = ctx;
618
+ if (!backend.upsertEmbedding || !backend.deleteEmbedding) {
619
+ return;
620
+ }
621
+ const embeddingFields = getEmbeddingFields(schema);
622
+ if (embeddingFields.length === 0) {
623
+ return;
624
+ }
625
+ for (const field of embeddingFields) {
626
+ const value = readOwnProperty(props, field.fieldPath);
627
+ if (isValidEmbeddingValue(value)) {
628
+ await backend.upsertEmbedding({
629
+ graphId: ctx.graphId,
630
+ nodeKind: ctx.nodeKind,
631
+ nodeId: ctx.nodeId,
632
+ fieldPath: field.fieldPath,
633
+ embedding: value,
634
+ dimensions: field.dimensions,
635
+ metric: field.metric,
636
+ indexType: field.indexType
637
+ });
638
+ } else if (value === void 0) {
639
+ await backend.deleteEmbedding({
640
+ graphId: ctx.graphId,
641
+ nodeKind: ctx.nodeKind,
642
+ nodeId: ctx.nodeId,
643
+ fieldPath: field.fieldPath,
644
+ dimensions: field.dimensions,
645
+ metric: field.metric,
646
+ indexType: field.indexType
647
+ });
648
+ }
649
+ }
650
+ }
651
+ async function syncEmbeddingsBatchForKind(args, schema, items) {
652
+ const { graphId, nodeKind, backend } = args;
653
+ if (!backend.upsertEmbedding || !backend.deleteEmbedding) {
654
+ return;
655
+ }
656
+ const embeddingFields = getEmbeddingFields(schema);
657
+ if (embeddingFields.length === 0) {
658
+ return;
659
+ }
660
+ for (const field of embeddingFields) {
661
+ const rows = [];
662
+ const deletionIds = [];
663
+ for (const item of items) {
664
+ const value = readOwnProperty(item.props, field.fieldPath);
665
+ if (isValidEmbeddingValue(value)) {
666
+ rows.push({ nodeId: item.nodeId, embedding: value });
667
+ } else if (value === void 0) {
668
+ deletionIds.push(item.nodeId);
669
+ }
670
+ }
671
+ if (rows.length > 0) {
672
+ if (backend.upsertEmbeddingBatch === void 0) {
673
+ for (const row of rows) {
674
+ await backend.upsertEmbedding({
675
+ graphId,
676
+ nodeKind,
677
+ nodeId: row.nodeId,
678
+ fieldPath: field.fieldPath,
679
+ embedding: row.embedding,
680
+ dimensions: field.dimensions,
681
+ metric: field.metric,
682
+ indexType: field.indexType
683
+ });
684
+ }
685
+ } else {
686
+ await backend.upsertEmbeddingBatch({
687
+ graphId,
688
+ nodeKind,
689
+ fieldPath: field.fieldPath,
690
+ dimensions: field.dimensions,
691
+ metric: field.metric,
692
+ indexType: field.indexType,
693
+ rows
694
+ });
695
+ }
696
+ }
697
+ if (deletionIds.length > 0 && backend.deleteEmbeddingBatch !== void 0) {
698
+ await backend.deleteEmbeddingBatch({
699
+ graphId,
700
+ nodeKind,
701
+ nodeIds: deletionIds,
702
+ fieldPath: field.fieldPath,
703
+ dimensions: field.dimensions,
704
+ metric: field.metric,
705
+ indexType: field.indexType
706
+ });
707
+ } else {
708
+ for (const nodeId of deletionIds) {
709
+ await backend.deleteEmbedding({
710
+ graphId,
711
+ nodeKind,
712
+ nodeId,
713
+ fieldPath: field.fieldPath,
714
+ dimensions: field.dimensions,
715
+ metric: field.metric,
716
+ indexType: field.indexType
717
+ });
718
+ }
719
+ }
720
+ }
721
+ }
722
+ async function deleteNodeEmbeddings(ctx, schema) {
723
+ const { backend } = ctx;
724
+ if (!backend.deleteEmbedding) {
725
+ return;
726
+ }
727
+ const embeddingFields = getEmbeddingFields(schema);
728
+ if (embeddingFields.length === 0) {
729
+ return;
730
+ }
731
+ for (const field of embeddingFields) {
732
+ await backend.deleteEmbedding({
733
+ graphId: ctx.graphId,
734
+ nodeKind: ctx.nodeKind,
735
+ nodeId: ctx.nodeId,
736
+ fieldPath: field.fieldPath,
737
+ dimensions: field.dimensions,
738
+ metric: field.metric,
739
+ indexType: field.indexType
740
+ });
741
+ }
742
+ }
743
+ function isValidEmbeddingValue(value) {
744
+ if (!Array.isArray(value)) {
745
+ return false;
746
+ }
747
+ return value.every((n) => typeof n === "number" && Number.isFinite(n));
748
+ }
749
+
750
+ // src/store/fulltext-sync.ts
751
+ var FIELD_SEPARATOR = "\n";
752
+ function resolveCombinedLanguage(fields) {
753
+ return fields[0]?.metadata.language ?? DEFAULT_SEARCHABLE_LANGUAGE;
754
+ }
755
+ function computeFulltextContent(schema, props) {
756
+ const searchableFields = getSearchableFields(schema);
757
+ if (searchableFields.length === 0) return void 0;
758
+ const parts = [];
759
+ for (const field of searchableFields) {
760
+ const value = readOwnProperty(props, field.fieldPath);
761
+ if (typeof value === "string" && value.length > 0) {
762
+ parts.push(value);
763
+ }
764
+ }
765
+ if (parts.length === 0) return void 0;
766
+ return {
767
+ content: parts.join(FIELD_SEPARATOR),
768
+ language: resolveCombinedLanguage(searchableFields)
769
+ };
770
+ }
771
+ async function syncFulltext(ctx, schema, props) {
772
+ const { backend } = ctx;
773
+ if (!backend.upsertFulltext || !backend.deleteFulltext) {
774
+ return;
775
+ }
776
+ const computed = computeFulltextContent(schema, props);
777
+ if (computed !== void 0) {
778
+ await backend.upsertFulltext({
779
+ graphId: ctx.graphId,
780
+ nodeKind: ctx.nodeKind,
781
+ nodeId: ctx.nodeId,
782
+ content: computed.content,
783
+ language: computed.language
784
+ });
785
+ return;
786
+ }
787
+ if (getSearchableFields(schema).length === 0) return;
788
+ await backend.deleteFulltext({
789
+ graphId: ctx.graphId,
790
+ nodeKind: ctx.nodeKind,
791
+ nodeId: ctx.nodeId
792
+ });
793
+ }
794
+ async function syncFulltextBatchForKind(args, schema, items) {
795
+ const { graphId, nodeKind, backend } = args;
796
+ if (!backend.upsertFulltext || !backend.deleteFulltext) {
797
+ return;
798
+ }
799
+ const rows = [];
800
+ const emptyContentIds = [];
801
+ const hasSearchableFields = getSearchableFields(schema).length > 0;
802
+ for (const item of items) {
803
+ const computed = computeFulltextContent(schema, item.props);
804
+ if (computed !== void 0) {
805
+ rows.push({
806
+ nodeId: item.nodeId,
807
+ content: computed.content,
808
+ language: computed.language
809
+ });
810
+ } else if (hasSearchableFields) {
811
+ emptyContentIds.push(item.nodeId);
812
+ }
813
+ }
814
+ if (rows.length > 0) {
815
+ if (backend.upsertFulltextBatch === void 0) {
816
+ for (const row of rows) {
817
+ await backend.upsertFulltext({
818
+ graphId,
819
+ nodeKind,
820
+ nodeId: row.nodeId,
821
+ content: row.content,
822
+ language: row.language
823
+ });
824
+ }
825
+ } else {
826
+ await backend.upsertFulltextBatch({ graphId, nodeKind, rows });
827
+ }
828
+ }
829
+ if (emptyContentIds.length > 0) {
830
+ if (backend.deleteFulltextBatch === void 0) {
831
+ for (const nodeId of emptyContentIds) {
832
+ await backend.deleteFulltext({ graphId, nodeKind, nodeId });
833
+ }
834
+ } else {
835
+ await backend.deleteFulltextBatch({
836
+ graphId,
837
+ nodeKind,
838
+ nodeIds: emptyContentIds
839
+ });
840
+ }
841
+ }
842
+ }
843
+ async function deleteNodeFulltext(ctx, schema) {
844
+ const { backend } = ctx;
845
+ if (!backend.deleteFulltext) {
846
+ return;
847
+ }
848
+ if (getSearchableFields(schema).length === 0) {
849
+ return;
850
+ }
851
+ await backend.deleteFulltext({
852
+ graphId: ctx.graphId,
853
+ nodeKind: ctx.nodeKind,
854
+ nodeId: ctx.nodeId
855
+ });
856
+ }
857
+
858
+ // src/store/operations/node-write-pipeline.ts
859
+ function createNodeWriteContext(graphId, registry, lock) {
860
+ return { graphId, registry, lock };
861
+ }
862
+ function uniquenessContext(ctx, backend) {
863
+ return createUniquenessContext(ctx.graphId, ctx.registry, backend);
864
+ }
865
+ function nodeSyncContext(ctx, kind, id, backend) {
866
+ return { graphId: ctx.graphId, nodeKind: kind, nodeId: id, backend };
867
+ }
868
+ async function enforceNodeDeleteBehavior(ctx, args, backend, policy) {
869
+ if (policy?.enforceDeleteBehavior === false) return;
870
+ const behavior = args.onDelete ?? "restrict";
871
+ const connectedEdges = await backend.findEdgesConnectedTo({
872
+ graphId: ctx.graphId,
873
+ nodeKind: args.kind,
874
+ nodeId: args.id
875
+ });
876
+ if (connectedEdges.length === 0) return;
877
+ switch (behavior) {
878
+ case "restrict": {
879
+ throw new RestrictedDeleteError({
880
+ nodeKind: args.kind,
881
+ nodeId: args.id,
882
+ edgeCount: connectedEdges.length,
883
+ edgeKinds: [...new Set(connectedEdges.map((edge) => edge.kind))]
884
+ });
885
+ }
886
+ case "cascade":
887
+ case "disconnect": {
888
+ const connectedEdgeIds = connectedEdges.map((edge) => edge.id);
889
+ const batchDelete = args.mode === "hard" ? backend.hardDeleteEdgesBatch : backend.deleteEdgesBatch;
890
+ if (batchDelete === void 0) {
891
+ for (const edge of connectedEdges) {
892
+ await (args.mode === "hard" ? backend.hardDeleteEdge({ graphId: ctx.graphId, id: edge.id }) : backend.deleteEdge({ graphId: ctx.graphId, id: edge.id }));
893
+ }
894
+ } else {
895
+ await batchDelete({
896
+ graphId: ctx.graphId,
897
+ ids: connectedEdgeIds
898
+ });
899
+ }
900
+ if (args.mode === "hard") {
901
+ await purgeEdgeClaims(backend, ctx.graphId, connectedEdgeIds);
902
+ }
903
+ break;
904
+ }
905
+ }
906
+ }
907
+ async function applyNodeInsertSyncFans(ctx, args, backend) {
908
+ await Promise.all([
909
+ syncEmbeddings(
910
+ nodeSyncContext(ctx, args.kind, args.id, backend),
911
+ args.schema,
912
+ args.props
913
+ ),
914
+ syncFulltext(
915
+ nodeSyncContext(ctx, args.kind, args.id, backend),
916
+ args.schema,
917
+ args.props
918
+ )
919
+ ]);
920
+ }
921
+ async function applyNodeInsertSyncFansBatch(ctx, items, backend) {
922
+ if (items.length === 0) return;
923
+ const byKind = /* @__PURE__ */ new Map();
924
+ for (const item of items) {
925
+ const group = byKind.get(item.kind) ?? { schema: item.schema, rows: [] };
926
+ group.rows.push({ nodeId: item.id, props: item.props });
927
+ byKind.set(item.kind, group);
928
+ }
929
+ await Promise.all(
930
+ [...byKind.entries()].flatMap(([kind, group]) => {
931
+ const syncArguments = { graphId: ctx.graphId, nodeKind: kind, backend };
932
+ return [
933
+ syncEmbeddingsBatchForKind(syncArguments, group.schema, group.rows),
934
+ syncFulltextBatchForKind(syncArguments, group.schema, group.rows)
935
+ ];
936
+ })
937
+ );
938
+ }
939
+ function parseRowProps(row) {
940
+ return rowPropsToObject(row.props);
941
+ }
942
+ async function planNodeUpdateUniqueness(ctx, args, backend) {
943
+ const { kind, id } = args.existing;
944
+ if (args.existing.deleted_at !== void 0) {
945
+ return planNodeClaimReinsert(
946
+ uniquenessContext(ctx, backend),
947
+ kind,
948
+ id,
949
+ args.validatedProps,
950
+ args.uniqueConstraints
951
+ );
952
+ }
953
+ return planNodeClaimUpdate(
954
+ uniquenessContext(ctx, backend),
955
+ kind,
956
+ id,
957
+ parseRowProps(args.existing),
958
+ args.validatedProps,
959
+ args.uniqueConstraints
960
+ );
961
+ }
962
+ async function applyNodeUpdate(ctx, args, backend) {
963
+ const { kind, id } = args.existing;
964
+ const plan = await planNodeUpdateUniqueness(
965
+ ctx,
966
+ {
967
+ existing: args.existing,
968
+ validatedProps: args.validatedProps,
969
+ uniqueConstraints: args.uniqueConstraints
970
+ },
971
+ backend
972
+ );
973
+ const updateParams = {
974
+ graphId: ctx.graphId,
975
+ kind,
976
+ id,
977
+ props: args.validatedProps,
978
+ incrementVersion: true
979
+ };
980
+ if (args.validFrom !== void 0) updateParams.validFrom = args.validFrom;
981
+ if (assertsStoredLowerBound(args)) {
982
+ updateParams.expectedValidFrom = args.expectedValidFrom;
983
+ }
984
+ if (args.clearDeleted) updateParams.clearDeleted = true;
985
+ const row = await withNodeClaimTransition(
986
+ uniquenessContext(ctx, backend),
987
+ kind,
988
+ id,
989
+ plan,
990
+ () => backend.updateNode({
991
+ ...updateParams,
992
+ ...args.clearValidTo === true ? { clearValidTo: true } : args.validTo === void 0 ? {} : { validTo: args.validTo }
993
+ })
994
+ );
995
+ await Promise.all([
996
+ syncEmbeddings(
997
+ nodeSyncContext(ctx, kind, id, backend),
998
+ args.schema,
999
+ args.validatedProps
1000
+ ),
1001
+ syncFulltext(
1002
+ nodeSyncContext(ctx, kind, id, backend),
1003
+ args.schema,
1004
+ args.validatedProps
1005
+ )
1006
+ ]);
1007
+ return row;
1008
+ }
1009
+ async function applyNodeSoftDelete(ctx, args, backend, policy) {
1010
+ const { kind, id } = args.existing;
1011
+ await enforceNodeDeleteBehavior(
1012
+ ctx,
1013
+ { kind, id, mode: "soft", onDelete: args.onDelete },
1014
+ backend,
1015
+ policy
1016
+ );
1017
+ await backend.deleteNode({
1018
+ graphId: ctx.graphId,
1019
+ kind,
1020
+ id
1021
+ });
1022
+ await deleteUniquenessEntries(
1023
+ uniquenessContext(ctx, backend),
1024
+ kind,
1025
+ id,
1026
+ parseRowProps(args.existing),
1027
+ args.uniqueConstraints
1028
+ );
1029
+ await deleteNodeEmbeddings(
1030
+ nodeSyncContext(ctx, kind, id, backend),
1031
+ args.schema
1032
+ );
1033
+ await deleteNodeFulltext(
1034
+ nodeSyncContext(ctx, kind, id, backend),
1035
+ args.schema
1036
+ );
1037
+ }
1038
+ async function applyNodeHardDelete(ctx, args, backend) {
1039
+ await enforceNodeDeleteBehavior(
1040
+ ctx,
1041
+ { kind: args.kind, id: args.id, mode: "hard", onDelete: args.onDelete },
1042
+ backend
1043
+ );
1044
+ await backend.hardDeleteNode({
1045
+ graphId: ctx.graphId,
1046
+ kind: args.kind,
1047
+ id: args.id
1048
+ });
1049
+ await deleteNodeEmbeddings(
1050
+ nodeSyncContext(ctx, args.kind, args.id, backend),
1051
+ args.schema
1052
+ );
1053
+ }
1054
+ async function applyNodeResurrect(ctx, args, backend) {
1055
+ const { kind, id } = args.existing;
1056
+ const props = parseRowProps(args.existing);
1057
+ const plan = await planNodeClaimReinsert(
1058
+ uniquenessContext(ctx, backend),
1059
+ kind,
1060
+ id,
1061
+ props,
1062
+ args.uniqueConstraints
1063
+ );
1064
+ const row = await withNodeClaimTransition(
1065
+ uniquenessContext(ctx, backend),
1066
+ kind,
1067
+ id,
1068
+ plan,
1069
+ () => backend.updateNode({
1070
+ graphId: ctx.graphId,
1071
+ kind,
1072
+ id,
1073
+ props,
1074
+ incrementVersion: true,
1075
+ clearDeleted: true
1076
+ })
1077
+ );
1078
+ await Promise.all([
1079
+ syncEmbeddings(nodeSyncContext(ctx, kind, id, backend), args.schema, props),
1080
+ syncFulltext(nodeSyncContext(ctx, kind, id, backend), args.schema, props)
1081
+ ]);
1082
+ return row;
1083
+ }
1084
+ async function applyNodeSetUpdate(ctx, args, backend) {
1085
+ const { kind, schema, uniqueConstraints } = args;
1086
+ const updateNodeSet = backend.updateNodeSet;
1087
+ if (updateNodeSet === void 0) {
1088
+ throw new ConfigurationError(
1089
+ "The transaction backend does not support set-based node updates",
1090
+ { code: "SET_UPDATE_UNSUPPORTED", kind }
1091
+ );
1092
+ }
1093
+ if (uniqueConstraints.length > 0 && (backend.hardDeleteUniquesByNodeIds === void 0 || backend.insertUniqueBatch === void 0 || backend.checkUniqueBatch === void 0)) {
1094
+ throw new ConfigurationError(
1095
+ "The transaction backend lacks batched uniqueness operations",
1096
+ { code: "SET_UPDATE_UNIQUENESS_UNSUPPORTED", kind }
1097
+ );
1098
+ }
1099
+ if (getSearchableFields(schema).length > 0 && (backend.upsertFulltext === void 0 || backend.deleteFulltext === void 0 || backend.upsertFulltextBatch === void 0 || backend.deleteFulltextBatch === void 0)) {
1100
+ throw new ConfigurationError(
1101
+ "The transaction backend lacks batched fulltext operations",
1102
+ { code: "SET_UPDATE_FULLTEXT_UNSUPPORTED", kind }
1103
+ );
1104
+ }
1105
+ if (getEmbeddingFields(schema).length > 0 && (backend.upsertEmbedding === void 0 || backend.deleteEmbedding === void 0 || backend.upsertEmbeddingBatch === void 0 || backend.deleteEmbeddingBatch === void 0)) {
1106
+ throw new ConfigurationError(
1107
+ "The transaction backend lacks batched vector operations",
1108
+ { code: "SET_UPDATE_VECTOR_UNSUPPORTED", kind }
1109
+ );
1110
+ }
1111
+ const result = await updateNodeSet({
1112
+ graphId: ctx.graphId,
1113
+ kind,
1114
+ patch: args.patch,
1115
+ unsetProperties: args.unsetProperties,
1116
+ candidateIds: args.candidateIds,
1117
+ candidateIdColumn: args.candidateIdColumn
1118
+ });
1119
+ if (result.affectedCount === 0) return { affectedCount: 0 };
1120
+ const sidecarItems = result.rows.map((row) => {
1121
+ const props = rowPropsToObject(row.props);
1122
+ const validatedProps = validateNodeProps(schema, props, {
1123
+ kind,
1124
+ operation: "update",
1125
+ id: row.id
1126
+ });
1127
+ if (!canonicalEqual(validatedProps, props)) {
1128
+ throw new ValidationError(
1129
+ `Set update would persist a non-canonical ${kind} row`,
1130
+ {
1131
+ entityType: "node",
1132
+ kind,
1133
+ operation: "update",
1134
+ id: row.id,
1135
+ issues: [
1136
+ {
1137
+ path: "props",
1138
+ message: "The complete row requires schema normalization"
1139
+ }
1140
+ ]
1141
+ }
1142
+ );
1143
+ }
1144
+ return {
1145
+ kind,
1146
+ id: row.id,
1147
+ schema,
1148
+ props: validatedProps,
1149
+ uniqueConstraints
1150
+ };
1151
+ });
1152
+ const claimItems = sidecarItems.map((item) => ({
1153
+ kind: item.kind,
1154
+ id: item.id,
1155
+ props: item.props,
1156
+ constraints: item.uniqueConstraints
1157
+ }));
1158
+ if (uniqueConstraints.length > 0) {
1159
+ await validateResolvedNodeClaims(
1160
+ createUniquenessContext(ctx.graphId, ctx.registry, backend),
1161
+ claimItems,
1162
+ []
1163
+ );
1164
+ await hardDeleteClaimsByNodeIds(
1165
+ uniquenessContext(ctx, backend),
1166
+ kind,
1167
+ result.rows.map((row) => row.id)
1168
+ );
1169
+ }
1170
+ await withNodeCreateClaimsBatch(
1171
+ ctx,
1172
+ claimItems,
1173
+ backend,
1174
+ alreadyAppliedRowWrite
1175
+ );
1176
+ await applyNodeInsertSyncFansBatch(ctx, sidecarItems, backend);
1177
+ return { affectedCount: result.affectedCount };
1178
+ }
1179
+
1180
+ export { AUTO_REFRESH_STATISTICS_ROW_THRESHOLD, STORE_RUNTIME, TRANSACTION_RUNTIME, applyNodeHardDelete, applyNodeInsertSyncFans, applyNodeInsertSyncFansBatch, applyNodeResurrect, applyNodeSetUpdate, applyNodeSoftDelete, applyNodeUpdate, applyResolvedNodeClaims, checkUniquenessConstraints, computeFulltextContent, createNodeWriteContext, createUniquenessContext, getEmbeddingFields, nodeClaimEntries, nodeClaimSites, storeBackend, storeRuntime, transactionBackend, transactionNodeOperationHookRunner, withNodeCreateClaims, withNodeCreateClaimsBatch };
1181
+ //# sourceMappingURL=chunk-VTJVMP4I.js.map
1182
+ //# sourceMappingURL=chunk-VTJVMP4I.js.map