@byline/core 0.9.3

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 (283) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +17 -0
  3. package/dist/@types/admin-types.d.ts +275 -0
  4. package/dist/@types/admin-types.d.ts.map +1 -0
  5. package/dist/@types/admin-types.js +18 -0
  6. package/dist/@types/admin-types.js.map +1 -0
  7. package/dist/@types/collection-types.d.ts +816 -0
  8. package/dist/@types/collection-types.d.ts.map +1 -0
  9. package/dist/@types/collection-types.js +217 -0
  10. package/dist/@types/collection-types.js.map +1 -0
  11. package/dist/@types/db-types.d.ts +463 -0
  12. package/dist/@types/db-types.d.ts.map +1 -0
  13. package/dist/@types/db-types.js +2 -0
  14. package/dist/@types/db-types.js.map +1 -0
  15. package/dist/@types/field-data-types.d.ts +147 -0
  16. package/dist/@types/field-data-types.d.ts.map +1 -0
  17. package/dist/@types/field-data-types.js +38 -0
  18. package/dist/@types/field-data-types.js.map +1 -0
  19. package/dist/@types/field-types.d.ts +579 -0
  20. package/dist/@types/field-types.d.ts.map +1 -0
  21. package/dist/@types/field-types.js +32 -0
  22. package/dist/@types/field-types.js.map +1 -0
  23. package/dist/@types/index.d.ts +18 -0
  24. package/dist/@types/index.d.ts.map +1 -0
  25. package/dist/@types/index.js +18 -0
  26. package/dist/@types/index.js.map +1 -0
  27. package/dist/@types/populate-types.d.ts +54 -0
  28. package/dist/@types/populate-types.d.ts.map +1 -0
  29. package/dist/@types/populate-types.js +9 -0
  30. package/dist/@types/populate-types.js.map +1 -0
  31. package/dist/@types/query-predicate.d.ts +74 -0
  32. package/dist/@types/query-predicate.d.ts.map +1 -0
  33. package/dist/@types/query-predicate.js +9 -0
  34. package/dist/@types/query-predicate.js.map +1 -0
  35. package/dist/@types/site-config.d.ts +212 -0
  36. package/dist/@types/site-config.d.ts.map +1 -0
  37. package/dist/@types/site-config.js +9 -0
  38. package/dist/@types/site-config.js.map +1 -0
  39. package/dist/@types/storage-types.d.ts +86 -0
  40. package/dist/@types/storage-types.d.ts.map +1 -0
  41. package/dist/@types/storage-types.js +9 -0
  42. package/dist/@types/storage-types.js.map +1 -0
  43. package/dist/@types/store-types.d.ts +134 -0
  44. package/dist/@types/store-types.d.ts.map +1 -0
  45. package/dist/@types/store-types.js +24 -0
  46. package/dist/@types/store-types.js.map +1 -0
  47. package/dist/@types/type-utils.d.ts +17 -0
  48. package/dist/@types/type-utils.d.ts.map +1 -0
  49. package/dist/@types/type-utils.js +9 -0
  50. package/dist/@types/type-utils.js.map +1 -0
  51. package/dist/auth/apply-before-read.d.ts +36 -0
  52. package/dist/auth/apply-before-read.d.ts.map +1 -0
  53. package/dist/auth/apply-before-read.js +68 -0
  54. package/dist/auth/apply-before-read.js.map +1 -0
  55. package/dist/auth/apply-before-read.test.node.d.ts +9 -0
  56. package/dist/auth/apply-before-read.test.node.d.ts.map +1 -0
  57. package/dist/auth/apply-before-read.test.node.js +144 -0
  58. package/dist/auth/apply-before-read.test.node.js.map +1 -0
  59. package/dist/auth/assert-actor-can-perform.d.ts +39 -0
  60. package/dist/auth/assert-actor-can-perform.d.ts.map +1 -0
  61. package/dist/auth/assert-actor-can-perform.js +64 -0
  62. package/dist/auth/assert-actor-can-perform.js.map +1 -0
  63. package/dist/auth/assert-actor-can-perform.test.node.d.ts +9 -0
  64. package/dist/auth/assert-actor-can-perform.test.node.d.ts.map +1 -0
  65. package/dist/auth/assert-actor-can-perform.test.node.js +119 -0
  66. package/dist/auth/assert-actor-can-perform.test.node.js.map +1 -0
  67. package/dist/auth/index.d.ts +11 -0
  68. package/dist/auth/index.d.ts.map +1 -0
  69. package/dist/auth/index.js +11 -0
  70. package/dist/auth/index.js.map +1 -0
  71. package/dist/auth/register-collection-abilities.d.ts +40 -0
  72. package/dist/auth/register-collection-abilities.d.ts.map +1 -0
  73. package/dist/auth/register-collection-abilities.js +87 -0
  74. package/dist/auth/register-collection-abilities.js.map +1 -0
  75. package/dist/auth/register-collection-abilities.test.node.d.ts +9 -0
  76. package/dist/auth/register-collection-abilities.test.node.d.ts.map +1 -0
  77. package/dist/auth/register-collection-abilities.test.node.js +124 -0
  78. package/dist/auth/register-collection-abilities.test.node.js.map +1 -0
  79. package/dist/config/config.d.ts +10 -0
  80. package/dist/config/config.d.ts.map +1 -0
  81. package/dist/config/config.js +108 -0
  82. package/dist/config/config.js.map +1 -0
  83. package/dist/config/routes.d.ts +16 -0
  84. package/dist/config/routes.d.ts.map +1 -0
  85. package/dist/config/routes.js +26 -0
  86. package/dist/config/routes.js.map +1 -0
  87. package/dist/config/validate-admin-configs.d.ts +33 -0
  88. package/dist/config/validate-admin-configs.d.ts.map +1 -0
  89. package/dist/config/validate-admin-configs.js +250 -0
  90. package/dist/config/validate-admin-configs.js.map +1 -0
  91. package/dist/config/validate-admin-configs.test.node.d.ts +9 -0
  92. package/dist/config/validate-admin-configs.test.node.d.ts.map +1 -0
  93. package/dist/config/validate-admin-configs.test.node.js +224 -0
  94. package/dist/config/validate-admin-configs.test.node.js.map +1 -0
  95. package/dist/config/validate-collections.d.ts +33 -0
  96. package/dist/config/validate-collections.d.ts.map +1 -0
  97. package/dist/config/validate-collections.js +70 -0
  98. package/dist/config/validate-collections.js.map +1 -0
  99. package/dist/config/validate-collections.test.node.d.ts +9 -0
  100. package/dist/config/validate-collections.test.node.d.ts.map +1 -0
  101. package/dist/config/validate-collections.test.node.js +149 -0
  102. package/dist/config/validate-collections.test.node.js.map +1 -0
  103. package/dist/core.d.ts +89 -0
  104. package/dist/core.d.ts.map +1 -0
  105. package/dist/core.js +99 -0
  106. package/dist/core.js.map +1 -0
  107. package/dist/defaults/default-values.d.ts +13 -0
  108. package/dist/defaults/default-values.d.ts.map +1 -0
  109. package/dist/defaults/default-values.js +60 -0
  110. package/dist/defaults/default-values.js.map +1 -0
  111. package/dist/index.d.ts +20 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +36 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/lib/errors.d.ts +98 -0
  116. package/dist/lib/errors.d.ts.map +1 -0
  117. package/dist/lib/errors.js +134 -0
  118. package/dist/lib/errors.js.map +1 -0
  119. package/dist/lib/logger.d.ts +62 -0
  120. package/dist/lib/logger.d.ts.map +1 -0
  121. package/dist/lib/logger.js +120 -0
  122. package/dist/lib/logger.js.map +1 -0
  123. package/dist/lib/registry.d.ts +65 -0
  124. package/dist/lib/registry.d.ts.map +1 -0
  125. package/dist/lib/registry.js +133 -0
  126. package/dist/lib/registry.js.map +1 -0
  127. package/dist/logger/index.d.ts +3 -0
  128. package/dist/logger/index.d.ts.map +1 -0
  129. package/dist/logger/index.js +3 -0
  130. package/dist/logger/index.js.map +1 -0
  131. package/dist/patches/apply-patches.d.ts +21 -0
  132. package/dist/patches/apply-patches.d.ts.map +1 -0
  133. package/dist/patches/apply-patches.js +357 -0
  134. package/dist/patches/apply-patches.js.map +1 -0
  135. package/dist/patches/index.d.ts +3 -0
  136. package/dist/patches/index.d.ts.map +1 -0
  137. package/dist/patches/index.js +4 -0
  138. package/dist/patches/index.js.map +1 -0
  139. package/dist/patches/patch-types.d.ts +82 -0
  140. package/dist/patches/patch-types.d.ts.map +1 -0
  141. package/dist/patches/patch-types.js +3 -0
  142. package/dist/patches/patch-types.js.map +1 -0
  143. package/dist/patches/patch.test.node.d.ts +2 -0
  144. package/dist/patches/patch.test.node.d.ts.map +1 -0
  145. package/dist/patches/patch.test.node.js +193 -0
  146. package/dist/patches/patch.test.node.js.map +1 -0
  147. package/dist/query/parse-where.d.ts +100 -0
  148. package/dist/query/parse-where.d.ts.map +1 -0
  149. package/dist/query/parse-where.js +352 -0
  150. package/dist/query/parse-where.js.map +1 -0
  151. package/dist/query/parse-where.test.node.d.ts +9 -0
  152. package/dist/query/parse-where.test.node.d.ts.map +1 -0
  153. package/dist/query/parse-where.test.node.js +581 -0
  154. package/dist/query/parse-where.test.node.js.map +1 -0
  155. package/dist/schemas/zod/builder.d.ts +466 -0
  156. package/dist/schemas/zod/builder.d.ts.map +1 -0
  157. package/dist/schemas/zod/builder.js +276 -0
  158. package/dist/schemas/zod/builder.js.map +1 -0
  159. package/dist/schemas/zod/cache.d.ts +14 -0
  160. package/dist/schemas/zod/cache.d.ts.map +1 -0
  161. package/dist/schemas/zod/cache.js +40 -0
  162. package/dist/schemas/zod/cache.js.map +1 -0
  163. package/dist/schemas/zod/index.d.ts +4 -0
  164. package/dist/schemas/zod/index.d.ts.map +1 -0
  165. package/dist/schemas/zod/index.js +4 -0
  166. package/dist/schemas/zod/index.js.map +1 -0
  167. package/dist/schemas/zod/types.d.ts +13 -0
  168. package/dist/schemas/zod/types.d.ts.map +1 -0
  169. package/dist/schemas/zod/types.js +2 -0
  170. package/dist/schemas/zod/types.js.map +1 -0
  171. package/dist/services/collection-bootstrap.d.ts +46 -0
  172. package/dist/services/collection-bootstrap.d.ts.map +1 -0
  173. package/dist/services/collection-bootstrap.js +108 -0
  174. package/dist/services/collection-bootstrap.js.map +1 -0
  175. package/dist/services/collection-bootstrap.test.node.d.ts +9 -0
  176. package/dist/services/collection-bootstrap.test.node.d.ts.map +1 -0
  177. package/dist/services/collection-bootstrap.test.node.js +208 -0
  178. package/dist/services/collection-bootstrap.test.node.js.map +1 -0
  179. package/dist/services/document-lifecycle.d.ts +245 -0
  180. package/dist/services/document-lifecycle.d.ts.map +1 -0
  181. package/dist/services/document-lifecycle.js +481 -0
  182. package/dist/services/document-lifecycle.js.map +1 -0
  183. package/dist/services/document-lifecycle.test.node.d.ts +9 -0
  184. package/dist/services/document-lifecycle.test.node.d.ts.map +1 -0
  185. package/dist/services/document-lifecycle.test.node.js +781 -0
  186. package/dist/services/document-lifecycle.test.node.js.map +1 -0
  187. package/dist/services/document-read.d.ts +26 -0
  188. package/dist/services/document-read.d.ts.map +1 -0
  189. package/dist/services/document-read.js +60 -0
  190. package/dist/services/document-read.js.map +1 -0
  191. package/dist/services/field-upload.d.ts +100 -0
  192. package/dist/services/field-upload.d.ts.map +1 -0
  193. package/dist/services/field-upload.js +328 -0
  194. package/dist/services/field-upload.js.map +1 -0
  195. package/dist/services/field-upload.test.node.d.ts +9 -0
  196. package/dist/services/field-upload.test.node.d.ts.map +1 -0
  197. package/dist/services/field-upload.test.node.js +337 -0
  198. package/dist/services/field-upload.test.node.js.map +1 -0
  199. package/dist/services/index.d.ts +10 -0
  200. package/dist/services/index.d.ts.map +1 -0
  201. package/dist/services/index.js +11 -0
  202. package/dist/services/index.js.map +1 -0
  203. package/dist/services/populate.d.ts +299 -0
  204. package/dist/services/populate.d.ts.map +1 -0
  205. package/dist/services/populate.js +484 -0
  206. package/dist/services/populate.js.map +1 -0
  207. package/dist/services/populate.test.node.d.ts +9 -0
  208. package/dist/services/populate.test.node.d.ts.map +1 -0
  209. package/dist/services/populate.test.node.js +910 -0
  210. package/dist/services/populate.test.node.js.map +1 -0
  211. package/dist/services/relation-projection.d.ts +52 -0
  212. package/dist/services/relation-projection.d.ts.map +1 -0
  213. package/dist/services/relation-projection.js +81 -0
  214. package/dist/services/relation-projection.js.map +1 -0
  215. package/dist/services/richtext-populate.d.ts +87 -0
  216. package/dist/services/richtext-populate.d.ts.map +1 -0
  217. package/dist/services/richtext-populate.js +189 -0
  218. package/dist/services/richtext-populate.js.map +1 -0
  219. package/dist/services/richtext-populate.test.node.d.ts +9 -0
  220. package/dist/services/richtext-populate.test.node.d.ts.map +1 -0
  221. package/dist/services/richtext-populate.test.node.js +197 -0
  222. package/dist/services/richtext-populate.test.node.js.map +1 -0
  223. package/dist/storage/collection-fingerprint.d.ts +21 -0
  224. package/dist/storage/collection-fingerprint.d.ts.map +1 -0
  225. package/dist/storage/collection-fingerprint.js +172 -0
  226. package/dist/storage/collection-fingerprint.js.map +1 -0
  227. package/dist/storage/collection-fingerprint.test.node.d.ts +9 -0
  228. package/dist/storage/collection-fingerprint.test.node.d.ts.map +1 -0
  229. package/dist/storage/collection-fingerprint.test.node.js +256 -0
  230. package/dist/storage/collection-fingerprint.test.node.js.map +1 -0
  231. package/dist/storage/field-store-map.d.ts +59 -0
  232. package/dist/storage/field-store-map.d.ts.map +1 -0
  233. package/dist/storage/field-store-map.js +75 -0
  234. package/dist/storage/field-store-map.js.map +1 -0
  235. package/dist/storage/field-store-map.test.node.d.ts +9 -0
  236. package/dist/storage/field-store-map.test.node.d.ts.map +1 -0
  237. package/dist/storage/field-store-map.test.node.js +117 -0
  238. package/dist/storage/field-store-map.test.node.js.map +1 -0
  239. package/dist/storage/index.d.ts +10 -0
  240. package/dist/storage/index.d.ts.map +1 -0
  241. package/dist/storage/index.js +10 -0
  242. package/dist/storage/index.js.map +1 -0
  243. package/dist/utils/normalise-dates.d.ts +15 -0
  244. package/dist/utils/normalise-dates.d.ts.map +1 -0
  245. package/dist/utils/normalise-dates.js +22 -0
  246. package/dist/utils/normalise-dates.js.map +1 -0
  247. package/dist/utils/slugify.d.ts +56 -0
  248. package/dist/utils/slugify.d.ts.map +1 -0
  249. package/dist/utils/slugify.js +91 -0
  250. package/dist/utils/slugify.js.map +1 -0
  251. package/dist/utils/slugify.test.node.d.ts +9 -0
  252. package/dist/utils/slugify.test.node.d.ts.map +1 -0
  253. package/dist/utils/slugify.test.node.js +86 -0
  254. package/dist/utils/slugify.test.node.js.map +1 -0
  255. package/dist/utils/storage-utils.d.ts +36 -0
  256. package/dist/utils/storage-utils.d.ts.map +1 -0
  257. package/dist/utils/storage-utils.js +38 -0
  258. package/dist/utils/storage-utils.js.map +1 -0
  259. package/dist/utils/utils.general.d.ts +64 -0
  260. package/dist/utils/utils.general.d.ts.map +1 -0
  261. package/dist/utils/utils.general.js +219 -0
  262. package/dist/utils/utils.general.js.map +1 -0
  263. package/dist/validation/index.d.ts +9 -0
  264. package/dist/validation/index.d.ts.map +1 -0
  265. package/dist/validation/index.js +9 -0
  266. package/dist/validation/index.js.map +1 -0
  267. package/dist/validation/shared.d.ts +36 -0
  268. package/dist/validation/shared.d.ts.map +1 -0
  269. package/dist/validation/shared.js +42 -0
  270. package/dist/validation/shared.js.map +1 -0
  271. package/dist/workflow/index.d.ts +2 -0
  272. package/dist/workflow/index.d.ts.map +1 -0
  273. package/dist/workflow/index.js +3 -0
  274. package/dist/workflow/index.js.map +1 -0
  275. package/dist/workflow/workflow.d.ts +40 -0
  276. package/dist/workflow/workflow.d.ts.map +1 -0
  277. package/dist/workflow/workflow.js +96 -0
  278. package/dist/workflow/workflow.js.map +1 -0
  279. package/dist/workflow/workflow.test.node.d.ts +2 -0
  280. package/dist/workflow/workflow.test.node.d.ts.map +1 -0
  281. package/dist/workflow/workflow.test.node.js +198 -0
  282. package/dist/workflow/workflow.test.node.js.map +1 -0
  283. package/package.json +88 -0
