@dxos/echo-pipeline 0.8.4-main.ae835ea → 0.8.4-main.bc674ce

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 (154) hide show
  1. package/dist/lib/browser/{chunk-WJJXJTNS.mjs → chunk-FJPXA75J.mjs} +7 -12
  2. package/dist/lib/browser/chunk-FJPXA75J.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-FR6GJ4S4.mjs → chunk-WIQUYO7H.mjs} +39 -29
  4. package/dist/lib/browser/chunk-WIQUYO7H.mjs.map +7 -0
  5. package/dist/lib/browser/filter/index.mjs +1 -2
  6. package/dist/lib/browser/index.mjs +1933 -620
  7. package/dist/lib/browser/index.mjs.map +4 -4
  8. package/dist/lib/browser/meta.json +1 -1
  9. package/dist/lib/browser/testing/index.mjs +28 -201
  10. package/dist/lib/browser/testing/index.mjs.map +4 -4
  11. package/dist/lib/node-esm/{chunk-JQCCVDLT.mjs → chunk-7PL6UK4B.mjs} +39 -29
  12. package/dist/lib/node-esm/chunk-7PL6UK4B.mjs.map +7 -0
  13. package/dist/lib/node-esm/{chunk-LEQ77KAT.mjs → chunk-S5KGVQFZ.mjs} +7 -12
  14. package/dist/lib/node-esm/chunk-S5KGVQFZ.mjs.map +7 -0
  15. package/dist/lib/node-esm/filter/index.mjs +1 -2
  16. package/dist/lib/node-esm/index.mjs +1933 -620
  17. package/dist/lib/node-esm/index.mjs.map +4 -4
  18. package/dist/lib/node-esm/meta.json +1 -1
  19. package/dist/lib/node-esm/testing/index.mjs +28 -201
  20. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  21. package/dist/types/src/automerge/automerge-host.d.ts +36 -9
  22. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  23. package/dist/types/src/automerge/automerge-repo.test.d.ts +1 -1
  24. package/dist/types/src/automerge/automerge-repo.test.d.ts.map +1 -1
  25. package/dist/types/src/automerge/collection-synchronizer.d.ts +3 -2
  26. package/dist/types/src/automerge/collection-synchronizer.d.ts.map +1 -1
  27. package/dist/types/src/automerge/echo-network-adapter.d.ts +11 -6
  28. package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
  29. package/dist/types/src/automerge/echo-replicator.d.ts +9 -6
  30. package/dist/types/src/automerge/echo-replicator.d.ts.map +1 -1
  31. package/dist/types/src/automerge/heads-store.d.ts +9 -2
  32. package/dist/types/src/automerge/heads-store.d.ts.map +1 -1
  33. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +4 -4
  34. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts.map +1 -1
  35. package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts +7 -7
  36. package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts.map +1 -1
  37. package/dist/types/src/automerge/mesh-echo-replicator.d.ts.map +1 -1
  38. package/dist/types/src/db-host/automerge-data-source.d.ts +34 -0
  39. package/dist/types/src/db-host/automerge-data-source.d.ts.map +1 -0
  40. package/dist/types/src/db-host/automerge-data-source.test.d.ts +2 -0
  41. package/dist/types/src/db-host/automerge-data-source.test.d.ts.map +1 -0
  42. package/dist/types/src/db-host/data-service.d.ts +4 -3
  43. package/dist/types/src/db-host/data-service.d.ts.map +1 -1
  44. package/dist/types/src/db-host/documents-iterator.d.ts.map +1 -1
  45. package/dist/types/src/db-host/documents-synchronizer.d.ts +6 -5
  46. package/dist/types/src/db-host/documents-synchronizer.d.ts.map +1 -1
  47. package/dist/types/src/db-host/echo-host.d.ts +43 -11
  48. package/dist/types/src/db-host/echo-host.d.ts.map +1 -1
  49. package/dist/types/src/db-host/index.d.ts +1 -0
  50. package/dist/types/src/db-host/index.d.ts.map +1 -1
  51. package/dist/types/src/db-host/local-queue-service.d.ts +15 -0
  52. package/dist/types/src/db-host/local-queue-service.d.ts.map +1 -0
  53. package/dist/types/src/db-host/query-service.d.ts +7 -2
  54. package/dist/types/src/db-host/query-service.d.ts.map +1 -1
  55. package/dist/types/src/db-host/queue-data-source.d.ts +28 -0
  56. package/dist/types/src/db-host/queue-data-source.d.ts.map +1 -0
  57. package/dist/types/src/db-host/queue-service.test.d.ts +2 -0
  58. package/dist/types/src/db-host/queue-service.test.d.ts.map +1 -0
  59. package/dist/types/src/db-host/space-state-manager.d.ts +1 -0
  60. package/dist/types/src/db-host/space-state-manager.d.ts.map +1 -1
  61. package/dist/types/src/db-host/stub.d.ts +10 -0
  62. package/dist/types/src/db-host/stub.d.ts.map +1 -0
  63. package/dist/types/src/edge/echo-edge-replicator.d.ts +2 -2
  64. package/dist/types/src/edge/echo-edge-replicator.d.ts.map +1 -1
  65. package/dist/types/src/filter/filter-match.d.ts.map +1 -1
  66. package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
  67. package/dist/types/src/pipeline/pipeline.d.ts +2 -2
  68. package/dist/types/src/pipeline/pipeline.d.ts.map +1 -1
  69. package/dist/types/src/query/errors.d.ts +11 -15
  70. package/dist/types/src/query/errors.d.ts.map +1 -1
  71. package/dist/types/src/query/plan.d.ts +37 -3
  72. package/dist/types/src/query/plan.d.ts.map +1 -1
  73. package/dist/types/src/query/query-executor.d.ts +39 -3
  74. package/dist/types/src/query/query-executor.d.ts.map +1 -1
  75. package/dist/types/src/query/query-planner.d.ts +6 -0
  76. package/dist/types/src/query/query-planner.d.ts.map +1 -1
  77. package/dist/types/src/space/auth.d.ts +3 -3
  78. package/dist/types/src/space/auth.d.ts.map +1 -1
  79. package/dist/types/src/space/control-pipeline.d.ts +2 -2
  80. package/dist/types/src/space/control-pipeline.d.ts.map +1 -1
  81. package/dist/types/src/space/space-manager.d.ts +6 -6
  82. package/dist/types/src/space/space-manager.d.ts.map +1 -1
  83. package/dist/types/src/space/space-protocol.d.ts +5 -5
  84. package/dist/types/src/space/space-protocol.d.ts.map +1 -1
  85. package/dist/types/src/space/space.d.ts +3 -3
  86. package/dist/types/src/space/space.d.ts.map +1 -1
  87. package/dist/types/src/testing/index.d.ts +0 -2
  88. package/dist/types/src/testing/index.d.ts.map +1 -1
  89. package/dist/types/src/testing/test-network-adapter.d.ts +1 -1
  90. package/dist/types/src/testing/test-network-adapter.d.ts.map +1 -1
  91. package/dist/types/src/testing/test-replicator.d.ts +6 -6
  92. package/dist/types/src/testing/test-replicator.d.ts.map +1 -1
  93. package/dist/types/src/util.d.ts.map +1 -1
  94. package/dist/types/tsconfig.tsbuildinfo +1 -1
  95. package/package.json +48 -38
  96. package/src/automerge/automerge-host.test.ts +37 -14
  97. package/src/automerge/automerge-host.ts +130 -36
  98. package/src/automerge/automerge-repo.test.ts +147 -30
  99. package/src/automerge/collection-synchronizer.test.ts +16 -10
  100. package/src/automerge/collection-synchronizer.ts +41 -11
  101. package/src/automerge/echo-network-adapter.ts +23 -11
  102. package/src/automerge/echo-replicator.ts +10 -6
  103. package/src/automerge/heads-store.ts +14 -2
  104. package/src/automerge/leveldb-storage-adapter.ts +4 -4
  105. package/src/automerge/mesh-echo-replicator-connection.ts +7 -7
  106. package/src/automerge/mesh-echo-replicator.ts +2 -2
  107. package/src/db-host/automerge-data-source.test.ts +294 -0
  108. package/src/db-host/automerge-data-source.ts +144 -0
  109. package/src/db-host/data-service.ts +10 -3
  110. package/src/db-host/documents-iterator.ts +3 -1
  111. package/src/db-host/documents-synchronizer.test.ts +77 -13
  112. package/src/db-host/documents-synchronizer.ts +51 -50
  113. package/src/db-host/echo-host.ts +191 -28
  114. package/src/db-host/index.ts +1 -0
  115. package/src/db-host/local-queue-service.ts +127 -0
  116. package/src/db-host/query-service.ts +17 -4
  117. package/src/db-host/queue-data-source.ts +132 -0
  118. package/src/db-host/queue-service.test.ts +141 -0
  119. package/src/db-host/space-state-manager.ts +4 -0
  120. package/src/db-host/stub.ts +28 -0
  121. package/src/edge/echo-edge-replicator.ts +12 -8
  122. package/src/filter/filter-match.test.ts +31 -25
  123. package/src/filter/filter-match.ts +8 -14
  124. package/src/metadata/metadata-store.ts +5 -2
  125. package/src/pipeline/pipeline.ts +2 -2
  126. package/src/query/errors.ts +2 -2
  127. package/src/query/plan.ts +48 -3
  128. package/src/query/query-executor.ts +612 -131
  129. package/src/query/query-planner.test.ts +509 -35
  130. package/src/query/query-planner.ts +187 -13
  131. package/src/space/admission-discovery-extension.ts +1 -1
  132. package/src/space/auth.ts +6 -6
  133. package/src/space/control-pipeline.ts +2 -2
  134. package/src/space/space-manager.ts +6 -6
  135. package/src/space/space-protocol.ts +11 -11
  136. package/src/space/space.ts +3 -3
  137. package/src/testing/index.ts +0 -2
  138. package/src/testing/test-network-adapter.ts +16 -3
  139. package/src/testing/test-replicator.ts +8 -7
  140. package/src/util.ts +7 -3
  141. package/dist/lib/browser/chunk-CGS2ULMK.mjs +0 -11
  142. package/dist/lib/browser/chunk-CGS2ULMK.mjs.map +0 -7
  143. package/dist/lib/browser/chunk-FR6GJ4S4.mjs.map +0 -7
  144. package/dist/lib/browser/chunk-WJJXJTNS.mjs.map +0 -7
  145. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  146. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +0 -7
  147. package/dist/lib/node-esm/chunk-JQCCVDLT.mjs.map +0 -7
  148. package/dist/lib/node-esm/chunk-LEQ77KAT.mjs.map +0 -7
  149. package/dist/types/src/testing/test-data.d.ts +0 -18
  150. package/dist/types/src/testing/test-data.d.ts.map +0 -1
  151. package/dist/types/src/testing/test-schema.d.ts +0 -37
  152. package/dist/types/src/testing/test-schema.d.ts.map +0 -1
  153. package/src/testing/test-data.ts +0 -127
  154. package/src/testing/test-schema.ts +0 -53
