@dxos/echo-pipeline 0.8.3 → 0.8.4-main.1068cf700f

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 (199) hide show
  1. package/dist/lib/neutral/chunk-FJPXA75J.mjs +235 -0
  2. package/dist/lib/neutral/chunk-FJPXA75J.mjs.map +7 -0
  3. package/dist/lib/{browser/chunk-35I6ERLG.mjs → neutral/chunk-WIQUYO7H.mjs} +300 -213
  4. package/dist/lib/neutral/chunk-WIQUYO7H.mjs.map +7 -0
  5. package/dist/lib/{browser → neutral}/filter/index.mjs +3 -2
  6. package/dist/lib/{browser → neutral}/index.mjs +2832 -946
  7. package/dist/lib/neutral/index.mjs.map +7 -0
  8. package/dist/lib/neutral/meta.json +1 -0
  9. package/dist/lib/{browser → neutral}/testing/index.mjs +73 -224
  10. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  11. package/dist/types/src/automerge/automerge-host.d.ts +53 -42
  12. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  13. package/dist/types/src/automerge/automerge-repo.test.d.ts +1 -1
  14. package/dist/types/src/automerge/automerge-repo.test.d.ts.map +1 -1
  15. package/dist/types/src/automerge/collection-synchronizer.d.ts +6 -4
  16. package/dist/types/src/automerge/collection-synchronizer.d.ts.map +1 -1
  17. package/dist/types/src/automerge/echo-network-adapter.d.ts +22 -10
  18. package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
  19. package/dist/types/src/automerge/echo-replicator.d.ts +37 -15
  20. package/dist/types/src/automerge/echo-replicator.d.ts.map +1 -1
  21. package/dist/types/src/automerge/heads-store.d.ts +9 -2
  22. package/dist/types/src/automerge/heads-store.d.ts.map +1 -1
  23. package/dist/types/src/automerge/index.d.ts +1 -1
  24. package/dist/types/src/automerge/index.d.ts.map +1 -1
  25. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +5 -5
  26. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts.map +1 -1
  27. package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts +9 -8
  28. package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts.map +1 -1
  29. package/dist/types/src/automerge/mesh-echo-replicator.d.ts +5 -5
  30. package/dist/types/src/automerge/mesh-echo-replicator.d.ts.map +1 -1
  31. package/dist/types/src/common/codec.d.ts +1 -1
  32. package/dist/types/src/common/codec.d.ts.map +1 -1
  33. package/dist/types/src/db-host/automerge-data-source.d.ts +34 -0
  34. package/dist/types/src/db-host/automerge-data-source.d.ts.map +1 -0
  35. package/dist/types/src/db-host/automerge-data-source.test.d.ts +2 -0
  36. package/dist/types/src/db-host/automerge-data-source.test.d.ts.map +1 -0
  37. package/dist/types/src/db-host/data-service.d.ts +5 -4
  38. package/dist/types/src/db-host/data-service.d.ts.map +1 -1
  39. package/dist/types/src/db-host/database-root.d.ts.map +1 -1
  40. package/dist/types/src/db-host/documents-synchronizer.d.ts +6 -5
  41. package/dist/types/src/db-host/documents-synchronizer.d.ts.map +1 -1
  42. package/dist/types/src/db-host/echo-host.d.ts +44 -23
  43. package/dist/types/src/db-host/echo-host.d.ts.map +1 -1
  44. package/dist/types/src/db-host/index.d.ts +1 -0
  45. package/dist/types/src/db-host/index.d.ts.map +1 -1
  46. package/dist/types/src/db-host/local-queue-service.d.ts +16 -0
  47. package/dist/types/src/db-host/local-queue-service.d.ts.map +1 -0
  48. package/dist/types/src/db-host/query-service.d.ts +14 -9
  49. package/dist/types/src/db-host/query-service.d.ts.map +1 -1
  50. package/dist/types/src/db-host/queue-data-source.d.ts +28 -0
  51. package/dist/types/src/db-host/queue-data-source.d.ts.map +1 -0
  52. package/dist/types/src/db-host/queue-service.test.d.ts +2 -0
  53. package/dist/types/src/db-host/queue-service.test.d.ts.map +1 -0
  54. package/dist/types/src/db-host/space-state-manager.d.ts +2 -1
  55. package/dist/types/src/db-host/space-state-manager.d.ts.map +1 -1
  56. package/dist/types/src/db-host/stub.d.ts +10 -0
  57. package/dist/types/src/db-host/stub.d.ts.map +1 -0
  58. package/dist/types/src/edge/echo-edge-replicator.d.ts +8 -6
  59. package/dist/types/src/edge/echo-edge-replicator.d.ts.map +1 -1
  60. package/dist/types/src/filter/filter-match.d.ts +4 -1
  61. package/dist/types/src/filter/filter-match.d.ts.map +1 -1
  62. package/dist/types/src/metadata/metadata-store.d.ts +1 -1
  63. package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
  64. package/dist/types/src/pipeline/pipeline.d.ts +3 -3
  65. package/dist/types/src/pipeline/pipeline.d.ts.map +1 -1
  66. package/dist/types/src/query/errors.d.ts +21 -9
  67. package/dist/types/src/query/errors.d.ts.map +1 -1
  68. package/dist/types/src/query/plan.d.ts +57 -5
  69. package/dist/types/src/query/plan.d.ts.map +1 -1
  70. package/dist/types/src/query/query-executor.d.ts +49 -10
  71. package/dist/types/src/query/query-executor.d.ts.map +1 -1
  72. package/dist/types/src/query/query-planner.d.ts +9 -0
  73. package/dist/types/src/query/query-planner.d.ts.map +1 -1
  74. package/dist/types/src/space/admission-discovery-extension.d.ts.map +1 -1
  75. package/dist/types/src/space/auth.d.ts +3 -3
  76. package/dist/types/src/space/auth.d.ts.map +1 -1
  77. package/dist/types/src/space/control-pipeline.d.ts +3 -3
  78. package/dist/types/src/space/control-pipeline.d.ts.map +1 -1
  79. package/dist/types/src/space/space-manager.d.ts +7 -7
  80. package/dist/types/src/space/space-manager.d.ts.map +1 -1
  81. package/dist/types/src/space/space-protocol.d.ts +6 -6
  82. package/dist/types/src/space/space-protocol.d.ts.map +1 -1
  83. package/dist/types/src/space/space.d.ts +4 -4
  84. package/dist/types/src/space/space.d.ts.map +1 -1
  85. package/dist/types/src/testing/index.d.ts +0 -2
  86. package/dist/types/src/testing/index.d.ts.map +1 -1
  87. package/dist/types/src/testing/test-agent-builder.d.ts +2 -2
  88. package/dist/types/src/testing/test-agent-builder.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 +14 -13
  92. package/dist/types/src/testing/test-replicator.d.ts.map +1 -1
  93. package/dist/types/src/util.d.ts +1 -1
  94. package/dist/types/src/util.d.ts.map +1 -1
  95. package/dist/types/tsconfig.tsbuildinfo +1 -1
  96. package/package.json +53 -45
  97. package/src/automerge/automerge-host.test.ts +55 -24
  98. package/src/automerge/automerge-host.ts +399 -126
  99. package/src/automerge/automerge-repo.test.ts +214 -46
  100. package/src/automerge/collection-synchronizer.test.ts +22 -15
  101. package/src/automerge/collection-synchronizer.ts +57 -22
  102. package/src/automerge/echo-data-monitor.ts +1 -1
  103. package/src/automerge/echo-network-adapter.test.ts +3 -3
  104. package/src/automerge/echo-network-adapter.ts +73 -28
  105. package/src/automerge/echo-replicator.ts +40 -15
  106. package/src/automerge/heads-store.ts +42 -3
  107. package/src/automerge/index.ts +1 -1
  108. package/src/automerge/leveldb-storage-adapter.ts +11 -11
  109. package/src/automerge/mesh-echo-replicator-connection.ts +12 -8
  110. package/src/automerge/mesh-echo-replicator.ts +15 -11
  111. package/src/automerge/storage-adapter.test.ts +1 -1
  112. package/src/common/space-id.ts +1 -1
  113. package/src/db-host/automerge-data-source.test.ts +292 -0
  114. package/src/db-host/automerge-data-source.ts +144 -0
  115. package/src/db-host/data-service.ts +19 -20
  116. package/src/db-host/database-root.ts +2 -2
  117. package/src/db-host/documents-synchronizer.test.ts +73 -13
  118. package/src/db-host/documents-synchronizer.ts +58 -44
  119. package/src/db-host/echo-host.ts +194 -84
  120. package/src/db-host/index.ts +1 -0
  121. package/src/db-host/local-queue-service.ts +147 -0
  122. package/src/db-host/query-service.ts +28 -95
  123. package/src/db-host/queue-data-source.ts +132 -0
  124. package/src/db-host/queue-service.test.ts +145 -0
  125. package/src/db-host/space-state-manager.ts +6 -2
  126. package/src/db-host/stub.ts +28 -0
  127. package/src/edge/echo-edge-replicator.test.ts +8 -6
  128. package/src/edge/echo-edge-replicator.ts +124 -42
  129. package/src/filter/filter-match.test.ts +58 -32
  130. package/src/filter/filter-match.ts +163 -15
  131. package/src/metadata/metadata-store.ts +8 -5
  132. package/src/pipeline/pipeline-stress.test.ts +4 -2
  133. package/src/pipeline/pipeline.test.ts +3 -2
  134. package/src/pipeline/pipeline.ts +10 -7
  135. package/src/query/errors.ts +3 -1
  136. package/src/query/plan.ts +75 -5
  137. package/src/query/query-executor.ts +812 -117
  138. package/src/query/query-planner.test.ts +652 -34
  139. package/src/query/query-planner.ts +276 -13
  140. package/src/space/admission-discovery-extension.ts +3 -3
  141. package/src/space/auth.ts +6 -6
  142. package/src/space/control-pipeline.test.ts +4 -3
  143. package/src/space/control-pipeline.ts +11 -8
  144. package/src/space/space-manager.browser.test.ts +1 -1
  145. package/src/space/space-manager.ts +11 -10
  146. package/src/space/space-protocol.browser.test.ts +2 -2
  147. package/src/space/space-protocol.test.ts +3 -2
  148. package/src/space/space-protocol.ts +17 -14
  149. package/src/space/space.test.ts +1 -1
  150. package/src/space/space.ts +6 -5
  151. package/src/testing/index.ts +0 -2
  152. package/src/testing/test-agent-builder.ts +4 -3
  153. package/src/testing/test-network-adapter.ts +16 -3
  154. package/src/testing/test-replicator.ts +23 -18
  155. package/src/util.ts +7 -3
  156. package/dist/lib/browser/chunk-35I6ERLG.mjs.map +0 -7
  157. package/dist/lib/browser/chunk-CGS2ULMK.mjs +0 -11
  158. package/dist/lib/browser/chunk-CGS2ULMK.mjs.map +0 -7
  159. package/dist/lib/browser/chunk-TQJTKNMS.mjs +0 -126
  160. package/dist/lib/browser/chunk-TQJTKNMS.mjs.map +0 -7
  161. package/dist/lib/browser/index.mjs.map +0 -7
  162. package/dist/lib/browser/meta.json +0 -1
  163. package/dist/lib/browser/testing/index.mjs.map +0 -7
  164. package/dist/lib/node/chunk-HOPOFWAL.cjs +0 -147
  165. package/dist/lib/node/chunk-HOPOFWAL.cjs.map +0 -7
  166. package/dist/lib/node/chunk-JXX6LF5U.cjs +0 -2084
  167. package/dist/lib/node/chunk-JXX6LF5U.cjs.map +0 -7
  168. package/dist/lib/node/chunk-Q7SFCCGT.cjs +0 -33
  169. package/dist/lib/node/chunk-Q7SFCCGT.cjs.map +0 -7
  170. package/dist/lib/node/filter/index.cjs +0 -32
  171. package/dist/lib/node/filter/index.cjs.map +0 -7
  172. package/dist/lib/node/index.cjs +0 -4699
  173. package/dist/lib/node/index.cjs.map +0 -7
  174. package/dist/lib/node/meta.json +0 -1
  175. package/dist/lib/node/testing/index.cjs +0 -753
  176. package/dist/lib/node/testing/index.cjs.map +0 -7
  177. package/dist/lib/node-esm/chunk-5BHLPT24.mjs +0 -2067
  178. package/dist/lib/node-esm/chunk-5BHLPT24.mjs.map +0 -7
  179. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  180. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +0 -7
  181. package/dist/lib/node-esm/chunk-RVK35BS7.mjs +0 -126
  182. package/dist/lib/node-esm/chunk-RVK35BS7.mjs.map +0 -7
  183. package/dist/lib/node-esm/filter/index.mjs +0 -11
  184. package/dist/lib/node-esm/filter/index.mjs.map +0 -7
  185. package/dist/lib/node-esm/index.mjs +0 -4743
  186. package/dist/lib/node-esm/index.mjs.map +0 -7
  187. package/dist/lib/node-esm/meta.json +0 -1
  188. package/dist/lib/node-esm/testing/index.mjs +0 -742
  189. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  190. package/dist/types/src/db-host/documents-iterator.d.ts +0 -7
  191. package/dist/types/src/db-host/documents-iterator.d.ts.map +0 -1
  192. package/dist/types/src/testing/test-data.d.ts +0 -18
  193. package/dist/types/src/testing/test-data.d.ts.map +0 -1
  194. package/dist/types/src/testing/test-schema.d.ts +0 -37
  195. package/dist/types/src/testing/test-schema.d.ts.map +0 -1
  196. package/src/db-host/documents-iterator.ts +0 -74
  197. package/src/testing/test-data.ts +0 -127
  198. package/src/testing/test-schema.ts +0 -53
  199. /package/dist/lib/{browser → neutral}/filter/index.mjs.map +0 -0
