@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
@@ -392,7 +392,7 @@ npm test
392
392
  - [CSS Notifications](./docs/guides/css-notifications.md) - 实时通知支持(79KB)
393
393
 
394
394
  ### 开发指南
395
- - [测试策略](./TESTING_STRATEGY.md) - 测试方法和覆盖
395
+ - [测试指南](./docs/guides/testing.md) - 当前测试方法、分层和验证要求
396
396
  - [快速开始](./docs/quick-start-local.md) - 本地开发入门
397
397
  - [文档索引](./docs/README.md) - 完整文档导航
398
398
 
package/README.md CHANGED
@@ -1,123 +1,103 @@
1
1
  # drizzle-solid
2
2
 
3
- `drizzle-solid` is a Drizzle-aligned adapter for application-owned data in Solid Pods.
3
+ `drizzle-solid` is a Drizzle-aligned data layer for application-owned data in Solid Pods.
4
4
 
5
- It helps you define typed models, map them to RDF resources/documents/IRIs, and read or write them with a familiar query builder — without pretending Solid is a relational database.
5
+ 这次变化的重点不是强迫你把构造函数名字从 `drizzle()` 换成别的东西,而是把语义讲清楚:
6
6
 
7
- The library is intentionally **document-first**, **IRI-native**, **Pod-aware**, and **SPARQL-native**.
7
+ - `table` 更接近 **resource layout / collection definition**
8
+ - `link` 字段更接近 **RDF link / IRI link**
9
+ - 实体最终身份更接近 **IRI / @id**,而不只是本地主键
10
+ - 读取和写入不再默认共享 SQL 式语义
8
11
 
9
- ## What it helps with
12
+ ## Scope
10
13
 
11
- - Defining typed application data for Solid Pods
12
- - Mapping fields to RDF predicates and resource layouts
13
- - Using a Drizzle-style CRUD/query builder over Pod data
14
- - Performing exact entity operations through full IRIs
15
- - Building discovery, federation, and notification flows on top of Solid-native storage
14
+ Current v1 solves one problem well:
16
15
 
17
- ## Design principles
16
+ - persist application-owned data into Solid Pods with typed schemas
17
+ - keep Pod layout explicit through `base` and `subjectTemplate`
18
+ - make full IRIs part of the public API instead of hiding them behind local-only IDs
19
+ - give Drizzle users a migration-friendly surface without pretending Solid is a SQL database
20
+ - support adjacent Solid flows such as discovery, notifications, and federation where they fit the Pod model
18
21
 
19
- - **Document-first**: model around Solid resources and document boundaries
20
- - **IRI-native**: treat IRIs as first-class identity, not as an afterthought over local IDs
21
- - **Pod-aware**: keep resource layout, links, network, and access constraints explicit
22
- - **Drizzle-aligned**: stay close to Drizzle's builder surface and ergonomics where it makes sense
23
- - **SPARQL-native**: the native query model is SPARQL/Solid, not SQL emulation
22
+ Not in v1:
24
23
 
25
- ## What it is
26
-
27
- - A typed persistence layer for application-owned data in Solid Pods
28
- - A Drizzle-style API surface over RDF resources and documents
29
- - A practical bridge for teams migrating Drizzle mental models into Solid-native data flows
30
-
31
- ## What it isn't
32
-
33
- - Not a general-purpose SQL ORM
34
- - Not a universal abstraction over arbitrary RDF on the open web
35
- - Not a graph database or SPARQL engine replacement
36
- - Not a black box that hides Pod boundaries, permissions, or network behavior
37
- - Not a promise that every SQL/driver-specific Drizzle feature maps cleanly to Solid
38
-
39
- ## Core concepts
40
-
41
- ### Resource
42
-
43
- A resource is the persisted unit in a Pod, usually a Turtle or JSON-LD document addressed by URL.
44
-
45
- ### Document
46
-
47
- A document may contain one entity or many entities. Document layout is part of application design, not an implementation detail.
48
-
49
- ### Entity
50
-
51
- An entity is a typed RDF subject stored in a document. It is closer to a linked-data subject than to a relational row.
24
+ - full SQL/database feature parity
25
+ - raw SQL as the primary abstraction
26
+ - hiding Pod boundaries, permissions, or network behavior
27
+ - implicit scan-based `updateMany/deleteMany` on backends that do not support set-based mutation
28
+ - universal querying over arbitrary open-world RDF as the main goal
52
29
 
