@undefineds.co/drizzle-solid 0.2.13 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/CHANGELOG-DRAFT.md +1 -1
  2. package/README.md +163 -248
  3. package/dist/core/ast-to-sparql.d.ts +32 -25
  4. package/dist/core/ast-to-sparql.d.ts.map +1 -1
  5. package/dist/core/ast-to-sparql.js +1 -1
  6. package/dist/core/ast-to-sparql.js.map +1 -1
  7. package/dist/core/compile-time-types.d.ts +10 -7
  8. package/dist/core/compile-time-types.d.ts.map +1 -1
  9. package/dist/core/compile-time-types.js +6 -4
  10. package/dist/core/compile-time-types.js.map +1 -1
  11. package/dist/core/comunica-patch.d.ts +1 -6
  12. package/dist/core/comunica-patch.d.ts.map +1 -1
  13. package/dist/core/comunica-patch.js +16 -20
  14. package/dist/core/comunica-patch.js.map +1 -1
  15. package/dist/core/conflict-resolution.d.ts.map +1 -1
  16. package/dist/core/conflict-resolution.js +3 -2
  17. package/dist/core/conflict-resolution.js.map +1 -1
  18. package/dist/core/discovery/typeindex-discovery.d.ts.map +1 -1
  19. package/dist/core/discovery/typeindex-discovery.js +0 -2
  20. package/dist/core/discovery/typeindex-discovery.js.map +1 -1
  21. package/dist/core/execution/ldp-executor.d.ts.map +1 -1
  22. package/dist/core/execution/ldp-executor.js +2 -21
  23. package/dist/core/execution/ldp-executor.js.map +1 -1
  24. package/dist/core/execution/pod-executor.d.ts.map +1 -1
  25. package/dist/core/execution/pod-executor.js +2 -4
  26. package/dist/core/execution/pod-executor.js.map +1 -1
  27. package/dist/core/execution/sparql-strategy.d.ts +8 -40
  28. package/dist/core/execution/sparql-strategy.d.ts.map +1 -1
  29. package/dist/core/execution/sparql-strategy.js +24 -186
  30. package/dist/core/execution/sparql-strategy.js.map +1 -1
  31. package/dist/core/execution/strategy-factory.d.ts +7 -20
  32. package/dist/core/execution/strategy-factory.d.ts.map +1 -1
  33. package/dist/core/execution/strategy-factory.js +2 -17
  34. package/dist/core/execution/strategy-factory.js.map +1 -1
  35. package/dist/core/expressions.d.ts +10 -9
  36. package/dist/core/expressions.d.ts.map +1 -1
  37. package/dist/core/expressions.js.map +1 -1
  38. package/dist/core/pod-database.d.ts +62 -18
  39. package/dist/core/pod-database.d.ts.map +1 -1
  40. package/dist/core/pod-database.js +136 -72
  41. package/dist/core/pod-database.js.map +1 -1
  42. package/dist/core/pod-dialect.d.ts +7 -1
  43. package/dist/core/pod-dialect.d.ts.map +1 -1
  44. package/dist/core/pod-dialect.js +36 -29
  45. package/dist/core/pod-dialect.js.map +1 -1
  46. package/dist/core/pod-session.d.ts +10 -9
  47. package/dist/core/pod-session.d.ts.map +1 -1
  48. package/dist/core/pod-session.js.map +1 -1
  49. package/dist/core/query-builders/delete-query-builder.d.ts +2 -2
  50. package/dist/core/query-builders/delete-query-builder.d.ts.map +1 -1
  51. package/dist/core/query-builders/delete-query-builder.js +8 -6
  52. package/dist/core/query-builders/delete-query-builder.js.map +1 -1
  53. package/dist/core/query-builders/select-query-builder.d.ts +15 -6
  54. package/dist/core/query-builders/select-query-builder.d.ts.map +1 -1
  55. package/dist/core/query-builders/select-query-builder.js +217 -31
  56. package/dist/core/query-builders/select-query-builder.js.map +1 -1
  57. package/dist/core/query-builders/update-query-builder.d.ts +2 -2
  58. package/dist/core/query-builders/update-query-builder.d.ts.map +1 -1
  59. package/dist/core/query-builders/update-query-builder.js +7 -5
  60. package/dist/core/query-builders/update-query-builder.js.map +1 -1
  61. package/dist/core/query-conditions.d.ts +18 -11
  62. package/dist/core/query-conditions.d.ts.map +1 -1
  63. package/dist/core/query-conditions.js.map +1 -1
  64. package/dist/core/query-where-policy.d.ts +7 -0
  65. package/dist/core/query-where-policy.d.ts.map +1 -0
  66. package/dist/core/query-where-policy.js +83 -0
  67. package/dist/core/query-where-policy.js.map +1 -0
  68. package/dist/core/resource-resolver/base-resolver.d.ts +1 -0
  69. package/dist/core/resource-resolver/base-resolver.d.ts.map +1 -1
  70. package/dist/core/resource-resolver/base-resolver.js +33 -39
  71. package/dist/core/resource-resolver/base-resolver.js.map +1 -1
  72. package/dist/core/resource-resolver/document-resolver.d.ts +2 -1
  73. package/dist/core/resource-resolver/document-resolver.d.ts.map +1 -1
  74. package/dist/core/resource-resolver/document-resolver.js +17 -46
  75. package/dist/core/resource-resolver/document-resolver.js.map +1 -1
  76. package/dist/core/runtime/pod-runtime.d.ts.map +1 -1
  77. package/dist/core/runtime/pod-runtime.js +0 -6
  78. package/dist/core/runtime/pod-runtime.js.map +1 -1
  79. package/dist/core/schema/columns.d.ts +6 -6
  80. package/dist/core/schema/columns.d.ts.map +1 -1
  81. package/dist/core/schema/columns.js +18 -18
  82. package/dist/core/schema/columns.js.map +1 -1
  83. package/dist/core/schema/defs.d.ts +4 -4
  84. package/dist/core/schema/defs.d.ts.map +1 -1
  85. package/dist/core/schema/pod-table.js +2 -2
  86. package/dist/core/schema/pod-table.js.map +1 -1
  87. package/dist/core/select-plan.d.ts +9 -7
  88. package/dist/core/select-plan.d.ts.map +1 -1
  89. package/dist/core/services/pod-services.d.ts +7 -5
  90. package/dist/core/services/pod-services.d.ts.map +1 -1
  91. package/dist/core/services/pod-services.js +7 -5
  92. package/dist/core/services/pod-services.js.map +1 -1
  93. package/dist/core/shape/generator.js +3 -3
  94. package/dist/core/shape/generator.js.map +1 -1
  95. package/dist/core/shape/manager.js +5 -5
  96. package/dist/core/shape/manager.js.map +1 -1
  97. package/dist/core/solid-n3-client.d.ts.map +1 -1
  98. package/dist/core/solid-n3-client.js +20 -9
  99. package/dist/core/solid-n3-client.js.map +1 -1
  100. package/dist/core/sparql/builder/expression-builder.d.ts +14 -16
  101. package/dist/core/sparql/builder/expression-builder.d.ts.map +1 -1
  102. package/dist/core/sparql/builder/expression-builder.js +177 -74
  103. package/dist/core/sparql/builder/expression-builder.js.map +1 -1
  104. package/dist/core/sparql/builder/select-builder.d.ts +1 -1
  105. package/dist/core/sparql/builder/select-builder.d.ts.map +1 -1
  106. package/dist/core/sparql/builder/select-builder.js +19 -5
  107. package/dist/core/sparql/builder/select-builder.js.map +1 -1
  108. package/dist/core/sparql/builder/update-builder.d.ts +1 -1
  109. package/dist/core/sparql/builder/update-builder.d.ts.map +1 -1
  110. package/dist/core/sparql/builder/update-builder.js +4 -15
  111. package/dist/core/sparql/builder/update-builder.js.map +1 -1
  112. package/dist/core/sparql/helpers.js +3 -3
  113. package/dist/core/sparql/helpers.js.map +1 -1
  114. package/dist/core/sparql-engine.d.ts +16 -0
  115. package/dist/core/sparql-engine.d.ts.map +1 -0
  116. package/dist/core/sparql-engine.js +128 -0
  117. package/dist/core/sparql-engine.js.map +1 -0
  118. package/dist/core/sparql-executor.d.ts +12 -7
  119. package/dist/core/sparql-executor.d.ts.map +1 -1
  120. package/dist/core/sparql-executor.js +56 -47
  121. package/dist/core/sparql-executor.js.map +1 -1
  122. package/dist/core/triple/handlers/inverse.js +4 -4
  123. package/dist/core/triple/handlers/inverse.js.map +1 -1
  124. package/dist/core/triple/handlers/uri.d.ts +1 -1
  125. package/dist/core/triple/handlers/uri.js +3 -3
  126. package/dist/core/triple/handlers/uri.js.map +1 -1
  127. package/dist/core/typeindex-manager.d.ts.map +1 -1
  128. package/dist/core/typeindex-manager.js +3 -0
  129. package/dist/core/typeindex-manager.js.map +1 -1
  130. package/dist/core/types.d.ts +3 -3
  131. package/dist/core/types.d.ts.map +1 -1
  132. package/dist/core/uri/resolver.d.ts +9 -9
  133. package/dist/core/uri/resolver.d.ts.map +1 -1
  134. package/dist/core/uri/resolver.js +51 -51
  135. package/dist/core/uri/resolver.js.map +1 -1
  136. package/dist/core/uri/types.d.ts +10 -10
  137. package/dist/core/uri/types.d.ts.map +1 -1
  138. package/dist/core/zod-integration.d.ts +9 -7
  139. package/dist/core/zod-integration.d.ts.map +1 -1
  140. package/dist/core/zod-integration.js.map +1 -1
  141. package/dist/driver.d.ts +10 -1
  142. package/dist/driver.d.ts.map +1 -1
  143. package/dist/driver.js +1 -5
  144. package/dist/driver.js.map +1 -1
  145. package/dist/esm/core/ast-to-sparql.d.ts +32 -25
  146. package/dist/esm/core/ast-to-sparql.d.ts.map +1 -1
  147. package/dist/esm/core/ast-to-sparql.js +1 -1
  148. package/dist/esm/core/ast-to-sparql.js.map +1 -1
  149. package/dist/esm/core/compile-time-types.d.ts +10 -7
  150. package/dist/esm/core/compile-time-types.d.ts.map +1 -1
  151. package/dist/esm/core/compile-time-types.js +6 -4
  152. package/dist/esm/core/compile-time-types.js.map +1 -1
  153. package/dist/esm/core/comunica-patch.d.ts +1 -6
  154. package/dist/esm/core/comunica-patch.d.ts.map +1 -1
  155. package/dist/esm/core/comunica-patch.js +13 -21
  156. package/dist/esm/core/comunica-patch.js.map +1 -1
  157. package/dist/esm/core/conflict-resolution.d.ts.map +1 -1
  158. package/dist/esm/core/conflict-resolution.js +3 -2
  159. package/dist/esm/core/conflict-resolution.js.map +1 -1
  160. package/dist/esm/core/discovery/typeindex-discovery.d.ts.map +1 -1
  161. package/dist/esm/core/discovery/typeindex-discovery.js +0 -2
  162. package/dist/esm/core/discovery/typeindex-discovery.js.map +1 -1
  163. package/dist/esm/core/execution/ldp-executor.d.ts.map +1 -1
  164. package/dist/esm/core/execution/ldp-executor.js +2 -21
  165. package/dist/esm/core/execution/ldp-executor.js.map +1 -1
  166. package/dist/esm/core/execution/pod-executor.d.ts.map +1 -1
  167. package/dist/esm/core/execution/pod-executor.js +2 -4
  168. package/dist/esm/core/execution/pod-executor.js.map +1 -1
  169. package/dist/esm/core/execution/sparql-strategy.d.ts +8 -40
  170. package/dist/esm/core/execution/sparql-strategy.d.ts.map +1 -1
  171. package/dist/esm/core/execution/sparql-strategy.js +25 -187
  172. package/dist/esm/core/execution/sparql-strategy.js.map +1 -1
  173. package/dist/esm/core/execution/strategy-factory.d.ts +7 -20
  174. package/dist/esm/core/execution/strategy-factory.d.ts.map +1 -1
  175. package/dist/esm/core/execution/strategy-factory.js +2 -17
  176. package/dist/esm/core/execution/strategy-factory.js.map +1 -1
  177. package/dist/esm/core/expressions.d.ts +10 -9
  178. package/dist/esm/core/expressions.d.ts.map +1 -1
  179. package/dist/esm/core/expressions.js.map +1 -1
  180. package/dist/esm/core/pod-database.d.ts +62 -18
  181. package/dist/esm/core/pod-database.d.ts.map +1 -1
  182. package/dist/esm/core/pod-database.js +136 -72
  183. package/dist/esm/core/pod-database.js.map +1 -1
  184. package/dist/esm/core/pod-dialect.d.ts +7 -1
  185. package/dist/esm/core/pod-dialect.d.ts.map +1 -1
  186. package/dist/esm/core/pod-dialect.js +37 -30
  187. package/dist/esm/core/pod-dialect.js.map +1 -1
  188. package/dist/esm/core/pod-session.d.ts +10 -9
  189. package/dist/esm/core/pod-session.d.ts.map +1 -1
  190. package/dist/esm/core/pod-session.js.map +1 -1
  191. package/dist/esm/core/query-builders/delete-query-builder.d.ts +2 -2
  192. package/dist/esm/core/query-builders/delete-query-builder.d.ts.map +1 -1
  193. package/dist/esm/core/query-builders/delete-query-builder.js +8 -6
  194. package/dist/esm/core/query-builders/delete-query-builder.js.map +1 -1
  195. package/dist/esm/core/query-builders/select-query-builder.d.ts +15 -6
  196. package/dist/esm/core/query-builders/select-query-builder.d.ts.map +1 -1
  197. package/dist/esm/core/query-builders/select-query-builder.js +218 -32
  198. package/dist/esm/core/query-builders/select-query-builder.js.map +1 -1
  199. package/dist/esm/core/query-builders/update-query-builder.d.ts +2 -2
  200. package/dist/esm/core/query-builders/update-query-builder.d.ts.map +1 -1
  201. package/dist/esm/core/query-builders/update-query-builder.js +7 -5
  202. package/dist/esm/core/query-builders/update-query-builder.js.map +1 -1
  203. package/dist/esm/core/query-conditions.d.ts +18 -11
  204. package/dist/esm/core/query-conditions.d.ts.map +1 -1
  205. package/dist/esm/core/query-conditions.js.map +1 -1
  206. package/dist/esm/core/query-where-policy.d.ts +7 -0
  207. package/dist/esm/core/query-where-policy.d.ts.map +1 -0
  208. package/dist/esm/core/query-where-policy.js +78 -0
  209. package/dist/esm/core/query-where-policy.js.map +1 -0
  210. package/dist/esm/core/resource-resolver/base-resolver.d.ts +1 -0
  211. package/dist/esm/core/resource-resolver/base-resolver.d.ts.map +1 -1
  212. package/dist/esm/core/resource-resolver/base-resolver.js +33 -39
  213. package/dist/esm/core/resource-resolver/base-resolver.js.map +1 -1
  214. package/dist/esm/core/resource-resolver/document-resolver.d.ts +2 -1
  215. package/dist/esm/core/resource-resolver/document-resolver.d.ts.map +1 -1
  216. package/dist/esm/core/resource-resolver/document-resolver.js +17 -46
  217. package/dist/esm/core/resource-resolver/document-resolver.js.map +1 -1
  218. package/dist/esm/core/runtime/pod-runtime.d.ts.map +1 -1
  219. package/dist/esm/core/runtime/pod-runtime.js +0 -6
  220. package/dist/esm/core/runtime/pod-runtime.js.map +1 -1
  221. package/dist/esm/core/schema/columns.d.ts +6 -6
  222. package/dist/esm/core/schema/columns.d.ts.map +1 -1
  223. package/dist/esm/core/schema/columns.js +18 -18
  224. package/dist/esm/core/schema/columns.js.map +1 -1
  225. package/dist/esm/core/schema/defs.d.ts +4 -4
  226. package/dist/esm/core/schema/defs.d.ts.map +1 -1
  227. package/dist/esm/core/schema/pod-table.js +2 -2
  228. package/dist/esm/core/schema/pod-table.js.map +1 -1
  229. package/dist/esm/core/select-plan.d.ts +9 -7
  230. package/dist/esm/core/select-plan.d.ts.map +1 -1
  231. package/dist/esm/core/services/pod-services.d.ts +7 -5
  232. package/dist/esm/core/services/pod-services.d.ts.map +1 -1
  233. package/dist/esm/core/services/pod-services.js +7 -5
  234. package/dist/esm/core/services/pod-services.js.map +1 -1
  235. package/dist/esm/core/shape/generator.js +3 -3
  236. package/dist/esm/core/shape/generator.js.map +1 -1
  237. package/dist/esm/core/shape/manager.js +5 -5
  238. package/dist/esm/core/shape/manager.js.map +1 -1
  239. package/dist/esm/core/solid-n3-client.d.ts.map +1 -1
  240. package/dist/esm/core/solid-n3-client.js +20 -9
  241. package/dist/esm/core/solid-n3-client.js.map +1 -1
  242. package/dist/esm/core/sparql/builder/expression-builder.d.ts +14 -16
  243. package/dist/esm/core/sparql/builder/expression-builder.d.ts.map +1 -1
  244. package/dist/esm/core/sparql/builder/expression-builder.js +177 -74
  245. package/dist/esm/core/sparql/builder/expression-builder.js.map +1 -1
  246. package/dist/esm/core/sparql/builder/select-builder.d.ts +1 -1
  247. package/dist/esm/core/sparql/builder/select-builder.d.ts.map +1 -1
  248. package/dist/esm/core/sparql/builder/select-builder.js +19 -5
  249. package/dist/esm/core/sparql/builder/select-builder.js.map +1 -1
  250. package/dist/esm/core/sparql/builder/update-builder.d.ts +1 -1
  251. package/dist/esm/core/sparql/builder/update-builder.d.ts.map +1 -1
  252. package/dist/esm/core/sparql/builder/update-builder.js +4 -15
  253. package/dist/esm/core/sparql/builder/update-builder.js.map +1 -1
  254. package/dist/esm/core/sparql/helpers.js +3 -3
  255. package/dist/esm/core/sparql/helpers.js.map +1 -1
  256. package/dist/esm/core/sparql-engine.d.ts +16 -0
  257. package/dist/esm/core/sparql-engine.d.ts.map +1 -0
  258. package/dist/esm/core/sparql-engine.js +89 -0
  259. package/dist/esm/core/sparql-engine.js.map +1 -0
  260. package/dist/esm/core/sparql-executor.d.ts +12 -7
  261. package/dist/esm/core/sparql-executor.d.ts.map +1 -1
  262. package/dist/esm/core/sparql-executor.js +56 -47
  263. package/dist/esm/core/sparql-executor.js.map +1 -1
  264. package/dist/esm/core/triple/handlers/inverse.js +4 -4
  265. package/dist/esm/core/triple/handlers/inverse.js.map +1 -1
  266. package/dist/esm/core/triple/handlers/uri.d.ts +1 -1
  267. package/dist/esm/core/triple/handlers/uri.js +3 -3
  268. package/dist/esm/core/triple/handlers/uri.js.map +1 -1
  269. package/dist/esm/core/typeindex-manager.d.ts.map +1 -1
  270. package/dist/esm/core/typeindex-manager.js +3 -0
  271. package/dist/esm/core/typeindex-manager.js.map +1 -1
  272. package/dist/esm/core/types.d.ts +3 -3
  273. package/dist/esm/core/types.d.ts.map +1 -1
  274. package/dist/esm/core/uri/resolver.d.ts +9 -9
  275. package/dist/esm/core/uri/resolver.d.ts.map +1 -1
  276. package/dist/esm/core/uri/resolver.js +51 -51
  277. package/dist/esm/core/uri/resolver.js.map +1 -1
  278. package/dist/esm/core/uri/types.d.ts +10 -10
  279. package/dist/esm/core/uri/types.d.ts.map +1 -1
  280. package/dist/esm/core/zod-integration.d.ts +9 -7
  281. package/dist/esm/core/zod-integration.d.ts.map +1 -1
  282. package/dist/esm/core/zod-integration.js.map +1 -1
  283. package/dist/esm/driver.d.ts +10 -1
  284. package/dist/esm/driver.d.ts.map +1 -1
  285. package/dist/esm/driver.js +1 -5
  286. package/dist/esm/driver.js.map +1 -1
  287. package/dist/esm/index.d.ts +3 -1
  288. package/dist/esm/index.d.ts.map +1 -1
  289. package/dist/esm/index.js +4 -2
  290. package/dist/esm/index.js.map +1 -1
  291. package/dist/esm/pod.d.ts +118 -0
  292. package/dist/esm/pod.d.ts.map +1 -0
  293. package/dist/esm/pod.js +146 -0
  294. package/dist/esm/pod.js.map +1 -0
  295. package/dist/esm/utils/find-by-iri.d.ts +4 -2
  296. package/dist/esm/utils/find-by-iri.d.ts.map +1 -1
  297. package/dist/esm/utils/find-by-iri.js +8 -8
  298. package/dist/esm/utils/find-by-iri.js.map +1 -1
  299. package/dist/esm/utils/helpers.d.ts +2 -2
  300. package/dist/esm/utils/helpers.d.ts.map +1 -1
  301. package/dist/esm/utils/rdf-helpers.d.ts +2 -2
  302. package/dist/esm/utils/rdf-helpers.d.ts.map +1 -1
  303. package/dist/esm/utils/rdf-helpers.js +9 -6
  304. package/dist/esm/utils/rdf-helpers.js.map +1 -1
  305. package/dist/esm/utils/rdf-validation.d.ts +5 -3
  306. package/dist/esm/utils/rdf-validation.d.ts.map +1 -1
  307. package/dist/esm/utils/rdf-validation.js +47 -8
  308. package/dist/esm/utils/rdf-validation.js.map +1 -1
  309. package/dist/esm/utils/webid-resolver.d.ts +1 -2
  310. package/dist/esm/utils/webid-resolver.d.ts.map +1 -1
  311. package/dist/esm/utils/webid-resolver.js +37 -31
  312. package/dist/esm/utils/webid-resolver.js.map +1 -1
  313. package/dist/index.d.ts +3 -1
  314. package/dist/index.d.ts.map +1 -1
  315. package/dist/index.js +12 -4
  316. package/dist/index.js.map +1 -1
  317. package/dist/pod.d.ts +118 -0
  318. package/dist/pod.d.ts.map +1 -0
  319. package/dist/pod.js +153 -0
  320. package/dist/pod.js.map +1 -0
  321. package/dist/utils/find-by-iri.d.ts +4 -2
  322. package/dist/utils/find-by-iri.d.ts.map +1 -1
  323. package/dist/utils/find-by-iri.js +8 -8
  324. package/dist/utils/find-by-iri.js.map +1 -1
  325. package/dist/utils/helpers.d.ts +2 -2
  326. package/dist/utils/helpers.d.ts.map +1 -1
  327. package/dist/utils/rdf-helpers.d.ts +2 -2
  328. package/dist/utils/rdf-helpers.d.ts.map +1 -1
  329. package/dist/utils/rdf-helpers.js +9 -6
  330. package/dist/utils/rdf-helpers.js.map +1 -1
  331. package/dist/utils/rdf-validation.d.ts +5 -3
  332. package/dist/utils/rdf-validation.d.ts.map +1 -1
  333. package/dist/utils/rdf-validation.js +47 -8
  334. package/dist/utils/rdf-validation.js.map +1 -1
  335. package/dist/utils/webid-resolver.d.ts +1 -2
  336. package/dist/utils/webid-resolver.d.ts.map +1 -1
  337. package/dist/utils/webid-resolver.js +37 -31
  338. package/dist/utils/webid-resolver.js.map +1 -1
  339. package/package.json +13 -4
