grafeo-ogm 1.0.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 (333) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1121 -0
  3. package/dist/cjs/compilers/fulltext.compiler.d.ts +67 -0
  4. package/dist/cjs/compilers/fulltext.compiler.d.ts.map +1 -0
  5. package/dist/cjs/compilers/fulltext.compiler.js +254 -0
  6. package/dist/cjs/compilers/fulltext.compiler.js.map +1 -0
  7. package/dist/cjs/compilers/mutation.compiler.d.ts +126 -0
  8. package/dist/cjs/compilers/mutation.compiler.d.ts.map +1 -0
  9. package/dist/cjs/compilers/mutation.compiler.js +1239 -0
  10. package/dist/cjs/compilers/mutation.compiler.js.map +1 -0
  11. package/dist/cjs/compilers/select-normalizer.d.ts +50 -0
  12. package/dist/cjs/compilers/select-normalizer.d.ts.map +1 -0
  13. package/dist/cjs/compilers/select-normalizer.js +225 -0
  14. package/dist/cjs/compilers/select-normalizer.js.map +1 -0
  15. package/dist/cjs/compilers/selection.compiler.d.ts +113 -0
  16. package/dist/cjs/compilers/selection.compiler.d.ts.map +1 -0
  17. package/dist/cjs/compilers/selection.compiler.js +410 -0
  18. package/dist/cjs/compilers/selection.compiler.js.map +1 -0
  19. package/dist/cjs/compilers/where.compiler.d.ts +39 -0
  20. package/dist/cjs/compilers/where.compiler.d.ts.map +1 -0
  21. package/dist/cjs/compilers/where.compiler.js +456 -0
  22. package/dist/cjs/compilers/where.compiler.js.map +1 -0
  23. package/dist/cjs/errors.d.ts +28 -0
  24. package/dist/cjs/errors.d.ts.map +1 -0
  25. package/dist/cjs/errors.js +42 -0
  26. package/dist/cjs/errors.js.map +1 -0
  27. package/dist/cjs/execution/executor.d.ts +38 -0
  28. package/dist/cjs/execution/executor.d.ts.map +1 -0
  29. package/dist/cjs/execution/executor.js +50 -0
  30. package/dist/cjs/execution/executor.js.map +1 -0
  31. package/dist/cjs/execution/result-mapper.d.ts +26 -0
  32. package/dist/cjs/execution/result-mapper.d.ts.map +1 -0
  33. package/dist/cjs/execution/result-mapper.js +92 -0
  34. package/dist/cjs/execution/result-mapper.js.map +1 -0
  35. package/dist/cjs/generator/generate-types.d.ts +55 -0
  36. package/dist/cjs/generator/generate-types.d.ts.map +1 -0
  37. package/dist/cjs/generator/generate-types.js +181 -0
  38. package/dist/cjs/generator/generate-types.js.map +1 -0
  39. package/dist/cjs/generator/index.d.ts +3 -0
  40. package/dist/cjs/generator/index.d.ts.map +1 -0
  41. package/dist/cjs/generator/index.js +6 -0
  42. package/dist/cjs/generator/index.js.map +1 -0
  43. package/dist/cjs/generator/type-emitters/aggregation-emitter.d.ts +7 -0
  44. package/dist/cjs/generator/type-emitters/aggregation-emitter.d.ts.map +1 -0
  45. package/dist/cjs/generator/type-emitters/aggregation-emitter.js +196 -0
  46. package/dist/cjs/generator/type-emitters/aggregation-emitter.js.map +1 -0
  47. package/dist/cjs/generator/type-emitters/connection-emitter.d.ts +22 -0
  48. package/dist/cjs/generator/type-emitters/connection-emitter.d.ts.map +1 -0
  49. package/dist/cjs/generator/type-emitters/connection-emitter.js +270 -0
  50. package/dist/cjs/generator/type-emitters/connection-emitter.js.map +1 -0
  51. package/dist/cjs/generator/type-emitters/enum-emitter.d.ts +7 -0
  52. package/dist/cjs/generator/type-emitters/enum-emitter.d.ts.map +1 -0
  53. package/dist/cjs/generator/type-emitters/enum-emitter.js +45 -0
  54. package/dist/cjs/generator/type-emitters/enum-emitter.js.map +1 -0
  55. package/dist/cjs/generator/type-emitters/fulltext-emitter.d.ts +15 -0
  56. package/dist/cjs/generator/type-emitters/fulltext-emitter.d.ts.map +1 -0
  57. package/dist/cjs/generator/type-emitters/fulltext-emitter.js +80 -0
  58. package/dist/cjs/generator/type-emitters/fulltext-emitter.js.map +1 -0
  59. package/dist/cjs/generator/type-emitters/helpers.d.ts +32 -0
  60. package/dist/cjs/generator/type-emitters/helpers.d.ts.map +1 -0
  61. package/dist/cjs/generator/type-emitters/helpers.js +69 -0
  62. package/dist/cjs/generator/type-emitters/helpers.js.map +1 -0
  63. package/dist/cjs/generator/type-emitters/input-emitter.d.ts +6 -0
  64. package/dist/cjs/generator/type-emitters/input-emitter.d.ts.map +1 -0
  65. package/dist/cjs/generator/type-emitters/input-emitter.js +560 -0
  66. package/dist/cjs/generator/type-emitters/input-emitter.js.map +1 -0
  67. package/dist/cjs/generator/type-emitters/interface-emitter.d.ts +10 -0
  68. package/dist/cjs/generator/type-emitters/interface-emitter.d.ts.map +1 -0
  69. package/dist/cjs/generator/type-emitters/interface-emitter.js +88 -0
  70. package/dist/cjs/generator/type-emitters/interface-emitter.js.map +1 -0
  71. package/dist/cjs/generator/type-emitters/model-map-emitter.d.ts +32 -0
  72. package/dist/cjs/generator/type-emitters/model-map-emitter.d.ts.map +1 -0
  73. package/dist/cjs/generator/type-emitters/model-map-emitter.js +154 -0
  74. package/dist/cjs/generator/type-emitters/model-map-emitter.js.map +1 -0
  75. package/dist/cjs/generator/type-emitters/mutation-response-emitter.d.ts +9 -0
  76. package/dist/cjs/generator/type-emitters/mutation-response-emitter.d.ts.map +1 -0
  77. package/dist/cjs/generator/type-emitters/mutation-response-emitter.js +69 -0
  78. package/dist/cjs/generator/type-emitters/mutation-response-emitter.js.map +1 -0
  79. package/dist/cjs/generator/type-emitters/node-type-emitter.d.ts +13 -0
  80. package/dist/cjs/generator/type-emitters/node-type-emitter.d.ts.map +1 -0
  81. package/dist/cjs/generator/type-emitters/node-type-emitter.js +123 -0
  82. package/dist/cjs/generator/type-emitters/node-type-emitter.js.map +1 -0
  83. package/dist/cjs/generator/type-emitters/select-fields-emitter.d.ts +8 -0
  84. package/dist/cjs/generator/type-emitters/select-fields-emitter.d.ts.map +1 -0
  85. package/dist/cjs/generator/type-emitters/select-fields-emitter.js +169 -0
  86. package/dist/cjs/generator/type-emitters/select-fields-emitter.js.map +1 -0
  87. package/dist/cjs/generator/type-emitters/select-result-emitter.d.ts +9 -0
  88. package/dist/cjs/generator/type-emitters/select-result-emitter.d.ts.map +1 -0
  89. package/dist/cjs/generator/type-emitters/select-result-emitter.js +61 -0
  90. package/dist/cjs/generator/type-emitters/select-result-emitter.js.map +1 -0
  91. package/dist/cjs/generator/type-emitters/sort-options-emitter.d.ts +8 -0
  92. package/dist/cjs/generator/type-emitters/sort-options-emitter.d.ts.map +1 -0
  93. package/dist/cjs/generator/type-emitters/sort-options-emitter.js +47 -0
  94. package/dist/cjs/generator/type-emitters/sort-options-emitter.js.map +1 -0
  95. package/dist/cjs/generator/type-emitters/utility-types.d.ts +10 -0
  96. package/dist/cjs/generator/type-emitters/utility-types.d.ts.map +1 -0
  97. package/dist/cjs/generator/type-emitters/utility-types.js +93 -0
  98. package/dist/cjs/generator/type-emitters/utility-types.js.map +1 -0
  99. package/dist/cjs/generator/type-emitters/where-emitter.d.ts +15 -0
  100. package/dist/cjs/generator/type-emitters/where-emitter.d.ts.map +1 -0
  101. package/dist/cjs/generator/type-emitters/where-emitter.js +189 -0
  102. package/dist/cjs/generator/type-emitters/where-emitter.js.map +1 -0
  103. package/dist/cjs/index.d.ts +30 -0
  104. package/dist/cjs/index.d.ts.map +1 -0
  105. package/dist/cjs/index.js +59 -0
  106. package/dist/cjs/index.js.map +1 -0
  107. package/dist/cjs/interface-model.d.ts +158 -0
  108. package/dist/cjs/interface-model.d.ts.map +1 -0
  109. package/dist/cjs/interface-model.js +214 -0
  110. package/dist/cjs/interface-model.js.map +1 -0
  111. package/dist/cjs/model.d.ts +354 -0
  112. package/dist/cjs/model.d.ts.map +1 -0
  113. package/dist/cjs/model.js +513 -0
  114. package/dist/cjs/model.js.map +1 -0
  115. package/dist/cjs/ogm.d.ts +97 -0
  116. package/dist/cjs/ogm.d.ts.map +1 -0
  117. package/dist/cjs/ogm.js +224 -0
  118. package/dist/cjs/ogm.js.map +1 -0
  119. package/dist/cjs/package.json +1 -0
  120. package/dist/cjs/schema/parser.d.ts +12 -0
  121. package/dist/cjs/schema/parser.d.ts.map +1 -0
  122. package/dist/cjs/schema/parser.js +331 -0
  123. package/dist/cjs/schema/parser.js.map +1 -0
  124. package/dist/cjs/schema/types.d.ts +66 -0
  125. package/dist/cjs/schema/types.d.ts.map +1 -0
  126. package/dist/cjs/schema/types.js +3 -0
  127. package/dist/cjs/schema/types.js.map +1 -0
  128. package/dist/cjs/schema/utils.d.ts +23 -0
  129. package/dist/cjs/schema/utils.d.ts.map +1 -0
  130. package/dist/cjs/schema/utils.js +92 -0
  131. package/dist/cjs/schema/utils.js.map +1 -0
  132. package/dist/cjs/subgraph/index.d.ts +3 -0
  133. package/dist/cjs/subgraph/index.d.ts.map +1 -0
  134. package/dist/cjs/subgraph/index.js +7 -0
  135. package/dist/cjs/subgraph/index.js.map +1 -0
  136. package/dist/cjs/subgraph/subgraph-operations.d.ts +34 -0
  137. package/dist/cjs/subgraph/subgraph-operations.d.ts.map +1 -0
  138. package/dist/cjs/subgraph/subgraph-operations.js +225 -0
  139. package/dist/cjs/subgraph/subgraph-operations.js.map +1 -0
  140. package/dist/cjs/subgraph/types.d.ts +23 -0
  141. package/dist/cjs/subgraph/types.d.ts.map +1 -0
  142. package/dist/cjs/subgraph/types.js +3 -0
  143. package/dist/cjs/subgraph/types.js.map +1 -0
  144. package/dist/cjs/testing/cypher-assert.d.ts +35 -0
  145. package/dist/cjs/testing/cypher-assert.d.ts.map +1 -0
  146. package/dist/cjs/testing/cypher-assert.js +72 -0
  147. package/dist/cjs/testing/cypher-assert.js.map +1 -0
  148. package/dist/cjs/testing/index.d.ts +4 -0
  149. package/dist/cjs/testing/index.d.ts.map +1 -0
  150. package/dist/cjs/testing/index.js +10 -0
  151. package/dist/cjs/testing/index.js.map +1 -0
  152. package/dist/cjs/testing/neo4j-record-factory.d.ts +25 -0
  153. package/dist/cjs/testing/neo4j-record-factory.d.ts.map +1 -0
  154. package/dist/cjs/testing/neo4j-record-factory.js +43 -0
  155. package/dist/cjs/testing/neo4j-record-factory.js.map +1 -0
  156. package/dist/cjs/testing/selection-set-factory.d.ts +24 -0
  157. package/dist/cjs/testing/selection-set-factory.d.ts.map +1 -0
  158. package/dist/cjs/testing/selection-set-factory.js +44 -0
  159. package/dist/cjs/testing/selection-set-factory.js.map +1 -0
  160. package/dist/cjs/utils/lucene.d.ts +9 -0
  161. package/dist/cjs/utils/lucene.d.ts.map +1 -0
  162. package/dist/cjs/utils/lucene.js +25 -0
  163. package/dist/cjs/utils/lucene.js.map +1 -0
  164. package/dist/cjs/utils/validation.d.ts +25 -0
  165. package/dist/cjs/utils/validation.d.ts.map +1 -0
  166. package/dist/cjs/utils/validation.js +53 -0
  167. package/dist/cjs/utils/validation.js.map +1 -0
  168. package/dist/esm/compilers/fulltext.compiler.d.ts +67 -0
  169. package/dist/esm/compilers/fulltext.compiler.d.ts.map +1 -0
  170. package/dist/esm/compilers/fulltext.compiler.js +250 -0
  171. package/dist/esm/compilers/fulltext.compiler.js.map +1 -0
  172. package/dist/esm/compilers/mutation.compiler.d.ts +126 -0
  173. package/dist/esm/compilers/mutation.compiler.d.ts.map +1 -0
  174. package/dist/esm/compilers/mutation.compiler.js +1235 -0
  175. package/dist/esm/compilers/mutation.compiler.js.map +1 -0
  176. package/dist/esm/compilers/select-normalizer.d.ts +50 -0
  177. package/dist/esm/compilers/select-normalizer.d.ts.map +1 -0
  178. package/dist/esm/compilers/select-normalizer.js +221 -0
  179. package/dist/esm/compilers/select-normalizer.js.map +1 -0
  180. package/dist/esm/compilers/selection.compiler.d.ts +113 -0
  181. package/dist/esm/compilers/selection.compiler.d.ts.map +1 -0
  182. package/dist/esm/compilers/selection.compiler.js +406 -0
  183. package/dist/esm/compilers/selection.compiler.js.map +1 -0
  184. package/dist/esm/compilers/where.compiler.d.ts +39 -0
  185. package/dist/esm/compilers/where.compiler.d.ts.map +1 -0
  186. package/dist/esm/compilers/where.compiler.js +452 -0
  187. package/dist/esm/compilers/where.compiler.js.map +1 -0
  188. package/dist/esm/errors.d.ts +28 -0
  189. package/dist/esm/errors.d.ts.map +1 -0
  190. package/dist/esm/errors.js +36 -0
  191. package/dist/esm/errors.js.map +1 -0
  192. package/dist/esm/execution/executor.d.ts +38 -0
  193. package/dist/esm/execution/executor.d.ts.map +1 -0
  194. package/dist/esm/execution/executor.js +46 -0
  195. package/dist/esm/execution/executor.js.map +1 -0
  196. package/dist/esm/execution/result-mapper.d.ts +26 -0
  197. package/dist/esm/execution/result-mapper.d.ts.map +1 -0
  198. package/dist/esm/execution/result-mapper.js +85 -0
  199. package/dist/esm/execution/result-mapper.js.map +1 -0
  200. package/dist/esm/generator/generate-types.d.ts +55 -0
  201. package/dist/esm/generator/generate-types.d.ts.map +1 -0
  202. package/dist/esm/generator/generate-types.js +141 -0
  203. package/dist/esm/generator/generate-types.js.map +1 -0
  204. package/dist/esm/generator/index.d.ts +3 -0
  205. package/dist/esm/generator/index.d.ts.map +1 -0
  206. package/dist/esm/generator/index.js +2 -0
  207. package/dist/esm/generator/index.js.map +1 -0
  208. package/dist/esm/generator/type-emitters/aggregation-emitter.d.ts +7 -0
  209. package/dist/esm/generator/type-emitters/aggregation-emitter.d.ts.map +1 -0
  210. package/dist/esm/generator/type-emitters/aggregation-emitter.js +193 -0
  211. package/dist/esm/generator/type-emitters/aggregation-emitter.js.map +1 -0
  212. package/dist/esm/generator/type-emitters/connection-emitter.d.ts +22 -0
  213. package/dist/esm/generator/type-emitters/connection-emitter.d.ts.map +1 -0
  214. package/dist/esm/generator/type-emitters/connection-emitter.js +266 -0
  215. package/dist/esm/generator/type-emitters/connection-emitter.js.map +1 -0
  216. package/dist/esm/generator/type-emitters/enum-emitter.d.ts +7 -0
  217. package/dist/esm/generator/type-emitters/enum-emitter.d.ts.map +1 -0
  218. package/dist/esm/generator/type-emitters/enum-emitter.js +42 -0
  219. package/dist/esm/generator/type-emitters/enum-emitter.js.map +1 -0
  220. package/dist/esm/generator/type-emitters/fulltext-emitter.d.ts +15 -0
  221. package/dist/esm/generator/type-emitters/fulltext-emitter.d.ts.map +1 -0
  222. package/dist/esm/generator/type-emitters/fulltext-emitter.js +77 -0
  223. package/dist/esm/generator/type-emitters/fulltext-emitter.js.map +1 -0
  224. package/dist/esm/generator/type-emitters/helpers.d.ts +32 -0
  225. package/dist/esm/generator/type-emitters/helpers.d.ts.map +1 -0
  226. package/dist/esm/generator/type-emitters/helpers.js +63 -0
  227. package/dist/esm/generator/type-emitters/helpers.js.map +1 -0
  228. package/dist/esm/generator/type-emitters/input-emitter.d.ts +6 -0
  229. package/dist/esm/generator/type-emitters/input-emitter.d.ts.map +1 -0
  230. package/dist/esm/generator/type-emitters/input-emitter.js +557 -0
  231. package/dist/esm/generator/type-emitters/input-emitter.js.map +1 -0
  232. package/dist/esm/generator/type-emitters/interface-emitter.d.ts +10 -0
  233. package/dist/esm/generator/type-emitters/interface-emitter.d.ts.map +1 -0
  234. package/dist/esm/generator/type-emitters/interface-emitter.js +85 -0
  235. package/dist/esm/generator/type-emitters/interface-emitter.js.map +1 -0
  236. package/dist/esm/generator/type-emitters/model-map-emitter.d.ts +32 -0
  237. package/dist/esm/generator/type-emitters/model-map-emitter.d.ts.map +1 -0
  238. package/dist/esm/generator/type-emitters/model-map-emitter.js +149 -0
  239. package/dist/esm/generator/type-emitters/model-map-emitter.js.map +1 -0
  240. package/dist/esm/generator/type-emitters/mutation-response-emitter.d.ts +9 -0
  241. package/dist/esm/generator/type-emitters/mutation-response-emitter.d.ts.map +1 -0
  242. package/dist/esm/generator/type-emitters/mutation-response-emitter.js +66 -0
  243. package/dist/esm/generator/type-emitters/mutation-response-emitter.js.map +1 -0
  244. package/dist/esm/generator/type-emitters/node-type-emitter.d.ts +13 -0
  245. package/dist/esm/generator/type-emitters/node-type-emitter.d.ts.map +1 -0
  246. package/dist/esm/generator/type-emitters/node-type-emitter.js +120 -0
  247. package/dist/esm/generator/type-emitters/node-type-emitter.js.map +1 -0
  248. package/dist/esm/generator/type-emitters/select-fields-emitter.d.ts +8 -0
  249. package/dist/esm/generator/type-emitters/select-fields-emitter.d.ts.map +1 -0
  250. package/dist/esm/generator/type-emitters/select-fields-emitter.js +166 -0
  251. package/dist/esm/generator/type-emitters/select-fields-emitter.js.map +1 -0
  252. package/dist/esm/generator/type-emitters/select-result-emitter.d.ts +9 -0
  253. package/dist/esm/generator/type-emitters/select-result-emitter.d.ts.map +1 -0
  254. package/dist/esm/generator/type-emitters/select-result-emitter.js +58 -0
  255. package/dist/esm/generator/type-emitters/select-result-emitter.js.map +1 -0
  256. package/dist/esm/generator/type-emitters/sort-options-emitter.d.ts +8 -0
  257. package/dist/esm/generator/type-emitters/sort-options-emitter.d.ts.map +1 -0
  258. package/dist/esm/generator/type-emitters/sort-options-emitter.js +44 -0
  259. package/dist/esm/generator/type-emitters/sort-options-emitter.js.map +1 -0
  260. package/dist/esm/generator/type-emitters/utility-types.d.ts +10 -0
  261. package/dist/esm/generator/type-emitters/utility-types.d.ts.map +1 -0
  262. package/dist/esm/generator/type-emitters/utility-types.js +88 -0
  263. package/dist/esm/generator/type-emitters/utility-types.js.map +1 -0
  264. package/dist/esm/generator/type-emitters/where-emitter.d.ts +15 -0
  265. package/dist/esm/generator/type-emitters/where-emitter.d.ts.map +1 -0
  266. package/dist/esm/generator/type-emitters/where-emitter.js +186 -0
  267. package/dist/esm/generator/type-emitters/where-emitter.js.map +1 -0
  268. package/dist/esm/index.d.ts +30 -0
  269. package/dist/esm/index.d.ts.map +1 -0
  270. package/dist/esm/index.js +29 -0
  271. package/dist/esm/index.js.map +1 -0
  272. package/dist/esm/interface-model.d.ts +158 -0
  273. package/dist/esm/interface-model.d.ts.map +1 -0
  274. package/dist/esm/interface-model.js +210 -0
  275. package/dist/esm/interface-model.js.map +1 -0
  276. package/dist/esm/model.d.ts +354 -0
  277. package/dist/esm/model.d.ts.map +1 -0
  278. package/dist/esm/model.js +507 -0
  279. package/dist/esm/model.js.map +1 -0
  280. package/dist/esm/ogm.d.ts +97 -0
  281. package/dist/esm/ogm.d.ts.map +1 -0
  282. package/dist/esm/ogm.js +220 -0
  283. package/dist/esm/ogm.js.map +1 -0
  284. package/dist/esm/package.json +1 -0
  285. package/dist/esm/schema/parser.d.ts +12 -0
  286. package/dist/esm/schema/parser.d.ts.map +1 -0
  287. package/dist/esm/schema/parser.js +324 -0
  288. package/dist/esm/schema/parser.js.map +1 -0
  289. package/dist/esm/schema/types.d.ts +66 -0
  290. package/dist/esm/schema/types.d.ts.map +1 -0
  291. package/dist/esm/schema/types.js +2 -0
  292. package/dist/esm/schema/types.js.map +1 -0
  293. package/dist/esm/schema/utils.d.ts +23 -0
  294. package/dist/esm/schema/utils.d.ts.map +1 -0
  295. package/dist/esm/schema/utils.js +87 -0
  296. package/dist/esm/schema/utils.js.map +1 -0
  297. package/dist/esm/subgraph/index.d.ts +3 -0
  298. package/dist/esm/subgraph/index.d.ts.map +1 -0
  299. package/dist/esm/subgraph/index.js +2 -0
  300. package/dist/esm/subgraph/index.js.map +1 -0
  301. package/dist/esm/subgraph/subgraph-operations.d.ts +34 -0
  302. package/dist/esm/subgraph/subgraph-operations.d.ts.map +1 -0
  303. package/dist/esm/subgraph/subgraph-operations.js +221 -0
  304. package/dist/esm/subgraph/subgraph-operations.js.map +1 -0
  305. package/dist/esm/subgraph/types.d.ts +23 -0
  306. package/dist/esm/subgraph/types.d.ts.map +1 -0
  307. package/dist/esm/subgraph/types.js +2 -0
  308. package/dist/esm/subgraph/types.js.map +1 -0
  309. package/dist/esm/testing/cypher-assert.d.ts +35 -0
  310. package/dist/esm/testing/cypher-assert.d.ts.map +1 -0
  311. package/dist/esm/testing/cypher-assert.js +68 -0
  312. package/dist/esm/testing/cypher-assert.js.map +1 -0
  313. package/dist/esm/testing/index.d.ts +4 -0
  314. package/dist/esm/testing/index.d.ts.map +1 -0
  315. package/dist/esm/testing/index.js +4 -0
  316. package/dist/esm/testing/index.js.map +1 -0
  317. package/dist/esm/testing/neo4j-record-factory.d.ts +25 -0
  318. package/dist/esm/testing/neo4j-record-factory.d.ts.map +1 -0
  319. package/dist/esm/testing/neo4j-record-factory.js +36 -0
  320. package/dist/esm/testing/neo4j-record-factory.js.map +1 -0
  321. package/dist/esm/testing/selection-set-factory.d.ts +24 -0
  322. package/dist/esm/testing/selection-set-factory.d.ts.map +1 -0
  323. package/dist/esm/testing/selection-set-factory.js +40 -0
  324. package/dist/esm/testing/selection-set-factory.js.map +1 -0
  325. package/dist/esm/utils/lucene.d.ts +9 -0
  326. package/dist/esm/utils/lucene.d.ts.map +1 -0
  327. package/dist/esm/utils/lucene.js +22 -0
  328. package/dist/esm/utils/lucene.js.map +1 -0
  329. package/dist/esm/utils/validation.d.ts +25 -0
  330. package/dist/esm/utils/validation.d.ts.map +1 -0
  331. package/dist/esm/utils/validation.js +46 -0
  332. package/dist/esm/utils/validation.js.map +1 -0
  333. package/package.json +88 -0