53
- ### IRI
30
+ ## Constructor Choice
54
31
 
55
- IRIs are native identity. `drizzle-solid` keeps the full subject IRI available and provides explicit IRI APIs for exact operations.
32
+ 仓库文档与 examples 默认先用 `pod(session, config?)` 讲主线语义:
56
33
 
57
- ### Link
34
+ - `pod(session, config?)`
35
+ - `drizzle(session, config?)`
58
36
 
59
- Links between entities are represented as IRIs and may cross documents or Pods.
37
+ 建议这样理解:
60
38
 
61
- ### Model
39
+ - `pod()` 是语义优先的正式入口,方便把 API 组织成 `collection()` / `entity()` / `bind()`
40
+ - `drizzle()` 是同一运行时上的 Drizzle-aligned 入口,适合迁移或保留 builder/query 代码形状
41
+ - 重要的不是“入口名”,而是下面这些语义:`base`、`subjectTemplate`、`IRI`、exact-target mutation
62
42
 
63
- `drizzle-solid` supports two modeling styles:
43
+ ## Public Surface
64
44
 
65
- - `podTable(...)`: schema plus concrete storage location
66
- - `solidSchema(...)` + `db.createTable(...)`: reusable schema separated from where data is stored
45
+ 当前公开表面可以分成两层:
67
46
 
68
- ### Pod client
47
+ ### Semantic-first surface
69
48
 
70
- `drizzle(session)` creates the database client bound to an authenticated Solid session.
49
+ - `pod(session, config?)`
50
+ - `client.bind(schema, options)`
51
+ - `client.collection(table)`
52
+ - `client.entity(table, iri)`
53
+ - `client.sparql(query)`
71
54
 
72
- ## Modeling vs persistence
55
+ ### Drizzle-aligned surface
73
56
 
74
- A Solid application usually needs to answer two different questions:
57
+ - `drizzle(session, config?)`
58
+ - `podTable(name, columns, config)`
59
+ - `solidSchema(...)`
60
+ - `select / insert / update / delete`
61
+ - `db.query.*` read facade
75
62
 
76
- 1. **What is the shape of my data?**
77
- 2. **Where does that data live in Pods?**
63
+ ## Install
78
64
 
79
- `drizzle-solid` keeps those concerns explicit.
65
+ ```bash
66
+ yarn add @undefineds.co/drizzle-solid drizzle-orm
67
+ # optional, when your app wants the default SPARQL client engine
68
+ yarn add @comunica/query-sparql-solid
69
+ ```
80
70
 
81
- - Use `podTable(...)` when your app owns the storage location and you want one place to define shape + location.
82
- - Use `solidSchema(...)` when the same schema should be reused across different Pod locations, profiles, or discovered data sources.
83
- - Use `db.createTable(schema, { base, ... })` when you want to bind a reusable schema to a concrete place at runtime.
71
+ ```bash
72
+ npm install @undefineds.co/drizzle-solid drizzle-orm
73
+ npm install @comunica/query-sparql-solid
74
+ ```
84
75
 
85
- This keeps Solid's persistence model visible instead of flattening everything into table-only abstractions.
76
+ `@comunica/query-sparql-solid` is an optional peer dependency.
86
77
 
87
- ## Why document-first
78
+ Install it in the consuming app when you need built-in SPARQL query execution or direct SPARQL workflows.
88
79
 
89
- Solid stores data in resources, not in tables.
80
+ Without a SPARQL endpoint or index, plain-LDP document mode is limited to exact-target access (`findByLocator` / `findByIri` and the matching update/delete APIs). Collection queries are not implicitly expanded into scans.
90
81
 
91
- That means application design starts with questions like:
82
+ Current public compatibility stance:
92
83
 
