contentbase 0.4.0 → 0.4.2

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 (323) hide show
  1. package/dist/adapters/node-fs.d.ts +17 -0
  2. package/dist/adapters/node-fs.d.ts.map +1 -0
  3. package/dist/adapters/node-fs.js +71 -0
  4. package/dist/adapters/node-fs.js.map +1 -0
  5. package/dist/ast-query.d.ts +44 -0
  6. package/dist/ast-query.d.ts.map +1 -0
  7. package/dist/ast-query.js +95 -0
  8. package/dist/ast-query.js.map +1 -0
  9. package/dist/base-model.d.ts +8 -0
  10. package/dist/base-model.d.ts.map +1 -0
  11. package/dist/base-model.js +12 -0
  12. package/dist/base-model.js.map +1 -0
  13. package/dist/cli/commands/action.d.ts +2 -0
  14. package/dist/cli/commands/action.d.ts.map +1 -0
  15. package/dist/cli/commands/action.js +73 -0
  16. package/dist/cli/commands/action.js.map +1 -0
  17. package/dist/cli/commands/api/endpoints/actions.d.ts +13 -0
  18. package/dist/cli/commands/api/endpoints/actions.d.ts.map +1 -0
  19. package/dist/cli/commands/api/endpoints/actions.js +28 -0
  20. package/dist/cli/commands/api/endpoints/actions.js.map +1 -0
  21. package/dist/cli/commands/api/endpoints/doc.d.ts +5 -0
  22. package/dist/cli/commands/api/endpoints/doc.d.ts.map +1 -0
  23. package/dist/cli/commands/api/endpoints/doc.js +186 -0
  24. package/dist/cli/commands/api/endpoints/doc.js.map +1 -0
  25. package/dist/cli/commands/api/endpoints/docs-index.d.ts +8 -0
  26. package/dist/cli/commands/api/endpoints/docs-index.d.ts.map +1 -0
  27. package/dist/cli/commands/api/endpoints/docs-index.js +23 -0
  28. package/dist/cli/commands/api/endpoints/docs-index.js.map +1 -0
  29. package/dist/cli/commands/api/endpoints/document.d.ts +47 -0
  30. package/dist/cli/commands/api/endpoints/document.d.ts.map +1 -0
  31. package/dist/cli/commands/api/endpoints/document.js +146 -0
  32. package/dist/cli/commands/api/endpoints/document.js.map +1 -0
  33. package/dist/cli/commands/api/endpoints/documents.d.ts +35 -0
  34. package/dist/cli/commands/api/endpoints/documents.d.ts.map +1 -0
  35. package/dist/cli/commands/api/endpoints/documents.js +56 -0
  36. package/dist/cli/commands/api/endpoints/documents.js.map +1 -0
  37. package/dist/cli/commands/api/endpoints/index.d.ts +22 -0
  38. package/dist/cli/commands/api/endpoints/index.d.ts.map +1 -0
  39. package/dist/cli/commands/api/endpoints/index.js +38 -0
  40. package/dist/cli/commands/api/endpoints/index.js.map +1 -0
  41. package/dist/cli/commands/api/endpoints/inspect.d.ts +10 -0
  42. package/dist/cli/commands/api/endpoints/inspect.d.ts.map +1 -0
  43. package/dist/cli/commands/api/endpoints/inspect.js +15 -0
  44. package/dist/cli/commands/api/endpoints/inspect.js.map +1 -0
  45. package/dist/cli/commands/api/endpoints/models.d.ts +5 -0
  46. package/dist/cli/commands/api/endpoints/models.d.ts.map +1 -0
  47. package/dist/cli/commands/api/endpoints/models.js +9 -0
  48. package/dist/cli/commands/api/endpoints/models.js.map +1 -0
  49. package/dist/cli/commands/api/endpoints/query.d.ts +40 -0
  50. package/dist/cli/commands/api/endpoints/query.d.ts.map +1 -0
  51. package/dist/cli/commands/api/endpoints/query.js +106 -0
  52. package/dist/cli/commands/api/endpoints/query.js.map +1 -0
  53. package/dist/cli/commands/api/endpoints/root.d.ts +5 -0
  54. package/dist/cli/commands/api/endpoints/root.d.ts.map +1 -0
  55. package/dist/cli/commands/api/endpoints/root.js +7 -0
  56. package/dist/cli/commands/api/endpoints/root.js.map +1 -0
  57. package/dist/cli/commands/api/endpoints/search-reindex.d.ts +10 -0
  58. package/dist/cli/commands/api/endpoints/search-reindex.d.ts.map +1 -0
  59. package/dist/cli/commands/api/endpoints/search-reindex.js +38 -0
  60. package/dist/cli/commands/api/endpoints/search-reindex.js.map +1 -0
  61. package/dist/cli/commands/api/endpoints/search-status.d.ts +7 -0
  62. package/dist/cli/commands/api/endpoints/search-status.d.ts.map +1 -0
  63. package/dist/cli/commands/api/endpoints/search-status.js +33 -0
  64. package/dist/cli/commands/api/endpoints/search-status.js.map +1 -0
  65. package/dist/cli/commands/api/endpoints/search.d.ts +24 -0
  66. package/dist/cli/commands/api/endpoints/search.d.ts.map +1 -0
  67. package/dist/cli/commands/api/endpoints/search.js +61 -0
  68. package/dist/cli/commands/api/endpoints/search.js.map +1 -0
  69. package/dist/cli/commands/api/endpoints/semantic-search.d.ts +28 -0
  70. package/dist/cli/commands/api/endpoints/semantic-search.d.ts.map +1 -0
  71. package/dist/cli/commands/api/endpoints/semantic-search.js +76 -0
  72. package/dist/cli/commands/api/endpoints/semantic-search.js.map +1 -0
  73. package/dist/cli/commands/api/endpoints/text-search.d.ts +17 -0
  74. package/dist/cli/commands/api/endpoints/text-search.d.ts.map +1 -0
  75. package/dist/cli/commands/api/endpoints/text-search.js +55 -0
  76. package/dist/cli/commands/api/endpoints/text-search.js.map +1 -0
  77. package/dist/cli/commands/api/endpoints/validate.d.ts +12 -0
  78. package/dist/cli/commands/api/endpoints/validate.d.ts.map +1 -0
  79. package/dist/cli/commands/api/endpoints/validate.js +27 -0
  80. package/dist/cli/commands/api/endpoints/validate.js.map +1 -0
  81. package/dist/cli/commands/api/helpers.d.ts +8 -0
  82. package/dist/cli/commands/api/helpers.d.ts.map +1 -0
  83. package/dist/cli/commands/api/helpers.js +89 -0
  84. package/dist/cli/commands/api/helpers.js.map +1 -0
  85. package/dist/cli/commands/console.d.ts +2 -0
  86. package/dist/cli/commands/console.d.ts.map +1 -0
  87. package/dist/cli/commands/console.js +117 -0
  88. package/dist/cli/commands/console.js.map +1 -0
  89. package/dist/cli/commands/create.d.ts +2 -0
  90. package/dist/cli/commands/create.d.ts.map +1 -0
  91. package/dist/cli/commands/create.js +185 -0
  92. package/dist/cli/commands/create.js.map +1 -0
  93. package/dist/cli/commands/embed.d.ts +2 -0
  94. package/dist/cli/commands/embed.d.ts.map +1 -0
  95. package/dist/cli/commands/embed.js +231 -0
  96. package/dist/cli/commands/embed.js.map +1 -0
  97. package/dist/cli/commands/export.d.ts +2 -0
  98. package/dist/cli/commands/export.d.ts.map +1 -0
  99. package/dist/cli/commands/export.js +55 -0
  100. package/dist/cli/commands/export.js.map +1 -0
  101. package/dist/cli/commands/extract.d.ts +2 -0
  102. package/dist/cli/commands/extract.d.ts.map +1 -0
  103. package/dist/cli/commands/extract.js +149 -0
  104. package/dist/cli/commands/extract.js.map +1 -0
  105. package/dist/cli/commands/help.d.ts +2 -0
  106. package/dist/cli/commands/help.d.ts.map +1 -0
  107. package/dist/cli/commands/help.js +58 -0
  108. package/dist/cli/commands/help.js.map +1 -0
  109. package/dist/cli/commands/index.d.ts +18 -0
  110. package/dist/cli/commands/index.d.ts.map +1 -0
  111. package/dist/cli/commands/index.js +19 -0
  112. package/dist/cli/commands/index.js.map +1 -0
  113. package/dist/cli/commands/init.d.ts +2 -0
  114. package/dist/cli/commands/init.d.ts.map +1 -0
  115. package/dist/cli/commands/init.js +82 -0
  116. package/dist/cli/commands/init.js.map +1 -0
  117. package/dist/cli/commands/inspect.d.ts +2 -0
  118. package/dist/cli/commands/inspect.d.ts.map +1 -0
  119. package/dist/cli/commands/inspect.js +53 -0
  120. package/dist/cli/commands/inspect.js.map +1 -0
  121. package/dist/cli/commands/mcp.d.ts +2 -0
  122. package/dist/cli/commands/mcp.d.ts.map +1 -0
  123. package/dist/cli/commands/mcp.js +92 -0
  124. package/dist/cli/commands/mcp.js.map +1 -0
  125. package/dist/cli/commands/search.d.ts +2 -0
  126. package/dist/cli/commands/search.d.ts.map +1 -0
  127. package/dist/cli/commands/search.js +212 -0
  128. package/dist/cli/commands/search.js.map +1 -0
  129. package/dist/cli/commands/serve.d.ts +2 -0
  130. package/dist/cli/commands/serve.d.ts.map +1 -0
  131. package/dist/cli/commands/serve.js +298 -0
  132. package/dist/cli/commands/serve.js.map +1 -0
  133. package/dist/cli/commands/summary.d.ts +2 -0
  134. package/dist/cli/commands/summary.d.ts.map +1 -0
  135. package/dist/cli/commands/summary.js +58 -0
  136. package/dist/cli/commands/summary.js.map +1 -0
  137. package/dist/cli/commands/teach.d.ts +2 -0
  138. package/dist/cli/commands/teach.d.ts.map +1 -0
  139. package/dist/cli/commands/teach.js +80 -0
  140. package/dist/cli/commands/teach.js.map +1 -0
  141. package/dist/cli/commands/text-search.d.ts +2 -0
  142. package/dist/cli/commands/text-search.d.ts.map +1 -0
  143. package/dist/cli/commands/text-search.js +125 -0
  144. package/dist/cli/commands/text-search.js.map +1 -0
  145. package/dist/cli/commands/update.d.ts +2 -0
  146. package/dist/cli/commands/update.d.ts.map +1 -0
  147. package/dist/cli/commands/update.js +167 -0
  148. package/dist/cli/commands/update.js.map +1 -0
  149. package/dist/cli/commands/validate.d.ts +2 -0
  150. package/dist/cli/commands/validate.d.ts.map +1 -0
  151. package/dist/cli/commands/validate.js +129 -0
  152. package/dist/cli/commands/validate.js.map +1 -0
  153. package/dist/cli/index.d.ts +3 -0
  154. package/dist/cli/index.d.ts.map +1 -0
  155. package/dist/cli/index.js +84 -0
  156. package/dist/cli/index.js.map +1 -0
  157. package/dist/cli/load-collection.d.ts +7 -0
  158. package/dist/cli/load-collection.d.ts.map +1 -0
  159. package/dist/cli/load-collection.js +201 -0
  160. package/dist/cli/load-collection.js.map +1 -0
  161. package/dist/cli/registry.d.ts +17 -0
  162. package/dist/cli/registry.d.ts.map +1 -0
  163. package/dist/cli/registry.js +16 -0
  164. package/dist/cli/registry.js.map +1 -0
  165. package/dist/cnotes +0 -0
  166. package/dist/collection.d.ts +145 -0
  167. package/dist/collection.d.ts.map +1 -0
  168. package/dist/collection.js +684 -0
  169. package/dist/collection.js.map +1 -0
  170. package/dist/define-model.d.ts +45 -0
  171. package/dist/define-model.d.ts.map +1 -0
  172. package/dist/define-model.js +106 -0
  173. package/dist/define-model.js.map +1 -0
  174. package/dist/document.d.ts +123 -0
  175. package/dist/document.d.ts.map +1 -0
  176. package/dist/document.js +434 -0
  177. package/dist/document.js.map +1 -0
  178. package/dist/extract-sections.d.ts +46 -0
  179. package/dist/extract-sections.d.ts.map +1 -0
  180. package/dist/extract-sections.js +153 -0
  181. package/dist/extract-sections.js.map +1 -0
  182. package/dist/index.d.ts +28 -0
  183. package/dist/index.d.ts.map +1 -0
  184. package/dist/index.js +31 -0
  185. package/dist/index.js.map +1 -0
  186. package/dist/mcp/helpers.d.ts +14 -0
  187. package/dist/mcp/helpers.d.ts.map +1 -0
  188. package/dist/mcp/helpers.js +7 -0
  189. package/dist/mcp/helpers.js.map +1 -0
  190. package/dist/mcp/model-info.d.ts +2 -0
  191. package/dist/mcp/model-info.d.ts.map +1 -0
  192. package/dist/mcp/model-info.js +94 -0
  193. package/dist/mcp/model-info.js.map +1 -0
  194. package/dist/mcp/prompts.d.ts +2 -0
  195. package/dist/mcp/prompts.d.ts.map +1 -0
  196. package/dist/mcp/prompts.js +180 -0
  197. package/dist/mcp/prompts.js.map +1 -0
  198. package/dist/mcp/readme.d.ts +2 -0
  199. package/dist/mcp/readme.d.ts.map +1 -0
  200. package/dist/mcp/readme.js +71 -0
  201. package/dist/mcp/readme.js.map +1 -0
  202. package/dist/mcp/resources.d.ts +2 -0
  203. package/dist/mcp/resources.d.ts.map +1 -0
  204. package/dist/mcp/resources.js +85 -0
  205. package/dist/mcp/resources.js.map +1 -0
  206. package/dist/mcp/server.d.ts +18 -0
  207. package/dist/mcp/server.d.ts.map +1 -0
  208. package/dist/mcp/server.js +83 -0
  209. package/dist/mcp/server.js.map +1 -0
  210. package/dist/mcp/tools/mutation.d.ts +2 -0
  211. package/dist/mcp/tools/mutation.d.ts.map +1 -0
  212. package/dist/mcp/tools/mutation.js +155 -0
  213. package/dist/mcp/tools/mutation.js.map +1 -0
  214. package/dist/mcp/tools/query.d.ts +2 -0
  215. package/dist/mcp/tools/query.d.ts.map +1 -0
  216. package/dist/mcp/tools/query.js +130 -0
  217. package/dist/mcp/tools/query.js.map +1 -0
  218. package/dist/mcp/tools/search.d.ts +2 -0
  219. package/dist/mcp/tools/search.d.ts.map +1 -0
  220. package/dist/mcp/tools/search.js +168 -0
  221. package/dist/mcp/tools/search.js.map +1 -0
  222. package/dist/model-instance.d.ts +11 -0
  223. package/dist/model-instance.d.ts.map +1 -0
  224. package/dist/model-instance.js +208 -0
  225. package/dist/model-instance.js.map +1 -0
  226. package/dist/node-shortcuts.d.ts +25 -0
  227. package/dist/node-shortcuts.d.ts.map +1 -0
  228. package/dist/node-shortcuts.js +67 -0
  229. package/dist/node-shortcuts.js.map +1 -0
  230. package/dist/parse.d.ts +45 -0
  231. package/dist/parse.d.ts.map +1 -0
  232. package/dist/parse.js +98 -0
  233. package/dist/parse.js.map +1 -0
  234. package/dist/query/collection-query.d.ts +39 -0
  235. package/dist/query/collection-query.d.ts.map +1 -0
  236. package/dist/query/collection-query.js +184 -0
  237. package/dist/query/collection-query.js.map +1 -0
  238. package/dist/query/index.d.ts +8 -0
  239. package/dist/query/index.d.ts.map +1 -0
  240. package/dist/query/index.js +5 -0
  241. package/dist/query/index.js.map +1 -0
  242. package/dist/query/operators.d.ts +3 -0
  243. package/dist/query/operators.d.ts.map +1 -0
  244. package/dist/query/operators.js +18 -0
  245. package/dist/query/operators.js.map +1 -0
  246. package/dist/query/query-builder.d.ts +34 -0
  247. package/dist/query/query-builder.d.ts.map +1 -0
  248. package/dist/query/query-builder.js +84 -0
  249. package/dist/query/query-builder.js.map +1 -0
  250. package/dist/query/query-dsl.d.ts +36 -0
  251. package/dist/query/query-dsl.d.ts.map +1 -0
  252. package/dist/query/query-dsl.js +195 -0
  253. package/dist/query/query-dsl.js.map +1 -0
  254. package/dist/relationships/belongs-to.d.ts +9 -0
  255. package/dist/relationships/belongs-to.d.ts.map +1 -0
  256. package/dist/relationships/belongs-to.js +34 -0
  257. package/dist/relationships/belongs-to.js.map +1 -0
  258. package/dist/relationships/has-many.d.ts +23 -0
  259. package/dist/relationships/has-many.d.ts.map +1 -0
  260. package/dist/relationships/has-many.js +136 -0
  261. package/dist/relationships/has-many.js.map +1 -0
  262. package/dist/relationships/index.d.ts +26 -0
  263. package/dist/relationships/index.d.ts.map +1 -0
  264. package/dist/relationships/index.js +32 -0
  265. package/dist/relationships/index.js.map +1 -0
  266. package/dist/relationships/types.d.ts +2 -0
  267. package/dist/relationships/types.d.ts.map +1 -0
  268. package/dist/relationships/types.js +2 -0
  269. package/dist/relationships/types.js.map +1 -0
  270. package/dist/search/document-inputs.d.ts +30 -0
  271. package/dist/search/document-inputs.d.ts.map +1 -0
  272. package/dist/search/document-inputs.js +52 -0
  273. package/dist/search/document-inputs.js.map +1 -0
  274. package/dist/search/luca-semantic-search.d.ts +27 -0
  275. package/dist/search/luca-semantic-search.d.ts.map +1 -0
  276. package/dist/search/luca-semantic-search.js +56 -0
  277. package/dist/search/luca-semantic-search.js.map +1 -0
  278. package/dist/section.d.ts +21 -0
  279. package/dist/section.d.ts.map +1 -0
  280. package/dist/section.js +21 -0
  281. package/dist/section.js.map +1 -0
  282. package/dist/types.d.ts +185 -0
  283. package/dist/types.d.ts.map +1 -0
  284. package/dist/types.js +2 -0
  285. package/dist/types.js.map +1 -0
  286. package/dist/utils/index.d.ts +9 -0
  287. package/dist/utils/index.d.ts.map +1 -0
  288. package/dist/utils/index.js +8 -0
  289. package/dist/utils/index.js.map +1 -0
  290. package/dist/utils/inflect.d.ts +6 -0
  291. package/dist/utils/inflect.d.ts.map +1 -0
  292. package/dist/utils/inflect.js +75 -0
  293. package/dist/utils/inflect.js.map +1 -0
  294. package/dist/utils/match-pattern.d.ts +25 -0
  295. package/dist/utils/match-pattern.d.ts.map +1 -0
  296. package/dist/utils/match-pattern.js +52 -0
  297. package/dist/utils/match-pattern.js.map +1 -0
  298. package/dist/utils/normalize-headings.d.ts +8 -0
  299. package/dist/utils/normalize-headings.d.ts.map +1 -0
  300. package/dist/utils/normalize-headings.js +19 -0
  301. package/dist/utils/normalize-headings.js.map +1 -0
  302. package/dist/utils/parse-table.d.ts +7 -0
  303. package/dist/utils/parse-table.d.ts.map +1 -0
  304. package/dist/utils/parse-table.js +17 -0
  305. package/dist/utils/parse-table.js.map +1 -0
  306. package/dist/utils/read-directory.d.ts +5 -0
  307. package/dist/utils/read-directory.d.ts.map +1 -0
  308. package/dist/utils/read-directory.js +29 -0
  309. package/dist/utils/read-directory.js.map +1 -0
  310. package/dist/utils/stringify-ast.d.ts +6 -0
  311. package/dist/utils/stringify-ast.d.ts.map +1 -0
  312. package/dist/utils/stringify-ast.js +8 -0
  313. package/dist/utils/stringify-ast.js.map +1 -0
  314. package/dist/utils/strip-markdown.d.ts +11 -0
  315. package/dist/utils/strip-markdown.d.ts.map +1 -0
  316. package/dist/utils/strip-markdown.js +48 -0
  317. package/dist/utils/strip-markdown.js.map +1 -0
  318. package/dist/validator.d.ts +10 -0
  319. package/dist/validator.d.ts.map +1 -0
  320. package/dist/validator.js +55 -0
  321. package/dist/validator.js.map +1 -0
  322. package/package.json +3 -3
  323. package/src/document.ts +26 -8