@@ -1,10 +1,12 @@
1
1
  import { entityKind } from 'drizzle-orm';
2
2
  import { PodDialect } from './pod-dialect';
3
3
  import { PodAsyncSession, type SelectFieldMap, SelectQueryBuilder, InsertQueryBuilder, UpdateQueryBuilder, DeleteQueryBuilder } from './pod-session';
4
- import { PodTable, SolidSchema, type InferTableData, PodColumnBase, type InstantiateTableOptions } from './schema';
4
+ import { PodTable, SolidSchema, type InferTableData, type ColumnBuilderDataType, PodColumnBase, type InstantiateTableOptions } from './schema';
5
+ import { type PublicQueryCondition, type PublicWhereObject } from './query-conditions';
5
6
  import { type TableSubscribeOptions, type EntitySubscribeOptions, type Subscription } from './notifications';
6
7
  import { type FederatedError } from './federated';
7
8
  import type { DataDiscovery } from './discovery';
9
+ import type { OrderByExpression } from './order-by';
8
10
  /**
9
11
  * 初始化表选项
10
12
  */
@@ -16,6 +18,41 @@ export interface InitOptions {
16
18
  /** Shape 保存位置(容器路径或完整 URL),默认为 Pod 根目录下的 /shapes/ */
17
19
  shapeLocation?: string;
18
20
  }