93
- - which entities belong in the same document
94
- - which entities should be split into separate resources
95
- - which resources should be public, private, or shared
96
- - how links should work across documents and Pods
84
+ - officially supported: `@comunica/query-sparql-solid` `4.x`
85
+ - not currently in the supported matrix: `3.x`
97
86
 
98
- `drizzle-solid` follows that reality. It provides a structured API, but keeps resource identity and document layout as part of the model.
87
+ If another in-process runtime already carries Comunica (for example `xpod`), inject that engine instead of forcing a second copy. See `docs/api/README.md` and `docs/guides/installation.md`.
99
88
 
100
89
  ## Quick start
101
90
 
102
- ### Install
103
-
104
- ```bash
105
- yarn add @undefineds.co/drizzle-solid
106
- # or
107
- npm install @undefineds.co/drizzle-solid
108
- ```
109
-
110
- > In this repository, the examples import `drizzle-solid` through a local TypeScript path alias. In external applications, import the published package name: `@undefineds.co/drizzle-solid`.
91
+ 仓库里的主线 quick start 默认使用 `pod(session)`,因为它会把 `collection()` / `entity()` / `bind()` 语义直接写在代码里。
111
92
 
112
- ### Define a model and run CRUD
93
+ 如果你已有大量 Drizzle 风格代码,`drizzle(session)` 仍然是正式可用入口。
113
94
 
114
95
  ```ts
115
96
  import {
116
- drizzle,
97
+ pod,
117
98
  podTable,
118
99
  string,
119
100
  datetime,
120
- eq,
121
101
  } from '@undefineds.co/drizzle-solid';
122
102
 
123
103
  const posts = podTable('posts', {
@@ -131,115 +111,100 @@ const posts = podTable('posts', {
131
111
  type: 'http://schema.org/CreativeWork',
132
112
  });
133
113
 
134
- const db = drizzle(session);
135
- await db.init([posts]);
114
+ const client = pod(session);
115
+ await client.init(posts);
136
116
 
137
- await db.insert(posts).values({
117
+ const postsCollection = client.collection(posts);
118
+
119
+ const created = await postsCollection.create({
138
120
  id: 'post-1',
139
121
  title: 'Hello Solid',
140
122
  content: 'Stored as RDF in a Pod document.',
141
123
  createdAt: new Date(),
142
124
  });
143
125
 
144
- const rows = await db.select()
145
- .from(posts)
146
- .where(eq(posts.id, 'post-1'));
126
+ const first = await postsCollection.first({
127
+ where: { id: 'post-1' },
128
+ });
147
129
 
148
- await db.update(posts)
149
- .set({ title: 'Updated title' })
150
- .where(eq(posts.id, 'post-1'));
130
+ const postIri = created?.['@id'] ?? postsCollection.iriFor({
131
+ id: 'post-1',
132
+ title: 'Hello Solid',
133
+ content: 'Stored as RDF in a Pod document.',
134
+ createdAt: new Date(),
135
+ });
151
136
 
152
- await db.delete(posts)
153
- .where(eq(posts.id, 'post-1'));
137
+ const post = client.entity(posts, postIri);
138
+ await post.update({ title: 'Updated title' });
139
+ await post.delete();
154
140
  ```
155
141
 
156
- ### Reusable schema + runtime binding
142
+ > 如果你保持 `drizzle(session)` 作为入口,语义并不会变:`base`、`subjectTemplate`、`IRI`、精确写目标这些约束仍然完全成立。
157
143
 
158
- ```ts
159
- import {
160
- drizzle,
161
- solidSchema,
162
- id,
163
- string,
164
- } from '@undefineds.co/drizzle-solid';
144
+ ## Reusable schema + runtime binding
165
145
 
166
- const profileSchema = solidSchema({
167
- id: id(),
168
- name: string('name').predicate('http://xmlns.com/foaf/0.1/name'),
169
- bio: string('bio').predicate('http://schema.org/description'),
170
- }, {
171
- type: 'http://xmlns.com/foaf/0.1/Person',
146
+ Use `solidSchema(...)` when you want to separate the reusable data shape from where that data lives in a Pod.
147
+
148
+ 如果你使用 `pod()` façade:
149
+
150
+ ```ts
151
+ const client = pod(session);
152
+ const profileTable = client.bind(profileSchema, {
153
+ base: 'https://alice.example/profile/card',
172
154
  });