@@ -0,0 +1,352 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ import { fieldTypeToStore } from '../storage/field-store-map.js';
9
+ // ---------------------------------------------------------------------------
10
+ // Document-level reserved keys
11
+ // ---------------------------------------------------------------------------
12
+ /** Where clause keys that map to document-level columns, not EAV stores. */
13
+ const DOCUMENT_LEVEL_KEYS = new Set(['status', 'path', 'query']);
14
+ // ---------------------------------------------------------------------------
15
+ // Document-level sort columns
16
+ // ---------------------------------------------------------------------------
17
+ const DOCUMENT_SORT_COLUMNS = {
18
+ createdAt: 'created_at',
19
+ updatedAt: 'updated_at',
20
+ path: 'path',
21
+ created_at: 'created_at',
22
+ updated_at: 'updated_at',
23
+ };
24
+ // ---------------------------------------------------------------------------
25
+ // Parse functions
26
+ // ---------------------------------------------------------------------------
27
+ /**
28
+ * Parse a client API `where` clause into document-level conditions and
29
+ * adapter-facing DocumentFilter descriptors. When `ctx` is provided,
30
+ * nested relation sub-clauses (e.g. `{ category: { path: 'news' } }`)
31
+ * are resolved into `RelationFilter` entries; otherwise only
32
+ * direct/operator predicates against the relation's own
33
+ * `target_document_id` are emitted.
34
+ */
35
+ export async function parseWhere(where, definition, ctx) {
36
+ return parseWhereInternal(where, definition, ctx, { isNested: false, inCombinator: false });
37
+ }
38
+ /**
39
+ * Combine a `beforeRead` hook predicate with a caller-supplied where
40
+ * clause using implicit AND. Returns whichever side is non-empty, or
41
+ * wraps both in `$and` when both are present.
42
+ *
43
+ * Defined at the predicate level (rather than merging two `ParsedWhere`
44
+ * outputs) so the result still flows through `parseWhere` once — there
45
+ * is one normalisation pass and one place where reserved keys, relation
46
+ * lookups, and combinator flattening happen. `null` is treated the same
47
+ * as `undefined` (the cache value `null` records "hook ran and applied
48
+ * no scoping").
49
+ */
50
+ export function mergePredicates(hookPredicate, userWhere) {
51
+ if (!hookPredicate && !userWhere)
52
+ return undefined;
53
+ if (!hookPredicate)
54
+ return userWhere;
55
+ if (!userWhere)
56
+ return hookPredicate;
57
+ return { $and: [hookPredicate, userWhere] };
58
+ }
59
+ /**
60
+ * Recursion entry point. `isNested: true` disables the top-level reserved
61
+ * keys (`status`, `query`, `path`) so that on a nested sub-where, those
62
+ * names resolve as ordinary fields on the target collection (where `path`
63
+ * and `status` are typically real text fields).
64
+ */
65
+ async function parseWhereInternal(where, definition, ctx, { isNested, inCombinator }) {
66
+ const result = { filters: [] };
67
+ if (!where)
68
+ return result;
69
+ for (const [key, rawValue] of Object.entries(where)) {
70
+ // The shared `QueryPredicate` index signature includes `undefined` so it
71
+ // can coexist with the optional `$and` / `$or` combinator properties;
72
+ // skip explicit-undefined entries up front so the rest of this loop can
73
+ // assume a concrete value.
74
+ if (rawValue === undefined)
75
+ continue;
76
+ // --- Boolean combinators ---------------------------------------------
77
+ // `$and` / `$or` carry an array of child predicates. Each child is
78
+ // parsed in its own scope (an `$or` child is itself an implicit AND of
79
+ // its keys); the resulting `DocumentFilter[]` is wrapped in a
80
+ // CombinatorFilter and added to the outer filter list.
81
+ //
82
+ // Top-level `$and` is structurally redundant with the implicit AND
83
+ // across `result.filters`, so we flatten it: parse each child and
84
+ // splice its filters in. The combinator only earns its keep when
85
+ // nested under `$or` (or vice versa). Document-level reserved-key
86
+ // results (status / query / pathFilter) inside combinators are
87
+ // intentionally dropped — they don't compose with OR semantics and
88
+ // belong at the top level of the where clause.
89
+ if (key === '$and' || key === '$or') {
90
+ if (!Array.isArray(rawValue)) {
91
+ ctx?.logger?.debug({ key, collection: definition.path }, 'parse-where: dropping combinator — value is not an array of predicates');
92
+ continue;
93
+ }
94
+ const childFilters = [];
95
+ for (const child of rawValue) {
96
+ // Children parse with `inCombinator: true` so reserved keys
97
+ // (`status`, `path`) become `DocumentColumnFilter` predicates
98
+ // rather than being intercepted as top-level scalar parameters
99
+ // — they need to compose with the combinator's OR/AND, which
100
+ // the top-level scalar form cannot do.
101
+ const childParsed = await parseWhereInternal(child, definition, ctx, {
102
+ isNested,
103
+ inCombinator: true,
104
+ });
105
+ childFilters.push(childParsed.filters);
106
+ }
107
+ if (key === '$and') {
108
+ // Flatten: AND over [[a, b], [c]] becomes [a, b, c] at the outer
109
+ // level since the outer scope is itself implicit-AND.
110
+ for (const group of childFilters)
111
+ result.filters.push(...group);
112
+ }
113
+ else {
114
+ // `$or`: each child group is itself implicit-AND, so wrap each
115
+ // group in an inner `and` combinator (when it has more than one
116
+ // filter) and emit a single outer `or` combinator over the lot.
117
+ // Empty child groups (parsed to nothing) are skipped — keeping
118
+ // them would change semantics ("OR with always-true").
119
+ const orChildren = [];
120
+ for (const group of childFilters) {
121
+ if (group.length === 0)
122
+ continue;
123
+ if (group.length === 1) {
124
+ orChildren.push(group[0]);
125
+ }
126
+ else {
127
+ orChildren.push({ kind: 'and', children: group });
128
+ }
129
+ }
130
+ if (orChildren.length > 0) {
131
+ result.filters.push({ kind: 'or', children: orChildren });
132
+ }
133
+ }
134
+ continue;
135
+ }
136
+ // --- Document-level reserved keys --------------------------------------
137
+ // At the top level (not nested in a relation, not inside a combinator)
138
+ // these keys map to direct adapter scalar parameters
139
+ // (`ParsedWhere.status` / `query` / `pathFilter`) which compile to the
140
+ // outermost WHERE clause. Inside a combinator that mapping no longer
141
+ // composes — the predicate needs to OR with siblings, which the scalar
142
+ // parameter form cannot express — so `status` / `path` downshift to a
143
+ // `DocumentColumnFilter` and `query` is dropped (text search has no
144
+ // sensible OR-composing form here).
145
+ if (!isNested) {
146
+ if (key === 'status') {
147
+ if (inCombinator) {
148
+ const parsed = normaliseToOperator(rawValue);
149
+ if (parsed) {
150
+ result.filters.push({
151
+ kind: 'docColumn',
152
+ column: 'status',
153
+ operator: parsed.operator,
154
+ value: parsed.value === null ? null : String(parsed.value),
155
+ });
156
+ }
157
+ continue;
158
+ }
159
+ if (typeof rawValue === 'string') {
160
+ result.status = rawValue;
161
+ }
162
+ continue;
163
+ }
164
+ if (key === 'query') {
165
+ if (inCombinator) {
166
+ ctx?.logger?.debug({ collection: definition.path }, 'parse-where: dropping `query` inside a combinator — text search does not compose with OR/AND');
167
+ continue;
168
+ }
169
+ if (typeof rawValue === 'string') {
170
+ result.query = rawValue;
171
+ }
172
+ continue;
173
+ }
174
+ if (key === 'path') {
175
+ if (inCombinator) {
176
+ const parsed = normaliseToOperator(rawValue);
177
+ if (parsed) {
178
+ result.filters.push({
179
+ kind: 'docColumn',
180
+ column: 'path',
181
+ operator: parsed.operator,
182
+ value: parsed.value === null ? null : String(parsed.value),
183
+ });
184
+ }
185
+ continue;
186
+ }
187
+ const parsed = normaliseToOperator(rawValue);
188
+ if (parsed) {
189
+ result.pathFilter = {
190
+ operator: parsed.operator,
191
+ value: String(parsed.value),
192
+ };
193
+ }
194
+ continue;
195
+ }
196
+ }
197
+ // --- Field-level keys --------------------------------------------------
198
+ const field = definition.fields.find((f) => f.name === key);
199
+ if (!field)
200
+ continue; // Unknown field — skip silently
201
+ // Relation field with a plain-object sub-clause → cross-collection filter.
202
+ // A "plain object with no $-prefixed top-level keys" is unambiguously a
203
+ // nested where; anything else (bare value, operator object) stays in the
204
+ // ordinary field-filter path below and matches the relation's
205
+ // target_document_id column directly.
206
+ if (field.type === 'relation' && isPlainSubWhere(rawValue)) {
207
+ if (!ctx) {
208
+ // No way to resolve the target without a ParseContext. Direct
209
+ // callers of `parseWhere` (tests, tooling) can legitimately hit
210
+ // this path; CollectionHandle always provides one.
211
+ continue;
212
+ }
213
+ const relation = field;
214
+ const targetPath = relation.targetCollection;
215
+ if (!targetPath) {
216
+ ctx.logger?.debug({ fieldName: key, collection: definition.path }, 'parse-where: dropping nested relation sub-clause — relation field has no targetCollection');
217
+ continue;
218
+ }
219
+ const targetDef = ctx.collections.find((c) => c.path === targetPath);
220
+ if (!targetDef) {
221
+ ctx.logger?.debug({ fieldName: key, targetPath, collection: definition.path }, 'parse-where: dropping nested relation sub-clause — target collection not registered');
222
+ continue;
223
+ }
224
+ const targetCollectionId = await ctx.resolveCollectionId(targetPath);
225
+ const nested = await parseWhereInternal(rawValue, targetDef, ctx, {
226
+ isNested: true,
227
+ inCombinator: false,
228
+ });
229
+ // Flatten nested: only field-level / relation-level conditions make
230
+ // sense inside a relation subclause. Document-level keys (status,
231
+ // path, query) on the target are deliberately out of scope for this
232
+ // first phase — they can be added later by promoting them into
233
+ // the nested filter list here.
234
+ result.filters.push({
235
+ kind: 'relation',
236
+ fieldName: key,
237
+ targetCollectionId,
238
+ nested: nested.filters,
239
+ });
240
+ continue;
241
+ }
242
+ const storeInfo = fieldTypeToStore[field.type];
243
+ if (!storeInfo)
244
+ continue; // Structure fields can't be filtered directly
245
+ const parsed = normaliseToOperator(rawValue);
246
+ if (!parsed)
247
+ continue;
248
+ result.filters.push({
249
+ kind: 'field',
250
+ fieldName: key,
251
+ storeType: storeInfo.storeType,
252
+ valueColumn: storeInfo.valueColumn,
253
+ operator: parsed.operator,
254
+ value: parsed.value,
255
+ });
256
+ }
257
+ return result;
258
+ }
259
+ /**
260
+ * Parse a client API `sort` spec into either a field-level sort descriptor
261
+ * or a document-level order column.
262
+ */
263
+ export function parseSort(sort, definition) {
264
+ if (!sort) {
265
+ return { orderBy: 'created_at', orderDirection: 'desc' };
266
+ }
267
+ const entries = Object.entries(sort);
268
+ if (entries.length === 0) {
269
+ return { orderBy: 'created_at', orderDirection: 'desc' };
270
+ }
271
+ const [fieldName, direction] = entries[0];
272
+ // Check if it's a document-level column
273
+ const docColumn = DOCUMENT_SORT_COLUMNS[fieldName];
274
+ if (docColumn) {
275
+ return { orderBy: docColumn, orderDirection: direction };
276
+ }
277
+ // Check if it's a collection field
278
+ const field = definition.fields.find((f) => f.name === fieldName);
279
+ if (!field) {
280
+ return { orderBy: 'created_at', orderDirection: 'desc' };
281
+ }
282
+ const storeInfo = fieldTypeToStore[field.type];
283
+ if (!storeInfo) {
284
+ return { orderBy: 'created_at', orderDirection: 'desc' };
285
+ }
286
+ return {
287
+ fieldSort: {
288
+ fieldName,
289
+ storeType: storeInfo.storeType,
290
+ valueColumn: storeInfo.valueColumn,
291
+ direction,
292
+ },
293
+ };
294
+ }
295
+ /**
296
+ * Predicate-level combinator keys. These are `$`-prefixed but, unlike
297
+ * operator keys (`$eq`, `$ne`, …), they are valid inside a "plain
298
+ * sub-where" because their value is a list of nested predicates rather
299
+ * than a comparison value.
300
+ */
301
+ const COMBINATOR_KEYS = new Set(['$and', '$or']);
302
+ /**
303
+ * A "plain sub-where" is a non-null, non-array object whose top-level keys
304
+ * are field names or predicate-level combinators (`$and` / `$or`) — but
305
+ * **not** comparison-operator keys (`$eq`, `$ne`, …). Used to disambiguate
306
+ * `{ category: { path: 'news' } }` (nested where against the target) from
307
+ * `{ category: { $eq: 'abc-id' } }` (operator object on the relation's own
308
+ * `target_document_id`).
309
+ */
310
+ function isPlainSubWhere(raw) {
311
+ if (raw === null || typeof raw !== 'object')
312
+ return false;
313
+ if (Array.isArray(raw))
314
+ return false;
315
+ const keys = Object.keys(raw);
316
+ // An empty object is not a meaningful sub-where; treat as non-match
317
+ // (ordinary field-filter path will then reject it via normaliseToOperator).
318
+ if (keys.length === 0)
319
+ return false;
320
+ for (const k of keys) {
321
+ if (k.startsWith('$') && !COMBINATOR_KEYS.has(k))
322
+ return false;
323
+ }
324
+ return true;
325
+ }
326
+ /**
327
+ * Normalise a WhereValue (bare value or operator object) into a single
328
+ * operator + value pair.
329
+ */
330
+ function normaliseToOperator(raw) {
331
+ // Bare value → $eq
332
+ if (raw === null ||
333
+ typeof raw === 'string' ||
334
+ typeof raw === 'number' ||
335
+ typeof raw === 'boolean') {
336
+ return { operator: '$eq', value: raw };
337
+ }
338
+ // Operator object
339
+ const ops = raw;
340
+ const operatorEntries = Object.entries(ops);
341
+ if (operatorEntries.length === 0)
342
+ return undefined;
343
+ // Use the first operator found
344
+ const [op, val] = operatorEntries[0];
345
+ return {
346
+ operator: op,
347
+ value: val,
348
+ };
349
+ }
350
+ /** Exported for testing. */
351
+ export { DOCUMENT_LEVEL_KEYS, DOCUMENT_SORT_COLUMNS };
352
+ //# sourceMappingURL=parse-where.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-where.js","sourceRoot":"","sources":["../../src/query/parse-where.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=parse-where.test.node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-where.test.node.d.ts","sourceRoot":"","sources":["../../src/query/parse-where.test.node.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}