21
+ type GenericPodTable = PodTable;
22
+ type QueryOrderBy = {
23
+ column: PodColumnBase | string | OrderByExpression;
24
+ direction?: 'asc' | 'desc';
25
+ };
26
+ type QueryExactOptions = {
27
+ columns?: SelectFieldMap;
28
+ with?: Record<string, boolean | {
29
+ table?: GenericPodTable;
30
+ }>;
31
+ };
32
+ type EntityLocator = Record<string, unknown>;
33
+ type QueryFindManyOptions = {
34
+ where?: PublicWhereObject | PublicQueryCondition;
35
+ columns?: SelectFieldMap;
36
+ limit?: number;
37
+ offset?: number;
38
+ orderBy?: QueryOrderBy[] | QueryOrderBy;
39
+ with?: Record<string, boolean | {
40
+ table?: GenericPodTable;
41
+ }>;
42
+ };
43
+ type QueryTableHelper<TTable extends GenericPodTable = GenericPodTable> = {
44
+ findMany<T = InferTableData<TTable>>(options?: QueryFindManyOptions): Promise<T[]>;
45
+ findFirst<T = InferTableData<TTable>>(options?: QueryFindManyOptions): Promise<T | null>;
46
+ findByLocator<T = InferTableData<TTable>>(locator: EntityLocator, options?: QueryExactOptions): Promise<T | null>;
47
+ findByIri<T = InferTableData<TTable>>(iri: string, options?: QueryExactOptions): Promise<T | null>;
48
+ count(options?: {
49
+ where?: PublicWhereObject | PublicQueryCondition;
50
+ }): Promise<number>;
51
+ };
52
+ type QueryProxy<TSchema extends Record<string, unknown>> = {
53
+ [K in keyof TSchema as TSchema[K] extends GenericPodTable ? K : never]: TSchema[K] extends GenericPodTable ? QueryTableHelper<TSchema[K]> : never;
54
+ };
55
+ type GenericPodColumn = PodColumnBase<ColumnBuilderDataType, boolean, boolean, ColumnBuilderDataType | null>;
19
56
  export declare class PodDatabase<TSchema extends Record<string, unknown> = Record<string, never>> {
20
57
  dialect: PodDialect;
21
58
  session: PodAsyncSession;
@@ -82,17 +119,21 @@ export declare class PodDatabase<TSchema extends Record<string, unknown> = Recor
82
119
  * });