155
+ ```
173
156
 
174
- const db = drizzle(session);
157
+ 如果你保持 `drizzle()` 入口:
175
158
 
159
+ ```ts
160
+ const db = drizzle(session);
176
161
  const profileTable = db.createTable(profileSchema, {
177
162
  base: 'https://alice.example/profile/card',
178
163
  });
179
164
  ```
180
165
 
181
- ## Exact IRI operations
166
+ ## Identity and placement
182
167
 
183
- For detail-page flows, remote links, shared resources, or exact mutation targets, use the IRI APIs:
168
+ `subjectTemplate` defines how application identity maps onto Pod resources.
184
169
 
185
- - `db.findByIri(table, iri)`
186
- - `db.updateByIri(table, iri, data)`
187
- - `db.deleteByIri(table, iri)`
188
- - `db.subscribeByIri(table, iri, options)`
170
+ Common patterns:
189
171
 
190
- ```ts
191
- const agent = await db.findByIri(agentTable, 'https://alice.example/data/agents.ttl#assistant');
192
-
193
- await db.updateByIri(
194
- agentTable,
195
- 'https://alice.example/data/agents.ttl#assistant',
196
- { description: 'Updated through explicit IRI' },
197
- );
198
-
199
- await db.deleteByIri(
200
- agentTable,
201
- 'https://alice.example/data/agents.ttl#assistant',
202
- );
203
- ```
172
+ - `#{id}`: many entities inside one document
173
+ - `{id}.ttl`: one document per entity
174
+ - `{id}.ttl#it`: one document per entity with stable in-document fragment
175
+ - `{chatId}/messages.ttl#{id}`: multi-variable layouts and partitioned resources
204
176
 
205
- ## Subject templates and identity
177
+ If a layout uses multiple template variables, exact lookup is only exact when all required locator variables are present, or when you already hold the full IRI.
206
178
 
207
- `subjectTemplate` controls how record identity maps to Pod resources.
179
+ 这不是命名细节,而是持久化语义本身。
208
180
 
209
- Common patterns:
181
+ ## Type hierarchy
210
182
 
211
- - `#{id}`: fragment mode, many entities in one RDF file
212
- - `{id}.ttl`: document mode, one file per entity
213
- - `{id}.ttl#it`: document mode with stable in-document fragment
214
- - `{chatId}/{yyyy}/{MM}/{dd}/messages.ttl#{id}`: multi-variable, date-partitioned layouts
183
+ Class hierarchy and instance typing are not the same thing.
215
184
 
216
- Example:
185
+ - `type` is the primary persisted `rdf:type` for an entity
186
+ - `subClassOf` expresses schema / vocabulary hierarchy
187
+ - by default, persisted instance data should keep one most-specific, authoritative `rdf:type`
188
+ - do not persist both a base/table type and a business subtype on the same entity unless they carry genuinely different semantics
189
+ - do not introduce parallel string-based type systems when the meaning is already carried by RDF class membership
190
+ - if parent types must be materialized for no-inference environments, treat that as an explicit compatibility mode rather than the default stored shape
217
191
 
218
- ```ts
219
- const Message = podTable('Message', {
220
- id: string('id').primaryKey(),
221
- chatId: string('chatId').predicate('http://example.org/chatId'),
222
- content: string('content').predicate('http://schema.org/text'),
223
- timestamp: datetime('timestamp').predicate('http://schema.org/dateCreated'),
224
- }, {
225
- base: 'https://alice.example/data/chats/',
226
- subjectTemplate: '{chatId}/messages.ttl#{id}',
227
- type: 'http://schema.org/Message',
228
- });
229
- ```
192
+ ## Exact-target mutation semantics
230
193
 
