@dxos/echo-query 0.8.4-main.72ec0f3 → 0.8.4-main.74a063c4e0

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.
@@ -1,387 +1,518 @@
1
- // ../../../common/invariant/dist/lib/browser/index.mjs
1
+ //#region ../../../common/invariant/dist/lib/browser/index.mjs
2
2
  var assertArgument = (condition, argumentName, message) => {
3
- if (!condition) {
4
- const error = new TypeError(`Invalid argument \`${argumentName}\`` + (message ? `: ${message}` : ""));
5
- Error.captureStackTrace(error, assertArgument);
6
- throw error;
7
- }
3
+ if (!condition) {
4
+ const error = /* @__PURE__ */ new TypeError(`Invalid argument \`${argumentName}\`` + (message ? `: ${message}` : ""));
5
+ Error.captureStackTrace(error, assertArgument);
6
+ throw error;
7
+ }
8
8
  };
9
9
 
10
- // src/query-lite/query-lite.ts
11
- var OrderClass = class _OrderClass {
12
- constructor(ast) {
13
- this.ast = ast;
14
- }
15
- static variance = {};
16
- static is(value) {
17
- return typeof value === "object" && value !== null && "~Order" in value;
18
- }
19
- "~Order" = _OrderClass.variance;
10
+ //#endregion
11
+ //#region src/query-lite/query-lite.ts
12
+ var OrderClass = class OrderClass {
13
+ static "variance" = {};
14
+ static is(value) {
15
+ return typeof value === "object" && value !== null && "~Order" in value;
16
+ }
17
+ constructor(ast) {
18
+ this.ast = ast;
19
+ }
20
+ "~Order" = OrderClass.variance;
20
21
  };
21
- var Order1;
22
- ((Order12) => {
23
- Order12.natural = new OrderClass({ kind: "natural" });
24
- Order12.property = (property2, direction) => new OrderClass({
25
- kind: "property",
26
- property: property2,
27
- direction
28
- });
22
+ let Order1;
23
+ (function(_Order) {
24
+ _Order.natural = new OrderClass({ kind: "natural" });
25
+ _Order.property = (property, direction) => new OrderClass({
26
+ kind: "property",
27
+ property,
28
+ direction
29
+ });
30
+ _Order.rank = (direction = "desc") => new OrderClass({
31
+ kind: "rank",
32
+ direction
33
+ });
29
34
  })(Order1 || (Order1 = {}));
30
- var Order2 = Order1;
31
- var FilterClass = class _FilterClass {
32
- constructor(ast) {
33
- this.ast = ast;
34
- }
35
- static variance = {};
36
- static is(value) {
37
- return typeof value === "object" && value !== null && "~Filter" in value;
38
- }
39
- static fromAst(ast) {
40
- return new _FilterClass(ast);
41
- }
42
- static everything() {
43
- return new _FilterClass({
44
- type: "object",
45
- typename: null,
46
- props: {}
47
- });
48
- }
49
- static nothing() {
50
- return new _FilterClass({
51
- type: "not",
52
- filter: {
53
- type: "object",
54
- typename: null,
55
- props: {}
56
- }
57
- });
58
- }
59
- static relation() {
60
- return new _FilterClass({
61
- type: "object",
62
- typename: null,
63
- props: {}
64
- });
65
- }
66
- static ids(...ids) {
67
- if (ids.length === 0) {
68
- return _FilterClass.nothing();
69
- }
70
- return new _FilterClass({
71
- type: "object",
72
- typename: null,
73
- id: ids,
74
- props: {}
75
- });
76
- }
77
- static type(schema, props) {
78
- if (typeof schema !== "string") {
79
- throw new TypeError("expected typename as the first paramter");
80
- }
81
- return new _FilterClass({
82
- type: "object",
83
- typename: makeTypeDxn(schema),
84
- ...propsFilterToAst(props ?? {})
85
- });
86
- }
87
- static typename(typename) {
88
- return new _FilterClass({
89
- type: "object",
90
- typename: makeTypeDxn(typename),
91
- props: {}
92
- });
93
- }
94
- static typeDXN(dxn) {
95
- return new _FilterClass({
96
- type: "object",
97
- typename: dxn.toString(),
98
- props: {}
99
- });
100
- }
101
- static tag(tag) {
102
- return new _FilterClass({
103
- type: "tag",
104
- tag
105
- });
106
- }
107
- static props(props) {
108
- return new _FilterClass({
109
- type: "object",
110
- typename: null,
111
- ...propsFilterToAst(props)
112
- });
113
- }
114
- static text(text, options) {
115
- return new _FilterClass({
116
- type: "text-search",
117
- text,
118
- searchKind: options?.type
119
- });
120
- }
121
- static foreignKeys(schema, keys) {
122
- assertArgument(typeof schema === "string", "schema");
123
- assertArgument(!schema.startsWith("dxn:"), "schema");
124
- return new _FilterClass({
125
- type: "object",
126
- typename: `dxn:type:${schema}`,
127
- props: {},
128
- foreignKeys: keys
129
- });
130
- }
131
- static eq(value) {
132
- if (!isRef(value) && typeof value === "object" && value !== null) {
133
- throw new TypeError("Cannot use object as a value for eq filter");
134
- }
135
- return new _FilterClass({
136
- type: "compare",
137
- operator: "eq",
138
- value: isRef(value) ? value.noInline().encode() : value
139
- });
140
- }
141
- static neq(value) {
142
- return new _FilterClass({
143
- type: "compare",
144
- operator: "neq",
145
- value
146
- });
147
- }
148
- static gt(value) {
149
- return new _FilterClass({
150
- type: "compare",
151
- operator: "gt",
152
- value
153
- });
154
- }
155
- static gte(value) {
156
- return new _FilterClass({
157
- type: "compare",
158
- operator: "gte",
159
- value
160
- });
161
- }
162
- static lt(value) {
163
- return new _FilterClass({
164
- type: "compare",
165
- operator: "lt",
166
- value
167
- });
168
- }
169
- static lte(value) {
170
- return new _FilterClass({
171
- type: "compare",
172
- operator: "lte",
173
- value
174
- });
175
- }
176
- static in(...values) {
177
- return new _FilterClass({
178
- type: "in",
179
- values
180
- });
181
- }
182
- static contains(value) {
183
- return new _FilterClass({
184
- type: "contains",
185
- value
186
- });
187
- }
188
- static between(from, to) {
189
- return new _FilterClass({
190
- type: "range",
191
- from,
192
- to
193
- });
194
- }
195
- static not(filter) {
196
- return new _FilterClass({
197
- type: "not",
198
- filter: filter.ast
199
- });
200
- }
201
- static and(...filters) {
202
- return new _FilterClass({
203
- type: "and",
204
- filters: filters.map((f) => f.ast)
205
- });
206
- }
207
- static or(...filters) {
208
- return new _FilterClass({
209
- type: "or",
210
- filters: filters.map((f) => f.ast)
211
- });
212
- }
213
- "~Filter" = _FilterClass.variance;
35
+ const Order2 = Order1;
36
+ var FilterClass = class FilterClass {
37
+ static "variance" = {};
38
+ static is(value) {
39
+ return typeof value === "object" && value !== null && "~Filter" in value;
40
+ }
41
+ static fromAst(ast) {
42
+ return new FilterClass(ast);
43
+ }
44
+ static everything() {
45
+ return new FilterClass({
46
+ type: "object",
47
+ typename: null,
48
+ props: {}
49
+ });
50
+ }
51
+ static nothing() {
52
+ return new FilterClass({
53
+ type: "not",
54
+ filter: {
55
+ type: "object",
56
+ typename: null,
57
+ props: {}
58
+ }
59
+ });
60
+ }
61
+ static relation() {
62
+ return new FilterClass({
63
+ type: "object",
64
+ typename: null,
65
+ props: {}
66
+ });
67
+ }
68
+ static id(...ids) {
69
+ if (ids.length === 0) return FilterClass.nothing();
70
+ return new FilterClass({
71
+ type: "object",
72
+ typename: null,
73
+ id: ids,
74
+ props: {}
75
+ });
76
+ }
77
+ static type(schema, props) {
78
+ if (typeof schema !== "string") throw new TypeError("expected typename as the first paramter");
79
+ return new FilterClass({
80
+ type: "object",
81
+ typename: makeTypeDxn(schema),
82
+ ...propsFilterToAst(props ?? {})
83
+ });
84
+ }
85
+ static typename(typename) {
86
+ return new FilterClass({
87
+ type: "object",
88
+ typename: makeTypeDxn(typename),
89
+ props: {}
90
+ });
91
+ }
92
+ static typeDXN(dxn) {
93
+ return new FilterClass({
94
+ type: "object",
95
+ typename: dxn.toString(),
96
+ props: {}
97
+ });
98
+ }
99
+ static tag(tag) {
100
+ return new FilterClass({
101
+ type: "tag",
102
+ tag
103
+ });
104
+ }
105
+ static props(props) {
106
+ return new FilterClass({
107
+ type: "object",
108
+ typename: null,
109
+ ...propsFilterToAst(props)
110
+ });
111
+ }
112
+ static text(text, options) {
113
+ return new FilterClass({
114
+ type: "text-search",
115
+ text,
116
+ searchKind: options?.type
117
+ });
118
+ }
119
+ static foreignKeys(schema, keys) {
120
+ assertArgument(typeof schema === "string", "schema");
121
+ assertArgument(!schema.startsWith("dxn:"), "schema");
122
+ return new FilterClass({
123
+ type: "object",
124
+ typename: `dxn:type:${schema}`,
125
+ props: {},
126
+ foreignKeys: keys
127
+ });
128
+ }
129
+ static eq(value) {
130
+ if (!isRef(value) && typeof value === "object" && value !== null) throw new TypeError("Cannot use object as a value for eq filter");
131
+ return new FilterClass({
132
+ type: "compare",
133
+ operator: "eq",
134
+ value: isRef(value) ? value.noInline().encode() : value
135
+ });
136
+ }
137
+ static neq(value) {
138
+ return new FilterClass({
139
+ type: "compare",
140
+ operator: "neq",
141
+ value
142
+ });
143
+ }
144
+ static gt(value) {
145
+ return new FilterClass({
146
+ type: "compare",
147
+ operator: "gt",
148
+ value
149
+ });
150
+ }
151
+ static gte(value) {
152
+ return new FilterClass({
153
+ type: "compare",
154
+ operator: "gte",
155
+ value
156
+ });
157
+ }
158
+ static lt(value) {
159
+ return new FilterClass({
160
+ type: "compare",
161
+ operator: "lt",
162
+ value
163
+ });
164
+ }
165
+ static lte(value) {
166
+ return new FilterClass({
167
+ type: "compare",
168
+ operator: "lte",
169
+ value
170
+ });
171
+ }
172
+ static in(...values) {
173
+ return new FilterClass({
174
+ type: "in",
175
+ values
176
+ });
177
+ }
178
+ static contains(value) {
179
+ return new FilterClass({
180
+ type: "contains",
181
+ value
182
+ });
183
+ }
184
+ static between(from, to) {
185
+ return new FilterClass({
186
+ type: "range",
187
+ from,
188
+ to
189
+ });
190
+ }
191
+ static updated(range) {
192
+ return FilterClass.#timeRangeFilter("updatedAt", range);
193
+ }
194
+ static created(range) {
195
+ return FilterClass.#timeRangeFilter("createdAt", range);
196
+ }
197
+ static #timeRangeFilter(field, range) {
198
+ const toMs = (d) => typeof d === "number" ? d : d.getTime();
199
+ const filters = [];
200
+ if (range.after != null) filters.push(new FilterClass({
201
+ type: "timestamp",
202
+ field,
203
+ operator: "gte",
204
+ value: toMs(range.after)
205
+ }));
206
+ if (range.before != null) filters.push(new FilterClass({
207
+ type: "timestamp",
208
+ field,
209
+ operator: "lte",
210
+ value: toMs(range.before)
211
+ }));
212
+ if (filters.length === 0) return FilterClass.everything();
213
+ return filters.length === 1 ? filters[0] : FilterClass.and(...filters);
214
+ }
215
+ static not(filter) {
216
+ return new FilterClass({
217
+ type: "not",
218
+ filter: filter.ast
219
+ });
220
+ }
221
+ static and(...filters) {
222
+ return new FilterClass({
223
+ type: "and",
224
+ filters: filters.map((f) => f.ast)
225
+ });
226
+ }
227
+ static or(...filters) {
228
+ return new FilterClass({
229
+ type: "or",
230
+ filters: filters.map((f) => f.ast)
231
+ });
232
+ }
233
+ /** Returns a human-readable string representation of a Filter AST. */
234
+ static pretty(filter) {
235
+ return prettyFilter(filter.ast);
236
+ }
237
+ constructor(ast) {
238
+ this.ast = ast;
239
+ }
240
+ "~Filter" = FilterClass.variance;
214
241
  };
215
- var Filter1 = FilterClass;
216
- var propsFilterToAst = (predicates) => {
217
- let idFilter;
218
- if ("id" in predicates) {
219
- assertArgument(
220
- typeof predicates.id === "string" || Array.isArray(predicates.id),
221
- "predicates.id",
222
- "invalid id filter"
223
- );
224
- idFilter = typeof predicates.id === "string" ? [predicates.id] : predicates.id;
225
- }
226
- return {
227
- id: idFilter,
228
- props: Object.fromEntries(
229
- Object.entries(predicates).filter(([prop, _value]) => prop !== "id").map(([prop, predicate]) => [prop, processPredicate(predicate)])
230
- )
231
- };
242
+ const Filter1 = FilterClass;
243
+ const propsFilterToAst = (predicates) => {
244
+ let idFilter;
245
+ if ("id" in predicates) {
246
+ assertArgument(typeof predicates.id === "string" || Array.isArray(predicates.id), "predicates.id", "invalid id filter");
247
+ idFilter = typeof predicates.id === "string" ? [predicates.id] : predicates.id;
248
+ }
249
+ return {
250
+ id: idFilter,
251
+ props: Object.fromEntries(Object.entries(predicates).filter(([prop, _value]) => prop !== "id").map(([prop, predicate]) => [prop, processPredicate(predicate)]))
252
+ };
232
253
  };
233
- var processPredicate = (predicate) => {
234
- if (FilterClass.is(predicate)) {
235
- return predicate.ast;
236
- }
237
- if (Array.isArray(predicate)) {
238
- throw new Error("Array predicates are not yet supported.");
239
- }
240
- if (!isRef(predicate) && typeof predicate === "object" && predicate !== null) {
241
- const nestedProps = Object.fromEntries(
242
- Object.entries(predicate).map(([key, value]) => [key, processPredicate(value)])
243
- );
244
- return {
245
- type: "object",
246
- typename: null,
247
- props: nestedProps
248
- };
249
- }
250
- return FilterClass.eq(predicate).ast;
254
+ const processPredicate = (predicate) => {
255
+ if (FilterClass.is(predicate)) return predicate.ast;
256
+ if (Array.isArray(predicate)) throw new Error("Array predicates are not yet supported.");
257
+ if (!isRef(predicate) && typeof predicate === "object" && predicate !== null) return {
258
+ type: "object",
259
+ typename: null,
260
+ props: Object.fromEntries(Object.entries(predicate).map(([key, value]) => [key, processPredicate(value)]))
261
+ };
262
+ return FilterClass.eq(predicate).ast;
251
263
  };
252
- var QueryClass = class _QueryClass {
253
- constructor(ast) {
254
- this.ast = ast;
255
- }
256
- static variance = {};
257
- static is(value) {
258
- return typeof value === "object" && value !== null && "~Query" in value;
259
- }
260
- static fromAst(ast) {
261
- return new _QueryClass(ast);
262
- }
263
- static select(filter) {
264
- return new _QueryClass({
265
- type: "select",
266
- filter: filter.ast
267
- });
268
- }
269
- static type(schema, predicates) {
270
- return new _QueryClass({
271
- type: "select",
272
- filter: FilterClass.type(schema, predicates).ast
273
- });
274
- }
275
- static all(...queries) {
276
- if (queries.length === 0) {
277
- throw new TypeError(
278
- "Query.all combines results of multiple queries, to query all objects use Query.select(Filter.everything())"
279
- );
280
- }
281
- return new _QueryClass({
282
- type: "union",
283
- queries: queries.map((q) => q.ast)
284
- });
285
- }
286
- static without(source, exclude) {
287
- return new _QueryClass({
288
- type: "set-difference",
289
- source: source.ast,
290
- exclude: exclude.ast
291
- });
292
- }
293
- "~Query" = _QueryClass.variance;
294
- select(filter) {
295
- if (FilterClass.is(filter)) {
296
- return new _QueryClass({
297
- type: "filter",
298
- selection: this.ast,
299
- filter: filter.ast
300
- });
301
- } else {
302
- return new _QueryClass({
303
- type: "filter",
304
- selection: this.ast,
305
- filter: FilterClass.props(filter).ast
306
- });
307
- }
308
- }
309
- reference(key) {
310
- return new _QueryClass({
311
- type: "reference-traversal",
312
- anchor: this.ast,
313
- property: key
314
- });
315
- }
316
- referencedBy(target, key) {
317
- assertArgument(typeof target === "string", "target");
318
- assertArgument(!target.startsWith("dxn:"), "target");
319
- return new _QueryClass({
320
- type: "incoming-references",
321
- anchor: this.ast,
322
- property: key,
323
- typename: target
324
- });
325
- }
326
- sourceOf(relation, predicates) {
327
- return new _QueryClass({
328
- type: "relation",
329
- anchor: this.ast,
330
- direction: "outgoing",
331
- filter: FilterClass.type(relation, predicates).ast
332
- });
333
- }
334
- targetOf(relation, predicates) {
335
- return new _QueryClass({
336
- type: "relation",
337
- anchor: this.ast,
338
- direction: "incoming",
339
- filter: FilterClass.type(relation, predicates).ast
340
- });
341
- }
342
- source() {
343
- return new _QueryClass({
344
- type: "relation-traversal",
345
- anchor: this.ast,
346
- direction: "source"
347
- });
348
- }
349
- target() {
350
- return new _QueryClass({
351
- type: "relation-traversal",
352
- anchor: this.ast,
353
- direction: "target"
354
- });
355
- }
356
- orderBy(...order) {
357
- return new _QueryClass({
358
- type: "order",
359
- query: this.ast,
360
- order: order.map((o) => o.ast)
361
- });
362
- }
363
- options(options) {
364
- return new _QueryClass({
365
- type: "options",
366
- query: this.ast,
367
- options
368
- });
369
- }
264
+ var QueryClass = class QueryClass {
265
+ static "variance" = {};
266
+ static is(value) {
267
+ return typeof value === "object" && value !== null && "~Query" in value;
268
+ }
269
+ static fromAst(ast) {
270
+ return new QueryClass(ast);
271
+ }
272
+ static select(filter) {
273
+ return new QueryClass({
274
+ type: "select",
275
+ filter: filter.ast
276
+ });
277
+ }
278
+ select(filter) {
279
+ if (FilterClass.is(filter)) return new QueryClass({
280
+ type: "filter",
281
+ selection: this.ast,
282
+ filter: filter.ast
283
+ });
284
+ else return new QueryClass({
285
+ type: "filter",
286
+ selection: this.ast,
287
+ filter: FilterClass.props(filter).ast
288
+ });
289
+ }
290
+ static type(schema, predicates) {
291
+ return new QueryClass({
292
+ type: "select",
293
+ filter: FilterClass.type(schema, predicates).ast
294
+ });
295
+ }
296
+ static all(...queries) {
297
+ if (queries.length === 0) throw new TypeError("Query.all combines results of multiple queries, to query all objects use Query.select(Filter.everything())");
298
+ return new QueryClass({
299
+ type: "union",
300
+ queries: queries.map((q) => q.ast)
301
+ });
302
+ }
303
+ static without(source, exclude) {
304
+ return new QueryClass({
305
+ type: "set-difference",
306
+ source: source.ast,
307
+ exclude: exclude.ast
308
+ });
309
+ }
310
+ static from(source, options) {
311
+ return new QueryClass({
312
+ type: "select",
313
+ filter: FilterClass.everything().ast
314
+ }).from(source, options);
315
+ }
316
+ from(arg, options) {
317
+ if (arg === "all-accessible-spaces") return new QueryClass({
318
+ type: "from",
319
+ query: this.ast,
320
+ from: {
321
+ _tag: "scope",
322
+ scope: { ...options?.includeFeeds ? { allQueuesFromSpaces: true } : {} }
323
+ }
324
+ });
325
+ if (_isScopeLike(arg)) return new QueryClass({
326
+ type: "from",
327
+ query: this.ast,
328
+ from: {
329
+ _tag: "scope",
330
+ scope: arg
331
+ }
332
+ });
333
+ throw new TypeError("Database and Feed objects are not supported in query-lite sandbox");
334
+ }
335
+ /** Returns a human-readable string representation of a Query AST. */
336
+ static pretty(query) {
337
+ return prettyQuery(query.ast);
338
+ }
339
+ constructor(ast) {
340
+ this.ast = ast;
341
+ }
342
+ "~Query" = QueryClass.variance;
343
+ reference(key) {
344
+ return new QueryClass({
345
+ type: "reference-traversal",
346
+ anchor: this.ast,
347
+ property: key
348
+ });
349
+ }
350
+ referencedBy(target, key) {
351
+ const typename = target !== void 0 ? (assertArgument(typeof target === "string", "target"), assertArgument(!target.startsWith("dxn:"), "target"), target) : null;
352
+ return new QueryClass({
353
+ type: "incoming-references",
354
+ anchor: this.ast,
355
+ property: key ?? null,
356
+ typename
357
+ });
358
+ }
359
+ sourceOf(relation, predicates) {
360
+ return new QueryClass({
361
+ type: "relation",
362
+ anchor: this.ast,
363
+ direction: "outgoing",
364
+ filter: relation !== void 0 ? FilterClass.type(relation, predicates).ast : void 0
365
+ });
366
+ }
367
+ targetOf(relation, predicates) {
368
+ return new QueryClass({
369
+ type: "relation",
370
+ anchor: this.ast,
371
+ direction: "incoming",
372
+ filter: relation !== void 0 ? FilterClass.type(relation, predicates).ast : void 0
373
+ });
374
+ }
375
+ source() {
376
+ return new QueryClass({
377
+ type: "relation-traversal",
378
+ anchor: this.ast,
379
+ direction: "source"
380
+ });
381
+ }
382
+ target() {
383
+ return new QueryClass({
384
+ type: "relation-traversal",
385
+ anchor: this.ast,
386
+ direction: "target"
387
+ });
388
+ }
389
+ parent() {
390
+ return new QueryClass({
391
+ type: "hierarchy-traversal",
392
+ anchor: this.ast,
393
+ direction: "to-parent"
394
+ });
395
+ }
396
+ children() {
397
+ return new QueryClass({
398
+ type: "hierarchy-traversal",
399
+ anchor: this.ast,
400
+ direction: "to-children"
401
+ });
402
+ }
403
+ orderBy(...order) {
404
+ return new QueryClass({
405
+ type: "order",
406
+ query: this.ast,
407
+ order: order.map((o) => o.ast)
408
+ });
409
+ }
410
+ limit(limit) {
411
+ return new QueryClass({
412
+ type: "limit",
413
+ query: this.ast,
414
+ limit
415
+ });
416
+ }
417
+ options(options) {
418
+ return new QueryClass({
419
+ type: "options",
420
+ query: this.ast,
421
+ options
422
+ });
423
+ }
370
424
  };
371
- var Query1 = QueryClass;
372
- var RefTypeId = Symbol("@dxos/echo-query/Ref");
373
- var isRef = (obj) => {
374
- return obj && typeof obj === "object" && RefTypeId in obj;
425
+ const Query1 = QueryClass;
426
+ const RefTypeId = Symbol("@dxos/echo-query/Ref");
427
+ const isRef = (obj) => {
428
+ return obj && typeof obj === "object" && RefTypeId in obj;
375
429
  };
376
- var makeTypeDxn = (typename) => {
377
- assertArgument(typeof typename === "string", "typename");
378
- assertArgument(!typename.startsWith("dxn:"), "typename");
379
- return `dxn:type:${typename}`;
430
+ const makeTypeDxn = (typename) => {
431
+ assertArgument(typeof typename === "string", "typename");
432
+ assertArgument(!typename.startsWith("dxn:"), "typename");
433
+ return `dxn:type:${typename}`;
380
434
  };
381
- export {
382
- Filter1 as Filter,
383
- Filter1,
384
- Order2 as Order,
385
- Query1 as Query,
386
- Query1
435
+ const SCOPE_KEYS = new Set([
436
+ "spaceIds",
437
+ "queues",
438
+ "allQueuesFromSpaces"
439
+ ]);
440
+ const _isScopeLike = (value) => {
441
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
442
+ return Object.keys(value).every((key) => SCOPE_KEYS.has(key));
387
443
  };
444
+ const prettyFilter = (filter) => {
445
+ switch (filter.type) {
446
+ case "object": {
447
+ const parts = [];
448
+ if (filter.typename !== null) parts.push(JSON.stringify(filter.typename));
449
+ const propEntries = Object.entries(filter.props);
450
+ if (propEntries.length > 0) {
451
+ const propsStr = propEntries.map(([k, v]) => `${k}: ${prettyFilter(v)}`).join(", ");
452
+ parts.push(`{ ${propsStr} }`);
453
+ }
454
+ if (filter.id !== void 0) parts.push(`id: [${filter.id.join(", ")}]`);
455
+ return parts.length > 0 ? `Filter.type(${parts.join(", ")})` : "Filter.everything()";
456
+ }
457
+ case "compare": return `Filter.${filter.operator}(${JSON.stringify(filter.value)})`;
458
+ case "in": return `Filter.in(${filter.values.map((v) => JSON.stringify(v)).join(", ")})`;
459
+ case "contains": return `Filter.contains(${JSON.stringify(filter.value)})`;
460
+ case "range": return `Filter.between(${JSON.stringify(filter.from)}, ${JSON.stringify(filter.to)})`;
461
+ case "text-search": return `Filter.text(${JSON.stringify(filter.text)})`;
462
+ case "tag": return `Filter.tag(${JSON.stringify(filter.tag)})`;
463
+ case "timestamp": return `Filter.${filter.field}.${filter.operator}(${filter.value})`;
464
+ case "not": return `Filter.not(${prettyFilter(filter.filter)})`;
465
+ case "and": return `Filter.and(${filter.filters.map(prettyFilter).join(", ")})`;
466
+ case "or": return `Filter.or(${filter.filters.map(prettyFilter).join(", ")})`;
467
+ }
468
+ };
469
+ const prettyQuery = (query) => {
470
+ switch (query.type) {
471
+ case "select": return `Query.select(${prettyFilter(query.filter)})`;
472
+ case "filter": return `${prettyQuery(query.selection)}.select(${prettyFilter(query.filter)})`;
473
+ case "reference-traversal": return `${prettyQuery(query.anchor)}.reference(${JSON.stringify(query.property)})`;
474
+ case "incoming-references": {
475
+ const args = [];
476
+ if (query.typename !== null) args.push(JSON.stringify(query.typename));
477
+ if (query.property !== null) args.push(JSON.stringify(query.property));
478
+ return `${prettyQuery(query.anchor)}.referencedBy(${args.join(", ")})`;
479
+ }
480
+ case "relation": {
481
+ const method = query.direction === "outgoing" ? "sourceOf" : query.direction === "incoming" ? "targetOf" : "relationOf";
482
+ const filterStr = query.filter !== void 0 ? prettyFilter(query.filter) : "";
483
+ return `${prettyQuery(query.anchor)}.${method}(${filterStr})`;
484
+ }
485
+ case "relation-traversal": return `${prettyQuery(query.anchor)}.${query.direction}()`;
486
+ case "hierarchy-traversal": return query.direction === "to-parent" ? `${prettyQuery(query.anchor)}.parent()` : `${prettyQuery(query.anchor)}.children()`;
487
+ case "union": return `Query.all(${query.queries.map(prettyQuery).join(", ")})`;
488
+ case "set-difference": return `Query.without(${prettyQuery(query.source)}, ${prettyQuery(query.exclude)})`;
489
+ case "order": {
490
+ const orders = query.order.map((o) => {
491
+ if (o.kind === "natural") return "Order.natural";
492
+ if (o.kind === "rank") return `Order.rank(${JSON.stringify(o.direction)})`;
493
+ return `Order.property(${JSON.stringify(o.property)}, ${JSON.stringify(o.direction)})`;
494
+ });
495
+ return `${prettyQuery(query.query)}.orderBy(${orders.join(", ")})`;
496
+ }
497
+ case "options": {
498
+ const parts = [];
499
+ if (query.options.deleted !== void 0) parts.push(`deleted: ${JSON.stringify(query.options.deleted)}`);
500
+ return `${prettyQuery(query.query)}.options({ ${parts.join(", ")} })`;
501
+ }
502
+ case "from":
503
+ if (query.from._tag === "scope") {
504
+ const scope = query.from.scope;
505
+ const parts = [];
506
+ if (scope.spaceIds !== void 0) parts.push(`spaceIds: [${scope.spaceIds.join(", ")}]`);
507
+ if (scope.queues !== void 0) parts.push(`queues: [${scope.queues.join(", ")}]`);
508
+ if (scope.allQueuesFromSpaces !== void 0) parts.push(`allQueuesFromSpaces: ${scope.allQueuesFromSpaces}`);
509
+ return `${prettyQuery(query.query)}.from({ ${parts.join(", ")} })`;
510
+ }
511
+ return `${prettyQuery(query.query)}.from(${prettyQuery(query.from.query)})`;
512
+ case "limit": return `${prettyQuery(query.query)}.limit(${query.limit})`;
513
+ }
514
+ };
515
+
516
+ //#endregion
517
+ export { Filter1 as Filter, Filter1, Order2 as Order, Query1 as Query, Query1 };
518
+ //# sourceMappingURL=index.js.map