@@ -1,15 +1,19 @@
1
+ //
2
+ // Copyright 2025 example.com
3
+ //
4
+
1
5
  //
2
6
  // Copyright 2025 DXOS.org
3
7
  //
4
8
 
5
9
  import { describe, expect, test } from 'vitest';
6
10
 
7
- import { Filter, Query } from '@dxos/echo';
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';
14
+ import { DXN, SpaceId } from '@dxos/keys';
10
15
 
11
16
  import { QueryPlanner } from './query-planner';
12
- import { TestSchema } from '../testing';
13
17
 
14
18
  describe('QueryPlanner', () => {
15
19
  const planner = new QueryPlanner();
@@ -23,11 +27,13 @@ describe('QueryPlanner', () => {
23
27
  "steps": [
24
28
  {
25
29
  "_tag": "SelectStep",
30
+ "allQueuesFromSpaces": false,
31
+ "queues": [],
26
32
  "selector": {
27
33
  "_tag": "TypeSelector",
28
34
  "inverted": false,
29
35
  "typename": [
30
- "dxn:type:dxos.org/type/Person:0.1.0",
36
+ "dxn:type:example.com/type/Person:0.1.0",
31
37
  ],
32
38
  },
33
39
  "spaces": [
@@ -38,6 +44,73 @@ describe('QueryPlanner', () => {
38
44
  "_tag": "FilterDeletedStep",
39
45
  "mode": "only-non-deleted",
40
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
+ },
56
+ {
57
+ "_tag": "OrderStep",
58
+ "order": [
59
+ {
60
+ "kind": "natural",
61
+ },
62
+ ],
63
+ },
64
+ ],
65
+ }
66
+ `);
67
+ });
68
+
69
+ test('get all people ordered by name', () => {
70
+ const query = Query.select(Filter.type(TestSchema.Person)).orderBy(Order.property('name', 'asc'));
71
+
72
+ const plan = planner.createPlan(withSpaceIdOptions(query.ast));
73
+ expect(plan).toMatchInlineSnapshot(`
74
+ {
75
+ "steps": [
76
+ {
77
+ "_tag": "SelectStep",
78
+ "allQueuesFromSpaces": false,
79
+ "queues": [],
80
+ "selector": {
81
+ "_tag": "TypeSelector",
82
+ "inverted": false,
83
+ "typename": [
84
+ "dxn:type:example.com/type/Person:0.1.0",
85
+ ],
86
+ },
87
+ "spaces": [
88
+ "B2NJDFNVZIW77OQSXUBNAD7BUMBD3G5PO",
89
+ ],
90
+ },
91
+ {
92
+ "_tag": "FilterDeletedStep",
93
+ "mode": "only-non-deleted",
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
+ },
104
+ {
105
+ "_tag": "OrderStep",
106
+ "order": [
107
+ {
108
+ "direction": "asc",
109
+ "kind": "property",
110
+ "property": "name",
111
+ },
112
+ ],
113
+ },
41
114
  ],
42
115
  }
43
116
  `);
@@ -52,11 +125,13 @@ describe('QueryPlanner', () => {
52
125
  "steps": [
53
126
  {
54
127
  "_tag": "SelectStep",
128
+ "allQueuesFromSpaces": false,
129
+ "queues": [],
55
130
  "selector": {
56
131
  "_tag": "TypeSelector",
57
132
  "inverted": false,
58
133
  "typename": [
59
- "dxn:type:dxos.org/type/Person:0.1.0",
134
+ "dxn:type:example.com/type/Person:0.1.0",
60
135
  ],
61
136
  },
62
137
  "spaces": [
@@ -79,9 +154,17 @@ describe('QueryPlanner', () => {
79
154
  },
80
155
  },
81
156
  "type": "object",
82
- "typename": null,
157
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
83
158
  },
84
159
  },
160
+ {
161
+ "_tag": "OrderStep",
162
+ "order": [
163
+ {
164
+ "kind": "natural",
165
+ },
166
+ ],
167
+ },
85
168
  ],
86
169
  }
87
170
  `);
@@ -89,7 +172,9 @@ describe('QueryPlanner', () => {
89
172
 
90
173
  test('get all orgs Fred worked for since 2020', () => {
91
174
  const query = Query.select(Filter.type(TestSchema.Person, { id: '01JVS9YYT5VMVJW0GGTM1YHCCH' }))
92
- .sourceOf(TestSchema.WorksFor, { since: Filter.gt('2020') })
175
+ .sourceOf(TestSchema.EmployedBy, {
176
+ since: Filter.gt<string | undefined>('2020'),
177
+ })
93
178
  .target();
94
179
 
95
180
  const plan = planner.createPlan(withSpaceIdOptions(query.ast));
@@ -98,6 +183,8 @@ describe('QueryPlanner', () => {
98
183
  "steps": [
99
184
  {
100
185
  "_tag": "SelectStep",
186
+ "allQueuesFromSpaces": false,
187
+ "queues": [],
101
188
  "selector": {
102
189
  "_tag": "IdSelector",
103
190
  "objectIds": [
@@ -118,7 +205,7 @@ describe('QueryPlanner', () => {
118
205
  "id": undefined,
119
206
  "props": {},
120
207
  "type": "object",
121
- "typename": "dxn:type:dxos.org/type/Person:0.1.0",
208
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
122
209
  },
123
210
  },
124
211
  {
@@ -144,7 +231,7 @@ describe('QueryPlanner', () => {
144
231
  },
145
232
  },
146
233
  "type": "object",
147
- "typename": "dxn:type:dxos.org/type/WorksFor:0.1.0",
234
+ "typename": "dxn:type:example.com/type/EmployedBy:0.1.0",
148
235
  },
149
236
  },
150
237
  {
@@ -158,6 +245,14 @@ describe('QueryPlanner', () => {
158
245
  "_tag": "FilterDeletedStep",
159
246
  "mode": "only-non-deleted",
160
247
  },
248
+ {
249
+ "_tag": "OrderStep",
250
+ "order": [
251
+ {
252
+ "kind": "natural",
253
+ },
254
+ ],
255
+ },
161
256
  ],
162
257
  }
163
258
  `);
@@ -175,6 +270,8 @@ describe('QueryPlanner', () => {
175
270
  "steps": [
176
271
  {
177
272
  "_tag": "SelectStep",
273
+ "allQueuesFromSpaces": false,
274
+ "queues": [],
178
275
  "selector": {
179
276
  "_tag": "IdSelector",
180
277
  "objectIds": [
@@ -195,7 +292,7 @@ describe('QueryPlanner', () => {
195
292
  "id": undefined,
196
293
  "props": {},
197
294
  "type": "object",
198
- "typename": "dxn:type:dxos.org/type/Person:0.1.0",
295
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
199
296
  },
200
297
  },
201
298
  {
@@ -215,9 +312,17 @@ describe('QueryPlanner', () => {
215
312
  "filter": {
216
313
  "props": {},
217
314
  "type": "object",
218
- "typename": "dxn:type:dxos.org/type/Task:0.1.0",
315
+ "typename": "dxn:type:example.com/type/Task:0.1.0",
219
316
  },
220
317
  },
318
+ {
319
+ "_tag": "OrderStep",
320
+ "order": [
321
+ {
322
+ "kind": "natural",
323
+ },
324
+ ],
325
+ },
221
326
  ],
222
327
  }
223
328
  `);
@@ -225,7 +330,7 @@ describe('QueryPlanner', () => {
225
330
 
226
331
  test('get all tasks for employees of Cyberdyne', () => {
227
332
  const query = Query.select(Filter.type(TestSchema.Organization, { name: 'Cyberdyne' }))
228
- .targetOf(TestSchema.WorksFor)
333
+ .targetOf(TestSchema.EmployedBy)
229
334
  .source()
230
335
  .referencedBy(TestSchema.Task, 'assignee');
231
336
 
@@ -235,11 +340,13 @@ describe('QueryPlanner', () => {
235
340
  "steps": [
236
341
  {
237
342
  "_tag": "SelectStep",
343
+ "allQueuesFromSpaces": false,
344
+ "queues": [],
238
345
  "selector": {
239
346
  "_tag": "TypeSelector",
240
347
  "inverted": false,
241
348
  "typename": [
242
- "dxn:type:dxos.org/type/Organization:0.1.0",
349
+ "dxn:type:example.com/type/Organization:0.1.0",
243
350
  ],
244
351
  },
245
352
  "spaces": [
@@ -262,7 +369,7 @@ describe('QueryPlanner', () => {
262
369
  },
263
370
  },
264
371
  "type": "object",
265
- "typename": null,
372
+ "typename": "dxn:type:example.com/type/Organization:0.1.0",
266
373
  },
267
374
  },
268
375
  {
@@ -282,7 +389,7 @@ describe('QueryPlanner', () => {
282
389
  "id": undefined,
283
390
  "props": {},
284
391
  "type": "object",
285
- "typename": "dxn:type:dxos.org/type/WorksFor:0.1.0",
392
+ "typename": "dxn:type:example.com/type/EmployedBy:0.1.0",
286
393
  },
287
394
  },
288
395
  {
@@ -313,9 +420,17 @@ describe('QueryPlanner', () => {
313
420
  "filter": {
314
421
  "props": {},
315
422
  "type": "object",
316
- "typename": "dxn:type:dxos.org/type/Task:0.1.0",
423
+ "typename": "dxn:type:example.com/type/Task:0.1.0",
317
424
  },
318
425
  },
426
+ {
427
+ "_tag": "OrderStep",
428
+ "order": [
429
+ {
430
+ "kind": "natural",
431
+ },
432
+ ],
433
+ },
319
434
  ],
320
435
  }
321
436
  `);
@@ -338,11 +453,13 @@ describe('QueryPlanner', () => {
338
453
  "steps": [
339
454
  {
340
455
  "_tag": "SelectStep",
456
+ "allQueuesFromSpaces": false,
457
+ "queues": [],
341
458
  "selector": {
342
459
  "_tag": "TypeSelector",
343
460
  "inverted": false,
344
461
  "typename": [
345
- "dxn:type:dxos.org/type/Person:0.1.0",
462
+ "dxn:type:example.com/type/Person:0.1.0",
346
463
  ],
347
464
  },
348
465
  "spaces": [
@@ -353,17 +470,36 @@ describe('QueryPlanner', () => {
353
470
  "_tag": "FilterDeletedStep",
354
471
  "mode": "only-non-deleted",
355
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
+ },
356
490
  ],
357
491
  },
358
492
  {
359
493
  "steps": [
360
494
  {
361
495
  "_tag": "SelectStep",
496
+ "allQueuesFromSpaces": false,
497
+ "queues": [],
362
498
  "selector": {
363
499
  "_tag": "TypeSelector",
364
500
  "inverted": false,
365
501
  "typename": [
366
- "dxn:type:dxos.org/type/Organization:0.1.0",
502
+ "dxn:type:example.com/type/Organization:0.1.0",
367
503
  ],
368
504
  },
369
505
  "spaces": [
@@ -374,10 +510,35 @@ describe('QueryPlanner', () => {
374
510
  "_tag": "FilterDeletedStep",
375
511
  "mode": "only-non-deleted",
376
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
+ },
377
530
  ],
378
531
  },
379
532
  ],
380
533
  },
534
+ {
535
+ "_tag": "OrderStep",
536
+ "order": [
537
+ {
538
+ "kind": "natural",
539
+ },
540
+ ],
541
+ },
381
542
  ],
382
543
  }
383
544
  `);
@@ -386,7 +547,7 @@ describe('QueryPlanner', () => {
386
547
  test('get all people not in orgs', () => {
387
548
  const query = Query.without(
388
549
  Query.select(Filter.type(TestSchema.Person)),
389
- Query.select(Filter.type(TestSchema.Person)).sourceOf(TestSchema.WorksFor).source(),
550
+ Query.select(Filter.type(TestSchema.Person)).sourceOf(TestSchema.EmployedBy).source(),
390
551
  );
391
552
 
392
553
  const plan = planner.createPlan(withSpaceIdOptions(query.ast));
@@ -399,11 +560,13 @@ describe('QueryPlanner', () => {
399
560
  "steps": [
400
561
  {
401
562
  "_tag": "SelectStep",
563
+ "allQueuesFromSpaces": false,
564
+ "queues": [],
402
565
  "selector": {
403
566
  "_tag": "TypeSelector",
404
567
  "inverted": false,
405
568
  "typename": [
406
- "dxn:type:dxos.org/type/Person:0.1.0",
569
+ "dxn:type:example.com/type/Person:0.1.0",
407
570
  ],
408
571
  },
409
572
  "spaces": [
@@ -420,7 +583,7 @@ describe('QueryPlanner', () => {
420
583
  "id": undefined,
421
584
  "props": {},
422
585
  "type": "object",
423
- "typename": null,
586
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
424
587
  },
425
588
  },
426
589
  {
@@ -440,7 +603,7 @@ describe('QueryPlanner', () => {
440
603
  "id": undefined,
441
604
  "props": {},
442
605
  "type": "object",
443
- "typename": "dxn:type:dxos.org/type/WorksFor:0.1.0",
606
+ "typename": "dxn:type:example.com/type/EmployedBy:0.1.0",
444
607
  },
445
608
  },
446
609
  {
@@ -454,17 +617,27 @@ describe('QueryPlanner', () => {
454
617
  "_tag": "FilterDeletedStep",
455
618
  "mode": "only-non-deleted",
456
619
  },
620
+ {
621
+ "_tag": "OrderStep",
622
+ "order": [
623
+ {
624
+ "kind": "natural",
625
+ },
626
+ ],
627
+ },
457
628
  ],
458
629
  },
459
630
  "source": {
460
631
  "steps": [
461
632
  {
462
633
  "_tag": "SelectStep",
634
+ "allQueuesFromSpaces": false,
635
+ "queues": [],
463
636
  "selector": {
464
637
  "_tag": "TypeSelector",
465
638
  "inverted": false,
466
639
  "typename": [
467
- "dxn:type:dxos.org/type/Person:0.1.0",
640
+ "dxn:type:example.com/type/Person:0.1.0",
468
641
  ],
469
642
  },
470
643
  "spaces": [
@@ -481,19 +654,39 @@ describe('QueryPlanner', () => {
481
654
  "id": undefined,
482
655
  "props": {},
483
656
  "type": "object",
484
- "typename": null,
657
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
485
658
  },
486
659
  },
660
+ {
661
+ "_tag": "OrderStep",
662
+ "order": [
663
+ {
664
+ "kind": "natural",
665
+ },
666
+ ],
667
+ },
487
668
  ],
488
669
  },
489
670
  },
671
+ {
672
+ "_tag": "OrderStep",
673
+ "order": [
674
+ {
675
+ "kind": "natural",
676
+ },
677
+ ],
678
+ },
490
679
  ],
491
680
  }
492
681
  `);
493
682
  });
494
683
 
495
684
  test('get assignees of all tasks created after 2020', () => {
496
- 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');
497
690
 
498
691
  const plan = planner.createPlan(withSpaceIdOptions(query.ast));
499
692
  expect(plan).toMatchInlineSnapshot(`
@@ -501,11 +694,13 @@ describe('QueryPlanner', () => {
501
694
  "steps": [
502
695
  {
503
696
  "_tag": "SelectStep",
697
+ "allQueuesFromSpaces": false,
698
+ "queues": [],
504
699
  "selector": {
505
700
  "_tag": "TypeSelector",
506
701
  "inverted": false,
507
702
  "typename": [
508
- "dxn:type:dxos.org/type/Task:0.1.0",
703
+ "dxn:type:example.com/type/Task:0.1.0",
509
704
  ],
510
705
  },
511
706
  "spaces": [
@@ -521,14 +716,14 @@ describe('QueryPlanner', () => {
521
716
  "filter": {
522
717
  "id": undefined,
523
718
  "props": {
524
- "createdAt": {
719
+ "deadline": {
525
720
  "operator": "gt",
526
721
  "type": "compare",
527
722
  "value": "2020",
528
723
  },
529
724
  },
530
725
  "type": "object",
531
- "typename": null,
726
+ "typename": "dxn:type:example.com/type/Task:0.1.0",
532
727
  },
533
728
  },
534
729
  {
@@ -543,6 +738,14 @@ describe('QueryPlanner', () => {
543
738
  "_tag": "FilterDeletedStep",
544
739
  "mode": "only-non-deleted",
545
740
  },
741
+ {
742
+ "_tag": "OrderStep",
743
+ "order": [
744
+ {
745
+ "kind": "natural",
746
+ },
747
+ ],
748
+ },
546
749
  ],
547
750
  }
548
751
  `);
@@ -557,10 +760,13 @@ describe('QueryPlanner', () => {
557
760
  "steps": [
558
761
  {
559
762
  "_tag": "SelectStep",
763
+ "allQueuesFromSpaces": false,
764
+ "queues": [],
560
765
  "selector": {
561
766
  "_tag": "TextSelector",
562
767
  "searchKind": "full-text",
563
768
  "text": "Bill",
769
+ "typename": null,
564
770
  },
565
771
  "spaces": [
566
772
  "B2NJDFNVZIW77OQSXUBNAD7BUMBD3G5PO",
@@ -576,9 +782,17 @@ describe('QueryPlanner', () => {
576
782
  "id": undefined,
577
783
  "props": {},
578
784
  "type": "object",
579
- "typename": "dxn:type:dxos.org/type/Person:0.1.0",
785
+ "typename": "dxn:type:example.com/type/Person:0.1.0",
580
786
  },
581
787
  },
788
+ {
789
+ "_tag": "OrderStep",
790
+ "order": [
791
+ {
792
+ "kind": "natural",
793
+ },
794
+ ],
795
+ },
582
796
  ],
583
797
  }
584
798
  `);
@@ -593,10 +807,13 @@ describe('QueryPlanner', () => {
593
807
  "steps": [
594
808
  {
595
809
  "_tag": "SelectStep",
810
+ "allQueuesFromSpaces": false,
811
+ "queues": [],
596
812
  "selector": {
597
813
  "_tag": "TextSelector",
598
814
  "searchKind": "vector",
599
815
  "text": "Bill",
816
+ "typename": null,
600
817
  },
601
818
  "spaces": [
602
819
  "B2NJDFNVZIW77OQSXUBNAD7BUMBD3G5PO",
@@ -606,6 +823,14 @@ describe('QueryPlanner', () => {
606
823
  "_tag": "FilterDeletedStep",
607
824
  "mode": "only-non-deleted",
608
825
  },
826
+ {
827
+ "_tag": "OrderStep",
828
+ "order": [
829
+ {
830
+ "kind": "natural",
831
+ },
832
+ ],
833
+ },
609
834
  ],
610
835
  }
611
836
  `);
@@ -620,12 +845,14 @@ describe('QueryPlanner', () => {
620
845
  "steps": [
621
846
  {
622
847
  "_tag": "SelectStep",
848
+ "allQueuesFromSpaces": false,
849
+ "queues": [],
623
850
  "selector": {
624
851
  "_tag": "TypeSelector",
625
852
  "inverted": false,
626
853
  "typename": [
627
- "dxn:type:dxos.org/type/Organization:0.1.0",
628
- "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",
629
856
  ],
630
857
  },
631
858
  "spaces": [
@@ -636,6 +863,34 @@ describe('QueryPlanner', () => {
636
863
  "_tag": "FilterDeletedStep",
637
864
  "mode": "only-non-deleted",
638
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
+ },
886
+ {
887
+ "_tag": "OrderStep",
888
+ "order": [
889
+ {
890
+ "kind": "natural",
891
+ },
892
+ ],
893
+ },
639
894
  ],
640
895
  }
641
896
  `);
@@ -660,12 +915,14 @@ describe('QueryPlanner', () => {
660
915
  "steps": [
661
916
  {
662
917
  "_tag": "SelectStep",
918
+ "allQueuesFromSpaces": false,
919
+ "queues": [],
663
920
  "selector": {
664
921
  "_tag": "TypeSelector",
665
922
  "inverted": true,
666
923
  "typename": [
667
- "dxn:type:dxos.org/type/Organization:0.1.0",
668
- "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",
669
926
  ],
670
927
  },
671
928
  "spaces": [
@@ -676,6 +933,34 @@ describe('QueryPlanner', () => {
676
933
  "_tag": "FilterDeletedStep",
677
934
  "mode": "only-non-deleted",
678
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
+ },
956
+ {
957
+ "_tag": "OrderStep",
958
+ "order": [
959
+ {
960
+ "kind": "natural",
961
+ },
962
+ ],
963
+ },
679
964
  ],
680
965
  }
681
966
  `);
@@ -690,11 +975,13 @@ describe('QueryPlanner', () => {
690
975
  "steps": [
691
976
  {
692
977
  "_tag": "SelectStep",
978
+ "allQueuesFromSpaces": false,
979
+ "queues": [],
693
980
  "selector": {
694
981
  "_tag": "TypeSelector",
695
982
  "inverted": false,
696
983
  "typename": [
697
- "dxn:type:dxos.org/type/Task:0.1.0",
984
+ "dxn:type:example.com/type/Task:0.1.0",
698
985
  ],
699
986
  },
700
987
  "spaces": [
@@ -705,6 +992,336 @@ describe('QueryPlanner', () => {
705
992
  "_tag": "FilterDeletedStep",
706
993
  "mode": "only-deleted",
707
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
+ },
1317
+ {
1318
+ "_tag": "OrderStep",
1319
+ "order": [
1320
+ {
1321
+ "kind": "natural",
1322
+ },
1323
+ ],
1324
+ },
708
1325
  ],
709
1326
  }
710
1327
  `);
@@ -712,6 +1329,7 @@ describe('QueryPlanner', () => {
712
1329
  });
713
1330
 
714
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.
715
1333
 
716
1334
  const withSpaceIdOptions = (query: QueryAST.Query): QueryAST.Query => ({
717
1335
  type: 'options',