231
- For reads, the library can often work from:
194
+ Reads and writes do not intentionally behave the same way.
232
195
 
233
- - a full IRI
234
- - all template variables
235
- - a narrower partial condition that scans a smaller bounded area
196
+ - list / filter reads can stay collection-oriented
197
+ - writes should prefer exact-target semantics
198
+ - if an API path semantically requires exact-target resolution, it should remain exact or fail explicitly; do not silently widen it into scan-style execution
199
+ - incomplete `where(...)` information should not silently degrade into scan + mutate
200
+ - if a subject can only be resolved by multiple template variables, mutation should use an explicit IRI or provide all required variables
201
+ - join on a multi-variable target should also provide all required locator variables, or join via full IRI values
202
+ - do not silently degrade unresolved multi-variable joins into scan-style fallback
236
203
 
237
- Read-path and write-path semantics are intentionally different:
204
+ 所以最重要的变化不是“要不要换成 `pod()`”,而是:
238
205
 
239
- - **Read queries** (`select`, `db.query.*`) may use partial template information for list/filter flows when the resolver can keep the scan bounded.
240
- - **Mutations** (`update`, `delete`) require deterministic targets by default. If `where()` cannot uniquely resolve the subject from the template, the dialect throws and tells you to use `updateByIri()` / `deleteByIri()` (or to provide the missing template variables).
241
- - **No implicit scan-based `updateMany/deleteMany` fallback** is performed on backends that do not natively support set-based mutation.
242
- - **Capability-based enhancement**: if a backend explicitly supports filter-based multi-row mutation in the future (for example, an xpod capability), `drizzle-solid` can expose that path there without pretending every Solid server supports it.
206
+ - 什么时候你只是在做集合读取
207
+ - 什么时候你已经需要一个确定的实体目标
243
208
 
244
209
  ## Server support
245
210
 
@@ -247,118 +212,68 @@ Read-path and write-path semantics are intentionally different:
247
212
 
248
213
  | Capability | Community Solid Server | xpod |
249
214
  | --- | --- | --- |
250
- | Basic CRUD | ✅ LDP mode | ✅ LDP mode |
251
- | SPARQL SELECT pushdown | Client-side / resolver-driven | ✅ `/-/sparql` sidecar |
252
- | SPARQL UPDATE | ⚠️ Limited / write path stays LDP-oriented | ✅ Better server-side support |
253
- | Filter / aggregation pushdown | Fallbacks and client execution | ✅ Single-Pod pushdown |
215
+ | Basic CRUD | ✅ | ✅ |
216
+ | Document notifications | | ✅ |
217
+ | Drizzle-style read facade | | ✅ |
218
+ | SPARQL pushdown | ⚠️ Limited / often client-assisted | ✅ Better in-process support |
219
+ | Filter / aggregation pushdown | ❌ Mostly fallback execution | ✅ Better server-side support |
254
220
  | Federated queries | ⚠️ Client-side federation | ⚠️ Client-side federation |
255
- | Notifications | | ✅ |
256
- | In-process test runtime | ⚠️ External CSS setup | ✅ via `@undefineds.co/xpod` |
257
-
258
- ### Community Solid Server (CSS)
259
-
260
- On plain CSS, `drizzle-solid` keeps working, but many queries are resolved through client-side execution and Solid-aware fallbacks. This is the compatibility baseline.
261
-
262
- ### xpod
221
+ | In-process local runtime | ⚠️ External setup | ✅ via `@undefineds.co/xpod` |
263
222
 
264
- `xpod` adds a Solid-compatible SPARQL sidecar and is the recommended development/runtime target when you want stronger query pushdown and a lower-friction local setup.
265
-
266
- See `docs/xpod-features.md` for more detail.
223
+ If `xpod` already ships its own Comunica stack, `drizzle-solid` can reuse that copy instead of requiring another app-level install.
267
224
 
268
225
  ## Verified examples
269
226
 
