@dxos/echo 0.8.3 → 0.8.4-main.1da679c

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 (43) hide show
  1. package/README.md +1 -1
  2. package/dist/lib/browser/{chunk-UYPR62ZB.mjs → chunk-WG555MU5.mjs} +404 -174
  3. package/dist/lib/browser/chunk-WG555MU5.mjs.map +7 -0
  4. package/dist/lib/browser/index.mjs +9 -1
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +2 -2
  7. package/dist/lib/node-esm/{chunk-BYBICDIO.mjs → chunk-N55B5WWQ.mjs} +404 -174
  8. package/dist/lib/node-esm/chunk-N55B5WWQ.mjs.map +7 -0
  9. package/dist/lib/node-esm/index.mjs +9 -1
  10. package/dist/lib/node-esm/meta.json +1 -1
  11. package/dist/lib/node-esm/testing/index.mjs +2 -2
  12. package/dist/types/src/Obj.d.ts +104 -13
  13. package/dist/types/src/Obj.d.ts.map +1 -1
  14. package/dist/types/src/Ref.d.ts +2 -2
  15. package/dist/types/src/Relation.d.ts +10 -7
  16. package/dist/types/src/Relation.d.ts.map +1 -1
  17. package/dist/types/src/Type.d.ts +34 -33
  18. package/dist/types/src/Type.d.ts.map +1 -1
  19. package/dist/types/src/errors.d.ts +72 -0
  20. package/dist/types/src/errors.d.ts.map +1 -0
  21. package/dist/types/src/index.d.ts +3 -1
  22. package/dist/types/src/index.d.ts.map +1 -1
  23. package/dist/types/src/query/dsl.d.ts +27 -2
  24. package/dist/types/src/query/dsl.d.ts.map +1 -1
  25. package/dist/types/tsconfig.tsbuildinfo +1 -1
  26. package/package.json +20 -13
  27. package/src/Obj.ts +214 -21
  28. package/src/Relation.ts +22 -11
  29. package/src/Type.ts +66 -51
  30. package/src/errors.ts +18 -0
  31. package/src/index.ts +4 -1
  32. package/src/query/dsl.test.ts +40 -1
  33. package/src/query/dsl.ts +112 -6
  34. package/src/test/api.test.ts +9 -2
  35. package/dist/lib/browser/chunk-UYPR62ZB.mjs.map +0 -7
  36. package/dist/lib/node/chunk-4HQE2F3L.cjs +0 -644
  37. package/dist/lib/node/chunk-4HQE2F3L.cjs.map +0 -7
  38. package/dist/lib/node/index.cjs +0 -43
  39. package/dist/lib/node/index.cjs.map +0 -7
  40. package/dist/lib/node/meta.json +0 -1
  41. package/dist/lib/node/testing/index.cjs +0 -89
  42. package/dist/lib/node/testing/index.cjs.map +0 -7
  43. package/dist/lib/node-esm/chunk-BYBICDIO.mjs.map +0 -7
@@ -5,7 +5,30 @@ var __export = (target, all) => {
5
5
  __defProp(target, name, { get: all[name], enumerable: true });
6
6
  };
7
7
 
8
- // packages/core/echo/echo/src/Key.ts
8
+ // src/errors.ts
9
+ import { BaseError } from "@dxos/errors";
10
+ var SchemaNotFoundError = class extends BaseError.extend("SCHEMA_NOT_FOUND", "Schema not found") {
11
+ constructor(schema, options) {
12
+ super({
13
+ context: {
14
+ schema
15
+ },
16
+ ...options
17
+ });
18
+ }
19
+ };
20
+ var ObjectNotFoundError = class extends BaseError.extend("OBJECT_NOT_FOUND", "Object not found") {
21
+ constructor(dxn, options) {
22
+ super({
23
+ context: {
24
+ dxn
25
+ },
26
+ ...options
27
+ });
28
+ }
29
+ };
30
+
31
+ // src/Key.ts
9
32
  var Key_exports = {};