83
120
  * ```
84
121
  */
85
- createTable<TColumns extends Record<string, PodColumnBase<any, any, any, any>>>(schema: SolidSchema<TColumns>, options: InstantiateTableOptions): PodTable<TColumns>;
86
- select<TTable extends PodTable<any>>(fields?: SelectFieldMap): SelectQueryBuilder<TTable>;
87
- insert<TTable extends PodTable<any>>(table: TTable): InsertQueryBuilder<TTable>;
88
- update<TTable extends PodTable<any>>(table: TTable): UpdateQueryBuilder<TTable>;
89
- delete<TTable extends PodTable<any>>(table: TTable): DeleteQueryBuilder<TTable>;
122
+ createTable<TColumns extends Record<string, PodColumnBase>>(schema: SolidSchema<TColumns>, options: InstantiateTableOptions): PodTable<TColumns>;
123
+ select<TTable extends PodTable>(fields?: SelectFieldMap): SelectQueryBuilder<TTable>;
124
+ insert<TTable extends PodTable>(table: TTable): InsertQueryBuilder<TTable>;
125
+ update<TTable extends PodTable>(table: TTable): UpdateQueryBuilder<TTable>;
126
+ delete<TTable extends PodTable>(table: TTable): DeleteQueryBuilder<TTable>;
90
127
  execute(query: string): Promise<unknown[]>;
91
128
  executeSPARQL(query: string): Promise<unknown[]>;
92
129
  batch<TOperations extends readonly unknown[]>(operations: TOperations): Promise<{
93
130
  [K in keyof TOperations]: Awaited<TOperations[K]>;
94
131
  }>;
95
- findFirst<TTable extends PodTable<any>>(table: TTable, where?: Record<string, unknown>): Promise<InferTableData<TTable> | null>;
132
+ findFirst<TTable extends PodTable>(table: TTable, where?: PublicWhereObject): Promise<InferTableData<TTable> | null>;
133
+ private getLocatorTemplate;
134
+ private getRequiredLocatorKeys;
135
+ private resolveLocatorSubject;
136
+ findByLocator<TTable extends PodTable>(table: TTable, locator: EntityLocator): Promise<InferTableData<TTable> | null>;
96
137
  /**
97
138
  * 通过完整 IRI 查询单个实体
98
139
  *
@@ -112,7 +153,7 @@ export declare class PodDatabase<TSchema extends Record<string, unknown> = Recor
112
153
  * db.findByIri(agentTable, contact.entityUri)
113
154
  * ```