270
- The canonical examples in `examples/` are verified in the test suite.
271
-
272
- - `examples/01-quick-start.ts` — CRUD quick start
273
- - `examples/02-relational-query.ts` — relational query API surface
274
- - `examples/03-zero-config-discovery.ts` — zero-config discovery flow
275
- - `examples/04-notifications.ts` — Solid notifications
276
- - `examples/05-data-discovery.ts` — discovery API
277
- - `examples/06-federated-query.ts` — federated query across Pods
278
- - `examples/07-hooks-and-profile.ts` — hooks and profile management
279
- - `examples/08-iri-based-operations.ts` — explicit IRI operations
280
- - `examples/08-schema-inheritance.ts` — schema inheritance
281
- - `examples/09-multi-variable-templates.ts` — multi-variable subject templates
282
-
283
- The example manifest lives at `examples/manifest.json`, and the integration verification lives at `tests/integration/css/examples-verification.test.ts`.
284
-
285
- ## Query surface and SQL scope
286
-
287
- `drizzle-solid` aims to stay close to Drizzle's public builder surface where that maps cleanly to Solid.
227
+ The canonical examples in `examples/` are part of the real integration verification flow:
288
228
 
289
- Current supported surface includes:
229
+ - `examples/01-quick-start.ts`
230
+ - `examples/02-relational-query.ts`
231
+ - `examples/03-zero-config-discovery.ts`
232
+ - `examples/04-notifications.ts`
233
+ - `examples/05-data-discovery.ts`
234
+ - `examples/06-federated-query.ts`
235
+ - `examples/07-hooks-and-profile.ts`
236
+ - `examples/08-iri-based-operations.ts`
237
+ - `examples/08-schema-inheritance.ts`
238
+ - `examples/09-multi-variable-templates.ts`
290
239
 
291
- - CRUD builders: `select`, `insert`, `update`, `delete`
292
- - Read-oriented query facade: `db.query.*.findMany`, `findFirst`, `findById`, `findByIRI`, `count`
293
- - Conditions: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `like`, `ilike`, `inArray`, `exists`, `and`, `or`, `not`
294
- - Query features: joins, ordering, limits, offsets, distinct
295
- - Aggregations: `count`, `sum`, `avg`, `min`, `max`
296
- - Batch and `returning()` support where implemented by the dialect
297
- - Raw **SPARQL** workflows where you need explicit graph-native control
298
-
299
- Not the mainline contract:
300
-
301
- - raw SQL as the primary abstraction
302
- - transaction semantics identical to SQL databases
303
- - implicit scan-based `updateMany/deleteMany` on backends that do not support set-based mutation
304
- - driver-specific DDL, auto-increment, foreign keys, or SQL engine behaviors
240
+ See `examples/manifest.json` and `tests/integration/css/examples-verification.test.ts`.
305
241
 
306
- The migration goal is API familiarity with low migration cost, but the execution model remains Solid/SPARQL-native rather than semantics-faking SQL emulation.
242
+ ## Migration
307
243
 
308
- ## Discovery, interoperability, and federation
244
+ If you already know `drizzle-orm`, start here:
309
245
 
310
- The library also includes higher-level Solid workflows:
246
+ - `docs/guides/migrating-from-drizzle-orm.md`
311
247
 
312
- - data discovery and interop metadata
313
- - TypeIndex-driven location discovery
314
- - shape-aware table generation
315
- - federated queries across discovered Pod locations
316
- - notifications for resource/entity updates
248
+ 那份指南重点解释的是:
317
249
 
318
- Useful starting points:
250
+ - `table/row` → `resource/document/entity/IRI`
251
+ - `link` / relation fields → RDF link / IRI link
252
+ - `where`-style mutation → exact-target mutation
253
+ - `toSQL()` / raw SQL 主心智 → `toSPARQL()` / SPARQL 主心智
319
254
 
320
- - `docs/guides/data-discovery.md`
321
- - `docs/guides/notifications.md`
322
- - `docs/guides/css-notifications.md`
323
- - `docs/federated-queries.md`
324
- - `docs/guides/multi-variable-templates.md`
255
+ 而不是要求你第一步先改掉构造函数名。
325
256
 
326
257
  ## Documentation map
327
258
 