@@ -1,3 +1,7 @@
1
+ //
2
+ // Copyright 2025 example.com
3
+ //
4
+
1
5
  //
2
6
  // Copyright 2025 DXOS.org
3
7
  //
@@ -5,10 +9,9 @@
5
9
  import { describe, expect, test } from 'vitest';
6
10
 
7
11
  import { Filter, Order, Query } from '@dxos/echo';
12
+ import { TestSchema } from '@dxos/echo/testing';
8
13
  import { type QueryAST } from '@dxos/echo-protocol';
9
- import { SpaceId } from '@dxos/keys';
10
-
11
- import { TestSchema } from '../testing';
14
+ import { DXN, SpaceId } from '@dxos/keys';
12
15
 
13
16
  import { QueryPlanner } from './query-planner';
14
17
 
@@ -24,11 +27,13 @@ describe('QueryPlanner', () => {
24
27
  "steps": [
25
28
  {
26
29
  "_tag": "SelectStep",
30
+ "allQueuesFromSpaces": false,
31
+ "queues": [],
27
32
  "selector": {
28
33
  "_tag": "TypeSelector",
29
34
  "inverted": false,
30
35
  "typename": [
31
- "dxn:type:dxos.org/type/Person:0.1.0",
36
+ "dxn:type:example.com/type/Person:0.1.0",
32
37
  ],
33
38
  },
34
39
  "spaces": [
@@ -39,6 +44,15 @@ describe('QueryPlanner', () => {
39
44
  "_tag": "FilterDeletedStep",
40
45
  "mode": "only-non-deleted",
41
46
  },
47
+ {
48
+ "_tag": "FilterStep",
49
+ "filter": {
50
+ "id": undefined,
51
+ "props": {},
52
+ "type": "object",
53
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
54
+ },
55
+ },
42
56
  {
43
57
  "_tag": "OrderStep",
44
58
  "order": [
@@ -61,11 +75,13 @@ describe('QueryPlanner', () => {
61
75
  "steps": [
62
76
  {
63
77
  "_tag": "SelectStep",
78
+ "allQueuesFromSpaces": false,
79
+ "queues": [],
64
80
  "selector": {
65
81
  "_tag": "TypeSelector",
66
82
  "inverted": false,
67
83
  "typename": [
68
- "dxn:type:dxos.org/type/Person:0.1.0",
84
+ "dxn:type:example.com/type/Person:0.1.0",
69
85
  ],
70
86
  },
71
87
  "spaces": [
@@ -76,6 +92,15 @@ describe('QueryPlanner', () => {
76
92
  "_tag": "FilterDeletedStep",
77
93
  "mode": "only-non-deleted",
78
94
  },
95
+ {
96
+ "_tag": "FilterStep",
97
+ "filter": {
98
+ "id": undefined,
99
+ "props": {},
100
+ "type": "object",
101
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
102
+ },
103
+ },
79
104
  {
80
105
  "_tag": "OrderStep",
81
106
  "order": [
@@ -100,11 +125,13 @@ describe('QueryPlanner', () => {
100
125
  "steps": [
101
126
  {
102
127
  "_tag": "SelectStep",
128
+ "allQueuesFromSpaces": false,
129
+ "queues": [],
103
130
  "selector": {
104
131
  "_tag": "TypeSelector",
105
132
  "inverted": false,
106
133
  "typename": [
107
- "dxn:type:dxos.org/type/Person:0.1.0",
134
+ "dxn:type:example.com/type/Person:0.1.0",
108
135
  ],
109
136
  },
110
137
  "spaces": [
@@ -127,7 +154,7 @@ describe('QueryPlanner', () => {
127
154
  },
128
155
  },
129
156
  "type": "object",
130
- "typename": null,
157
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
131
158
  },
132
159
  },
133
160
  {
@@ -145,7 +172,9 @@ describe('QueryPlanner', () => {
145
172
 
146
173
  test('get all orgs Fred worked for since 2020', () => {
147
174
  const query = Query.select(Filter.type(TestSchema.Person, { id: '01JVS9YYT5VMVJW0GGTM1YHCCH' }))
148
- .sourceOf(TestSchema.WorksFor, { since: Filter.gt('2020') })
175
+ .sourceOf(TestSchema.EmployedBy, {
176
+ since: Filter.gt<string | undefined>('2020'),
177
+ })
149
178
  .target();
150
179
 
151
180
  const plan = planner.createPlan(withSpaceIdOptions(query.ast));
@@ -154,6 +183,8 @@ describe('QueryPlanner', () => {
154
183
  "steps": [
155
184
  {
156
185
  "_tag": "SelectStep",
186
+ "allQueuesFromSpaces": false,
187
+ "queues": [],
157
188
  "selector": {
158
189
  "_tag": "IdSelector",
159
190
  "objectIds": [
@@ -174,7 +205,7 @@ describe('QueryPlanner', () => {
174
205
  "id": undefined,
175
206
  "props": {},
176
207
  "type": "object",
177
- "typename": "dxn:type:dxos.org/type/Person:0.1.0",
208
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
178
209
  },
179
210
  },
180
211
  {
@@ -200,7 +231,7 @@ describe('QueryPlanner', () => {
200
231
  },
201
232
  },
202
233
  "type": "object",
203
- "typename": "dxn:type:dxos.org/type/WorksFor:0.1.0",
234
+ "typename": "dxn:type:example.com/type/EmployedBy:0.1.0",
204
235
  },
205
236
  },
206
237
  {
@@ -239,6 +270,8 @@ describe('QueryPlanner', () => {
239
270
  "steps": [
240
271
  {
241
272
  "_tag": "SelectStep",
273
+ "allQueuesFromSpaces": false,
274
+ "queues": [],
242
275
  "selector": {
243
276
  "_tag": "IdSelector",
244
277
  "objectIds": [
@@ -259,7 +292,7 @@ describe('QueryPlanner', () => {
259
292
  "id": undefined,
260
293
  "props": {},
261
294
  "type": "object",
262
- "typename": "dxn:type:dxos.org/type/Person:0.1.0",
295
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
263
296
  },
264
297
  },
265
298
  {
@@ -279,7 +312,7 @@ describe('QueryPlanner', () => {
279
312
  "filter": {
280
313
  "props": {},
281
314
  "type": "object",
282
- "typename": "dxn:type:dxos.org/type/Task:0.1.0",
315
+ "typename": "dxn:type:example.com/type/Task:0.1.0",
283
316
  },
284
317
  },
285
318
  {
@@ -297,7 +330,7 @@ describe('QueryPlanner', () => {
297
330
 
298
331
  test('get all tasks for employees of Cyberdyne', () => {
299
332
  const query = Query.select(Filter.type(TestSchema.Organization, { name: 'Cyberdyne' }))
300
- .targetOf(TestSchema.WorksFor)
333
+ .targetOf(TestSchema.EmployedBy)
301
334
  .source()
302
335
  .referencedBy(TestSchema.Task, 'assignee');
303
336
 
@@ -307,11 +340,13 @@ describe('QueryPlanner', () => {
307
340
  "steps": [
308
341
  {
309
342
  "_tag": "SelectStep",
343
+ "allQueuesFromSpaces": false,
344
+ "queues": [],
310
345
  "selector": {
311
346
  "_tag": "TypeSelector",
312
347
  "inverted": false,
313
348
  "typename": [
314
- "dxn:type:dxos.org/type/Organization:0.1.0",
349
+ "dxn:type:example.com/type/Organization:0.1.0",
315
350
  ],
316
351
  },
317
352
  "spaces": [
@@ -334,7 +369,7 @@ describe('QueryPlanner', () => {
334
369
  },
335
370
  },
336
371
  "type": "object",
337
- "typename": null,
372
+ "typename": "dxn:type:example.com/type/Organization:0.1.0",
338
373
  },
339
374
  },
340
375
  {
@@ -354,7 +389,7 @@ describe('QueryPlanner', () => {
354
389
  "id": undefined,
355
390
  "props": {},
356
391
  "type": "object",
357
- "typename": "dxn:type:dxos.org/type/WorksFor:0.1.0",
392
+ "typename": "dxn:type:example.com/type/EmployedBy:0.1.0",
358
393
  },
359
394
  },
360
395
  {
@@ -385,7 +420,7 @@ describe('QueryPlanner', () => {
385
420
  "filter": {
386
421
  "props": {},
387
422
  "type": "object",
388
- "typename": "dxn:type:dxos.org/type/Task:0.1.0",
423
+ "typename": "dxn:type:example.com/type/Task:0.1.0",
389
424
  },
390
425
  },
391
426
  {
@@ -418,11 +453,13 @@ describe('QueryPlanner', () => {
418
453
  "steps": [
419
454
  {
420
455
  "_tag": "SelectStep",
456
+ "allQueuesFromSpaces": false,
457
+ "queues": [],
421
458
  "selector": {
422
459
  "_tag": "TypeSelector",
423
460
  "inverted": false,
424
461
  "typename": [
425
- "dxn:type:dxos.org/type/Person:0.1.0",
462
+ "dxn:type:example.com/type/Person:0.1.0",
426
463
  ],
427
464
  },
428
465
  "spaces": [
@@ -433,17 +470,36 @@ describe('QueryPlanner', () => {
433
470
  "_tag": "FilterDeletedStep",
434
471
  "mode": "only-non-deleted",
435
472
  },
473
+ {
474
+ "_tag": "FilterStep",
475
+ "filter": {
476
+ "id": undefined,
477
+ "props": {},
478
+ "type": "object",
479
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
480
+ },
481
+ },
482
+ {
483
+ "_tag": "OrderStep",
484
+ "order": [
485
+ {
486
+ "kind": "natural",
487
+ },
488
+ ],
489
+ },
436
490
  ],
437
491
  },
438
492
  {
439
493
  "steps": [
440
494
  {
441
495
  "_tag": "SelectStep",
496
+ "allQueuesFromSpaces": false,
497
+ "queues": [],
442
498
  "selector": {
443
499
  "_tag": "TypeSelector",
444
500
  "inverted": false,
445
501
  "typename": [
446
- "dxn:type:dxos.org/type/Organization:0.1.0",
502
+ "dxn:type:example.com/type/Organization:0.1.0",
447
503
  ],
448
504
  },
449
505
  "spaces": [
@@ -454,6 +510,23 @@ describe('QueryPlanner', () => {
454
510
  "_tag": "FilterDeletedStep",
455
511
  "mode": "only-non-deleted",
456
512
  },
513
+ {
514
+ "_tag": "FilterStep",
515
+ "filter": {
516
+ "id": undefined,
517
+ "props": {},
518
+ "type": "object",
519
+ "typename": "dxn:type:example.com/type/Organization:0.1.0",
520
+ },
521
+ },
522
+ {
523
+ "_tag": "OrderStep",
524
+ "order": [
525
+ {
526
+ "kind": "natural",
527
+ },
528
+ ],
529
+ },
457
530
  ],
458
531
  },
459
532
  ],
@@ -474,7 +547,7 @@ describe('QueryPlanner', () => {
474
547
  test('get all people not in orgs', () => {
475
548
  const query = Query.without(
476
549
  Query.select(Filter.type(TestSchema.Person)),
477
- Query.select(Filter.type(TestSchema.Person)).sourceOf(TestSchema.WorksFor).source(),
550
+ Query.select(Filter.type(TestSchema.Person)).sourceOf(TestSchema.EmployedBy).source(),
478
551
  );
479
552
 
480
553
  const plan = planner.createPlan(withSpaceIdOptions(query.ast));
@@ -487,11 +560,13 @@ describe('QueryPlanner', () => {
487
560
  "steps": [
488
561
  {
489
562
  "_tag": "SelectStep",
563
+ "allQueuesFromSpaces": false,
564
+ "queues": [],
490
565
  "selector": {
491
566
  "_tag": "TypeSelector",
492
567
  "inverted": false,
493
568
  "typename": [
494
- "dxn:type:dxos.org/type/Person:0.1.0",
569
+ "dxn:type:example.com/type/Person:0.1.0",
495
570
  ],
496
571
  },
497
572
  "spaces": [
@@ -508,7 +583,7 @@ describe('QueryPlanner', () => {
508
583
  "id": undefined,
509
584
  "props": {},
510
585
  "type": "object",
511
- "typename": null,
586
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
512
587
  },
513
588
  },
514
589
  {
@@ -528,7 +603,7 @@ describe('QueryPlanner', () => {
528
603
  "id": undefined,
529
604
  "props": {},
530
605
  "type": "object",
531
- "typename": "dxn:type:dxos.org/type/WorksFor:0.1.0",
606
+ "typename": "dxn:type:example.com/type/EmployedBy:0.1.0",
532
607
  },
533
608
  },
534
609
  {
@@ -542,17 +617,27 @@ describe('QueryPlanner', () => {
542
617
  "_tag": "FilterDeletedStep",
543
618
  "mode": "only-non-deleted",
544
619
  },
620
+ {
621
+ "_tag": "OrderStep",
622
+ "order": [
623
+ {
624
+ "kind": "natural",
625
+ },
626
+ ],
627
+ },
545
628
  ],
546
629
  },
547
630
  "source": {
548
631
  "steps": [
549
632
  {
550
633
  "_tag": "SelectStep",
634
+ "allQueuesFromSpaces": false,
635
+ "queues": [],
551
636
  "selector": {
552
637
  "_tag": "TypeSelector",
553
638
  "inverted": false,
554
639
  "typename": [
555
- "dxn:type:dxos.org/type/Person:0.1.0",
640
+ "dxn:type:example.com/type/Person:0.1.0",
556
641
  ],
557
642
  },
558
643
  "spaces": [
@@ -569,9 +654,17 @@ describe('QueryPlanner', () => {
569
654
  "id": undefined,
570
655
  "props": {},
571
656
  "type": "object",
572
- "typename": null,
657
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
573
658
  },
574
659
  },
660
+ {
661
+ "_tag": "OrderStep",
662
+ "order": [
663
+ {
664
+ "kind": "natural",
665
+ },
666
+ ],
667
+ },
575
668
  ],
576
669
  },
577
670
  },
@@ -589,7 +682,11 @@ describe('QueryPlanner', () => {
589
682
  });
590
683
 
591
684
  test('get assignees of all tasks created after 2020', () => {
592
- const query = Query.select(Filter.type(TestSchema.Task, { createdAt: Filter.gt('2020') })).reference('assignee');
685
+ const query = Query.select(
686
+ Filter.type(TestSchema.Task, {
687
+ deadline: Filter.gt<string | undefined>('2020'),
688
+ }),
689
+ ).reference('assignee');
593
690
 
594
691
  const plan = planner.createPlan(withSpaceIdOptions(query.ast));
595
692
  expect(plan).toMatchInlineSnapshot(`
@@ -597,11 +694,13 @@ describe('QueryPlanner', () => {
597
694
  "steps": [
598
695
  {
599
696
  "_tag": "SelectStep",
697
+ "allQueuesFromSpaces": false,
698
+ "queues": [],
600
699
  "selector": {
601
700
  "_tag": "TypeSelector",
602
701
  "inverted": false,
603
702
  "typename": [
604
- "dxn:type:dxos.org/type/Task:0.1.0",
703
+ "dxn:type:example.com/type/Task:0.1.0",
605
704
  ],
606
705
  },
607
706
  "spaces": [
@@ -617,14 +716,14 @@ describe('QueryPlanner', () => {
617
716
  "filter": {
618
717
  "id": undefined,
619
718
  "props": {
620
- "createdAt": {
719
+ "deadline": {
621
720
  "operator": "gt",
622
721
  "type": "compare",
623
722
  "value": "2020",
624
723
  },
625
724
  },
626
725
  "type": "object",
627
- "typename": null,
726
+ "typename": "dxn:type:example.com/type/Task:0.1.0",
628
727
  },
629
728
  },
630
729
  {
@@ -661,10 +760,13 @@ describe('QueryPlanner', () => {
661
760
  "steps": [
662
761
  {
663
762
  "_tag": "SelectStep",
763
+ "allQueuesFromSpaces": false,
764
+ "queues": [],
664
765
  "selector": {
665
766
  "_tag": "TextSelector",
666
767
  "searchKind": "full-text",
667
768
  "text": "Bill",
769
+ "typename": null,
668
770
  },
669
771
  "spaces": [
670
772
  "B2NJDFNVZIW77OQSXUBNAD7BUMBD3G5PO",
@@ -680,7 +782,7 @@ describe('QueryPlanner', () => {
680
782
  "id": undefined,
681
783
  "props": {},
682
784
  "type": "object",
683
- "typename": "dxn:type:dxos.org/type/Person:0.1.0",
785
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
684
786
  },
685
787
  },
686
788
  {
@@ -705,10 +807,13 @@ describe('QueryPlanner', () => {
705
807
  "steps": [
706
808
  {
707
809
  "_tag": "SelectStep",
810
+ "allQueuesFromSpaces": false,
811
+ "queues": [],
708
812
  "selector": {
709
813
  "_tag": "TextSelector",
710
814
  "searchKind": "vector",
711
815
  "text": "Bill",
816
+ "typename": null,
712
817
  },
713
818
  "spaces": [
714
819
  "B2NJDFNVZIW77OQSXUBNAD7BUMBD3G5PO",
@@ -740,12 +845,14 @@ describe('QueryPlanner', () => {
740
845
  "steps": [
741
846
  {
742
847
  "_tag": "SelectStep",
848
+ "allQueuesFromSpaces": false,
849
+ "queues": [],
743
850
  "selector": {
744
851
  "_tag": "TypeSelector",
745
852
  "inverted": false,
746
853
  "typename": [
747
- "dxn:type:dxos.org/type/Organization:0.1.0",
748
- "dxn:type:dxos.org/type/Person:0.1.0",
854
+ "dxn:type:example.com/type/Organization:0.1.0",
855
+ "dxn:type:example.com/type/Person:0.1.0",
749
856
  ],
750
857
  },
751
858
  "spaces": [
@@ -756,6 +863,26 @@ describe('QueryPlanner', () => {
756
863
  "_tag": "FilterDeletedStep",
757
864
  "mode": "only-non-deleted",
758
865
  },
866
+ {
867
+ "_tag": "FilterStep",
868
+ "filter": {
869
+ "filters": [
870
+ {
871
+ "id": undefined,
872
+ "props": {},
873
+ "type": "object",
874
+ "typename": "dxn:type:example.com/type/Organization:0.1.0",
875
+ },
876
+ {
877
+ "id": undefined,
878
+ "props": {},
879
+ "type": "object",
880
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
881
+ },
882
+ ],
883
+ "type": "or",
884
+ },
885
+ },
759
886
  {
760
887
  "_tag": "OrderStep",
761
888
  "order": [
@@ -788,12 +915,14 @@ describe('QueryPlanner', () => {
788
915
  "steps": [
789
916
  {
790
917
  "_tag": "SelectStep",
918
+ "allQueuesFromSpaces": false,
919
+ "queues": [],
791
920
  "selector": {
792
921
  "_tag": "TypeSelector",
793
922
  "inverted": true,
794
923
  "typename": [
795
- "dxn:type:dxos.org/type/Organization:0.1.0",
796
- "dxn:type:dxos.org/type/Person:0.1.0",
924
+ "dxn:type:example.com/type/Organization:0.1.0",
925
+ "dxn:type:example.com/type/Person:0.1.0",
797
926
  ],
798
927
  },
799
928
  "spaces": [
@@ -804,6 +933,26 @@ describe('QueryPlanner', () => {
804
933
  "_tag": "FilterDeletedStep",
805
934
  "mode": "only-non-deleted",
806
935
  },
936
+ {
937
+ "_tag": "FilterStep",
938
+ "filter": {
939
+ "filters": [
940
+ {
941
+ "id": undefined,
942
+ "props": {},
943
+ "type": "object",
944
+ "typename": "dxn:type:example.com/type/Organization:0.1.0",
945
+ },
946
+ {
947
+ "id": undefined,
948
+ "props": {},
949
+ "type": "object",
950
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
951
+ },
952
+ ],
953
+ "type": "or",
954
+ },
955
+ },
807
956
  {
808
957
  "_tag": "OrderStep",
809
958
  "order": [
@@ -826,11 +975,13 @@ describe('QueryPlanner', () => {
826
975
  "steps": [
827
976
  {
828
977
  "_tag": "SelectStep",
978
+ "allQueuesFromSpaces": false,
979
+ "queues": [],
829
980
  "selector": {
830
981
  "_tag": "TypeSelector",
831
982
  "inverted": false,
832
983
  "typename": [
833
- "dxn:type:dxos.org/type/Task:0.1.0",
984
+ "dxn:type:example.com/type/Task:0.1.0",
834
985
  ],
835
986
  },
836
987
  "spaces": [
@@ -841,6 +992,328 @@ describe('QueryPlanner', () => {
841
992
  "_tag": "FilterDeletedStep",
842
993
  "mode": "only-deleted",
843
994
  },
995
+ {
996
+ "_tag": "FilterStep",
997
+ "filter": {
998
+ "id": undefined,
999
+ "props": {},
1000
+ "type": "object",
1001
+ "typename": "dxn:type:example.com/type/Task:0.1.0",
1002
+ },
1003
+ },
1004
+ {
1005
+ "_tag": "OrderStep",
1006
+ "order": [
1007
+ {
1008
+ "kind": "natural",
1009
+ },
1010
+ ],
1011
+ },
1012
+ ],
1013
+ }
1014
+ `);
1015
+ });
1016
+
1017
+ test('select items from a specific queue', () => {
1018
+ const query = Query.select(Filter.type(TestSchema.Task)).options({ queues: [QUEUE_DXN] });
1019
+
1020
+ const plan = planner.createPlan(query.ast);
1021
+ expect(plan).toMatchInlineSnapshot(`
1022
+ {
1023
+ "steps": [
1024
+ {
1025
+ "_tag": "SelectStep",
1026
+ "allQueuesFromSpaces": false,
1027
+ "queues": [
1028
+ "dxn:queue:data:B2NJDFNVZIW77OQSXUBNAD7BUMBD3G5PO:01JJRA86VK4H1TEB6QQVSWXP0E",
1029
+ ],
1030
+ "selector": {
1031
+ "_tag": "TypeSelector",
1032
+ "inverted": false,
1033
+ "typename": [
1034
+ "dxn:type:example.com/type/Task:0.1.0",
1035
+ ],
1036
+ },
1037
+ "spaces": [],
1038
+ },
1039
+ {
1040
+ "_tag": "FilterDeletedStep",
1041
+ "mode": "only-non-deleted",
1042
+ },
1043
+ {
1044
+ "_tag": "FilterStep",
1045
+ "filter": {
1046
+ "id": undefined,
1047
+ "props": {},
1048
+ "type": "object",
1049
+ "typename": "dxn:type:example.com/type/Task:0.1.0",
1050
+ },
1051
+ },
1052
+ {
1053
+ "_tag": "OrderStep",
1054
+ "order": [
1055
+ {
1056
+ "kind": "natural",
1057
+ },
1058
+ ],
1059
+ },
1060
+ ],
1061
+ }
1062
+ `);
1063
+ });
1064
+
1065
+ test('select items from all queues in a space', () => {
1066
+ const query = Query.select(Filter.type(TestSchema.Task)).options({
1067
+ spaceIds: [SPACE_ID],
1068
+ allQueuesFromSpaces: true,
1069
+ });
1070
+
1071
+ const plan = planner.createPlan(query.ast);
1072
+ expect(plan).toMatchInlineSnapshot(`
1073
+ {
1074
+ "steps": [
1075
+ {
1076
+ "_tag": "SelectStep",
1077
+ "allQueuesFromSpaces": true,
1078
+ "queues": [],
1079
+ "selector": {
1080
+ "_tag": "TypeSelector",
1081
+ "inverted": false,
1082
+ "typename": [
1083
+ "dxn:type:example.com/type/Task:0.1.0",
1084
+ ],
1085
+ },
1086
+ "spaces": [
1087
+ "B2NJDFNVZIW77OQSXUBNAD7BUMBD3G5PO",
1088
+ ],
1089
+ },
1090
+ {
1091
+ "_tag": "FilterDeletedStep",
1092
+ "mode": "only-non-deleted",
1093
+ },
1094
+ {
1095
+ "_tag": "FilterStep",
1096
+ "filter": {
1097
+ "id": undefined,
1098
+ "props": {},
1099
+ "type": "object",
1100
+ "typename": "dxn:type:example.com/type/Task:0.1.0",
1101
+ },
1102
+ },
1103
+ {
1104
+ "_tag": "OrderStep",
1105
+ "order": [
1106
+ {
1107
+ "kind": "natural",
1108
+ },
1109
+ ],
1110
+ },
1111
+ ],
1112
+ }
1113
+ `);
1114
+ });
1115
+
1116
+ test('limit results', () => {
1117
+ const query = Query.select(Filter.type(TestSchema.Task)).limit(10);
1118
+
1119
+ const plan = planner.createPlan(withSpaceIdOptions(query.ast));
1120
+ expect(plan).toMatchInlineSnapshot(`
1121
+ {
1122
+ "steps": [
1123
+ {
1124
+ "_tag": "SelectStep",
1125
+ "allQueuesFromSpaces": false,
1126
+ "limit": 10,
1127
+ "queues": [],
1128
+ "selector": {
1129
+ "_tag": "TypeSelector",
1130
+ "inverted": false,
1131
+ "typename": [
1132
+ "dxn:type:example.com/type/Task:0.1.0",
1133
+ ],
1134
+ },
1135
+ "spaces": [
1136
+ "B2NJDFNVZIW77OQSXUBNAD7BUMBD3G5PO",
1137
+ ],
1138
+ },
1139
+ {
1140
+ "_tag": "FilterDeletedStep",
1141
+ "mode": "only-non-deleted",
1142
+ },
1143
+ {
1144
+ "_tag": "FilterStep",
1145
+ "filter": {
1146
+ "id": undefined,
1147
+ "props": {},
1148
+ "type": "object",
1149
+ "typename": "dxn:type:example.com/type/Task:0.1.0",
1150
+ },
1151
+ },
1152
+ {
1153
+ "_tag": "OrderStep",
1154
+ "limit": 10,
1155
+ "order": [
1156
+ {
1157
+ "kind": "natural",
1158
+ },
1159
+ ],
1160
+ },
1161
+ ],
1162
+ }
1163
+ `);
1164
+ });
1165
+
1166
+ test('ordered and limited results', () => {
1167
+ const query = Query.select(Filter.type(TestSchema.Task)).orderBy(Order.property('title', 'asc')).limit(10);
1168
+
1169
+ const plan = planner.createPlan(withSpaceIdOptions(query.ast));
1170
+ expect(plan).toMatchInlineSnapshot(`
1171
+ {
1172
+ "steps": [
1173
+ {
1174
+ "_tag": "SelectStep",
1175
+ "allQueuesFromSpaces": false,
1176
+ "limit": 10,
1177
+ "queues": [],
1178
+ "selector": {
1179
+ "_tag": "TypeSelector",
1180
+ "inverted": false,
1181
+ "typename": [
1182
+ "dxn:type:example.com/type/Task:0.1.0",
1183
+ ],
1184
+ },
1185
+ "spaces": [
1186
+ "B2NJDFNVZIW77OQSXUBNAD7BUMBD3G5PO",
1187
+ ],
1188
+ },
1189
+ {
1190
+ "_tag": "FilterDeletedStep",
1191
+ "mode": "only-non-deleted",
1192
+ },
1193
+ {
1194
+ "_tag": "FilterStep",
1195
+ "filter": {
1196
+ "id": undefined,
1197
+ "props": {},
1198
+ "type": "object",
1199
+ "typename": "dxn:type:example.com/type/Task:0.1.0",
1200
+ },
1201
+ },
1202
+ {
1203
+ "_tag": "OrderStep",
1204
+ "limit": 10,
1205
+ "order": [
1206
+ {
1207
+ "direction": "asc",
1208
+ "kind": "property",
1209
+ "property": "title",
1210
+ },
1211
+ ],
1212
+ },
1213
+ ],
1214
+ }
1215
+ `);
1216
+ });
1217
+
1218
+ test('union of limited queries', () => {
1219
+ const query = Query.all(
1220
+ Query.select(Filter.type(TestSchema.Person)).limit(5),
1221
+ Query.select(Filter.type(TestSchema.Organization)).limit(5),
1222
+ );
1223
+
1224
+ const plan = planner.createPlan(withSpaceIdOptions(query.ast));
1225
+ expect(plan).toMatchInlineSnapshot(`
1226
+ {
1227
+ "steps": [
1228
+ {
1229
+ "_tag": "UnionStep",
1230
+ "plans": [
1231
+ {
1232
+ "steps": [
1233
+ {
1234
+ "_tag": "SelectStep",
1235
+ "allQueuesFromSpaces": false,
1236
+ "limit": 5,
1237
+ "queues": [],
1238
+ "selector": {
1239
+ "_tag": "TypeSelector",
1240
+ "inverted": false,
1241
+ "typename": [
1242
+ "dxn:type:example.com/type/Person:0.1.0",
1243
+ ],
1244
+ },
1245
+ "spaces": [
1246
+ "B2NJDFNVZIW77OQSXUBNAD7BUMBD3G5PO",
1247
+ ],
1248
+ },
1249
+ {
1250
+ "_tag": "FilterDeletedStep",
1251
+ "mode": "only-non-deleted",
1252
+ },
1253
+ {
1254
+ "_tag": "FilterStep",
1255
+ "filter": {
1256
+ "id": undefined,
1257
+ "props": {},
1258
+ "type": "object",
1259
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
1260
+ },
1261
+ },
1262
+ {
1263
+ "_tag": "OrderStep",
1264
+ "limit": 5,
1265
+ "order": [
1266
+ {
1267
+ "kind": "natural",
1268
+ },
1269
+ ],
1270
+ },
1271
+ ],
1272
+ },
1273
+ {
1274
+ "steps": [
1275
+ {
1276
+ "_tag": "SelectStep",
1277
+ "allQueuesFromSpaces": false,
1278
+ "limit": 5,
1279
+ "queues": [],
1280
+ "selector": {
1281
+ "_tag": "TypeSelector",
1282
+ "inverted": false,
1283
+ "typename": [
1284
+ "dxn:type:example.com/type/Organization:0.1.0",
1285
+ ],
1286
+ },
1287
+ "spaces": [
1288
+ "B2NJDFNVZIW77OQSXUBNAD7BUMBD3G5PO",
1289
+ ],
1290
+ },
1291
+ {
1292
+ "_tag": "FilterDeletedStep",
1293
+ "mode": "only-non-deleted",
1294
+ },
1295
+ {
1296
+ "_tag": "FilterStep",
1297
+ "filter": {
1298
+ "id": undefined,
1299
+ "props": {},
1300
+ "type": "object",
1301
+ "typename": "dxn:type:example.com/type/Organization:0.1.0",
1302
+ },
1303
+ },
1304
+ {
1305
+ "_tag": "OrderStep",
1306
+ "limit": 5,
1307
+ "order": [
1308
+ {
1309
+ "kind": "natural",
1310
+ },
1311
+ ],
1312
+ },
1313
+ ],
1314
+ },
1315
+ ],
1316
+ },
844
1317
  {
845
1318
  "_tag": "OrderStep",
846
1319
  "order": [
@@ -856,6 +1329,7 @@ describe('QueryPlanner', () => {
856
1329
  });
857
1330
 
858
1331
  const SPACE_ID = SpaceId.make('B2NJDFNVZIW77OQSXUBNAD7BUMBD3G5PO'); // Stable id for inline snapshots.
1332
+ const QUEUE_DXN = DXN.parse('dxn:queue:data:B2NJDFNVZIW77OQSXUBNAD7BUMBD3G5PO:01JJRA86VK4H1TEB6QQVSWXP0E').toString(); // Stable queue DXN for inline snapshots.
859
1333
 
860
1334
  const withSpaceIdOptions = (query: QueryAST.Query): QueryAST.Query => ({
861
1335
  type: 'options',