114
155
  */
115
- findByIri<TTable extends PodTable<any>>(table: TTable, iri: string): Promise<InferTableData<TTable> | null>;
156
+ findByIri<TTable extends PodTable>(table: TTable, iri: string): Promise<InferTableData<TTable> | null>;
116
157
  /**
117
158
  * 解析 IRI 为文档 URL 和 fragment
118
159
  */
@@ -147,7 +188,7 @@ export declare class PodDatabase<TSchema extends Record<string, unknown> = Recor
147
188
  * unsubscribe()
148
189
  * ```
149
190
  */
150
- subscribeByIri<TTable extends PodTable<any>>(table: TTable, iri: string, options: EntitySubscribeOptions<InferTableData<TTable>>): Promise<() => void>;
191
+ subscribeByIri<TTable extends PodTable>(table: TTable, iri: string, options: EntitySubscribeOptions<InferTableData<TTable>>): Promise<() => void>;
151
192
  /**
152
193
  * 通过完整 IRI 更新单个实体
153
194
  *
@@ -165,7 +206,8 @@ export declare class PodDatabase<TSchema extends Record<string, unknown> = Recor
165
206
  * )
166
207
  * ```
167
208
  */
168
- updateByIri<TTable extends PodTable<any>>(table: TTable, iri: string, data: Partial<Omit<InferTableData<TTable>, '@id' | 'id'>>): Promise<InferTableData<TTable> | null>;
209
+ updateByIri<TTable extends PodTable>(table: TTable, iri: string, data: Partial<Omit<InferTableData<TTable>, '@id' | 'id'>>): Promise<InferTableData<TTable> | null>;
210
+ updateByLocator<TTable extends PodTable>(table: TTable, locator: EntityLocator, data: Partial<Omit<InferTableData<TTable>, '@id' | 'id'>>): Promise<InferTableData<TTable> | null>;
169
211
  /**
170
212
  * 通过完整 IRI 删除单个实体
171
213
  *
@@ -181,7 +223,8 @@ export declare class PodDatabase<TSchema extends Record<string, unknown> = Recor
181
223
  * )
182
224
  * ```
183
225
  */
184
- deleteByIri<TTable extends PodTable<any>>(table: TTable, iri: string): Promise<boolean>;
226
+ deleteByIri<TTable extends PodTable>(table: TTable, iri: string): Promise<boolean>;
227
+ deleteByLocator<TTable extends PodTable>(table: TTable, locator: EntityLocator): Promise<boolean>;
185
228
  transaction<T>(transaction: (tx: PodDatabase<TSchema>) => Promise<T>): Promise<T>;
186
229
  getDialect(): PodDialect;
187
230
  getSession(): PodAsyncSession;
@@ -222,7 +265,7 @@ export declare class PodDatabase<TSchema extends Record<string, unknown> = Recor
222
265
  * subscription.unsubscribe();