328
- - `examples/README.md` — curated walkthroughs and runnable examples
329
- - `docs/quick-start-local.md` — local setup guide
259
+ - `docs/api/README.md` — current public API and constructor positioning
260
+ - `docs/guides/installation.md` — installation and SPARQL engine setup
261
+ - `docs/guides/migrating-from-drizzle-orm.md` — migration guide for Drizzle users
262
+ - `docs/guides/testing.md` — canonical testing policy, verification layers, and execution-path guardrails
263
+ - `docs/guides/context7-and-skills.md` — Context7 publication scope, skills plan, and feedback flow
264
+ - `docs/guides/issue-triage.md` — classify code, docs, tooling, and decision issues
265
+ - `docs/guides/modeling-consensus.md` — when modeling questions require multi-AI consensus instead of a single answer
266
+ - `docs/guides/decisions/README.md` — decision records and the template for stable repo-wide conclusions
267
+ - `skills/README.md` — canonical public skill pack source for future Context7 Skills publishing
268
+ - `examples/README.md` — curated runnable examples
330
269
  - `docs/guides/data-discovery.md` — discovery workflows
331
- - `docs/guides/issue-handling.md` — issue reproduction and regression workflow
332
- - `docs/guides/testing.md` — test conventions and coverage strategy
333
- - `ACTION-PLAN.md` — current parity and implementation plan
334
-
335
- ## Planned scope
336
-
337
- ### Current direction
338
-
339
- The current focus is:
340
-
341
- - typed models for application-owned Pod data
342
- - explicit document and subject placement
343
- - Drizzle-aligned query ergonomics
344
- - practical CRUD, discovery, federation, and notification flows
345
-
346
- ### Likely next steps
347
-
348
- - better modeling ergonomics around reusable schemas and links
349
- - clearer guidance around multi-resource layouts and identity strategies
350
- - continued Drizzle parity on Solid-relevant behaviors
351
- - stronger documentation around Solid-native tradeoffs and migration paths
352
-
353
- ### Out of scope
354
-
355
- - hiding Solid behind a fake SQL database mental model
356
- - universal querying over arbitrary open-world RDF as the primary goal
357
- - promising full relational/database feature parity where Solid semantics differ
270
+ - `docs/guides/notifications.md` — notification flows
271
+ - `docs/xpod-features.md` — xpod runtime notes
272
+ - `ACTION-PLAN.md` — testing/parity backlog and execution log, not the testing policy
358
273
 
359
274
  ## Contributing
360
275
 
361
- Before contributing:
276
+ Before pushing:
362
277
 