@@ -0,0 +1,184 @@
1
+ import { QueryBuilder } from "./query-builder";
2
+ import { operators } from "./operators";
3
+ import { createModelInstance } from "../model-instance";
4
+ export class CollectionQuery {
5
+ #collection;
6
+ #definition;
7
+ #queryBuilder;
8
+ #sorts = [];
9
+ #limit;
10
+ #offset;
11
+ #include = [];
12
+ constructor(collection, definition) {
13
+ this.#collection = collection;
14
+ this.#definition = definition;
15
+ this.#queryBuilder = new QueryBuilder();
16
+ }
17
+ /**
18
+ * Include related models in query results.
19
+ * Named relationships will be eagerly resolved and included in toJSON() output.
20
+ *
21
+ * @example
22
+ * await collection.query(Project).include("plans").fetchAll()
23
+ * await collection.query(Project).include("plans", "goal").fetchAll()
24
+ */
25
+ include(...names) {
26
+ this.#include.push(...names);
27
+ return this;
28
+ }
29
+ /** Returns the serialize options based on include() calls */
30
+ get serializeOptions() {
31
+ const opts = {};
32
+ if (this.#include.length > 0)
33
+ opts.related = this.#include;
34
+ return opts;
35
+ }
36
+ where(pathOrObject, operatorOrValue, value) {
37
+ this.#queryBuilder.where(pathOrObject, operatorOrValue, value);
38
+ return this;
39
+ }
40
+ whereIn(path, values) {
41
+ this.#queryBuilder.whereIn(path, values);
42
+ return this;
43
+ }
44
+ whereNotIn(path, values) {
45
+ this.#queryBuilder.whereNotIn(path, values);
46
+ return this;
47
+ }
48
+ whereGt(path, value) {
49
+ this.#queryBuilder.whereGt(path, value);
50
+ return this;
51
+ }
52
+ whereLt(path, value) {
53
+ this.#queryBuilder.whereLt(path, value);
54
+ return this;
55
+ }
56
+ whereGte(path, value) {
57
+ this.#queryBuilder.whereGte(path, value);
58
+ return this;
59
+ }
60
+ whereLte(path, value) {
61
+ this.#queryBuilder.whereLte(path, value);
62
+ return this;
63
+ }
64
+ whereContains(path, value) {
65
+ this.#queryBuilder.whereContains(path, value);
66
+ return this;
67
+ }
68
+ whereStartsWith(path, value) {
69
+ this.#queryBuilder.whereStartsWith(path, value);
70
+ return this;
71
+ }
72
+ whereEndsWith(path, value) {
73
+ this.#queryBuilder.whereEndsWith(path, value);
74
+ return this;
75
+ }
76
+ whereRegex(path, pattern) {
77
+ this.#queryBuilder.whereRegex(path, pattern);
78
+ return this;
79
+ }
80
+ whereExists(path) {
81
+ this.#queryBuilder.whereExists(path);
82
+ return this;
83
+ }
84
+ whereNotExists(path) {
85
+ this.#queryBuilder.whereNotExists(path);
86
+ return this;
87
+ }
88
+ scope(name) {
89
+ const scopeFn = this.#definition.scopes?.[name];
90
+ if (!scopeFn) {
91
+ throw new Error(`Unknown scope "${name}" on model "${this.#definition.name}"`);
92
+ }
93
+ return scopeFn(this);
94
+ }
95
+ sort(path, direction = "asc") {
96
+ this.#sorts.push({ path, direction });
97
+ return this;
98
+ }
99
+ limit(n) {
100
+ this.#limit = n;
101
+ return this;
102
+ }
103
+ offset(n) {
104
+ this.#offset = n;
105
+ return this;
106
+ }
107
+ async fetchAll() {
108
+ const collection = this.#collection;
109
+ if (!collection.loaded)
110
+ await collection.load();
111
+ const definition = this.#definition;
112
+ const conditions = this.#queryBuilder.conditions;
113
+ let results = [];
114
+ for (const pathId of collection.available) {
115
+ // Delegate all matching logic to collection (handles _model meta, prefix, Base fallback)
116
+ const matchedDef = collection.findModelDefinition(pathId);
117
+ if (matchedDef?.name !== definition.name)
118
+ continue;
119
+ const doc = collection.document(pathId);
120
+ const instance = createModelInstance(doc, definition, collection);
121
+ // Apply query conditions
122
+ const passesAll = conditions.every((cond) => {
123
+ const actual = getNestedValue(instance, cond.path);
124
+ return operators[cond.operator](actual, cond.value);
125
+ });
126
+ if (passesAll) {
127
+ results.push(instance);
128
+ }
129
+ }
130
+ if (this.#sorts.length > 0) {
131
+ results.sort((a, b) => {
132
+ for (const { path, direction } of this.#sorts) {
133
+ const aVal = getNestedValue(a, path);
134
+ const bVal = getNestedValue(b, path);
135
+ if (aVal === bVal)
136
+ continue;
137
+ if (aVal == null)
138
+ return direction === "asc" ? 1 : -1;
139
+ if (bVal == null)
140
+ return direction === "asc" ? -1 : 1;
141
+ const cmp = aVal < bVal ? -1 : 1;
142
+ return direction === "asc" ? cmp : -cmp;
143
+ }
144
+ return 0;
145
+ });
146
+ }
147
+ // Apply pagination
148
+ if (this.#offset && this.#offset > 0) {
149
+ results = results.slice(this.#offset);
150
+ }
151
+ if (this.#limit !== undefined && this.#limit >= 0) {
152
+ results = results.slice(0, this.#limit);
153
+ }
154
+ // Bind serialize options from include() so toJSON() includes relationships
155
+ if (this.#include.length > 0) {
156
+ const opts = this.serializeOptions;
157
+ for (const instance of results) {
158
+ const original = instance.toJSON;
159
+ instance.toJSON = (overrides) => {
160
+ const merged = { ...opts, ...overrides };
161
+ if (opts.related && overrides?.related) {
162
+ merged.related = [...new Set([...opts.related, ...overrides.related])];
163
+ }
164
+ return original(merged);
165
+ };
166
+ }
167
+ }
168
+ return results;
169
+ }
170
+ async first() {
171
+ return (await this.fetchAll())[0];
172
+ }
173
+ async last() {
174
+ const all = await this.fetchAll();
175
+ return all[all.length - 1];
176
+ }
177
+ async count() {
178
+ return (await this.fetchAll()).length;
179
+ }
180
+ }
181
+ function getNestedValue(obj, path) {
182
+ return path.split(".").reduce((acc, key) => acc?.[key], obj);
183
+ }
184
+ //# sourceMappingURL=collection-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-query.js","sourceRoot":"","sources":["../../src/query/collection-query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { CollectionQuery } from "./collection-query";
2
+ export { QueryBuilder } from "./query-builder";
3
+ export { operators } from "./operators";
4
+ export type { Operator } from "./operators";
5
+ export type { Condition } from "./query-builder";
6
+ export { queryDSLSchema, parseWhereClause, parseSortClause, executeQueryDSL, } from "./query-dsl";
7
+ export type { QueryDSL } from "./query-dsl";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { CollectionQuery } from "./collection-query";
2
+ export { QueryBuilder } from "./query-builder";
3
+ export { operators } from "./operators";
4
+ export { queryDSLSchema, parseWhereClause, parseSortClause, executeQueryDSL, } from "./query-dsl";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type Operator = "eq" | "neq" | "in" | "notIn" | "gt" | "lt" | "gte" | "lte" | "contains" | "startsWith" | "endsWith" | "regex" | "exists";
2
+ export declare const operators: Record<Operator, (actual: any, expected: any) => boolean>;
3
+ //# sourceMappingURL=operators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../src/query/operators.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAChB,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,OAAO,GACP,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,UAAU,GACV,YAAY,GACZ,UAAU,GACV,OAAO,GACP,QAAQ,CAAC;AAEb,eAAO,MAAM,SAAS,EAAE,MAAM,CAC5B,QAAQ,EACR,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,OAAO,CAmBxC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export const operators = {
2
+ eq: (a, b) => a === b || JSON.stringify(a) === JSON.stringify(b),
3
+ neq: (a, b) => !operators.eq(a, b),
4
+ in: (a, b) => Array.isArray(b) && b.includes(a),
5
+ notIn: (a, b) => Array.isArray(b) && !b.includes(a),
6
+ gt: (a, b) => a > b,
7
+ lt: (a, b) => a < b,
8
+ gte: (a, b) => a >= b,
9
+ lte: (a, b) => a <= b,
10
+ contains: (a, b) => typeof a === "string" && a.includes(b),
11
+ startsWith: (a, b) => typeof a === "string" && a.startsWith(b),
12
+ endsWith: (a, b) => typeof a === "string" && a.endsWith(b),
13
+ regex: (a, b) => b instanceof RegExp
14
+ ? b.test(String(a))
15
+ : new RegExp(b).test(String(a)),
16
+ exists: (a, b) => b ? a !== undefined && a !== null : a === undefined || a === null,
17
+ };
18
+ //# sourceMappingURL=operators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operators.js","sourceRoot":"","sources":["../../src/query/operators.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,SAAS,GAGlB;IACF,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAChE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnD,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;IACnB,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;IACnB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;IACrB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1D,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9D,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1D,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACd,CAAC,YAAY,MAAM;QACjB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACf,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;CACpE,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { Operator } from "./operators";
2
+ export interface Condition {
3
+ path: string;
4
+ operator: Operator;
5
+ value: unknown;
6
+ }
7
+ export declare class QueryBuilder {
8
+ #private;
9
+ get conditions(): Condition[];
10
+ /**
11
+ * Add a where condition.
12
+ *
13
+ * Three call signatures:
14
+ * where({ "meta.status": "active" }) -- object shorthand, implicit eq
15
+ * where("meta.status", "active") -- two args, implicit eq
16
+ * where("meta.priority", "gt", 5) -- three args, explicit operator
17
+ *
18
+ * Always returns `this` for chaining (fixes bug in original).
19
+ */
20
+ where(pathOrObject: string | Record<string, unknown>, operatorOrValue?: Operator | unknown, value?: unknown): this;
21
+ whereIn(path: string, values: unknown[]): this;
22
+ whereNotIn(path: string, values: unknown[]): this;
23
+ whereGt(path: string, value: unknown): this;
24
+ whereLt(path: string, value: unknown): this;
25
+ whereGte(path: string, value: unknown): this;
26
+ whereLte(path: string, value: unknown): this;
27
+ whereContains(path: string, value: string): this;
28
+ whereStartsWith(path: string, value: string): this;
29
+ whereEndsWith(path: string, value: string): this;
30
+ whereRegex(path: string, pattern: RegExp | string): this;
31
+ whereExists(path: string): this;
32
+ whereNotExists(path: string): this;
33
+ }
34
+ //# sourceMappingURL=query-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/query/query-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,YAAY;;IAGvB,IAAI,UAAU,IAAI,SAAS,EAAE,CAE5B;IAED;;;;;;;;;OASG;IACH,KAAK,CACH,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9C,eAAe,CAAC,EAAE,QAAQ,GAAG,OAAO,EACpC,KAAK,CAAC,EAAE,OAAO,GACd,IAAI;IA0BP,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI;IAS9C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI;IAKjD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAI3C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAI3C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAI5C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAI5C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhD,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIxD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAGnC"}
@@ -0,0 +1,84 @@
1
+ export class QueryBuilder {
2
+ #conditions = [];
3
+ get conditions() {
4
+ return [...this.#conditions];
5
+ }
6
+ /**
7
+ * Add a where condition.
8
+ *
9
+ * Three call signatures:
10
+ * where({ "meta.status": "active" }) -- object shorthand, implicit eq
11
+ * where("meta.status", "active") -- two args, implicit eq
12
+ * where("meta.priority", "gt", 5) -- three args, explicit operator
13
+ *
14
+ * Always returns `this` for chaining (fixes bug in original).
15
+ */
16
+ where(pathOrObject, operatorOrValue, value) {
17
+ if (typeof pathOrObject === "object" && pathOrObject !== null) {
18
+ for (const [k, v] of Object.entries(pathOrObject)) {
19
+ this.#conditions.push({ path: k, operator: "eq", value: v });
20
+ }
21
+ return this;
22
+ }
23
+ if (value === undefined) {
24
+ // Two-arg form: where("path", value) -- implicit eq
25
+ this.#conditions.push({
26
+ path: pathOrObject,
27
+ operator: "eq",
28
+ value: operatorOrValue,
29
+ });
30
+ }
31
+ else {
32
+ // Three-arg form: where("path", operator, value)
33
+ this.#conditions.push({
34
+ path: pathOrObject,
35
+ operator: operatorOrValue,
36
+ value,
37
+ });
38
+ }
39
+ return this;
40
+ }
41
+ whereIn(path, values) {
42
+ this.#conditions.push({
43
+ path,
44
+ operator: "in",
45
+ value: values.filter(Boolean),
46
+ });
47
+ return this;
48
+ }
49
+ whereNotIn(path, values) {
50
+ this.#conditions.push({ path, operator: "notIn", value: values });
51
+ return this;
52
+ }
53
+ whereGt(path, value) {
54
+ return this.where(path, "gt", value);
55
+ }
56
+ whereLt(path, value) {
57
+ return this.where(path, "lt", value);
58
+ }
59
+ whereGte(path, value) {
60
+ return this.where(path, "gte", value);
61
+ }
62
+ whereLte(path, value) {
63
+ return this.where(path, "lte", value);
64
+ }
65
+ whereContains(path, value) {
66
+ return this.where(path, "contains", value);
67
+ }
68
+ whereStartsWith(path, value) {
69
+ return this.where(path, "startsWith", value);
70
+ }
71
+ whereEndsWith(path, value) {
72
+ return this.where(path, "endsWith", value);
73
+ }
74
+ whereRegex(path, pattern) {
75
+ return this.where(path, "regex", pattern);
76
+ }
77
+ whereExists(path) {
78
+ return this.where(path, "exists", true);
79
+ }
80
+ whereNotExists(path) {
81
+ return this.where(path, "exists", false);
82
+ }
83
+ }
84
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/query/query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { z } from "zod";
2
+ import type { Collection } from "../collection";
3
+ import type { Condition } from "./query-builder";
4
+ export declare const queryDSLSchema: z.ZodObject<{
5
+ model: z.ZodString;
6
+ where: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>>;
7
+ sort: z.ZodOptional<z.ZodUnion<readonly [z.ZodRecord<z.ZodString, z.ZodEnum<{
8
+ asc: "asc";
9
+ desc: "desc";
10
+ }>>, z.ZodArray<z.ZodObject<{
11
+ path: z.ZodString;
12
+ direction: z.ZodDefault<z.ZodEnum<{
13
+ asc: "asc";
14
+ desc: "desc";
15
+ }>>;
16
+ }, z.core.$strip>>]>>;
17
+ select: z.ZodOptional<z.ZodArray<z.ZodString>>;
18
+ related: z.ZodOptional<z.ZodArray<z.ZodString>>;
19
+ scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
20
+ limit: z.ZodOptional<z.ZodNumber>;
21
+ offset: z.ZodOptional<z.ZodNumber>;
22
+ method: z.ZodDefault<z.ZodEnum<{
23
+ fetchAll: "fetchAll";
24
+ first: "first";
25
+ last: "last";
26
+ count: "count";
27
+ }>>;
28
+ }, z.core.$strip>;
29
+ export type QueryDSL = z.infer<typeof queryDSLSchema>;
30
+ export declare function parseWhereClause(where: Record<string, unknown>): Condition[];
31
+ export declare function parseSortClause(sort: unknown): Array<{
32
+ path: string;
33
+ direction: "asc" | "desc";
34
+ }>;
35
+ export declare function executeQueryDSL(collection: Collection, dsl: QueryDSL): Promise<Record<string, unknown> | Record<string, unknown>[] | null>;
36
+ //# sourceMappingURL=query-dsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-dsl.d.ts","sourceRoot":"","sources":["../../src/query/query-dsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAwEjD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;iBAYzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAMtD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,SAAS,EAAE,CA+Cb;AAMD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,OAAO,GACZ,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;CAAE,CAAC,CAapD;AA6BD,wBAAsB,eAAe,CACnC,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,QAAQ,uEA+Dd"}
@@ -0,0 +1,195 @@
1
+ import { z } from "zod";
2
+ import { resolveModelDef } from "../cli/commands/api/helpers.js";
3
+ // ---------------------------------------------------------------------------
4
+ // Operator mapping: $dsl → internal
5
+ // ---------------------------------------------------------------------------
6
+ const OPERATOR_MAP = {
7
+ $eq: "eq",
8
+ $neq: "neq",
9
+ $in: "in",
10
+ $notIn: "notIn",
11
+ $gt: "gt",
12
+ $lt: "lt",
13
+ $gte: "gte",
14
+ $lte: "lte",
15
+ $contains: "contains",
16
+ $startsWith: "startsWith",
17
+ $endsWith: "endsWith",
18
+ $regex: "regex",
19
+ $exists: "exists",
20
+ };
21
+ const VALID_OPERATORS = new Set(Object.keys(OPERATOR_MAP));
22
+ // ---------------------------------------------------------------------------
23
+ // Security helpers
24
+ // ---------------------------------------------------------------------------
25
+ const FORBIDDEN_PATH_SEGMENTS = new Set([
26
+ "__proto__",
27
+ "constructor",
28
+ "prototype",
29
+ ]);
30
+ const MAX_REGEX_LENGTH = 200;
31
+ function validatePath(path) {
32
+ const segments = path.split(".");
33
+ for (const seg of segments) {
34
+ if (FORBIDDEN_PATH_SEGMENTS.has(seg)) {
35
+ throw new Error(`Forbidden path segment "${seg}" in "${path}"`);
36
+ }
37
+ }
38
+ }
39
+ // ---------------------------------------------------------------------------
40
+ // Zod schema
41
+ // ---------------------------------------------------------------------------
42
+ const whereValueSchema = z.union([
43
+ z.string(),
44
+ z.number(),
45
+ z.boolean(),
46
+ z.null(),
47
+ z.array(z.unknown()),
48
+ z.record(z.string(), z.unknown()),
49
+ ]);
50
+ const sortSchema = z.union([
51
+ z.record(z.string(), z.enum(["asc", "desc"])),
52
+ z.array(z.object({
53
+ path: z.string(),
54
+ direction: z.enum(["asc", "desc"]).default("asc"),
55
+ })),
56
+ ]);
57
+ export const queryDSLSchema = z.object({
58
+ model: z.string(),
59
+ where: z.record(z.string(), whereValueSchema).optional(),
60
+ sort: sortSchema.optional(),
61
+ select: z.array(z.string()).optional(),
62
+ related: z.array(z.string()).optional(),
63
+ scopes: z.array(z.string()).optional(),
64
+ limit: z.number().int().min(0).optional(),
65
+ offset: z.number().int().min(0).optional(),
66
+ method: z
67
+ .enum(["fetchAll", "first", "last", "count"])
68
+ .default("fetchAll"),
69
+ });
70
+ // ---------------------------------------------------------------------------
71
+ // Parser: where object → Condition[]
72
+ // ---------------------------------------------------------------------------
73
+ export function parseWhereClause(where) {
74
+ const conditions = [];
75
+ for (const [path, value] of Object.entries(where)) {
76
+ validatePath(path);
77
+ if (value === null ||
78
+ typeof value === "string" ||
79
+ typeof value === "number" ||
80
+ typeof value === "boolean") {
81
+ // Literal → implicit $eq
82
+ conditions.push({ path, operator: "eq", value });
83
+ }
84
+ else if (Array.isArray(value)) {
85
+ // Array → implicit $in
86
+ conditions.push({ path, operator: "in", value });
87
+ }
88
+ else if (typeof value === "object" && value !== null) {
89
+ // Operator object: { "$gt": 5, "$lte": 10 }
90
+ for (const [opKey, opValue] of Object.entries(value)) {
91
+ if (!VALID_OPERATORS.has(opKey)) {
92
+ throw new Error(`Unknown operator: ${opKey}. Valid: ${[...VALID_OPERATORS].join(", ")}`);
93
+ }
94
+ const operator = OPERATOR_MAP[opKey];
95
+ // Regex length guard
96
+ if (operator === "regex" &&
97
+ typeof opValue === "string" &&
98
+ opValue.length > MAX_REGEX_LENGTH) {
99
+ throw new Error(`Regex pattern exceeds maximum length of ${MAX_REGEX_LENGTH} characters`);
100
+ }
101
+ conditions.push({ path, operator, value: opValue });
102
+ }
103
+ }
104
+ }
105
+ return conditions;
106
+ }
107
+ // ---------------------------------------------------------------------------
108
+ // Parser: sort clause → SortSpec[]
109
+ // ---------------------------------------------------------------------------
110
+ export function parseSortClause(sort) {
111
+ if (Array.isArray(sort)) {
112
+ return sort;
113
+ }
114
+ if (typeof sort === "object" && sort !== null) {
115
+ return Object.entries(sort).map(([path, direction]) => ({
116
+ path,
117
+ direction: direction,
118
+ }));
119
+ }
120
+ return [];
121
+ }
122
+ // ---------------------------------------------------------------------------
123
+ // Select helper
124
+ // ---------------------------------------------------------------------------
125
+ function applySelect(instance, select, related) {
126
+ const json = instance.toJSON({ related });
127
+ if (!select || select.length === 0)
128
+ return json;
129
+ const filtered = {};
130
+ for (const key of select) {
131
+ if (key in json) {
132
+ filtered[key] = json[key];
133
+ }
134
+ else if (key.startsWith("meta.") && json.meta) {
135
+ filtered[key] = json.meta[key.slice(5)];
136
+ }
137
+ }
138
+ return filtered;
139
+ }
140
+ // ---------------------------------------------------------------------------
141
+ // Executor
142
+ // ---------------------------------------------------------------------------
143
+ export async function executeQueryDSL(collection, dsl) {
144
+ const def = resolveModelDef(collection, dsl.model);
145
+ if (!def) {
146
+ throw new Error(`Unknown model: ${dsl.model}`);
147
+ }
148
+ let q = collection.query(def);
149
+ // Apply scopes first
150
+ if (dsl.scopes) {
151
+ for (const name of dsl.scopes) {
152
+ q = q.scope(name);
153
+ }
154
+ }
155
+ // Apply where conditions
156
+ if (dsl.where) {
157
+ const conditions = parseWhereClause(dsl.where);
158
+ for (const cond of conditions) {
159
+ q = q.where(cond.path, cond.operator, cond.value);
160
+ }
161
+ }
162
+ // Apply sorts
163
+ if (dsl.sort) {
164
+ const sorts = parseSortClause(dsl.sort);
165
+ for (const { path, direction } of sorts) {
166
+ q = q.sort(path, direction);
167
+ }
168
+ }
169
+ // Apply pagination
170
+ if (dsl.limit !== undefined) {
171
+ q = q.limit(dsl.limit);
172
+ }
173
+ if (dsl.offset !== undefined) {
174
+ q = q.offset(dsl.offset);
175
+ }
176
+ // Execute based on method
177
+ switch (dsl.method) {
178
+ case "count":
179
+ return { count: await q.count() };
180
+ case "first": {
181
+ const result = await q.first();
182
+ return result ? applySelect(result, dsl.select, dsl.related) : null;
183
+ }
184
+ case "last": {
185
+ const result = await q.last();
186
+ return result ? applySelect(result, dsl.select, dsl.related) : null;
187
+ }
188
+ case "fetchAll":
189
+ default: {
190
+ const results = await q.fetchAll();
191
+ return results.map((instance) => applySelect(instance, dsl.select, dsl.related));
192
+ }
193
+ }
194
+ }
195
+ //# sourceMappingURL=query-dsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-dsl.js","sourceRoot":"","sources":["../../src/query/query-dsl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Document } from "../document";
2
+ import type { Collection } from "../collection";
3
+ import type { BelongsToDefinition, ModelDefinition, InferModelInstance, BelongsToAccessor, ModelInstanceFactory } from "../types";
4
+ export declare class BelongsToRelationship<TTarget extends ModelDefinition<any, any, any, any, any>> implements BelongsToAccessor<TTarget> {
5
+ #private;
6
+ constructor(document: Document, collection: Collection, definition: BelongsToDefinition<TTarget>, factory: ModelInstanceFactory, sourceDef: ModelDefinition<any, any, any, any, any>);
7
+ fetch(): InferModelInstance<TTarget>;
8
+ }
9
+ //# sourceMappingURL=belongs-to.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"belongs-to.d.ts","sourceRoot":"","sources":["../../src/relationships/belongs-to.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,UAAU,CAAC;AAElB,qBAAa,qBAAqB,CAChC,OAAO,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CACxD,YAAW,iBAAiB,CAAC,OAAO,CAAC;;gBASnC,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,EACxC,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IASrD,KAAK,IAAI,kBAAkB,CAAC,OAAO,CAAC;CAuBrC"}