@byline/db-postgres 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.
- package/LICENSE +373 -0
- package/README.md +18 -0
- package/dist/database/schema/auth.d.ts +857 -0
- package/dist/database/schema/auth.d.ts.map +1 -0
- package/dist/database/schema/auth.js +176 -0
- package/dist/database/schema/auth.js.map +1 -0
- package/dist/database/schema/index.d.ts +2955 -0
- package/dist/database/schema/index.d.ts.map +1 -0
- package/dist/database/schema/index.js +500 -0
- package/dist/database/schema/index.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/test-helper.d.ts +17 -0
- package/dist/lib/test-helper.d.ts.map +1 -0
- package/dist/lib/test-helper.js +47 -0
- package/dist/lib/test-helper.js.map +1 -0
- package/dist/modules/admin/admin-permissions-repository.d.ts +17 -0
- package/dist/modules/admin/admin-permissions-repository.d.ts.map +1 -0
- package/dist/modules/admin/admin-permissions-repository.js +76 -0
- package/dist/modules/admin/admin-permissions-repository.js.map +1 -0
- package/dist/modules/admin/admin-roles-repository.d.ts +12 -0
- package/dist/modules/admin/admin-roles-repository.d.ts.map +1 -0
- package/dist/modules/admin/admin-roles-repository.js +168 -0
- package/dist/modules/admin/admin-roles-repository.js.map +1 -0
- package/dist/modules/admin/admin-store.d.ts +20 -0
- package/dist/modules/admin/admin-store.d.ts.map +1 -0
- package/dist/modules/admin/admin-store.js +28 -0
- package/dist/modules/admin/admin-store.js.map +1 -0
- package/dist/modules/admin/admin-users-repository.d.ts +12 -0
- package/dist/modules/admin/admin-users-repository.d.ts.map +1 -0
- package/dist/modules/admin/admin-users-repository.js +208 -0
- package/dist/modules/admin/admin-users-repository.js.map +1 -0
- package/dist/modules/admin/index.d.ts +27 -0
- package/dist/modules/admin/index.d.ts.map +1 -0
- package/dist/modules/admin/index.js +27 -0
- package/dist/modules/admin/index.js.map +1 -0
- package/dist/modules/admin/refresh-tokens-repository.d.ts +16 -0
- package/dist/modules/admin/refresh-tokens-repository.d.ts.map +1 -0
- package/dist/modules/admin/refresh-tokens-repository.js +132 -0
- package/dist/modules/admin/refresh-tokens-repository.js.map +1 -0
- package/dist/modules/admin/tests/auth-integration.test.d.ts +9 -0
- package/dist/modules/admin/tests/auth-integration.test.d.ts.map +1 -0
- package/dist/modules/admin/tests/auth-integration.test.js +392 -0
- package/dist/modules/admin/tests/auth-integration.test.js.map +1 -0
- package/dist/modules/admin/tests/session-provider.test.d.ts +9 -0
- package/dist/modules/admin/tests/session-provider.test.d.ts.map +1 -0
- package/dist/modules/admin/tests/session-provider.test.js +370 -0
- package/dist/modules/admin/tests/session-provider.test.js.map +1 -0
- package/dist/modules/storage/@types.d.ts +116 -0
- package/dist/modules/storage/@types.d.ts.map +1 -0
- package/dist/modules/storage/@types.js +9 -0
- package/dist/modules/storage/@types.js.map +1 -0
- package/dist/modules/storage/storage-commands.d.ts +136 -0
- package/dist/modules/storage/storage-commands.d.ts.map +1 -0
- package/dist/modules/storage/storage-commands.js +272 -0
- package/dist/modules/storage/storage-commands.js.map +1 -0
- package/dist/modules/storage/storage-flatten.d.ts +19 -0
- package/dist/modules/storage/storage-flatten.d.ts.map +1 -0
- package/dist/modules/storage/storage-flatten.js +261 -0
- package/dist/modules/storage/storage-flatten.js.map +1 -0
- package/dist/modules/storage/storage-insert.d.ts +22 -0
- package/dist/modules/storage/storage-insert.d.ts.map +1 -0
- package/dist/modules/storage/storage-insert.js +115 -0
- package/dist/modules/storage/storage-insert.js.map +1 -0
- package/dist/modules/storage/storage-queries.d.ts +377 -0
- package/dist/modules/storage/storage-queries.d.ts.map +1 -0
- package/dist/modules/storage/storage-queries.js +976 -0
- package/dist/modules/storage/storage-queries.js.map +1 -0
- package/dist/modules/storage/storage-restore.d.ts +19 -0
- package/dist/modules/storage/storage-restore.d.ts.map +1 -0
- package/dist/modules/storage/storage-restore.js +350 -0
- package/dist/modules/storage/storage-restore.js.map +1 -0
- package/dist/modules/storage/storage-store-manifest.d.ts +71 -0
- package/dist/modules/storage/storage-store-manifest.d.ts.map +1 -0
- package/dist/modules/storage/storage-store-manifest.js +294 -0
- package/dist/modules/storage/storage-store-manifest.js.map +1 -0
- package/dist/modules/storage/storage-utils.d.ts +23 -0
- package/dist/modules/storage/storage-utils.d.ts.map +1 -0
- package/dist/modules/storage/storage-utils.js +72 -0
- package/dist/modules/storage/storage-utils.js.map +1 -0
- package/dist/modules/storage/tests/storage-field-types.test.d.ts +9 -0
- package/dist/modules/storage/tests/storage-field-types.test.d.ts.map +1 -0
- package/dist/modules/storage/tests/storage-field-types.test.js +146 -0
- package/dist/modules/storage/tests/storage-field-types.test.js.map +1 -0
- package/dist/modules/storage/tests/storage-flatten-reconstruct.test.d.ts +9 -0
- package/dist/modules/storage/tests/storage-flatten-reconstruct.test.d.ts.map +1 -0
- package/dist/modules/storage/tests/storage-flatten-reconstruct.test.js +327 -0
- package/dist/modules/storage/tests/storage-flatten-reconstruct.test.js.map +1 -0
- package/dist/modules/storage/tests/storage-store-manifest.test.d.ts +9 -0
- package/dist/modules/storage/tests/storage-store-manifest.test.d.ts.map +1 -0
- package/dist/modules/storage/tests/storage-store-manifest.test.js +141 -0
- package/dist/modules/storage/tests/storage-store-manifest.test.js.map +1 -0
- package/dist/modules/storage/tests/storage-versioning.test.d.ts +9 -0
- package/dist/modules/storage/tests/storage-versioning.test.d.ts.map +1 -0
- package/dist/modules/storage/tests/storage-versioning.test.js +336 -0
- package/dist/modules/storage/tests/storage-versioning.test.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,377 @@
|
|
|
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 type { CollectionDefinition, DocumentFilter, FieldSort, ICollectionQueries, IDocumentQueries, ReadMode } from '@byline/core';
|
|
9
|
+
import type { NodePgDatabase } from 'drizzle-orm/node-postgres';
|
|
10
|
+
import type * as schema from '../../database/schema/index.js';
|
|
11
|
+
type DatabaseConnection = NodePgDatabase<typeof schema>;
|
|
12
|
+
/**
|
|
13
|
+
* CollectionQueries
|
|
14
|
+
*/
|
|
15
|
+
export declare class CollectionQueries implements ICollectionQueries {
|
|
16
|
+
private db;
|
|
17
|
+
constructor(db: DatabaseConnection);
|
|
18
|
+
getAllCollections(): Promise<{
|
|
19
|
+
id: string;
|
|
20
|
+
path: string;
|
|
21
|
+
singular: string;
|
|
22
|
+
plural: string;
|
|
23
|
+
config: unknown;
|
|
24
|
+
version: number;
|
|
25
|
+
schema_hash: string | null;
|
|
26
|
+
created_at: Date | null;
|
|
27
|
+
updated_at: Date | null;
|
|
28
|
+
}[]>;
|
|
29
|
+
getCollectionByPath(path: string): Promise<{
|
|
30
|
+
id: string;
|
|
31
|
+
created_at: Date | null;
|
|
32
|
+
updated_at: Date | null;
|
|
33
|
+
path: string;
|
|
34
|
+
singular: string;
|
|
35
|
+
plural: string;
|
|
36
|
+
config: unknown;
|
|
37
|
+
version: number;
|
|
38
|
+
schema_hash: string | null;
|
|
39
|
+
} | undefined>;
|
|
40
|
+
getCollectionById(id: string): Promise<{
|
|
41
|
+
id: string;
|
|
42
|
+
created_at: Date | null;
|
|
43
|
+
updated_at: Date | null;
|
|
44
|
+
path: string;
|
|
45
|
+
singular: string;
|
|
46
|
+
plural: string;
|
|
47
|
+
config: unknown;
|
|
48
|
+
version: number;
|
|
49
|
+
schema_hash: string | null;
|
|
50
|
+
} | undefined>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* DocumentQueries
|
|
54
|
+
*/
|
|
55
|
+
export declare class DocumentQueries implements IDocumentQueries {
|
|
56
|
+
private db;
|
|
57
|
+
private collections;
|
|
58
|
+
private collectionPathCache;
|
|
59
|
+
constructor(db: DatabaseConnection, collections: CollectionDefinition[]);
|
|
60
|
+
/**
|
|
61
|
+
* Resolve a collection UUID to its CollectionDefinition by looking up the
|
|
62
|
+
* collection's path in the DB and matching it against the injected array.
|
|
63
|
+
*/
|
|
64
|
+
private getDefinitionForCollection;
|
|
65
|
+
/**
|
|
66
|
+
* Pick the Drizzle view reference to read from based on `readMode`.
|
|
67
|
+
*
|
|
68
|
+
* - `'any'` (default) → `current_documents` — the latest version of
|
|
69
|
+
* each logical document, regardless of status.
|
|
70
|
+
* - `'published'` → `current_published_documents` — the latest
|
|
71
|
+
* version whose status is `'published'`, falling back past newer
|
|
72
|
+
* drafts so public readers keep seeing previously-published
|
|
73
|
+
* content while editors work on an unpublished draft.
|
|
74
|
+
*
|
|
75
|
+
* Both views share the same row shape, so the returned reference is
|
|
76
|
+
* drop-in substitutable at every select/where site.
|
|
77
|
+
*/
|
|
78
|
+
private pickCurrentView;
|
|
79
|
+
/**
|
|
80
|
+
* Reconstruct document fields from unified row values using schema-aware
|
|
81
|
+
* restoration. Meta rows (from store_meta) are converted to
|
|
82
|
+
* FlattenedFieldValue entries so that restoreFieldSetData can inject
|
|
83
|
+
* _id and _type for blocks and array items inline.
|
|
84
|
+
*/
|
|
85
|
+
private reconstructFromUnifiedRows;
|
|
86
|
+
/**
|
|
87
|
+
* getCurrentVersionMetadata — narrow metadata fetch for the current version.
|
|
88
|
+
*
|
|
89
|
+
* Hits `current_documents` only; no field reconstruction, no meta fetch.
|
|
90
|
+
* Used by lifecycle operations (status changes, delete checks) that need
|
|
91
|
+
* `document_version_id` / `status` / `path` but not the document body.
|
|
92
|
+
*/
|
|
93
|
+
getCurrentVersionMetadata({ collection_id, document_id, }: {
|
|
94
|
+
collection_id: string;
|
|
95
|
+
document_id: string;
|
|
96
|
+
}): Promise<{
|
|
97
|
+
document_version_id: string;
|
|
98
|
+
document_id: string;
|
|
99
|
+
collection_id: string;
|
|
100
|
+
path: string;
|
|
101
|
+
status: string;
|
|
102
|
+
created_at: Date;
|
|
103
|
+
updated_at: Date;
|
|
104
|
+
} | null>;
|
|
105
|
+
/**
|
|
106
|
+
* getDocumentById — gets the current version of a document by its logical document ID.
|
|
107
|
+
*/
|
|
108
|
+
getDocumentById({ collection_id, document_id, locale, reconstruct, readMode, filters, }: {
|
|
109
|
+
collection_id: string;
|
|
110
|
+
document_id: string;
|
|
111
|
+
locale?: string;
|
|
112
|
+
reconstruct?: boolean;
|
|
113
|
+
readMode?: ReadMode;
|
|
114
|
+
filters?: DocumentFilter[];
|
|
115
|
+
}): Promise<{
|
|
116
|
+
document_version_id: string;
|
|
117
|
+
document_id: string;
|
|
118
|
+
path: string;
|
|
119
|
+
status: string | null;
|
|
120
|
+
created_at: Date | null;
|
|
121
|
+
updated_at: Date | null;
|
|
122
|
+
fields: any;
|
|
123
|
+
} | null>;
|
|
124
|
+
getDocumentByPath({ collection_id, path, locale, reconstruct, readMode, filters, }: {
|
|
125
|
+
collection_id: string;
|
|
126
|
+
path: string;
|
|
127
|
+
locale?: string;
|
|
128
|
+
reconstruct: boolean;
|
|
129
|
+
readMode?: ReadMode;
|
|
130
|
+
filters?: DocumentFilter[];
|
|
131
|
+
}): Promise<{
|
|
132
|
+
document_version_id: string;
|
|
133
|
+
document_id: string;
|
|
134
|
+
path: string;
|
|
135
|
+
status: string | null;
|
|
136
|
+
created_at: Date | null;
|
|
137
|
+
updated_at: Date | null;
|
|
138
|
+
fields: any;
|
|
139
|
+
} | null>;
|
|
140
|
+
/**
|
|
141
|
+
* getDocumentByVersion — fetches a specific version and reconstructs its fields.
|
|
142
|
+
*/
|
|
143
|
+
getDocumentByVersion({ document_version_id, locale, }: {
|
|
144
|
+
document_version_id: string;
|
|
145
|
+
locale?: string;
|
|
146
|
+
}): Promise<any>;
|
|
147
|
+
/**
|
|
148
|
+
* getDocumentsByVersionIds — fetches and reconstructs multiple documents by
|
|
149
|
+
* version ID. Used for batch loading a known set of versions (e.g.
|
|
150
|
+
* migration scripts, tests).
|
|
151
|
+
*/
|
|
152
|
+
getDocumentsByVersionIds({ document_version_ids, locale, }: {
|
|
153
|
+
document_version_ids: string[];
|
|
154
|
+
locale?: string;
|
|
155
|
+
}): Promise<any[]>;
|
|
156
|
+
/**
|
|
157
|
+
* getDocumentsByDocumentIds — batch-fetch current versions for a list of
|
|
158
|
+
* logical document IDs, with optional selective field loading.
|
|
159
|
+
*
|
|
160
|
+
* Resolves each document_id to its current version via the
|
|
161
|
+
* `current_documents` view (soft-deleted documents are excluded by the
|
|
162
|
+
* view definition), then delegates to `reconstructDocuments` for the
|
|
163
|
+
* shared field + meta reconstruction path.
|
|
164
|
+
*
|
|
165
|
+
* Primary consumer is the client API's relationship populate pass —
|
|
166
|
+
* `store_relation` rows carry `target_document_id` (not version ID), so
|
|
167
|
+
* populate collects those IDs and resolves them here in one round trip.
|
|
168
|
+
*/
|
|
169
|
+
getDocumentsByDocumentIds({ collection_id, document_ids, locale, fields, readMode, filters, }: {
|
|
170
|
+
collection_id: string;
|
|
171
|
+
document_ids: string[];
|
|
172
|
+
locale?: string;
|
|
173
|
+
fields?: string[];
|
|
174
|
+
readMode?: ReadMode;
|
|
175
|
+
filters?: DocumentFilter[];
|
|
176
|
+
}): Promise<any[]>;
|
|
177
|
+
/**
|
|
178
|
+
* getDocumentHistory — paginated version history for a document,
|
|
179
|
+
* including soft-deleted versions.
|
|
180
|
+
*/
|
|
181
|
+
getDocumentHistory({ collection_id, document_id, locale, page, page_size, order, desc, }: {
|
|
182
|
+
collection_id: string;
|
|
183
|
+
document_id: string;
|
|
184
|
+
locale?: string;
|
|
185
|
+
page?: number;
|
|
186
|
+
page_size?: number;
|
|
187
|
+
order?: string;
|
|
188
|
+
desc?: boolean;
|
|
189
|
+
query?: string;
|
|
190
|
+
}): Promise<{
|
|
191
|
+
documents: any[];
|
|
192
|
+
meta: {
|
|
193
|
+
total: number;
|
|
194
|
+
page: number;
|
|
195
|
+
page_size: number;
|
|
196
|
+
total_pages: number;
|
|
197
|
+
order: string;
|
|
198
|
+
desc: boolean;
|
|
199
|
+
};
|
|
200
|
+
}>;
|
|
201
|
+
/**
|
|
202
|
+
* getPublishedVersion
|
|
203
|
+
*
|
|
204
|
+
* Find the latest version of a document that has a specific status
|
|
205
|
+
* (defaults to 'published'). Queries `document_versions` directly so it
|
|
206
|
+
* can find a published version even when a newer draft exists.
|
|
207
|
+
*
|
|
208
|
+
* Returns minimal version metadata (not reconstructed content), or null
|
|
209
|
+
* if no version with the requested status exists.
|
|
210
|
+
*/
|
|
211
|
+
getPublishedVersion({ collection_id, document_id, status, }: {
|
|
212
|
+
collection_id: string;
|
|
213
|
+
document_id: string;
|
|
214
|
+
status?: string;
|
|
215
|
+
}): Promise<{
|
|
216
|
+
document_version_id: string;
|
|
217
|
+
document_id: string;
|
|
218
|
+
status: string;
|
|
219
|
+
created_at: Date;
|
|
220
|
+
updated_at: Date;
|
|
221
|
+
} | null>;
|
|
222
|
+
/**
|
|
223
|
+
* getPublishedDocumentIds
|
|
224
|
+
*
|
|
225
|
+
* Given a list of document IDs, return the subset that have at least one
|
|
226
|
+
* version with the requested status (defaults to 'published'). Uses a
|
|
227
|
+
* single batch query instead of per-document lookups.
|
|
228
|
+
*/
|
|
229
|
+
getPublishedDocumentIds({ collection_id, document_ids, status, }: {
|
|
230
|
+
collection_id: string;
|
|
231
|
+
document_ids: string[];
|
|
232
|
+
status?: string;
|
|
233
|
+
}): Promise<Set<string>>;
|
|
234
|
+
/**
|
|
235
|
+
* getDocumentCountsByStatus
|
|
236
|
+
*
|
|
237
|
+
* Returns a count of current documents grouped by workflow status for a
|
|
238
|
+
* given collection. Uses the `current_documents` view so each logical
|
|
239
|
+
* document is counted once (at its latest/current version).
|
|
240
|
+
*/
|
|
241
|
+
getDocumentCountsByStatus({ collection_id, filters, }: {
|
|
242
|
+
collection_id: string;
|
|
243
|
+
filters?: DocumentFilter[];
|
|
244
|
+
}): Promise<Array<{
|
|
245
|
+
status: string;
|
|
246
|
+
count: number;
|
|
247
|
+
}>>;
|
|
248
|
+
/**
|
|
249
|
+
* reconstructDocuments — retrieve field values and reconstruct multiple documents.
|
|
250
|
+
* Supports selective field loading via the `fields` parameter.
|
|
251
|
+
*/
|
|
252
|
+
private reconstructDocuments;
|
|
253
|
+
/**
|
|
254
|
+
* Gets all field values for a single document version.
|
|
255
|
+
* Delegates to the multi-version dynamic UNION ALL builder.
|
|
256
|
+
*/
|
|
257
|
+
private getAllFieldValues;
|
|
258
|
+
/**
|
|
259
|
+
* Gets field values for multiple versions in a single query.
|
|
260
|
+
*
|
|
261
|
+
* When `storeTypes` is provided, only those store tables are included in
|
|
262
|
+
* the UNION ALL — this is the selective field loading optimisation for
|
|
263
|
+
* list views that only need a subset of fields.
|
|
264
|
+
*/
|
|
265
|
+
private getAllFieldValuesForMultipleVersions;
|
|
266
|
+
/**
|
|
267
|
+
* findDocuments — field-level filtered, sorted, paginated query.
|
|
268
|
+
*
|
|
269
|
+
* Each `FieldFilter` becomes an EXISTS subquery against the appropriate EAV
|
|
270
|
+
* store table. A `RelationFilter` becomes a nested EXISTS that joins
|
|
271
|
+
* `store_relation` to the target collection's current-documents view
|
|
272
|
+
* (selected by `readMode` so draft leaks can't happen through filter
|
|
273
|
+
* predicates) and recurses into its own `nested` filters. A `FieldSort`
|
|
274
|
+
* becomes a LEFT JOIN LATERAL to pull the sort value into the outer query.
|
|
275
|
+
* Document-level conditions (status, path) are applied directly on the
|
|
276
|
+
* current_documents view.
|
|
277
|
+
*/
|
|
278
|
+
findDocuments({ collection_id, filters, status, pathFilter, query, sort, orderBy, orderDirection, locale, page, pageSize, fields: requestedFields, readMode, }: {
|
|
279
|
+
collection_id: string;
|
|
280
|
+
filters?: DocumentFilter[];
|
|
281
|
+
status?: string;
|
|
282
|
+
pathFilter?: {
|
|
283
|
+
operator: string;
|
|
284
|
+
value: string;
|
|
285
|
+
};
|
|
286
|
+
query?: string;
|
|
287
|
+
sort?: FieldSort;
|
|
288
|
+
orderBy?: string;
|
|
289
|
+
orderDirection?: 'asc' | 'desc';
|
|
290
|
+
locale?: string;
|
|
291
|
+
page?: number;
|
|
292
|
+
pageSize?: number;
|
|
293
|
+
fields?: string[];
|
|
294
|
+
readMode?: ReadMode;
|
|
295
|
+
}): Promise<{
|
|
296
|
+
documents: any[];
|
|
297
|
+
total: number;
|
|
298
|
+
}>;
|
|
299
|
+
/**
|
|
300
|
+
* Build an EXISTS subquery for a single DocumentFilter. Dispatches on
|
|
301
|
+
* `kind` — field filters emit a direct EXISTS against the field's EAV
|
|
302
|
+
* store; relation filters emit a nested EXISTS that joins through
|
|
303
|
+
* `store_relation` to the target collection's current-documents view
|
|
304
|
+
* and recurses against the target's own stores; combinator filters
|
|
305
|
+
* emit a parenthesised AND/OR group; document-column filters emit a
|
|
306
|
+
* direct comparison on the outer scope's status/path column.
|
|
307
|
+
*
|
|
308
|
+
* `outerScope` carries SQL references to the enclosing scope's
|
|
309
|
+
* `document_version_id`, `status`, and `path` — `d.id`/`d.status`/
|
|
310
|
+
* `d.path` at the top level, the equivalent column references on the
|
|
311
|
+
* Drizzle view for single-doc lookups, and `td${n}.…` inside relation
|
|
312
|
+
* hops. `depth` is the current relation-nesting level; each relation
|
|
313
|
+
* hop bumps it so aliases stay unique across nested EXISTS scopes
|
|
314
|
+
* (Postgres would otherwise resolve `td.id` to the innermost `td`,
|
|
315
|
+
* silently producing the wrong rows).
|
|
316
|
+
*/
|
|
317
|
+
private buildFilterExists;
|
|
318
|
+
/**
|
|
319
|
+
* Build a parenthesised AND/OR group from a CombinatorFilter. Each child
|
|
320
|
+
* compiles through `buildFilterExists` recursively, so combinators nest
|
|
321
|
+
* freely and inherit the outer scope.
|
|
322
|
+
*
|
|
323
|
+
* An empty `children` array would emit `()` and produce a syntax error,
|
|
324
|
+
* so callers (the parser) skip empty groups; this method assumes at
|
|
325
|
+
* least one child by construction.
|
|
326
|
+
*/
|
|
327
|
+
private buildCombinatorGroup;
|
|
328
|
+
/**
|
|
329
|
+
* Compile a `DocumentColumnFilter` against the outer scope's status or
|
|
330
|
+
* path column. Plain comparison — no EXISTS — because the column lives
|
|
331
|
+
* directly on the outer relation (`document_versions` row), not in the
|
|
332
|
+
* EAV stores.
|
|
333
|
+
*/
|
|
334
|
+
private buildDocColumnFilter;
|
|
335
|
+
/**
|
|
336
|
+
* Build an EXISTS subquery for a single field-level filter.
|
|
337
|
+
*/
|
|
338
|
+
private buildFieldExists;
|
|
339
|
+
/**
|
|
340
|
+
* Build a nested EXISTS subquery for a cross-collection relation filter.
|
|
341
|
+
*
|
|
342
|
+
* Joins `store_relation` to the target collection's current-documents
|
|
343
|
+
* view (`current_published_documents` under `readMode: 'published'`,
|
|
344
|
+
* `current_documents` otherwise — so a draft target doesn't leak when
|
|
345
|
+
* the outer read is in published mode), then recurses each nested
|
|
346
|
+
* filter against the target version's own `td.id`.
|
|
347
|
+
*
|
|
348
|
+
* With no nested filters this reduces to "source has any relation row
|
|
349
|
+
* at all on this field pointing at a target that resolves in the
|
|
350
|
+
* selected view" — useful as a base case but more typically the
|
|
351
|
+
* nested list carries a predicate.
|
|
352
|
+
*/
|
|
353
|
+
private buildRelationExists;
|
|
354
|
+
/**
|
|
355
|
+
* Build a comparison condition for a filter operator.
|
|
356
|
+
*/
|
|
357
|
+
private buildFilterCondition;
|
|
358
|
+
/**
|
|
359
|
+
* Build a condition for a document-level column (status, path).
|
|
360
|
+
*/
|
|
361
|
+
private buildDocumentLevelCondition;
|
|
362
|
+
/**
|
|
363
|
+
* Build an ORDER BY clause for a document-level column.
|
|
364
|
+
*/
|
|
365
|
+
private buildDocumentOrderClause;
|
|
366
|
+
/**
|
|
367
|
+
* Converts a union field row - back into an array of FlattenedStore
|
|
368
|
+
* that the reconstruction utilities expect
|
|
369
|
+
*/
|
|
370
|
+
private convertUnionRowToFlattenedStores;
|
|
371
|
+
}
|
|
372
|
+
export declare function createQueryBuilders(db: DatabaseConnection, collections: CollectionDefinition[]): {
|
|
373
|
+
collections: CollectionQueries;
|
|
374
|
+
documents: DocumentQueries;
|
|
375
|
+
};
|
|
376
|
+
export {};
|
|
377
|
+
//# sourceMappingURL=storage-queries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-queries.d.ts","sourceRoot":"","sources":["../../../src/modules/storage/storage-queries.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,oBAAoB,EAGpB,cAAc,EAEd,SAAS,EAET,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EAGT,MAAM,cAAc,CAAA;AAOrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAS/D,OAAO,KAAK,KAAK,MAAM,MAAM,gCAAgC,CAAA;AAE7D,KAAK,kBAAkB,GAAG,cAAc,CAAC,OAAO,MAAM,CAAC,CAAA;AAiCvD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC9C,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,kBAAkB;IAEpC,iBAAiB;;;;;;;;;;;IAIjB,mBAAmB,CAAC,IAAI,EAAE,MAAM;;;;;;;;;;;IAIhC,iBAAiB,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;;CAGnC;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,mBAAmB,CAA4B;gBAE3C,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE;IAKvE;;;OAGG;YACW,0BAA0B;IA0BxC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,eAAe;IAMvB;;;;;OAKG;IACH,OAAO,CAAC,0BAA0B;IA0BlC;;;;;;OAMG;IACG,yBAAyB,CAAC,EAC9B,aAAa,EACb,WAAW,GACZ,EAAE;QACD,aAAa,EAAE,MAAM,CAAA;QACrB,WAAW,EAAE,MAAM,CAAA;KACpB,GAAG,OAAO,CAAC;QACV,mBAAmB,EAAE,MAAM,CAAA;QAC3B,WAAW,EAAE,MAAM,CAAA;QACnB,aAAa,EAAE,MAAM,CAAA;QACrB,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,IAAI,CAAA;QAChB,UAAU,EAAE,IAAI,CAAA;KACjB,GAAG,IAAI,CAAC;IAiCT;;OAEG;IACG,eAAe,CAAC,EACpB,aAAa,EACb,WAAW,EACX,MAAa,EACb,WAAkB,EAClB,QAAQ,EACR,OAAO,GACR,EAAE;QACD,aAAa,EAAE,MAAM,CAAA;QACrB,WAAW,EAAE,MAAM,CAAA;QACnB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,QAAQ,CAAC,EAAE,QAAQ,CAAA;QACnB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAA;KAC3B;;;;;;;;;IAyEK,iBAAiB,CAAC,EACtB,aAAa,EACb,IAAI,EACJ,MAAa,EACb,WAAkB,EAClB,QAAQ,EACR,OAAO,GACR,EAAE;QACD,aAAa,EAAE,MAAM,CAAA;QACrB,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,OAAO,CAAA;QACpB,QAAQ,CAAC,EAAE,QAAQ,CAAA;QACnB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAA;KAC3B;;;;;;;;;IAsED;;OAEG;IACG,oBAAoB,CAAC,EACzB,mBAAmB,EACnB,MAAc,GACf,EAAE;QACD,mBAAmB,EAAE,MAAM,CAAA;QAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,GAAG,OAAO,CAAC,GAAG,CAAC;IA6ChB;;;;OAIG;IACG,wBAAwB,CAAC,EAC7B,oBAAoB,EACpB,MAAc,GACf,EAAE;QACD,oBAAoB,EAAE,MAAM,EAAE,CAAA;QAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAWlB;;;;;;;;;;;;OAYG;IACG,yBAAyB,CAAC,EAC9B,aAAa,EACb,YAAY,EACZ,MAAc,EACd,MAAM,EACN,QAAQ,EACR,OAAO,GACR,EAAE;QACD,aAAa,EAAE,MAAM,CAAA;QACrB,YAAY,EAAE,MAAM,EAAE,CAAA;QACtB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;QACjB,QAAQ,CAAC,EAAE,QAAQ,CAAA;QACnB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAA;KAC3B,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAgClB;;;OAGG;IACG,kBAAkB,CAAC,EACvB,aAAa,EACb,WAAW,EACX,MAAc,EACd,IAAQ,EACR,SAAc,EACd,KAAoB,EACpB,IAAW,GACZ,EAAE;QACD,aAAa,EAAE,MAAM,CAAA;QACrB,WAAW,EAAE,MAAM,CAAA;QACnB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,GAAG,OAAO,CAAC;QACV,SAAS,EAAE,GAAG,EAAE,CAAA;QAChB,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAA;YACb,IAAI,EAAE,MAAM,CAAA;YACZ,SAAS,EAAE,MAAM,CAAA;YACjB,WAAW,EAAE,MAAM,CAAA;YACnB,KAAK,EAAE,MAAM,CAAA;YACb,IAAI,EAAE,OAAO,CAAA;SACd,CAAA;KACF,CAAC;IAmDF;;;;;;;;;OASG;IACG,mBAAmB,CAAC,EACxB,aAAa,EACb,WAAW,EACX,MAAoB,GACrB,EAAE;QACD,aAAa,EAAE,MAAM,CAAA;QACrB,WAAW,EAAE,MAAM,CAAA;QACnB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,GAAG,OAAO,CAAC;QACV,mBAAmB,EAAE,MAAM,CAAA;QAC3B,WAAW,EAAE,MAAM,CAAA;QACnB,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,IAAI,CAAA;QAChB,UAAU,EAAE,IAAI,CAAA;KACjB,GAAG,IAAI,CAAC;IAgCT;;;;;;OAMG;IACG,uBAAuB,CAAC,EAC5B,aAAa,EACb,YAAY,EACZ,MAAoB,GACrB,EAAE;QACD,aAAa,EAAE,MAAM,CAAA;QACrB,YAAY,EAAE,MAAM,EAAE,CAAA;QACtB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAmBxB;;;;;;OAMG;IACG,yBAAyB,CAAC,EAC9B,aAAa,EACb,OAAO,GACR,EAAE;QACD,aAAa,EAAE,MAAM,CAAA;QACrB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAA;KAC3B,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA2BrD;;;OAGG;YACW,oBAAoB;IAoGlC;;;OAGG;YACW,iBAAiB;IAO/B;;;;;;OAMG;YACW,oCAAoC;IAwClD;;;;;;;;;;;OAWG;IACG,aAAa,CAAC,EAClB,aAAa,EACb,OAAY,EACZ,MAAM,EACN,UAAU,EACV,KAAK,EACL,IAAI,EACJ,OAAsB,EACtB,cAAuB,EACvB,MAAa,EACb,IAAQ,EACR,QAAa,EACb,MAAM,EAAE,eAAe,EACvB,QAAQ,GACT,EAAE;QACD,aAAa,EAAE,MAAM,CAAA;QACrB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAA;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,UAAU,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAA;QAChD,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,SAAS,CAAA;QAChB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;QAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;QACjB,QAAQ,CAAC,EAAE,QAAQ,CAAA;KACpB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,GAAG,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAkIhD;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAK5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,mBAAmB;IA0C3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoC5B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAKnC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;;OAGG;IACH,OAAO,CAAC,gCAAgC;CA4FzC;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE;;;EAK9F"}
|