363
278
  ```bash
364
279
  yarn build
@@ -1,9 +1,25 @@
1
1
  import { SQL } from 'drizzle-orm';
2
- import { PodTable } from './schema';
2
+ import { PodColumnBase, PodTable } from './schema';
3
3
  import { SPARQLQuery } from './sparql/types';
4
4
  import { SelectQueryPlan } from './select-plan';
5
+ import { QueryCondition } from './query-conditions';
5
6
  import type { UriResolver } from './uri';
6
7
  export type { SPARQLQuery };
8
+ interface SimpleSelectOperation {
9
+ table: PodTable;
10
+ where?: Record<string, unknown>;
11
+ limit?: number;
12
+ offset?: number;
13
+ orderBy?: Array<{
14
+ column: string;
15
+ direction: 'asc' | 'desc';
16
+ }>;
17
+ distinct?: boolean;
18
+ }
19
+ interface InsertPlanInput {
20
+ table: PodTable;
21
+ rows: Array<Record<string, unknown>>;
22
+ }
7
23
  /**
8
24
  * Table registry context for URI resolution
9
25
  */
@@ -23,35 +39,26 @@ export declare class ASTToSPARQLConverter {
23
39
  private prefixes;
24
40
  constructor(podUrl: string, webId?: string | undefined, uriResolver?: UriResolver);
25
41
  /**
26
- * Set table registry for URI reference resolution
42
+ * Set table registry for URI link resolution
27
43
  */
28
44
  setTableRegistry(tableRegistry: Map<string, PodTable[]>, tableNameRegistry: Map<string, PodTable>, baseUri?: string): void;
29
- convertSelect(ast: any, table: PodTable, targetGraph?: string, fromSources?: string[], allowGraphVariable?: boolean): SPARQLQuery;
30
- buildWhereClauseForCondition(whereAst: any, table: PodTable): string;
45
+ convertSelect(ast: Record<string, unknown>, table: PodTable, targetGraph?: string, fromSources?: string[], allowGraphVariable?: boolean): SPARQLQuery;
46
+ buildWhereClauseForCondition(whereAst: QueryCondition, table: PodTable): string;
31
47
  convertSelectPlan(plan: SelectQueryPlan, targetGraph?: string, fromSources?: string[], allowGraphVariable?: boolean): SPARQLQuery;
32
- convertSimpleSelect(operation: {
33
- table: PodTable;
34
- where?: Record<string, unknown>;
35
- limit?: number;
36
- offset?: number;
37
- orderBy?: Array<{
38
- column: string;
39
- direction: 'asc' | 'desc';
40
- }>;
41
- distinct?: boolean;
42
- }, targetGraph?: string, fromSources?: string[], allowGraphVariable?: boolean): SPARQLQuery;
43
- convertInsert(valuesOrPlan: any[] | {
44
- table: PodTable;
45
- rows: any[];
46
- }, table?: PodTable, targetGraph?: string): SPARQLQuery;
47
- convertUpdate(setData: any, whereConditions: any, table: PodTable, targetGraph?: string): SPARQLQuery;
48
- convertDelete(whereConditions: any, table: PodTable, targetGraph?: string): SPARQLQuery;
48
+ convertSimpleSelect(operation: SimpleSelectOperation, targetGraph?: string, fromSources?: string[], allowGraphVariable?: boolean): SPARQLQuery;
49
+ convertInsert(valuesOrPlan: Array<Record<string, unknown>> | InsertPlanInput, table?: PodTable, targetGraph?: string): SPARQLQuery;
50
+ convertUpdate(setData: Record<string, unknown>, whereConditions: QueryCondition | Record<string, unknown>, table: PodTable, targetGraph?: string): SPARQLQuery;
51
+ convertDelete(whereConditions: QueryCondition | Record<string, unknown>, table: PodTable, targetGraph?: string): SPARQLQuery;
49
52
  getPrefixes(): Record<string, string>;
50
53
  addPrefix(prefix: string, uri: string): void;
51
- getPredicateForColumnPublic(column: any, table: PodTable): string;
52
- formatLiteralValue(value: any, column?: any): string | string[];
53
- generateSubjectUri(record: any, table: PodTable): string;
54
- parseDrizzleAST(sql: SQL, _table?: PodTable): any;
54
+ getPredicateForColumnPublic(column: PodColumnBase | string | Record<string, unknown>, table: PodTable): string;
55
+ formatLiteralValue(value: unknown, column?: PodColumnBase | Record<string, unknown>): string | string[];
56
+ generateSubjectUri(record: Record<string, unknown>, table: PodTable): string;
57
+ parseDrizzleAST(sql: SQL, _table?: PodTable): {
58
+ type: 'select';
59
+ columns: '*';
60
+ where: Record<string, never>;
61
+ };
55
62
  private parseWhereClause;
56
63
  }
57
64
  //# sourceMappingURL=ast-to-sparql.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ast-to-sparql.d.ts","sourceRoot":"","sources":["../../src/core/ast-to-sparql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ast-to-sparql.d.ts","sourceRoot":"","sources":["../../src/core/ast-to-sparql.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@ class ASTToSPARQLConverter {
26
26
  this.expressionBuilder = new expression_builder_1.ExpressionBuilder(this.uriResolver);
27
27
  }
28
28
  /**
29
- * Set table registry for URI reference resolution
29
+ * Set table registry for URI link resolution
30
30
  */
31
31
  setTableRegistry(tableRegistry, tableNameRegistry, baseUri) {
32
32
  this.tableContext = { tableRegistry, tableNameRegistry, baseUri };