223
266
  * ```
224
267
  */
225
- subscribe<TTable extends PodTable<any>>(table: TTable, options: TableSubscribeOptions): Promise<Subscription>;
268
+ subscribe<TTable extends PodTable>(table: TTable, options: TableSubscribeOptions): Promise<Subscription>;
226
269
  /**
227
270
  * 解析表对应的订阅主题 URL
228
271
  * @param table 表定义
@@ -365,21 +408,22 @@ export declare class PodDatabase<TSchema extends Record<string, unknown> = Recor
365
408
  removeSource(source: string): void;
366
409
  getSources(): string[];
367
410
  addSourcesFromTypeIndex(): Promise<void>;
368
- init<TTable extends PodTable<any>>(tables: TTable | TTable[], options?: InitOptions): Promise<void>;
369
- init<TTable extends PodTable<any>>(...tables: Array<TTable | TTable[]>): Promise<void>;
411
+ init<TColumns extends Record<string, GenericPodColumn>, TTable extends PodTable<TColumns>>(tables: TTable | TTable[], options?: InitOptions): Promise<void>;
412
+ init<TColumns extends Record<string, GenericPodColumn>, TTable extends PodTable<TColumns>>(...tables: Array<TTable | TTable[]>): Promise<void>;
370
413
  private queryProxy?;
371
- get query(): Record<string, any>;
414
+ get query(): QueryProxy<TSchema>;
372
415
  private buildQueryProxy;
373
416
  private eagerLoadWith;
374
417
  private dedupeBySubject;
375
418
  private resolveIdFromRow;
376
419
  private resolveParentKey;
377
420
  private resolveIriFromRow;
378
- private collectReferenceLookupKeys;
379
- private normalizeReferenceValue;
421
+ private collectLinkLookupKeys;
422
+ private normalizeLinkValue;
380
423
  private normalizeLiteralValue;
381
- private collectInverseReferenceValues;
424
+ private collectInverseLinkValues;
382
425
  private groupRowsByIri;
383
426
  private extractFragment;
384
427
  }
428
+ export {};
385
429
  //# sourceMappingURL=pod-database.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pod-database.d.ts","sourceRoot":"","sources":["../../src/core/pod-database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pod-database.d.ts","sourceRoot":"","sources":["../../src/core/pod-database.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,15 @@ const schema_1 = require("./schema");
40
40
  const query_conditions_1 = require("./query-conditions");
41
41
  const notifications_1 = require("./notifications");
42
42
  const federated_1 = require("./federated");
43
+ function isRecord(value) {
44
+ return typeof value === 'object' && value !== null;
45
+ }
46
+ function isPodTable(value) {
47
+ return isRecord(value) && 'columns' in value && 'config' in value;
48
+ }
49
+ function hasStringValue(value) {
50
+ return isRecord(value) && typeof value.value === 'string';
51
+ }
43
52
  class PodDatabase {
44
53
  constructor(dialect, session, schema) {
45
54
  this.dialect = dialect;
@@ -124,9 +133,9 @@ class PodDatabase {
124
133
  if (options.hooks) {
125
134
  table.config.hooks = options.hooks;
126
135
  }
127
- // Store reference to db in table for hook context
136
+ // Store db handle in table for hook context
128
137
  // This allows hooks to access db when invoked
129
- table._db = this;
138
+ Reflect.set(table, '_db', this);
130
139
  return table;
131
140
  }
132
141
  // SELECT 查询
@@ -173,6 +182,42 @@ class PodDatabase {
173
182
  const rows = await builder;
174
183
  return rows.length > 0 ? rows[0] : null;
175
184
  }
185
+ getLocatorTemplate(table) {
186
+ return table.getSubjectTemplate?.() ?? table.config?.subjectTemplate ?? '{id}';
187
+ }
188
+ getRequiredLocatorKeys(table) {
189
+ const template = this.getLocatorTemplate(table);
190
+ const keys = Array.from(template.matchAll(/\{([^}]+)\}/g))
191
+ .map((match) => match[1])
192
+ .filter((key) => key !== 'index');
193
+ return Array.from(new Set(keys));
194
+ }
195
+ resolveLocatorSubject(table, locator, methodName) {
196
+ if (!isRecord(locator) || Array.isArray(locator)) {
197
+ throw new Error(`${methodName} requires a locator object`);
198
+ }
199
+ if ('@id' in locator) {
200
+ throw new Error(`${methodName} does not accept '@id'. Use ${methodName.replace('Locator', 'Iri')}(table, iri) instead.`);
201
+ }
202
+ const idValue = locator.id;
203
+ if (typeof idValue === 'string' && (idValue.startsWith('http://') || idValue.startsWith('https://'))) {
204
+ throw new Error(`${methodName} does not accept a full IRI in locator.id. Use ${methodName.replace('Locator', 'Iri')}(table, iri) instead.`);
205
+ }
206
+ const requiredKeys = this.getRequiredLocatorKeys(table);
207
+ const missingKeys = requiredKeys.filter((key) => locator[key] === undefined || locator[key] === null);
208
+ if (missingKeys.length > 0) {
209
+ const template = this.getLocatorTemplate(table);
210
+ throw new Error(`${methodName} requires a complete locator for subjectTemplate '${template}'. ` +
211
+ `Missing [${missingKeys.join(', ')}]. ` +
212
+ `Use ${methodName.replace('Locator', 'Iri')}(table, iri) when you already have a full IRI.`);
213
+ }
214
+ const resolver = this.dialect.getResolver(table);
215
+ return resolver.resolveSubject(table, locator);
216
+ }
217
+ async findByLocator(table, locator) {
218
+ const iri = this.resolveLocatorSubject(table, locator, 'findByLocator');
219
+ return await this.findByIri(table, iri);
220
+ }
176
221
  /**
177
222
  * 通过完整 IRI 查询单个实体
178
223
  *
@@ -196,14 +241,11 @@ class PodDatabase {
196
241
  if (!iri || typeof iri !== 'string') {
197
242
  throw new Error('findByIri requires a valid IRI string');
198
243
  }
199
- // 解析文档 URL(去掉 fragment)
200
- const { documentUrl } = this.parseIri(iri);
201
- // 用 schema.table(documentUrl) 创建指向目标位置的表
202
- const targetTable = table.$schema.table('target', { base: documentUrl });
203
- // 使用 whereByIri 内部方法
244
+ // 保持原始表上下文,让 subjectTemplate/base 反解保持一致。
245
+ // whereByIri() 已经会把 SELECT 精确定位到目标资源,不需要把表重绑到具体文档。
204
246
  const rows = await this.session
205
247
  .select()
206
- .from(targetTable)
248
+ .from(table)
207
249
  .whereByIri(iri)
208
250
  .limit(1);
209
251
  return (rows[0] ?? null);
@@ -318,18 +360,19 @@ class PodDatabase {
318
360
  if (!iri.startsWith('http://') && !iri.startsWith('https://')) {
319
361
  throw new Error(`updateByIri requires an absolute IRI, got: ${iri}`);
320
362
  }
321
- // 解析文档 URL
322
- const { documentUrl } = this.parseIri(iri);
323
- // 用 schema.table(documentUrl) 创建指向目标位置的表
324
- const targetTable = table.$schema.table('target', { base: documentUrl });
363
+ const updateData = data;
325
364
  // 使用 whereByIri 内部方法进行更新
326
365
  await this.session
327
- .update(targetTable)
328
- .set(data)
366
+ .update(table)
367
+ .set(updateData)
329
368
  .whereByIri(iri);
330
369
  // 返回更新后的数据
331
370
  return await this.findByIri(table, iri);
332
371
  }
372
+ async updateByLocator(table, locator, data) {
373
+ const iri = this.resolveLocatorSubject(table, locator, 'updateByLocator');
374
+ return await this.updateByIri(table, iri, data);
375
+ }
333
376
  /**
334
377
  * 通过完整 IRI 删除单个实体
335
378
  *
@@ -357,16 +400,16 @@ class PodDatabase {
357
400
  if (!existing) {
358
401
  return false;
359
402
  }
360
- // 解析文档 URL
361
- const { documentUrl } = this.parseIri(iri);
362
- // 用 schema.table(documentUrl) 创建指向目标位置的表
363
- const targetTable = table.$schema.table('target', { base: documentUrl });
364
403
  // 使用 whereByIri 内部方法进行删除
365
404
  await this.session
366
- .delete(targetTable)
405
+ .delete(table)
367
406
  .whereByIri(iri);
368
407
  return true;
369
408
  }
409
+ async deleteByLocator(table, locator) {
410
+ const iri = this.resolveLocatorSubject(table, locator, 'deleteByLocator');
411
+ return await this.deleteByIri(table, iri);
412
+ }
370
413
  // 事务支持
371
414
  async transaction(transaction) {
372
415
  return await this.session.transaction(async (txSession) => {
@@ -866,7 +909,7 @@ class PodDatabase {
866
909
  : [];
867
910
  const tableMap = new Map();
868
911
  for (const [key, value] of schemaEntries) {
869
- if (value && typeof value === 'object' && 'columns' in value) {
912
+ if (isPodTable(value)) {
870
913
  tableMap.set(key, value);
871
914
  }
872
915
  }
@@ -933,39 +976,54 @@ class PodDatabase {
933
976
  if (options?.with && Object.keys(options.with).length > 0) {
934
977
  rows = await this.eagerLoadWith(rows, table, options.with, tableMap);
935
978
  }
936
- if (options?.columns) {
937
- rows = rows.map((row) => projectColumns(row, options.columns, options.with));
979
+ const columns = options?.columns;
980
+ if (columns) {
981
+ rows = rows.map((row) => projectColumns(row, columns, options.with));
938
982
  }
939
983
  return rows;
940
984
  };
941
985
  const findMany = (options) => createLazy(() => executeFindMany(options));
986
+ const applyExactOptions = async (row, options) => {
987
+ if (!row) {
988
+ return null;
989
+ }
990
+ let rows = [row];
991
+ if (options?.with && Object.keys(options.with).length > 0) {
992
+ rows = await this.eagerLoadWith(rows, table, options.with, tableMap);
993
+ }
994
+ const columns = options?.columns;
995
+ if (columns) {
996
+ rows = rows.map((item) => projectColumns(item, columns, options.with));
997
+ }
998
+ return (rows[0] ?? null);
999
+ };
942
1000
  const findFirst = (options) => createLazy(async () => {
943
1001
  const rows = await executeFindMany({ ...options, limit: 1 });
944
1002
  return rows[0] ?? null;
945
1003
  });
946
- const findById = (id, options) => createLazy(async () => await findFirst({ ...options, where: { ...(options?.where ?? {}), id } }));
947
1004
  const count = (options) => createLazy(async () => {
948
1005
  const rows = await executeFindMany({ where: options?.where, columns: undefined, limit: undefined, offset: undefined });
949
1006
  return rows.length;
950
1007
  });
951
- const createFindByIRI = () => (iri, _options) => {
952
- void _options;
953
- return createLazy(async () => await this.findByIri(table, iri));
954
- };
1008
+ const createFindByLocator = () => (locator, options) => createLazy(async () => await applyExactOptions(await this.findByLocator(table, locator), options));
1009
+ const createFindByIri = () => (iri, options) => createLazy(async () => await applyExactOptions(await this.findByIri(table, iri), options));
955
1010
  return {
956
1011
  findMany,
957
1012
  findFirst,
958
- findById,
959
- /** @deprecated Use db.findByIri(table, iri) instead */
960
- findByIRI: createFindByIRI(),
1013
+ findByLocator: createFindByLocator(),
1014
+ findByIri: createFindByIri(),
961
1015
  count
962
1016
  };
963
1017
  };
964
1018
  const proxyTarget = {};
965
1019
  return new Proxy(proxyTarget, {
966
1020
  get: (_, prop) => {
967
- if (tableMap.has(prop)) {
968
- return createHelper(prop, tableMap.get(prop));
1021
+ if (typeof prop !== 'string') {
1022
+ return undefined;
1023
+ }
1024
+ const table = tableMap.get(prop);
1025
+ if (table) {
1026
+ return createHelper(prop, table);
969
1027
  }
970
1028
  return undefined;
971
1029
  }
@@ -1022,29 +1080,29 @@ class PodDatabase {
1022
1080
  const candidateColumns = relationDef?.fields && relationDef.fields.length > 0
1023
1081
  ? relationDef.fields
1024
1082
  : Object.values(targetPodTable.columns ?? {});
1025
- const matchesParentReference = (col) => Boolean(col && (col.options?.referenceTarget === parentTable.config.type ||
1026
- col.options?.referenceTable === parentTable ||
1027
- col.getReferenceTable?.() === parentTable));
1028
- const matchesTargetReference = (col) => Boolean(col && (col.options?.referenceTarget === targetType ||
1029
- col.options?.referenceTable === targetPodTable ||
1030
- col.getReferenceTable?.() === targetPodTable));
1031
- const referenceColumns = relationDef?.fields && relationDef.fields.length > 0
1083
+ const matchesParentLink = (col) => Boolean(col && (col.options?.linkTarget === parentTable.config.type ||
1084
+ col.options?.linkTable === parentTable ||
1085
+ col.getLinkTable?.() === parentTable));
1086
+ const matchesTargetLink = (col) => Boolean(col && (col.options?.linkTarget === targetType ||
1087
+ col.options?.linkTable === targetPodTable ||
1088
+ col.getLinkTable?.() === targetPodTable));
1089
+ const linkColumns = relationDef?.fields && relationDef.fields.length > 0
1032
1090
  ? candidateColumns
1033
- : candidateColumns.filter((col) => matchesParentReference(col) && !col.isInverse?.());
1034
- if (referenceColumns.length === 0) {
1035
- const relationReferences = relationDef?.references ?? [];
1036
- const explicitInverse = relationReferences.filter((col) => Boolean(col &&
1091
+ : candidateColumns.filter((col) => matchesParentLink(col) && !col.isInverse?.());
1092
+ if (linkColumns.length === 0) {
1093
+ const relationReferenceFields = relationDef?.references ?? [];
1094
+ const explicitInverse = relationReferenceFields.filter((col) => Boolean(col &&
1037
1095
  typeof col.isInverse === 'function' &&
1038
1096
  col.isInverse() &&
1039
- matchesTargetReference(col)));
1097
+ matchesTargetLink(col)));
1040
1098
  const parentColumns = Object.values(parentTable.columns ?? {});
1041
1099
  const inverseCandidates = (explicitInverse.length > 0 ? explicitInverse : parentColumns).filter((col) => typeof col.isInverse === 'function' &&
1042
1100
  col.isInverse() &&
1043
- matchesTargetReference(col));
1101
+ matchesTargetLink(col));
1044
1102
  if (inverseCandidates.length === 0) {
1045
1103
  continue;
1046
1104
  }
1047
- const inverseValuesPerRow = dedupedRows.map((row) => this.collectInverseReferenceValues(row, inverseCandidates));
1105
+ const inverseValuesPerRow = dedupedRows.map((row) => this.collectInverseLinkValues(row, inverseCandidates));
1048
1106
  const uniqueIris = Array.from(new Set(inverseValuesPerRow
1049
1107
  .flat()
1050
1108
  .filter((iri) => typeof iri === 'string' && iri.length > 0)));
@@ -1071,17 +1129,17 @@ class PodDatabase {
1071
1129
  });
1072
1130
  continue;
1073
1131
  }
1074
- const refColumn = referenceColumns[0];
1075
- const referenceColumn = relationDef?.references && relationDef.references[0];
1076
- const useReferenceIri = refColumn.isReference();
1132
+ const refColumn = linkColumns[0];
1133
+ const linkColumn = relationDef?.references && relationDef.references[0];
1134
+ const useLinkIri = refColumn.isLink();
1077
1135
  const parentKeys = dedupedRows
1078
- .map((row) => this.resolveParentKey(row, referenceColumn, useReferenceIri))
1136
+ .map((row) => this.resolveParentKey(row, linkColumn, useLinkIri))
1079
1137
  .filter((value) => typeof value === 'string' && value.length > 0);
1080
1138
  if (parentKeys.length === 0) {
1081
1139
  continue;
1082
1140
  }
1083
1141
  let childBuilder = this.session.select().from(targetPodTable);
1084
- if (useReferenceIri) {
1142
+ if (useLinkIri) {
1085
1143
  childBuilder = childBuilder.where((0, query_conditions_1.inArray)(refColumn, parentKeys));
1086
1144
  }
1087
1145
  else {
@@ -1091,9 +1149,10 @@ class PodDatabase {
1091
1149
  const grouped = new Map();
1092
1150
  for (const child of childRows) {
1093
1151
  const fkValue = child[refColumn.name];
1094
- const lookupKeys = useReferenceIri
1095
- ? this.collectReferenceLookupKeys(fkValue)
1096
- : (this.normalizeLiteralValue(fkValue) ? [this.normalizeLiteralValue(fkValue)] : []);
1152
+ const normalizedFkValue = this.normalizeLiteralValue(fkValue);
1153
+ const lookupKeys = useLinkIri
1154
+ ? this.collectLinkLookupKeys(fkValue)
1155
+ : (normalizedFkValue ? [normalizedFkValue] : []);
1097
1156
  for (const lookupKey of lookupKeys) {
1098
1157
  const arr = grouped.get(lookupKey) ?? [];
1099
1158
  arr.push(child);
@@ -1101,12 +1160,12 @@ class PodDatabase {
1101
1160
  }
1102
1161
  }
1103
1162
  dedupedRows.forEach((row) => {
1104
- const parentKeys = useReferenceIri
1163
+ const parentKeys = useLinkIri
1105
1164
  ? Array.from(new Set([
1106
- this.resolveParentKey(row, referenceColumn, true),
1165
+ this.resolveParentKey(row, linkColumn, true),
1107
1166
  this.resolveIdFromRow(row),
1108
1167
  ].filter((value) => typeof value === 'string' && value.length > 0)))
1109
- : [this.resolveParentKey(row, referenceColumn, false)].filter((value) => typeof value === 'string' && value.length > 0);
1168
+ : [this.resolveParentKey(row, linkColumn, false)].filter((value) => typeof value === 'string' && value.length > 0);
1110
1169
  const related = [];
1111
1170
  for (const parentKey of parentKeys) {
1112
1171
  const matches = grouped.get(parentKey) ?? [];
@@ -1137,6 +1196,9 @@ class PodDatabase {
1137
1196
  continue;
1138
1197
  }
1139
1198
  const target = merged.get(key);
1199
+ if (!target) {
1200
+ continue;
1201
+ }
1140
1202
  for (const [col, value] of Object.entries(row)) {
1141
1203
  if (value === undefined)
1142
1204
  continue;
@@ -1156,7 +1218,9 @@ class PodDatabase {
1156
1218
  target[col] = mergedArr.length === 1 ? mergedArr[0] : mergedArr;
1157
1219
  }
1158
1220
  }
1159
- return order.map((key) => merged.get(key));
1221
+ return order
1222
+ .map((key) => merged.get(key))
1223
+ .filter((row) => row !== undefined);
1160
1224
  }
1161
1225
  resolveIdFromRow(row) {
1162
1226
  if (!row)
@@ -1170,12 +1234,12 @@ class PodDatabase {
1170
1234
  }
1171
1235
  return undefined;
1172
1236
  }
1173
- resolveParentKey(row, referenceColumn, useReferenceIri) {
1174
- if (referenceColumn) {
1175
- const value = row[referenceColumn.name];
1176
- return useReferenceIri ? this.normalizeReferenceValue(value) : this.normalizeLiteralValue(value);
1237
+ resolveParentKey(row, linkColumn, useLinkIri) {
1238
+ if (linkColumn) {
1239
+ const value = row[linkColumn.name];
1240
+ return useLinkIri ? this.normalizeLinkValue(value) : this.normalizeLiteralValue(value);
1177
1241
  }
1178
- return useReferenceIri ? this.resolveIriFromRow(row) : this.resolveIdFromRow(row);
1242
+ return useLinkIri ? this.resolveIriFromRow(row) : this.resolveIdFromRow(row);
1179
1243
  }
1180
1244
  resolveIriFromRow(row) {
1181
1245
  if (!row)
@@ -1188,9 +1252,9 @@ class PodDatabase {
1188
1252
  }
1189
1253
  return undefined;
1190
1254
  }
1191
- collectReferenceLookupKeys(value) {
1255
+ collectLinkLookupKeys(value) {
1192
1256
  const keys = [];
1193
- const normalized = this.normalizeReferenceValue(value) ?? this.normalizeLiteralValue(value);
1257
+ const normalized = this.normalizeLinkValue(value) ?? this.normalizeLiteralValue(value);
1194
1258
  if (normalized) {
1195
1259
  keys.push(normalized);
1196
1260
  const fragment = this.extractFragment(normalized);
@@ -1200,13 +1264,13 @@ class PodDatabase {
1200
1264
  }
1201
1265
  return keys;
1202
1266
  }
1203
- normalizeReferenceValue(value) {
1267
+ normalizeLinkValue(value) {
1204
1268
  if (!value)
1205
1269
  return undefined;
1206
1270
  if (typeof value === 'string') {
1207
1271
  return value;
1208
1272
  }
1209
- if (typeof value === 'object' && typeof value.value === 'string') {
1273
+ if (hasStringValue(value)) {
1210
1274
  return value.value;
1211
1275
  }
1212
1276
  return undefined;
@@ -1218,12 +1282,12 @@ class PodDatabase {
1218
1282
  if (typeof value === 'string') {
1219
1283
  return value;
1220
1284
  }
1221
- if (typeof value === 'object' && typeof value.value === 'string') {
1285
+ if (hasStringValue(value)) {
1222
1286
  return value.value;
1223
1287
  }
1224
1288
  return undefined;
1225
1289
  }
1226
- collectInverseReferenceValues(row, columns) {
1290
+ collectInverseLinkValues(row, columns) {
1227
1291
  if (!columns.length) {
1228
1292
  return [];
1229
1293
  }
@@ -1234,7 +1298,7 @@ class PodDatabase {
1234
1298
  continue;
1235
1299
  }
1236
1300
  const appendValue = (entry) => {
1237
- const normalized = this.normalizeReferenceValue(entry) ?? (typeof entry === 'string' ? entry : undefined);
1301
+ const normalized = this.normalizeLinkValue(entry) ?? (typeof entry === 'string' ? entry : undefined);
1238
1302
  if (normalized) {
1239
1303
  collected.push(normalized);
1240
1304
  }
@@ -1251,8 +1315,8 @@ class PodDatabase {
1251
1315
  groupRowsByIri(rows) {
1252
1316
  const grouped = new Map();
1253
1317
  for (const row of rows) {
1254
- const iri = this.normalizeReferenceValue(row['@id']) ??
1255
- this.normalizeReferenceValue(row.uri) ??
1318
+ const iri = this.normalizeLinkValue(row['@id']) ??
1319
+ this.normalizeLinkValue(row.uri) ??
1256
1320
  (typeof row['@id'] === 'string' ? row['@id'] : undefined);
1257
1321
  if (!iri) {
1258
1322
  continue;