10
33
  __export(Key_exports, {
11
34
  ObjectId: () => ObjectId,
@@ -13,53 +36,143 @@ __export(Key_exports, {
13
36
  });
14
37
  import { SpaceId, ObjectId } from "@dxos/keys";
15
38
 
16
- // packages/core/echo/echo/src/Obj.ts
39
+ // src/Obj.ts
17
40
  var Obj_exports = {};
18
41
  __export(Obj_exports, {
42
+ Any: () => Any,
43
+ Meta: () => Meta,
44
+ VersionTypeId: () => VersionTypeId2,
45
+ clone: () => clone,
46
+ compareVersions: () => compareVersions,
47
+ decodeVersion: () => decodeVersion,
48
+ deleteKeys: () => deleteKeys,
49
+ encodeVersion: () => encodeVersion,
19
50
  fromJSON: () => fromJSON,
20
- getDXN: () => getDXN,
51
+ getDXN: () => getDXN2,
52
+ getKeys: () => getKeys,
21
53
  getLabel: () => getLabel2,
22
- getMeta: () => getMeta2,
54
+ getMeta: () => getMeta3,
23
55
  getSchema: () => getSchema2,
56
+ getSnapshot: () => getSnapshot2,
24
57
  getTypeDXN: () => getTypeDXN,
25
- getTypename: () => getTypename,
58
+ getTypename: () => getTypename2,
26
59
  instanceOf: () => instanceOf,
27
60
  isDeleted: () => isDeleted2,
28
61
  isObject: () => isObject,
62
+ isVersion: () => isVersion,
29
63
  make: () => make,
30
- toJSON: () => toJSON
64
+ setLabel: () => setLabel2,
65
+ toJSON: () => toJSON,
66
+ version: () => version,
67
+ versionValid: () => versionValid
31
68
  });
32
69
  import { Schema } from "effect";
33
- import * as EchoSchema from "@dxos/echo-schema";
34
- import { assertArgument, invariant } from "@dxos/invariant";
70
+ import { dual } from "effect/Function";
71
+ import * as EchoSchema2 from "@dxos/echo-schema";
72
+ import { assertArgument, invariant as invariant2 } from "@dxos/invariant";
73
+ import * as LiveObject from "@dxos/live-object";
35
74
  import { live } from "@dxos/live-object";
36
- import { assumeType } from "@dxos/util";
37
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/core/echo/echo/src/Obj.ts";
75
+ import { assumeType, deepMapValues } from "@dxos/util";
76
+
77
+ // src/Type.ts
78
+ var Type_exports = {};
79
+ __export(Type_exports, {
80
+ DXN: () => DXN,
81
+ Expando: () => Expando2,
82
+ Format: () => Format,
83
+ JsonSchema: () => JsonSchemaType,
84
+ Kind: () => Kind,
85
+ KindId: () => KindId,
86
+ Obj: () => Obj,
87
+ ObjectId: () => ObjectId2,
88
+ Ref: () => Ref2,
89
+ Relation: () => Relation,
90
+ SpaceId: () => SpaceId2,
91
+ getDXN: () => getDXN,
92
+ getMeta: () => getMeta,
93
+ getTypename: () => getTypename,
94
+ getVersion: () => getVersion,
95
+ isMutable: () => isMutable2,
96
+ toEffectSchema: () => toEffectSchema,
97
+ toJsonSchema: () => toJsonSchema
98
+ });
99
+ import * as EchoSchema from "@dxos/echo-schema";
100
+ import { invariant } from "@dxos/invariant";
101
+ import { SpaceId as SpaceId2, ObjectId as ObjectId2, DXN } from "@dxos/keys";
102
+ import { Format, JsonSchemaType, toEffectSchema, toJsonSchema } from "@dxos/echo-schema";
103
+ var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo/src/Type.ts";
104
+ var KindId = EchoSchema.EntityKindId;
105
+ var Kind = EchoSchema.EntityKind;
106
+ var Obj = EchoSchema.EchoObject;
107
+ var Expando2 = EchoSchema.Expando;
108
+ var Relation = EchoSchema.EchoRelation;
109
+ var Ref2 = EchoSchema.Ref;
110
+ var getDXN = (schema) => {
111
+ return EchoSchema.getSchemaDXN(schema);
112
+ };
113
+ var getTypename = (schema) => {
114
+ const typename = EchoSchema.getSchemaTypename(schema);
115
+ invariant(typeof typename === "string" && !typename.startsWith("dxn:"), "Invalid typename", {
116
+ F: __dxlog_file,
117
+ L: 212,
118
+ S: void 0,
119
+ A: [
120
+ "typeof typename === 'string' && !typename.startsWith('dxn:')",
121
+ "'Invalid typename'"
122
+ ]
123
+ });
124
+ return typename;
125
+ };
126
+ var getVersion = (schema) => {
127
+ const version2 = EchoSchema.getSchemaVersion(schema);
128
+ invariant(typeof version2 === "string" && version2.match(/^\d+\.\d+\.\d+$/), "Invalid version", {
129
+ F: __dxlog_file,
130
+ L: 222,
131
+ S: void 0,
132
+ A: [
133
+ "typeof version === 'string' && version.match(/^\\d+\\.\\d+\\.\\d+$/)",
134
+ "'Invalid version'"
135
+ ]
136
+ });
137
+ return version2;
138
+ };
139
+ var isMutable2 = EchoSchema.isMutable;
140
+ var getMeta = (schema) => {
141
+ return EchoSchema.getTypeAnnotation(schema);
142
+ };
143
+
144
+ // src/Obj.ts
145
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/core/echo/echo/src/Obj.ts";
146
+ var Any = Schema.Struct({}).pipe(Obj({
147
+ typename: "dxos.org/types/Any",
148
+ version: "0.1.0"
149
+ }));
150
+ var Meta = EchoSchema2.MetaId;
38
151
  var make = (schema, props, meta) => {
39
- assertArgument(EchoSchema.getTypeAnnotation(schema)?.kind === EchoSchema.EntityKind.Object, "Expected an object schema");
40
- if (props[EchoSchema.MetaId] != null) {
41
- meta = props[EchoSchema.MetaId];
42
- delete props[EchoSchema.MetaId];
152
+ assertArgument(EchoSchema2.getTypeAnnotation(schema)?.kind === EchoSchema2.EntityKind.Object, "schema", "Expected an object schema");
153
+ if (props[EchoSchema2.MetaId] != null) {
154
+ meta = props[EchoSchema2.MetaId];
155
+ delete props[EchoSchema2.MetaId];
43
156
  }
44
157
  return live(schema, props, meta);
45
158
  };
46
159
  var isObject = (obj) => {
47
160
  assumeType(obj);
48
- return typeof obj === "object" && obj !== null && obj[EchoSchema.EntityKindId] === EchoSchema.EntityKind.Object;
161
+ return typeof obj === "object" && obj !== null && obj[EchoSchema2.EntityKindId] === EchoSchema2.EntityKind.Object;
49
162
  };
50
163
  var instanceOf = (...args) => {
51
164
  if (args.length === 1) {
52
- return (obj) => EchoSchema.isInstanceOf(args[0], obj);
165
+ return (obj) => EchoSchema2.isInstanceOf(args[0], obj);
53
166
  }
54
- return EchoSchema.isInstanceOf(args[0], args[1]);
167
+ return EchoSchema2.isInstanceOf(args[0], args[1]);
55
168
  };
56
- var getSchema2 = EchoSchema.getSchema;
57
- var getDXN = (obj) => {
58
- assertArgument(!Schema.isSchema(obj), "Object should not be a schema.");
59
- const dxn = EchoSchema.getObjectDXN(obj);
60
- invariant(dxn != null, "Invalid object.", {
61
- F: __dxlog_file,
62
- L: 96,
169
+ var getSchema2 = EchoSchema2.getSchema;
170
+ var getDXN2 = (obj) => {
171
+ assertArgument(!Schema.isSchema(obj), "obj", "Object should not be a schema.");
172
+ const dxn = EchoSchema2.getObjectDXN(obj);
173
+ invariant2(dxn != null, "Invalid object.", {
174
+ F: __dxlog_file2,
175
+ L: 120,
63
176
  S: void 0,
64
177
  A: [
65
178
  "dxn != null",
@@ -68,19 +181,19 @@ var getDXN = (obj) => {
68
181
  });
69
182
  return dxn;
70
183
  };
71
- var getTypeDXN = EchoSchema.getType;
72
- var getTypename = (obj) => {
184
+ var getTypeDXN = EchoSchema2.getType;
185
+ var getTypename2 = (obj) => {
73
186
  const schema = getSchema2(obj);
74
187
  if (schema == null) {
75
- return EchoSchema.getType(obj)?.asTypeDXN()?.type;
188
+ return EchoSchema2.getType(obj)?.asTypeDXN()?.type;
76
189
  }
77
- return EchoSchema.getSchemaTypename(schema);
190
+ return EchoSchema2.getSchemaTypename(schema);
78
191
  };
79
- var getMeta2 = (obj) => {
80
- const meta = EchoSchema.getMeta(obj);
81
- invariant(meta != null, "Invalid object.", {
82
- F: __dxlog_file,
83
- L: 124,
192
+ var getMeta3 = (obj) => {
193
+ const meta = EchoSchema2.getMeta(obj);
194
+ invariant2(meta != null, "Invalid object.", {
195
+ F: __dxlog_file2,
196
+ L: 148,
84
197
  S: void 0,
85
198
  A: [
86
199
  "meta != null",
@@ -89,11 +202,33 @@ var getMeta2 = (obj) => {
89
202
  });
90
203
  return meta;
91
204
  };
205
+ var getKeys = dual(2, (obj, source) => {
206
+ const meta = EchoSchema2.getMeta(obj);
207
+ invariant2(meta != null, "Invalid object.", {
208
+ F: __dxlog_file2,
209
+ L: 160,
210
+ S: void 0,
211
+ A: [
212
+ "meta != null",
213
+ "'Invalid object.'"
214
+ ]
215
+ });
216
+ return meta.keys.filter((key) => key.source === source);
217
+ });
218
+ var deleteKeys = (obj, source) => {
219
+ const meta = EchoSchema2.getMeta(obj);
220
+ for (let i = 0; i < meta.keys.length; i++) {
221
+ if (meta.keys[i].source === source) {
222
+ meta.keys.splice(i, 1);
223
+ i--;
224
+ }
225
+ }
226
+ };
92
227
  var isDeleted2 = (obj) => {
93
- const deleted = EchoSchema.isDeleted(obj);
94
- invariant(typeof deleted === "boolean", "Invalid object.", {
95
- F: __dxlog_file,
96
- L: 131,
228
+ const deleted = EchoSchema2.isDeleted(obj);
229
+ invariant2(typeof deleted === "boolean", "Invalid object.", {
230
+ F: __dxlog_file2,
231
+ L: 182,
97
232
  S: void 0,
98
233
  A: [
99
234
  "typeof deleted === 'boolean'",
@@ -105,13 +240,91 @@ var isDeleted2 = (obj) => {
105
240
  var getLabel2 = (obj) => {
106
241
  const schema = getSchema2(obj);
107
242
  if (schema != null) {
108
- return EchoSchema.getLabel(schema, obj);
243
+ return EchoSchema2.getLabel(schema, obj);
109
244
  }
110
245
  };
111
- var toJSON = (obj) => EchoSchema.objectToJSON(obj);
112
- var fromJSON = EchoSchema.objectFromJSON;
246
+ var setLabel2 = (obj, label) => {
247
+ const schema = getSchema2(obj);
248
+ if (schema != null) {
249
+ EchoSchema2.setLabel(schema, obj, label);
250
+ }
251
+ };
252
+ var toJSON = (obj) => EchoSchema2.objectToJSON(obj);
253
+ var fromJSON = EchoSchema2.objectFromJSON;
254
+ var getSnapshot2 = LiveObject.getSnapshot;
255
+ var clone = (obj, opts) => {
256
+ const { id, ...data } = obj;
257
+ const schema = getSchema2(obj);
258
+ invariant2(schema != null, "Object should have a schema", {
259
+ F: __dxlog_file2,
260
+ L: 247,
261
+ S: void 0,
262
+ A: [
263
+ "schema != null",
264
+ "'Object should have a schema'"
265
+ ]
266
+ });
267
+ const props = deepMapValues(data, (value, recurse) => {
268
+ if (EchoSchema2.Ref.isRef(value)) {
269
+ return value;
270
+ }
271
+ return recurse(value);
272
+ });
273
+ if (opts?.retainId) {
274
+ props.id = id;
275
+ }
276
+ const meta = getMeta3(obj);
277
+ props[EchoSchema2.MetaId] = deepMapValues(meta, (value, recurse) => {
278
+ if (EchoSchema2.Ref.isRef(value)) {
279
+ return value;
280
+ }
281
+ return recurse(value);
282
+ });
283
+ return make(schema, props);
284
+ };
285
+ var VersionTypeId2 = EchoSchema2.VersionTypeId;
286
+ var unversioned = {
287
+ [VersionTypeId2]: {},
288
+ versioned: false
289
+ };
290
+ var isVersion = (obj) => {
291
+ return obj != null && typeof obj === "object" && VersionTypeId2 in obj;
292
+ };
293
+ var version = (obj) => {
294
+ const version2 = obj[EchoSchema2.ObjectVersionId];
295
+ if (version2 === void 0) {
296
+ return unversioned;
297
+ }
298
+ return version2;
299
+ };
300
+ var versionValid = (version2) => {
301
+ assertArgument(isVersion(version2), "version", "Invalid version object");
302
+ return !!version2.versioned;
303
+ };
304
+ var compareVersions = (version1, version2) => {
305
+ assertArgument(isVersion(version1), "version1", "Invalid version object");
306
+ assertArgument(isVersion(version2), "version2", "Invalid version object");
307
+ if (!versionValid(version1) || !versionValid(version2)) {
308
+ return "unversioned";
309
+ }
310
+ if (version1.automergeHeads?.length !== version2.automergeHeads?.length) {
311
+ return "different";
312
+ }
313
+ if (version1.automergeHeads?.some((head) => !version2.automergeHeads?.includes(head))) {
314
+ return "different";
315
+ }
316
+ return "equal";
317
+ };
318
+ var encodeVersion = (version2) => {
319
+ return JSON.stringify(version2);
320
+ };
321
+ var decodeVersion = (version2) => {
322
+ const parsed = JSON.parse(version2);
323
+ parsed[VersionTypeId2] = {};
324
+ return parsed;
325
+ };
113
326
 
114
- // packages/core/echo/echo/src/Ref.ts
327
+ // src/Ref.ts
115
328
  var Ref_exports = {};
116
329
  __export(Ref_exports, {
117
330
  Array: () => Array2,
@@ -119,15 +332,16 @@ __export(Ref_exports, {
119
332
  isRef: () => isRef,
120
333
  make: () => make2
121
334
  });
122
- import * as EchoSchema2 from "@dxos/echo-schema";
123
- var Array2 = EchoSchema2.RefArray;
124
- var isRef = EchoSchema2.Ref.isRef;
125
- var make2 = EchoSchema2.Ref.make;
126
- var fromDXN = EchoSchema2.Ref.fromDXN;
335
+ import * as EchoSchema3 from "@dxos/echo-schema";
336
+ var Array2 = EchoSchema3.RefArray;
337
+ var isRef = EchoSchema3.Ref.isRef;
338
+ var make2 = EchoSchema3.Ref.make;
339
+ var fromDXN = EchoSchema3.Ref.fromDXN;
127
340
 
128
- // packages/core/echo/echo/src/Relation.ts
341
+ // src/Relation.ts
129
342
  var Relation_exports = {};
130
343
  __export(Relation_exports, {
344
+ Any: () => Any2,
131
345
  Source: () => Source,
132
346
  Target: () => Target,
133
347
  getSource: () => getSource,
@@ -137,44 +351,51 @@ __export(Relation_exports, {
137
351
  isRelation: () => isRelation,
138
352
  make: () => make3
139
353
  });
354
+ import { Schema as Schema2 } from "effect";
140
355
  import { raise } from "@dxos/debug";
141
- import * as EchoSchema3 from "@dxos/echo-schema";
142
- import { assertArgument as assertArgument2, invariant as invariant2 } from "@dxos/invariant";
143
- import { DXN } from "@dxos/keys";
356
+ import * as EchoSchema4 from "@dxos/echo-schema";
357
+ import { assertArgument as assertArgument2, invariant as invariant3 } from "@dxos/invariant";
358
+ import { DXN as DXN2 } from "@dxos/keys";
144
359
  import { live as live2 } from "@dxos/live-object";
145
360
  import { assumeType as assumeType2 } from "@dxos/util";
146
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/core/echo/echo/src/Relation.ts";
147
- var Source = EchoSchema3.RelationSourceId;
148
- var Target = EchoSchema3.RelationTargetId;
361
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/core/echo/echo/src/Relation.ts";
362
+ var Any2 = Schema2.Struct({}).pipe(Relation({
363
+ typename: "dxos.org/types/Any",
364
+ version: "0.1.0",
365
+ source: Any,
366
+ target: Any
367
+ }));
368
+ var Source = EchoSchema4.RelationSourceId;
369
+ var Target = EchoSchema4.RelationTargetId;
149
370
  var make3 = (schema, props, meta) => {
150
- assertArgument2(EchoSchema3.getTypeAnnotation(schema)?.kind === EchoSchema3.EntityKind.Relation, "Expected a relation schema");
151
- if (props[EchoSchema3.MetaId] != null) {
152
- meta = props[EchoSchema3.MetaId];
153
- delete props[EchoSchema3.MetaId];
154
- }
155
- const sourceDXN = EchoSchema3.getObjectDXN(props[Source]) ?? raise(new Error("Unresolved relation source"));
156
- const targetDXN = EchoSchema3.getObjectDXN(props[Target]) ?? raise(new Error("Unresolved relation target"));
157
- props[EchoSchema3.RelationSourceDXNId] = sourceDXN;
158
- props[EchoSchema3.RelationTargetDXNId] = targetDXN;
371
+ assertArgument2(EchoSchema4.getTypeAnnotation(schema)?.kind === EchoSchema4.EntityKind.Relation, "schema", "Expected a relation schema");
372
+ if (props[EchoSchema4.MetaId] != null) {
373
+ meta = props[EchoSchema4.MetaId];
374
+ delete props[EchoSchema4.MetaId];
375
+ }
376
+ const sourceDXN = EchoSchema4.getObjectDXN(props[Source]) ?? raise(new Error("Unresolved relation source"));
377
+ const targetDXN = EchoSchema4.getObjectDXN(props[Target]) ?? raise(new Error("Unresolved relation target"));
378
+ props[EchoSchema4.RelationSourceDXNId] = sourceDXN;
379
+ props[EchoSchema4.RelationTargetDXNId] = targetDXN;
159
380
  return live2(schema, props, meta);
160
381
  };
161
382
  var isRelation = (value) => {
162
383
  if (typeof value !== "object" || value === null) {
163
384
  return false;
164
385
  }
165
- if (EchoSchema3.ATTR_RELATION_SOURCE in value || EchoSchema3.ATTR_RELATION_TARGET in value) {
386
+ if (EchoSchema4.ATTR_RELATION_SOURCE in value || EchoSchema4.ATTR_RELATION_TARGET in value) {
166
387
  return true;
167
388
  }
168
- const kind = value[EchoSchema3.EntityKindId];
169
- return kind === EchoSchema3.EntityKind.Relation;
389
+ const kind = value[EchoSchema4.EntityKindId];
390
+ return kind === EchoSchema4.EntityKind.Relation;
170
391
  };
171
392
  var getSourceDXN = (value) => {
172
393
  assertArgument2(isRelation(value), "Expected a relation");
173
394
  assumeType2(value);
174
- const dxn = value[EchoSchema3.RelationSourceDXNId];
175
- invariant2(dxn instanceof DXN, void 0, {
176
- F: __dxlog_file2,
177
- L: 98,
395
+ const dxn = value[EchoSchema4.RelationSourceDXNId];
396
+ invariant3(dxn instanceof DXN2, void 0, {
397
+ F: __dxlog_file3,
398
+ L: 109,
178
399
  S: void 0,
179
400
  A: [
180
401
  "dxn instanceof DXN",
@@ -186,10 +407,10 @@ var getSourceDXN = (value) => {
186
407
  var getTargetDXN = (value) => {
187
408
  assertArgument2(isRelation(value), "Expected a relation");
188
409
  assumeType2(value);
189
- const dxn = value[EchoSchema3.RelationTargetDXNId];
190
- invariant2(dxn instanceof DXN, void 0, {
191
- F: __dxlog_file2,
192
- L: 110,
410
+ const dxn = value[EchoSchema4.RelationTargetDXNId];
411
+ invariant3(dxn instanceof DXN2, void 0, {
412
+ F: __dxlog_file3,
413
+ L: 121,
193
414
  S: void 0,
194
415
  A: [
195
416
  "dxn instanceof DXN",
@@ -201,10 +422,10 @@ var getTargetDXN = (value) => {
201
422
  var getSource = (relation) => {
202
423
  assertArgument2(isRelation(relation), "Expected a relation");
203
424
  assumeType2(relation);
204
- const obj = relation[EchoSchema3.RelationSourceId];
205
- invariant2(obj !== void 0, `Invalid source: ${relation.id}`, {
206
- F: __dxlog_file2,
207
- L: 122,
425
+ const obj = relation[EchoSchema4.RelationSourceId];
426
+ invariant3(obj !== void 0, `Invalid source: ${relation.id}`, {
427
+ F: __dxlog_file3,
428
+ L: 133,
208
429
  S: void 0,
209
430
  A: [
210
431
  "obj !== undefined",
@@ -216,10 +437,10 @@ var getSource = (relation) => {
216
437
  var getTarget = (relation) => {
217
438
  assertArgument2(isRelation(relation), "Expected a relation");
218
439
  assumeType2(relation);
219
- const obj = relation[EchoSchema3.RelationTargetId];
220
- invariant2(obj !== void 0, `Invalid target: ${relation.id}`, {
221
- F: __dxlog_file2,
222
- L: 134,
440
+ const obj = relation[EchoSchema4.RelationTargetId];
441
+ invariant3(obj !== void 0, `Invalid target: ${relation.id}`, {
442
+ F: __dxlog_file3,
443
+ L: 145,
223
444
  S: void 0,
224
445
  A: [
225
446
  "obj !== undefined",
@@ -229,91 +450,51 @@ var getTarget = (relation) => {
229
450
  return obj;
230
451
  };
231
452
 
232
- // packages/core/echo/echo/src/Type.ts
233
- var Type_exports = {};
234
- __export(Type_exports, {
235
- DXN: () => DXN2,
236
- Expando: () => Expando2,
237
- Format: () => Format,
238
- JsonSchema: () => JsonSchemaType,
239
- Kind: () => EntityKind3,
240
- KindId: () => KindId,
241
- Obj: () => Obj,
242
- ObjectId: () => ObjectId2,
243
- Ref: () => Ref3,
244
- Relation: () => Relation,
245
- SpaceId: () => SpaceId2,
246
- getDXN: () => getDXN2,
247
- getMeta: () => getMeta3,
248
- getTypename: () => getTypename2,
249
- getVersion: () => getVersion,
250
- isMutable: () => isMutable2,
251
- toEffectSchema: () => toEffectSchema,
252
- toJsonSchema: () => toJsonSchema
253
- });
254
- import * as EchoSchema4 from "@dxos/echo-schema";
255
- import { invariant as invariant3 } from "@dxos/invariant";
256
- import { EntityKind as EntityKind3 } from "@dxos/echo-schema";
257
- import { SpaceId as SpaceId2, ObjectId as ObjectId2, DXN as DXN2 } from "@dxos/keys";
258
- import {
259
- Format,
260
- JsonSchemaType,
261
- toEffectSchema,
262
- toJsonSchema
263
- } from "@dxos/echo-schema";
264
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/core/echo/echo/src/Type.ts";
265
- var KindId = EchoSchema4.EntityKindId;
266
- var Obj = EchoSchema4.EchoObject;
267
- var Relation = EchoSchema4.EchoRelation;
268
- var Ref3 = EchoSchema4.Ref;
269
- var getDXN2 = (schema) => {
270
- return EchoSchema4.getSchemaDXN(schema);
271
- };
272
- var getTypename2 = (schema) => {
273
- const typename = EchoSchema4.getSchemaTypename(schema);
274
- invariant3(typeof typename === "string" && !typename.startsWith("dxn:"), "Invalid typename", {
275
- F: __dxlog_file3,
276
- L: 182,
277
- S: void 0,
278
- A: [
279
- "typeof typename === 'string' && !typename.startsWith('dxn:')",
280
- "'Invalid typename'"
281
- ]
282
- });
283
- return typename;
284
- };
285
- var getVersion = (schema) => {
286
- const version = EchoSchema4.getSchemaVersion(schema);
287
- invariant3(typeof version === "string" && version.match(/^\d+\.\d+\.\d+$/), "Invalid version", {
288
- F: __dxlog_file3,
289
- L: 192,
290
- S: void 0,
291
- A: [
292
- "typeof version === 'string' && version.match(/^\\d+\\.\\d+\\.\\d+$/)",
293
- "'Invalid version'"
294
- ]
295
- });
296
- return version;
297
- };
298
- var getMeta3 = (schema) => {
299
- return EchoSchema4.getTypeAnnotation(schema);
300
- };
301
- var isMutable2 = EchoSchema4.isMutable;
302
- var Expando2 = EchoSchema4.Expando;
303
-
304
- // packages/core/echo/echo/src/index.ts
453
+ // src/index.ts
305
454
  import { DXN as DXN4 } from "@dxos/keys";
306
455
 
307
- // packages/core/echo/echo/src/query/dsl.ts
308
- import { Schema as Schema2 } from "effect";
456
+ // src/query/dsl.ts
457
+ import { Match, Schema as Schema3 } from "effect";
309
458
  import { raise as raise2 } from "@dxos/debug";
310
459
  import { getTypeReference } from "@dxos/echo-schema";
311
460
  import { assertArgument as assertArgument3 } from "@dxos/invariant";
312
461
  import { DXN as DXN3, ObjectId as ObjectId3 } from "@dxos/keys";
313
- var FilterClass = class _FilterClass {
314
- static {
315
- this.variance = {};
462
+ function _define_property(obj, key, value) {
463
+ if (key in obj) {
464
+ Object.defineProperty(obj, key, {
465
+ value,
466
+ enumerable: true,
467
+ configurable: true,
468
+ writable: true
469
+ });
470
+ } else {
471
+ obj[key] = value;
472
+ }
473
+ return obj;
474
+ }
475
+ var OrderClass = class _OrderClass {
476
+ static is(value) {
477
+ return typeof value === "object" && value !== null && "~Order" in value;
478
+ }
479
+ constructor(ast) {
480
+ _define_property(this, "ast", void 0);
481
+ _define_property(this, "~Order", void 0);
482
+ this.ast = ast;
483
+ this["~Order"] = _OrderClass.variance;
316
484
  }
485
+ };
486
+ _define_property(OrderClass, "variance", {});
487
+ (function(Order2) {
488
+ Order2.natural = new OrderClass({
489
+ kind: "natural"
490
+ });
491
+ Order2.property = (property, direction) => new OrderClass({
492
+ kind: "property",
493
+ property,
494
+ direction
495
+ });
496
+ })(Order || (Order = {}));
497
+ var FilterClass = class _FilterClass {
317
498
  static is(value) {
318
499
  return typeof value === "object" && value !== null && "~Filter" in value;
319
500
  }
@@ -342,7 +523,7 @@ var FilterClass = class _FilterClass {
342
523
  });
343
524
  }
344
525
  static ids(...ids) {
345
- assertArgument3(ids.every((id) => ObjectId3.isValid(id)), "ids must be valid");
526
+ assertArgument3(ids.every((id) => ObjectId3.isValid(id)), "ids", "ids must be valid");
346
527
  if (ids.length === 0) {
347
528
  return Filter.nothing();
348
529
  }
@@ -362,7 +543,7 @@ var FilterClass = class _FilterClass {
362
543
  });
363
544
  }
364
545
  static typename(typename) {
365
- assertArgument3(!typename.startsWith("dxn:"), "Typename must no be qualified");
546
+ assertArgument3(!typename.startsWith("dxn:"), "typename", "Typename must no be qualified");
366
547
  return new _FilterClass({
367
548
  type: "object",
368
549
  typename: DXN3.fromTypename(typename).toString(),
@@ -453,6 +634,12 @@ var FilterClass = class _FilterClass {
453
634
  values
454
635
  });
455
636
  }
637
+ static contains(value) {
638
+ return new _FilterClass({
639
+ type: "contains",
640
+ value
641
+ });
642
+ }
456
643
  static between(from, to) {
457
644
  return new _FilterClass({
458
645
  type: "range",
@@ -479,35 +666,60 @@ var FilterClass = class _FilterClass {
479
666
  });
480
667
  }
481
668
  constructor(ast) {
669
+ _define_property(this, "ast", void 0);
670
+ _define_property(this, "~Filter", void 0);
482
671
  this.ast = ast;
483
672
  this["~Filter"] = _FilterClass.variance;
484
673
  }
485
674
  };
675
+ _define_property(FilterClass, "variance", {});
486
676
  var Filter = FilterClass;
487
677
  var propsFilterToAst = (predicates) => {
488
678
  let idFilter;
489
679
  if ("id" in predicates) {
490
- assertArgument3(typeof predicates.id === "string" || Array.isArray(predicates.id), "invalid id filter");
680
+ assertArgument3(typeof predicates.id === "string" || Array.isArray(predicates.id), "predicates.id", "invalid id filter");
491
681
  idFilter = typeof predicates.id === "string" ? [
492
682
  predicates.id
493
683
  ] : predicates.id;
494
- Schema2.Array(ObjectId3).pipe(Schema2.validateSync)(idFilter);
684
+ Schema3.Array(ObjectId3).pipe(Schema3.validateSync)(idFilter);
495
685
  }
496
686
  return {
497
687
  id: idFilter,
498
688
  props: Object.fromEntries(Object.entries(predicates).filter(([prop, _value]) => prop !== "id").map(([prop, predicate]) => [
499
689
  prop,
500
- Filter.is(predicate) ? predicate.ast : Filter.eq(predicate).ast
690
+ processPredicate(predicate)
501
691
  ]))
502
692
  };
503
693
  };
694
+ var processPredicate = (predicate) => {
695
+ return Match.value(predicate).pipe(
696
+ Match.withReturnType(),
697
+ Match.when(Filter.is, (predicate2) => predicate2.ast),
698
+ // TODO(wittjosiah): Add support for array predicates.
699
+ Match.when(Array.isArray, (_predicate) => {
700
+ throw new Error("Array predicates are not yet supported.");
701
+ }),
702
+ Match.when((predicate2) => !isRef(predicate2) && typeof predicate2 === "object" && predicate2 !== null, (predicate2) => {
703
+ const nestedProps = Object.fromEntries(Object.entries(predicate2).map(([key, value]) => [
704
+ key,
705
+ processPredicate(value)
706
+ ]));
707
+ return {
708
+ type: "object",
709
+ typename: null,
710
+ props: nestedProps
711
+ };
712
+ }),
713
+ Match.orElse((value) => Filter.eq(value).ast)
714
+ );
715
+ };
504
716
  var QueryClass = class _QueryClass {
505
- static {
506
- this.variance = {};
507
- }
508
717
  static is(value) {
509
718
  return typeof value === "object" && value !== null && "~Query" in value;
510
719
  }
720
+ static fromAst(ast) {
721
+ return new _QueryClass(ast);
722
+ }
511
723
  static select(filter) {
512
724
  return new _QueryClass({
513
725
  type: "select",
@@ -536,10 +748,6 @@ var QueryClass = class _QueryClass {
536
748
  exclude: exclude.ast
537
749
  });
538
750
  }
539
- constructor(ast) {
540
- this.ast = ast;
541
- this["~Query"] = _QueryClass.variance;
542
- }
543
751
  select(filter) {
544
752
  if (Filter.is(filter)) {
545
753
  return new _QueryClass({
@@ -601,6 +809,13 @@ var QueryClass = class _QueryClass {
601
809
  direction: "target"
602
810
  });
603
811
  }
812
+ orderBy(...order) {
813
+ return new _QueryClass({
814
+ type: "order",
815
+ query: this.ast,
816
+ order: order.map((o) => o.ast)
817
+ });
818
+ }
604
819
  options(options) {
605
820
  return new _QueryClass({
606
821
  type: "options",
@@ -608,17 +823,32 @@ var QueryClass = class _QueryClass {
608
823
  options
609
824
  });
610
825
  }
826
+ constructor(ast) {
827
+ _define_property(this, "ast", void 0);
828
+ _define_property(this, "~Query", void 0);
829
+ this.ast = ast;
830
+ this["~Query"] = _QueryClass.variance;
831
+ }
611
832
  };
833
+ _define_property(QueryClass, "variance", {});
612
834
  var Query = QueryClass;
835
+ var Order;
836
+
837
+ // src/index.ts
838
+ import { QueryAST } from "@dxos/echo-protocol";
613
839
 
614
840
  export {
841
+ SchemaNotFoundError,
842
+ ObjectNotFoundError,
615
843
  Key_exports,
844
+ Type_exports,
616
845
  Obj_exports,
617
846
  Ref_exports,
618
847
  Relation_exports,
619
- Type_exports,
620
848
  Filter,
621
849
  Query,
622
- DXN4 as DXN
850
+ Order,
851
+ DXN4 as DXN,
852
+ QueryAST
623
853
  };
624
- //# sourceMappingURL=chunk-UYPR62ZB.mjs.map
854
+ //# sourceMappingURL=chunk-WG555MU5.mjs.map