@@ -0,0 +1,66 @@
1
+ /** Recursive type for Neo4j property values (no `any`) */
2
+ export type Neo4jValue = string | number | boolean | null | Neo4jValue[] | {
3
+ [key: string]: Neo4jValue;
4
+ };
5
+ /** Generic fallback types */
6
+ export interface WhereInput {
7
+ [key: string]: Neo4jValue | WhereInput | WhereInput[];
8
+ }
9
+ export interface MutationInput {
10
+ [key: string]: Neo4jValue | MutationInput | MutationInput[];
11
+ }
12
+ export interface PropertyDefinition {
13
+ name: string;
14
+ type: string;
15
+ required: boolean;
16
+ isArray: boolean;
17
+ isListItemRequired: boolean;
18
+ isGenerated: boolean;
19
+ isUnique: boolean;
20
+ isCypher: boolean;
21
+ directives: string[];
22
+ defaultValue?: string;
23
+ }
24
+ export interface RelationshipDefinition {
25
+ fieldName: string;
26
+ type: string;
27
+ direction: 'IN' | 'OUT';
28
+ target: string;
29
+ properties?: string;
30
+ isArray: boolean;
31
+ isRequired: boolean;
32
+ }
33
+ export interface FulltextIndex {
34
+ name: string;
35
+ fields: string[];
36
+ }
37
+ export interface NodeDefinition {
38
+ typeName: string;
39
+ label: string;
40
+ labels: string[];
41
+ pluralName: string;
42
+ properties: Map<string, PropertyDefinition>;
43
+ relationships: Map<string, RelationshipDefinition>;
44
+ fulltextIndexes: FulltextIndex[];
45
+ implementsInterfaces: string[];
46
+ }
47
+ export interface InterfaceDefinition {
48
+ name: string;
49
+ label: string;
50
+ properties: Map<string, PropertyDefinition>;
51
+ relationships: Map<string, RelationshipDefinition>;
52
+ implementedBy: string[];
53
+ }
54
+ export interface RelationshipPropertiesDefinition {
55
+ typeName: string;
56
+ properties: Map<string, PropertyDefinition>;
57
+ fulltextIndexes?: FulltextIndex[];
58
+ }
59
+ export interface SchemaMetadata {
60
+ nodes: Map<string, NodeDefinition>;
61
+ interfaces: Map<string, InterfaceDefinition>;
62
+ relationshipProperties: Map<string, RelationshipPropertiesDefinition>;
63
+ enums: Map<string, string[]>;
64
+ unions: Map<string, string[]>;
65
+ }
66
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/schema/types.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,UAAU,EAAE,GACZ;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAA;CAAE,CAAC;AAElC,6BAA6B;AAC7B,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,EAAE,CAAC;CACvD;AACD,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,EAAE,CAAC;CAC7D;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC5C,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACnD,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC5C,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACnD,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC5C,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC7C,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;IACtE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC/B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/schema/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import type { NodeDefinition, SchemaMetadata } from './types';
2
+ /**
3
+ * Clear the module-level resolve cache.
4
+ * Useful in tests to prevent cross-test state pollution.
5
+ */
6
+ export declare function clearResolveTargetDefCache(): void;
7
+ /**
8
+ * Resolve a target type name to a NodeDefinition, handling union targets
9
+ * by merging all member nodes' properties and relationships.
10
+ *
11
+ * Results are memoized per (schema identity + target) to avoid repeated
12
+ * O(members × properties) merges for the same union type.
13
+ */
14
+ export declare function resolveTargetDef(target: string, schema: SchemaMetadata): NodeDefinition | null;
15
+ /**
16
+ * Compute the validated label string for a NodeDefinition.
17
+ * Deduplicates labels, validates each, and joins with ':'.
18
+ *
19
+ * Callers that need caching should maintain their own cache (e.g., per MutationCompiler instance)
20
+ * to avoid cross-test pollution from module-level state.
21
+ */
22
+ export declare function getTargetLabelString(nodeDef: NodeDefinition): string;
23
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/schema/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,cAAc,EACf,MAAM,SAAS,CAAC;AAUjB;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,GACrB,cAAc,GAAG,IAAI,CA0DvB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAKpE"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clearResolveTargetDefCache = clearResolveTargetDefCache;
4
+ exports.resolveTargetDef = resolveTargetDef;
5
+ exports.getTargetLabelString = getTargetLabelString;
6
+ const validation_1 = require("../utils/validation");
7
+ /**
8
+ * Module-level cache for resolved union/interface target definitions.
9
+ * Bounded by the number of unique type names in the schema (~50-100 entries).
10
+ * Use `clearResolveTargetDefCache()` to reset (e.g., between tests).
11
+ */
12
+ const resolveTargetDefCache = new Map();
13
+ /**
14
+ * Clear the module-level resolve cache.
15
+ * Useful in tests to prevent cross-test state pollution.
16
+ */
17
+ function clearResolveTargetDefCache() {
18
+ resolveTargetDefCache.clear();
19
+ }
20
+ /**
21
+ * Resolve a target type name to a NodeDefinition, handling union targets
22
+ * by merging all member nodes' properties and relationships.
23
+ *
24
+ * Results are memoized per (schema identity + target) to avoid repeated
25
+ * O(members × properties) merges for the same union type.
26
+ */
27
+ function resolveTargetDef(target, schema) {
28
+ const direct = schema.nodes.get(target);
29
+ if (direct)
30
+ return direct;
31
+ const cached = resolveTargetDefCache.get(target);
32
+ if (cached !== undefined)
33
+ return cached;
34
+ // Check interfaces — build a NodeDefinition from the interface definition
35
+ const interfaceDef = schema.interfaces?.get(target);
36
+ if (interfaceDef) {
37
+ const result = {
38
+ typeName: interfaceDef.name,
39
+ label: interfaceDef.label,
40
+ labels: [interfaceDef.label],
41
+ pluralName: interfaceDef.name.toLowerCase() + 's',
42
+ properties: interfaceDef.properties,
43
+ relationships: interfaceDef.relationships,
44
+ fulltextIndexes: [],
45
+ implementsInterfaces: [],
46
+ };
47
+ resolveTargetDefCache.set(target, result);
48
+ return result;
49
+ }
50
+ const unionMembers = schema.unions?.get(target);
51
+ if (!unionMembers || unionMembers.length === 0) {
52
+ resolveTargetDefCache.set(target, null);
53
+ return null;
54
+ }
55
+ const mergedProperties = new Map();
56
+ const mergedRelationships = new Map();
57
+ for (const memberName of unionMembers) {
58
+ const memberDef = schema.nodes.get(memberName);
59
+ if (!memberDef)
60
+ continue;
61
+ for (const [k, v] of memberDef.properties)
62
+ if (!mergedProperties.has(k))
63
+ mergedProperties.set(k, v);
64
+ for (const [k, v] of memberDef.relationships)
65
+ if (!mergedRelationships.has(k))
66
+ mergedRelationships.set(k, v);
67
+ }
68
+ const result = {
69
+ typeName: target,
70
+ label: target,
71
+ labels: [target],
72
+ pluralName: target.toLowerCase() + 's',
73
+ properties: mergedProperties,
74
+ relationships: mergedRelationships,
75
+ fulltextIndexes: [],
76
+ implementsInterfaces: [],
77
+ };
78
+ resolveTargetDefCache.set(target, result);
79
+ return result;
80
+ }
81
+ /**
82
+ * Compute the validated label string for a NodeDefinition.
83
+ * Deduplicates labels, validates each, and joins with ':'.
84
+ *
85
+ * Callers that need caching should maintain their own cache (e.g., per MutationCompiler instance)
86
+ * to avoid cross-test pollution from module-level state.
87
+ */
88
+ function getTargetLabelString(nodeDef) {
89
+ const allLabels = [...new Set([nodeDef.label, ...nodeDef.labels])].map((l) => (0, validation_1.assertSafeLabel)(l));
90
+ return allLabels.join(':');
91
+ }
92
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/schema/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { cloneSubgraph, deleteSubgraph } from './subgraph-operations';
2
+ export type { SubgraphCloneResult, SubgraphConfig, SubgraphDeleteResult, SubgraphReferenceRelationship, } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/subgraph/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtE,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,SAAS,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteSubgraph = exports.cloneSubgraph = void 0;
4
+ var subgraph_operations_1 = require("./subgraph-operations");
5
+ Object.defineProperty(exports, "cloneSubgraph", { enumerable: true, get: function () { return subgraph_operations_1.cloneSubgraph; } });
6
+ Object.defineProperty(exports, "deleteSubgraph", { enumerable: true, get: function () { return subgraph_operations_1.deleteSubgraph; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/subgraph/index.ts"],"names":[],"mappings":";;;AAAA,6DAAsE;AAA7D,oHAAA,aAAa,OAAA;AAAE,qHAAA,cAAc,OAAA"}
@@ -0,0 +1,34 @@
1
+ import { Transaction } from 'neo4j-driver';
2
+ import { OGMLogger } from '../execution/executor';
3
+ import { SubgraphCloneResult, SubgraphConfig, SubgraphDeleteResult } from './types';
4
+ /**
5
+ * Clones a content subgraph rooted at the given source node using APOC procedures.
6
+ *
7
+ * Phase 1: Collects the subgraph via `apoc.path.subgraphAll` and clones it
8
+ * with `apoc.refactor.cloneSubgraph`. Generates new UUIDs for all cloned nodes
9
+ * and sets `clonedFromId` on each clone pointing to the original.
10
+ *
11
+ * Phase 2: Re-attaches reference relationships from cloned nodes to shared/lookup nodes
12
+ * (e.g., Language, Status, MeasurementUnit) that were outside the clone scope.
13
+ *
14
+ * @param sourceRootId - The `id` property of the root node to clone
15
+ * @param config - Defines which nodes to clone vs reference
16
+ * @param transaction - Caller-managed Neo4j transaction
17
+ * @param logger - Optional logger for debug output
18
+ * @returns The cloned root node id and a mapping of original→cloned node ids
19
+ */
20
+ export declare function cloneSubgraph(sourceRootId: string, config: SubgraphConfig, transaction: Transaction, logger?: OGMLogger): Promise<SubgraphCloneResult>;
21
+ /**
22
+ * Deletes a content subgraph rooted at the given node using APOC procedures.
23
+ *
24
+ * Uses `apoc.path.subgraphAll` to collect all owned nodes within the configured
25
+ * labels and relationships, then `DETACH DELETE`s them.
26
+ *
27
+ * @param rootId - The `id` property of the subgraph root node to delete
28
+ * @param config - Defines which labels/relationships form the owned subgraph
29
+ * @param transaction - Caller-managed Neo4j transaction
30
+ * @param logger - Optional logger for debug output
31
+ * @returns The count of deleted nodes
32
+ */
33
+ export declare function deleteSubgraph(rootId: string, config: SubgraphConfig, transaction: Transaction, logger?: OGMLogger): Promise<SubgraphDeleteResult>;
34
+ //# sourceMappingURL=subgraph-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subgraph-operations.d.ts","sourceRoot":"","sources":["../../../src/subgraph/subgraph-operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMlD,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACrB,MAAM,SAAS,CAAC;AA4BjB;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,WAAW,EACxB,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,mBAAmB,CAAC,CA+B9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,WAAW,EACxB,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAkD/B"}
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cloneSubgraph = cloneSubgraph;
4
+ exports.deleteSubgraph = deleteSubgraph;
5
+ const errors_1 = require("../errors");
6
+ const validation_1 = require("../utils/validation");
7
+ /** No-op logger used when no logger is provided. */
8
+ const NOOP_LOGGER = { debug: () => { } };
9
+ /**
10
+ * Validates all labels and relationship types in a SubgraphConfig
11
+ * to prevent Cypher injection (these values are string-interpolated).
12
+ */
13
+ function validateConfig(config) {
14
+ for (const label of config.ownedLabels)
15
+ (0, validation_1.assertSafeLabel)(label);
16
+ for (const rel of config.ownedRelationships)
17
+ (0, validation_1.assertSafeIdentifier)(rel, 'owned relationship type');
18
+ for (const ref of config.referenceRelationships) {
19
+ (0, validation_1.assertSafeLabel)(ref.fromLabel);
20
+ (0, validation_1.assertSafeIdentifier)(ref.relationshipType, 'reference relationship type');
21
+ if (ref.direction !== 'OUT' && ref.direction !== 'IN')
22
+ throw new errors_1.SubgraphOperationError('clone', '', `Invalid direction "${ref.direction}" for reference relationship ${ref.relationshipType}`);
23
+ }
24
+ }
25
+ /**
26
+ * Clones a content subgraph rooted at the given source node using APOC procedures.
27
+ *
28
+ * Phase 1: Collects the subgraph via `apoc.path.subgraphAll` and clones it
29
+ * with `apoc.refactor.cloneSubgraph`. Generates new UUIDs for all cloned nodes
30
+ * and sets `clonedFromId` on each clone pointing to the original.
31
+ *
32
+ * Phase 2: Re-attaches reference relationships from cloned nodes to shared/lookup nodes
33
+ * (e.g., Language, Status, MeasurementUnit) that were outside the clone scope.
34
+ *
35
+ * @param sourceRootId - The `id` property of the root node to clone
36
+ * @param config - Defines which nodes to clone vs reference
37
+ * @param transaction - Caller-managed Neo4j transaction
38
+ * @param logger - Optional logger for debug output
39
+ * @returns The cloned root node id and a mapping of original→cloned node ids
40
+ */
41
+ async function cloneSubgraph(sourceRootId, config, transaction, logger) {
42
+ const log = logger ?? NOOP_LOGGER;
43
+ validateConfig(config);
44
+ try {
45
+ const cloneResult = await executeApocClone(sourceRootId, config, transaction, log);
46
+ log.debug('[OGM $cloneSubgraph] Cloned %d nodes from root %s', cloneResult.nodeMapping.size, sourceRootId);
47
+ await reattachReferenceRelationships(config, cloneResult, transaction, log);
48
+ return cloneResult;
49
+ }
50
+ catch (error) {
51
+ if (error instanceof errors_1.SubgraphOperationError)
52
+ throw error;
53
+ throw new errors_1.SubgraphOperationError('clone', sourceRootId, error instanceof Error ? error.message : String(error), error instanceof Error ? error : undefined);
54
+ }
55
+ }
56
+ /**
57
+ * Deletes a content subgraph rooted at the given node using APOC procedures.
58
+ *
59
+ * Uses `apoc.path.subgraphAll` to collect all owned nodes within the configured
60
+ * labels and relationships, then `DETACH DELETE`s them.
61
+ *
62
+ * @param rootId - The `id` property of the subgraph root node to delete
63
+ * @param config - Defines which labels/relationships form the owned subgraph
64
+ * @param transaction - Caller-managed Neo4j transaction
65
+ * @param logger - Optional logger for debug output
66
+ * @returns The count of deleted nodes
67
+ */
68
+ async function deleteSubgraph(rootId, config, transaction, logger) {
69
+ const log = logger ?? NOOP_LOGGER;
70
+ validateConfig(config);
71
+ const relFilter = config.ownedRelationships.join('|');
72
+ const labelFilter = config.ownedLabels.map((l) => `+${l}`).join('|');
73
+ try {
74
+ const result = await transaction.run(`
75
+ MATCH (source {id: $rootId})
76
+ CALL apoc.path.subgraphAll(source, {
77
+ relationshipFilter: $relFilter,
78
+ labelFilter: $labelFilter,
79
+ maxLevel: $maxLevel
80
+ }) YIELD nodes
81
+ UNWIND nodes AS n
82
+ DETACH DELETE n
83
+ RETURN count(*) AS deletedCount
84
+ `, {
85
+ rootId,
86
+ relFilter,
87
+ labelFilter,
88
+ maxLevel: config.maxLevel,
89
+ });
90
+ const deletedCount = result.records[0]?.get('deletedCount')?.toNumber?.() ??
91
+ result.records[0]?.get('deletedCount') ??
92
+ 0;
93
+ log.debug('[OGM $deleteSubgraph] Deleted %d nodes from root %s', deletedCount, rootId);
94
+ return { deletedCount };
95
+ }
96
+ catch (error) {
97
+ if (error instanceof errors_1.SubgraphOperationError)
98
+ throw error;
99
+ throw new errors_1.SubgraphOperationError('delete', rootId, error instanceof Error ? error.message : String(error), error instanceof Error ? error : undefined);
100
+ }
101
+ }
102
+ /**
103
+ * Executes the APOC subgraph clone and generates new UUIDs for cloned nodes.
104
+ */
105
+ async function executeApocClone(sourceRootId, config, transaction, logger) {
106
+ const relFilter = config.ownedRelationships.join('|');
107
+ const labelFilter = config.ownedLabels.map((l) => `+${l}`).join('|');
108
+ // Step 1: Collect subgraph and clone it
109
+ // APOC cloneSubgraph returns: input=INTEGER (original internal ID), output=NODE (clone).
110
+ // skipProperties: ['id'] avoids unique constraint violations during clone.
111
+ // We use `input` (internal ID) to match back to the original's app-level id.
112
+ const result = await transaction.run(`
113
+ MATCH (source {id: $sourceId})
114
+ CALL apoc.path.subgraphAll(source, {
115
+ relationshipFilter: $relFilter,
116
+ labelFilter: $labelFilter,
117
+ maxLevel: $maxLevel
118
+ }) YIELD nodes, relationships
119
+ CALL apoc.refactor.cloneSubgraph(nodes, relationships, {skipProperties: ['id']})
120
+ YIELD input, output, error
121
+ WHERE output IS NOT NULL
122
+ WITH input, output
123
+ MATCH (original) WHERE id(original) = input
124
+ SET output.clonedFromId = original.id
125
+ RETURN original.id AS originalId, elementId(output) AS cloneElementId
126
+ `, {
127
+ sourceId: sourceRootId,
128
+ relFilter,
129
+ labelFilter,
130
+ maxLevel: config.maxLevel,
131
+ });
132
+ // Build nodeMapping from result records
133
+ const nodeMapping = new Map();
134
+ let clonedRootElementId;
135
+ for (const record of result.records) {
136
+ const originalId = record.get('originalId');
137
+ const cloneElementId = record.get('cloneElementId');
138
+ nodeMapping.set(originalId, cloneElementId);
139
+ if (originalId === sourceRootId)
140
+ clonedRootElementId = cloneElementId;
141
+ }
142
+ if (!clonedRootElementId)
143
+ throw new errors_1.SubgraphOperationError('clone', sourceRootId, 'Clone did not produce a root node');
144
+ // Step 2: Generate new UUIDs for cloned nodes
145
+ // clonedFromId was already set in Step 1 via the APOC clone query
146
+ const uuidResult = await transaction.run(`
147
+ UNWIND $elementIds AS elemId
148
+ MATCH (n) WHERE elementId(n) = elemId
149
+ WITH n, elementId(n) AS elemId, randomUUID() AS newId
150
+ SET n.id = newId
151
+ RETURN elemId, newId
152
+ `, {
153
+ elementIds: Array.from(nodeMapping.values()),
154
+ });
155
+ // Rebuild mapping with new UUIDs: originalId → newUUID
156
+ const elementIdToNewUuid = new Map();
157
+ for (const record of uuidResult.records)
158
+ elementIdToNewUuid.set(record.get('elemId'), record.get('newId'));
159
+ const finalMapping = new Map();
160
+ for (const [originalId, elementId] of nodeMapping) {
161
+ const newUuid = elementIdToNewUuid.get(elementId);
162
+ if (newUuid)
163
+ finalMapping.set(originalId, newUuid);
164
+ }
165
+ const finalClonedRootId = elementIdToNewUuid.get(clonedRootElementId);
166
+ if (!finalClonedRootId)
167
+ throw new errors_1.SubgraphOperationError('clone', sourceRootId, 'Failed to assign new UUID to cloned root node');
168
+ logger.debug('[OGM $cloneSubgraph] APOC clone complete: %d nodes, root %s → %s', finalMapping.size, sourceRootId, finalClonedRootId);
169
+ return {
170
+ clonedRootId: finalClonedRootId,
171
+ nodeMapping: finalMapping,
172
+ };
173
+ }
174
+ /**
175
+ * Re-attaches reference relationships from cloned nodes to shared/lookup nodes.
176
+ *
177
+ * After APOC cloning, cloned nodes lose their relationships to shared nodes
178
+ * (e.g., Language, Status, MeasurementUnit) because those were outside the clone scope.
179
+ * This queries the original nodes for their reference relationships and re-creates
180
+ * them on the cloned nodes.
181
+ *
182
+ * NOTE: `properties(r)` is materialized into a map variable (`relProps`) BEFORE
183
+ * the CREATE to ensure relationship properties are preserved. Accessing
184
+ * `properties(r)` after a WITH boundary inside CALL {} can silently return
185
+ * an empty map in some Neo4j versions.
186
+ */
187
+ async function reattachReferenceRelationships(config, cloneResult, transaction, logger) {
188
+ if (!config.referenceRelationships.length)
189
+ return;
190
+ const mappings = Array.from(cloneResult.nodeMapping.entries()).map(([originalId, cloneId]) => ({ originalId, cloneId }));
191
+ for (const refRel of config.referenceRelationships) {
192
+ const escapedRelType = (0, validation_1.escapeIdentifier)(refRel.relationshipType);
193
+ const escapedLabel = (0, validation_1.assertSafeLabel)(refRel.fromLabel);
194
+ const matchPattern = refRel.direction === 'OUT'
195
+ ? `-[r:${escapedRelType}]->(target)`
196
+ : `<-[r:${escapedRelType}]-(target)`;
197
+ const createPattern = refRel.direction === 'OUT'
198
+ ? `CREATE (clone)-[newR:${escapedRelType}]->(target)`
199
+ : `CREATE (clone)<-[newR:${escapedRelType}]-(target)`;
200
+ const result = await transaction.run(`
201
+ UNWIND $mappings AS mapping
202
+ MATCH (original {id: mapping.originalId})
203
+ WHERE original:${escapedLabel}
204
+ MATCH (clone {id: mapping.cloneId})
205
+ WHERE clone:${escapedLabel}
206
+ WITH original, clone
207
+ CALL {
208
+ WITH original, clone
209
+ MATCH (original)${matchPattern}
210
+ WITH clone, target, properties(r) AS relProps
211
+ ${createPattern}
212
+ SET newR = relProps
213
+ RETURN count(*) AS created
214
+ }
215
+ RETURN sum(created) AS totalCreated
216
+ `, { mappings });
217
+ const totalCreated = result.records[0]?.get('totalCreated')?.toNumber?.() ??
218
+ result.records[0]?.get('totalCreated') ??
219
+ 0;
220
+ if (totalCreated > 0)
221
+ logger.debug('[OGM $cloneSubgraph] Reattached %d %s relationships (%s)', totalCreated, refRel.relationshipType, refRel.fromLabel);
222
+ }
223
+ logger.debug('[OGM $cloneSubgraph] Reattached %d reference relationship types', config.referenceRelationships.length);
224
+ }
225
+ //# sourceMappingURL=subgraph-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subgraph-operations.js","sourceRoot":"","sources":["../../../src/subgraph/subgraph-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /** Reference relationship from a cloned node to a shared/lookup node. */
2
+ export interface SubgraphReferenceRelationship {
3
+ fromLabel: string;
4
+ relationshipType: string;
5
+ direction: 'OUT' | 'IN';
6
+ }
7
+ /** Configuration for clone/delete operations — domain-agnostic blueprint. */
8
+ export interface SubgraphConfig {
9
+ ownedLabels: string[];
10
+ ownedRelationships: string[];
11
+ maxLevel: number;
12
+ referenceRelationships: SubgraphReferenceRelationship[];
13
+ }
14
+ /** Clone result. */
15
+ export interface SubgraphCloneResult {
16
+ clonedRootId: string;
17
+ nodeMapping: Map<string, string>;
18
+ }
19
+ /** Delete result. */
20
+ export interface SubgraphDeleteResult {
21
+ deletedCount: number;
22
+ }
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/subgraph/types.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,KAAK,GAAG,IAAI,CAAC;CACzB;AAED,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,EAAE,6BAA6B,EAAE,CAAC;CACzD;AAED,oBAAoB;AACpB,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,qBAAqB;AACrB,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/subgraph/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Structural Cypher comparison utility that normalizes whitespace
3
+ * and parameter names for deterministic test assertions.
4
+ */
5
+ export declare class CypherAssert {
6
+ /**
7
+ * Normalize a Cypher string for structural comparison:
8
+ * - Collapse all whitespace sequences to a single space
9
+ * - Trim leading/trailing whitespace
10
+ * - Rename params to canonical $p0, $p1, etc. (in order of appearance)
11
+ */
12
+ static normalize(cypher: string): string;
13
+ /**
14
+ * Assert two Cypher strings are structurally equal after normalization.
15
+ * Throws an Error if they differ.
16
+ */
17
+ static assertStructurallyEqual(actual: string, expected: string): void;
18
+ /**
19
+ * Assert that a Cypher string contains a specific clause.
20
+ * @param cypher - The full Cypher string
21
+ * @param clauseType - e.g., 'WHERE', 'MATCH', 'RETURN', 'SET'
22
+ * @param pattern - Substring to search for within the clause
23
+ */
24
+ static assertContainsClause(cypher: string, clauseType: string, pattern: string): void;
25
+ /**
26
+ * Assert that a Cypher string does NOT contain a specific clause/pattern.
27
+ */
28
+ static assertNotContainsClause(cypher: string, clauseTypeOrPattern: string, pattern?: string): void;
29
+ /**
30
+ * Assert parameter values match expected.
31
+ * Only checks the keys present in expected (doesn't require exact match on all params).
32
+ */
33
+ static assertParams(actual: Record<string, unknown>, expected: Record<string, unknown>): void;
34
+ }
35
+ //# sourceMappingURL=cypher-assert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cypher-assert.d.ts","sourceRoot":"","sources":["../../../src/testing/cypher-assert.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,YAAY;IACvB;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAkBxC;;;OAGG;IACH,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAStE;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CACzB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,IAAI;IAYP;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAC5B,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE,MAAM,GACf,IAAI;IAQP;;;OAGG;IACH,MAAM,CAAC,YAAY,CACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI;CAeR"}