@dxos/echo 0.8.4-main.40e3dcdf1b → 0.8.4-main.422d1c7879
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/neutral/Annotation.mjs +3 -3
- package/dist/lib/neutral/Database.mjs +7 -3
- package/dist/lib/neutral/Entity.mjs +11 -9
- package/dist/lib/neutral/Extension.mjs +18 -0
- package/dist/lib/neutral/Extension.mjs.map +7 -0
- package/dist/lib/neutral/Feed.mjs +20 -16
- package/dist/lib/neutral/Filter.mjs +20 -12
- package/dist/lib/neutral/Format.mjs +3 -3
- package/dist/lib/neutral/JsonSchema.mjs +7 -7
- package/dist/lib/neutral/Migration.mjs +17 -0
- package/dist/lib/neutral/Migration.mjs.map +7 -0
- package/dist/lib/neutral/Obj.mjs +13 -10
- package/dist/lib/neutral/Query.mjs +18 -15
- package/dist/lib/neutral/Ref.mjs +6 -6
- package/dist/lib/neutral/Relation.mjs +12 -11
- package/dist/lib/neutral/Tag.mjs +13 -12
- package/dist/lib/neutral/Type.mjs +9 -9
- package/dist/lib/neutral/{chunk-SEMVAGBM.mjs → chunk-2KHZ36F5.mjs} +11 -5
- package/dist/lib/neutral/chunk-2KHZ36F5.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-OENWMTE6.mjs → chunk-4P3IXBLT.mjs} +2 -2
- package/dist/lib/neutral/{chunk-KTAWP7GI.mjs → chunk-6ASBHRDG.mjs} +23 -7
- package/dist/lib/neutral/chunk-6ASBHRDG.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-UTBRYVQC.mjs → chunk-7I3YIAT2.mjs} +2 -2
- package/dist/lib/neutral/{chunk-RMLF7JOZ.mjs → chunk-A2WIDONZ.mjs} +4 -4
- package/dist/lib/neutral/{chunk-RMLF7JOZ.mjs.map → chunk-A2WIDONZ.mjs.map} +1 -1
- package/dist/lib/neutral/{chunk-TQQZLKB7.mjs → chunk-BQN7EDPH.mjs} +155 -29
- package/dist/lib/neutral/chunk-BQN7EDPH.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-B5OXLWZL.mjs → chunk-DQYLD2RB.mjs} +2 -2
- package/dist/lib/neutral/{chunk-VA2F47ZC.mjs → chunk-EJJFH3XB.mjs} +68 -14
- package/dist/lib/neutral/chunk-EJJFH3XB.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-NXMFBIT5.mjs → chunk-EULNZHTP.mjs} +59 -4
- package/dist/lib/neutral/chunk-EULNZHTP.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-CIRHIEMW.mjs → chunk-GMYNDEMT.mjs} +13 -25
- package/dist/lib/neutral/chunk-GMYNDEMT.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-FZO7LQO7.mjs → chunk-GZQTCRJB.mjs} +2 -2
- package/dist/lib/neutral/{chunk-FXEG7EOK.mjs → chunk-H5F7C2UO.mjs} +3 -3
- package/dist/lib/neutral/{chunk-724GQYEN.mjs → chunk-JIN4EVUK.mjs} +4 -4
- package/dist/lib/neutral/{chunk-43Y5DOS6.mjs → chunk-JPWH3QJD.mjs} +16 -10
- package/dist/lib/neutral/chunk-JPWH3QJD.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-NQRLRYJM.mjs → chunk-O26EPPBW.mjs} +123 -8
- package/dist/lib/neutral/chunk-O26EPPBW.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-NEGC54NE.mjs → chunk-PHU22NLC.mjs} +15 -9
- package/dist/lib/neutral/chunk-PHU22NLC.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-BOZZPUXE.mjs → chunk-QW7YUKSA.mjs} +12 -12
- package/dist/lib/neutral/{chunk-BOZZPUXE.mjs.map → chunk-QW7YUKSA.mjs.map} +2 -2
- package/dist/lib/neutral/{chunk-DYDJBZEG.mjs → chunk-RP37BQF7.mjs} +51 -21
- package/dist/lib/neutral/chunk-RP37BQF7.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-WYOKA6AE.mjs → chunk-TBKX6JQO.mjs} +2 -2
- package/dist/lib/neutral/{chunk-WYOKA6AE.mjs.map → chunk-TBKX6JQO.mjs.map} +1 -1
- package/dist/lib/neutral/chunk-WAK4DMFV.mjs +36 -0
- package/dist/lib/neutral/chunk-WAK4DMFV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-YWXWXIE5.mjs → chunk-XEU2Q5CI.mjs} +2 -2
- package/dist/lib/neutral/{chunk-YWXWXIE5.mjs.map → chunk-XEU2Q5CI.mjs.map} +2 -2
- package/dist/lib/neutral/chunk-YS6Q3XAD.mjs +50 -0
- package/dist/lib/neutral/chunk-YS6Q3XAD.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-UFDK26FO.mjs → chunk-ZUGFUCUK.mjs} +8 -4
- package/dist/lib/neutral/chunk-ZUGFUCUK.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +33 -23
- package/dist/lib/neutral/internal/index.mjs +12 -8
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/testing/index.mjs +25 -23
- package/dist/lib/neutral/testing/index.mjs.map +2 -2
- package/dist/types/src/Collection.d.ts.map +1 -1
- package/dist/types/src/Database.d.ts +13 -1
- package/dist/types/src/Database.d.ts.map +1 -1
- package/dist/types/src/Dataset.d.ts +1 -0
- package/dist/types/src/Dataset.d.ts.map +1 -1
- package/dist/types/src/Entity.d.ts +9 -3
- package/dist/types/src/Entity.d.ts.map +1 -1
- package/dist/types/src/Extension.d.ts +80 -0
- package/dist/types/src/Extension.d.ts.map +1 -0
- package/dist/types/src/Extension.test.d.ts +2 -0
- package/dist/types/src/Extension.test.d.ts.map +1 -0
- package/dist/types/src/Feed.d.ts +36 -19
- package/dist/types/src/Feed.d.ts.map +1 -1
- package/dist/types/src/Filter.d.ts +33 -4
- package/dist/types/src/Filter.d.ts.map +1 -1
- package/dist/types/src/Filter.test.d.ts +2 -0
- package/dist/types/src/Filter.test.d.ts.map +1 -0
- package/dist/types/src/Json.d.ts +33 -0
- package/dist/types/src/Json.d.ts.map +1 -0
- package/dist/types/src/Json.test.d.ts +2 -0
- package/dist/types/src/Json.test.d.ts.map +1 -0
- package/dist/types/src/Migration.d.ts +57 -0
- package/dist/types/src/Migration.d.ts.map +1 -0
- package/dist/types/src/Obj.d.ts +26 -12
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Query.d.ts +8 -1
- package/dist/types/src/Query.d.ts.map +1 -1
- package/dist/types/src/Relation.d.ts +3 -4
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/Type.d.ts +3 -3
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/View.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +3 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/annotations.d.ts +1 -0
- package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/object.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/version.d.ts.map +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/json-serializer.d.ts +4 -3
- package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
- package/dist/types/src/internal/Query.d.ts +10 -0
- package/dist/types/src/internal/Query.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -1
- package/dist/types/src/internal/Ref/ref.d.ts +14 -1
- package/dist/types/src/internal/Ref/ref.d.ts.map +1 -1
- package/dist/types/src/internal/Type/echo-schema.d.ts +1 -1
- package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
- package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/entity.d.ts +1 -1
- package/dist/types/src/internal/common/types/entity.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/meta.d.ts.map +1 -1
- package/dist/types/src/internal/index.d.ts +1 -0
- package/dist/types/src/internal/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-data.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +24 -14
- package/src/Collection.ts +5 -0
- package/src/Database.ts +49 -14
- package/src/Entity.ts +10 -4
- package/src/Extension.test.ts +235 -0
- package/src/Extension.ts +122 -0
- package/src/Feed.ts +79 -32
- package/src/Filter.test.ts +90 -0
- package/src/Filter.ts +66 -3
- package/src/Json.test.ts +175 -0
- package/src/Json.ts +102 -0
- package/src/Migration.ts +94 -0
- package/src/Obj.test.ts +105 -13
- package/src/Obj.ts +138 -18
- package/src/Query.test.ts +182 -8
- package/src/Query.ts +26 -1
- package/src/Relation.ts +10 -6
- package/src/Type.ts +1 -1
- package/src/View.ts +5 -0
- package/src/index.ts +4 -0
- package/src/internal/Annotation/annotations.test.ts +51 -2
- package/src/internal/Annotation/annotations.ts +17 -11
- package/src/internal/Annotation/sorting.ts +0 -1
- package/src/internal/Entity/api.ts +0 -1
- package/src/internal/Entity/object.ts +0 -1
- package/src/internal/Entity/version.ts +0 -1
- package/src/internal/Format/date.test.ts +0 -1
- package/src/internal/Format/format.test.ts +0 -1
- package/src/internal/JsonSchema/json-schema-type.ts +1 -1
- package/src/internal/JsonSchema/json-schema.test.ts +1 -2
- package/src/internal/JsonSchema/json-schema.ts +1 -2
- package/src/internal/Obj/clone.ts +1 -1
- package/src/internal/Obj/create-object.test.ts +2 -4
- package/src/internal/Obj/create-object.ts +2 -3
- package/src/internal/Obj/deleted.ts +1 -1
- package/src/internal/Obj/json-serializer.test.ts +4 -5
- package/src/internal/Obj/json-serializer.ts +22 -15
- package/src/internal/Obj/set-value.test.ts +24 -24
- package/src/internal/Query.ts +134 -0
- package/src/internal/Ref/ref-array.ts +0 -1
- package/src/internal/Ref/ref.test.ts +0 -1
- package/src/internal/Ref/ref.ts +18 -1
- package/src/internal/Type/compose.test.ts +0 -1
- package/src/internal/Type/echo-schema.ts +2 -3
- package/src/internal/Type/persistent-schema.ts +2 -2
- package/src/internal/common/proxy/change.test.ts +62 -62
- package/src/internal/common/proxy/handler.test.ts +0 -2
- package/src/internal/common/proxy/make-object.ts +0 -1
- package/src/internal/common/proxy/ownership.ts +0 -1
- package/src/internal/common/proxy/reactive.test.ts +54 -0
- package/src/internal/common/proxy/reactive.ts +10 -2
- package/src/internal/common/proxy/typed-handler.test.ts +0 -1
- package/src/internal/common/proxy/typed-handler.ts +1 -3
- package/src/internal/common/proxy/typed-object.test.ts +1 -2
- package/src/internal/common/types/entity.ts +1 -1
- package/src/internal/common/types/meta.ts +0 -1
- package/src/internal/index.ts +1 -0
- package/src/testing/api.test.ts +0 -1
- package/src/testing/test-data.ts +0 -1
- package/dist/lib/neutral/chunk-43Y5DOS6.mjs.map +0 -7
- package/dist/lib/neutral/chunk-CIRHIEMW.mjs.map +0 -7
- package/dist/lib/neutral/chunk-DYDJBZEG.mjs.map +0 -7
- package/dist/lib/neutral/chunk-KTAWP7GI.mjs.map +0 -7
- package/dist/lib/neutral/chunk-NEGC54NE.mjs.map +0 -7
- package/dist/lib/neutral/chunk-NQRLRYJM.mjs.map +0 -7
- package/dist/lib/neutral/chunk-NXMFBIT5.mjs.map +0 -7
- package/dist/lib/neutral/chunk-SEMVAGBM.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TQQZLKB7.mjs.map +0 -7
- package/dist/lib/neutral/chunk-UFDK26FO.mjs.map +0 -7
- package/dist/lib/neutral/chunk-VA2F47ZC.mjs.map +0 -7
- /package/dist/lib/neutral/{chunk-OENWMTE6.mjs.map → chunk-4P3IXBLT.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-UTBRYVQC.mjs.map → chunk-7I3YIAT2.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-B5OXLWZL.mjs.map → chunk-DQYLD2RB.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-FZO7LQO7.mjs.map → chunk-GZQTCRJB.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-FXEG7EOK.mjs.map → chunk-H5F7C2UO.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-724GQYEN.mjs.map → chunk-JIN4EVUK.mjs.map} +0 -0
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
import {
|
|
2
|
+
Feed,
|
|
2
3
|
getQueueDxn
|
|
3
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-RP37BQF7.mjs";
|
|
4
5
|
import {
|
|
5
6
|
everything,
|
|
6
7
|
is,
|
|
7
8
|
props,
|
|
8
9
|
type
|
|
9
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-EULNZHTP.mjs";
|
|
10
11
|
import {
|
|
11
|
-
getTypename
|
|
12
|
-
|
|
12
|
+
getTypename,
|
|
13
|
+
instanceOf
|
|
14
|
+
} from "./chunk-O26EPPBW.mjs";
|
|
15
|
+
import {
|
|
16
|
+
prettyQuery
|
|
17
|
+
} from "./chunk-BQN7EDPH.mjs";
|
|
13
18
|
import {
|
|
14
19
|
isDatabase
|
|
15
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-PHU22NLC.mjs";
|
|
16
21
|
import {
|
|
17
22
|
getTypeDXNFromSpecifier
|
|
18
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-2KHZ36F5.mjs";
|
|
19
24
|
import {
|
|
20
25
|
__export
|
|
21
26
|
} from "./chunk-J5LGTIGS.mjs";
|
|
@@ -27,6 +32,7 @@ __export(Query_exports, {
|
|
|
27
32
|
from: () => from,
|
|
28
33
|
fromAst: () => fromAst,
|
|
29
34
|
is: () => is2,
|
|
35
|
+
pretty: () => pretty,
|
|
30
36
|
select: () => select,
|
|
31
37
|
type: () => type2,
|
|
32
38
|
without: () => without
|
|
@@ -128,6 +134,9 @@ var QueryClass = class _QueryClass {
|
|
|
128
134
|
});
|
|
129
135
|
}
|
|
130
136
|
from(arg, options) {
|
|
137
|
+
if (arg == null) {
|
|
138
|
+
throw new TypeError('Query.from() requires a valid data source argument (database, feed, query, scope, or "all-accessible-spaces").');
|
|
139
|
+
}
|
|
131
140
|
if (is2(arg)) {
|
|
132
141
|
return new _QueryClass({
|
|
133
142
|
type: "from",
|
|
@@ -189,6 +198,11 @@ var QueryClass = class _QueryClass {
|
|
|
189
198
|
if (typename === "org.dxos.type.collection") {
|
|
190
199
|
throw new Error("Query.from(collection) is not yet supported.");
|
|
191
200
|
}
|
|
201
|
+
for (const item of items) {
|
|
202
|
+
if (!instanceOf(Feed, item)) {
|
|
203
|
+
throw new TypeError(`Query.from() expects Feed objects (org.dxos.type.feed), but received an object with typename '${typename ?? "unknown"}'.`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
192
206
|
}
|
|
193
207
|
const feeds = items;
|
|
194
208
|
const queueDxns = feeds.flatMap((feed) => {
|
|
@@ -269,6 +283,7 @@ var _isScope = (value) => {
|
|
|
269
283
|
}
|
|
270
284
|
return Object.keys(value).every((key) => SCOPE_KEYS.has(key));
|
|
271
285
|
};
|
|
286
|
+
var pretty = (query) => prettyQuery(query.ast);
|
|
272
287
|
|
|
273
288
|
export {
|
|
274
289
|
is2 as is,
|
|
@@ -278,6 +293,7 @@ export {
|
|
|
278
293
|
all,
|
|
279
294
|
without,
|
|
280
295
|
from,
|
|
296
|
+
pretty,
|
|
281
297
|
Query_exports
|
|
282
298
|
};
|
|
283
|
-
//# sourceMappingURL=chunk-
|
|
299
|
+
//# sourceMappingURL=chunk-6ASBHRDG.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/Query.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport type * as EffectArray from 'effect/Array';\nimport type * as Schema from 'effect/Schema';\n\nimport { type QueryAST } from '@dxos/echo-protocol';\n\nimport type * as Collection from './Collection';\nimport * as Database from './Database';\nimport type * as Dataset from './Dataset';\nimport * as Feed from './Feed';\nimport * as Filter from './Filter';\nimport * as internal from './internal';\nimport * as Obj from './Obj';\nimport type * as Order from './Order';\nimport type * as Ref from './Ref';\nimport type * as Relation from './Relation';\nimport type * as View from './View';\n\n// TODO(dmaretskyi): Split up into interfaces for objects and relations so they can have separate verbs.\n// TODO(dmaretskyi): Undirected relation traversals.\n// TODO(wittjosiah): Make Filter & Query pipeable.\n\n/**\n * All property paths inside T that are references.\n */\n// TODO(dmaretskyi): Filter only properties that are references (or optional references, or unions that include references).\ntype RefPropKey<T> = keyof T & string;\n\n// TODO(burdon): Narrow T to Entity.Unknown?\nexport interface Query<T> {\n // TODO(dmaretskyi): See new effect-schema approach to variance.\n '~Query': { value: T };\n\n ast: QueryAST.Query;\n\n /**\n * Filter the current selection based on a filter.\n * @param filter - Filter to select the objects.\n * @returns Query for the selected objects.\n */\n 'select'(filter: Filter.Filter<T>): Query<T>;\n 'select'(props: Filter.Props<T>): Query<T>;\n\n /**\n * Traverse an outgoing reference.\n * @param key - Property path inside T that is a reference or optional reference.\n * @returns Query for the target of the reference.\n */\n 'reference'<K extends RefPropKey<T>>(\n key: K,\n ): Query<\n T[K] extends Ref.Unknown\n ? Ref.Target<T[K]>\n : T[K] extends Ref.Unknown | undefined\n ? Ref.Target<Exclude<T[K], undefined>>\n : never\n >;\n\n /**\n * Find objects referencing this object.\n * @param target - Schema of the referencing object. If not provided, matches any type.\n * @param key - Property path inside the referencing object that is a reference. If not provided, matches any property.\n * @returns Query for the referencing objects.\n */\n // TODO(dmaretskyi): any way to enforce `Ref.Target<Schema.Schema.Type<S>[key]> == T`?\n // TODO(dmaretskyi): Ability to go through arrays of references.\n 'referencedBy'<S extends Schema.Schema.All>(\n target: S | string,\n key: RefPropKey<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n 'referencedBy'<S extends Schema.Schema.All>(target: S | string): Query<Schema.Schema.Type<S>>;\n 'referencedBy'(): Query<any>;\n\n /**\n * Find relations where this object is the source.\n * @returns Query for the relation objects.\n * @param relation - Schema of the relation.\n * @param predicates - Predicates to filter the relation objects.\n */\n 'sourceOf'<S extends Schema.Schema.All>(\n relation?: S | string,\n predicates?: Filter.Props<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n\n /**\n * Find relations where this object is the target.\n * @returns Query for the relation objects.\n * @param relation - Schema of the relation.\n * @param predicates - Predicates to filter the relation objects.\n */\n 'targetOf'<S extends Schema.Schema.All>(\n relation?: S | string,\n predicates?: Filter.Props<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n\n /**\n * For a query for relations, get the source objects.\n * @returns Query for the source objects.\n */\n 'source'(): Query<Relation.SourceOf<T>>;\n\n /**\n * For a query for relations, get the target objects.\n * @returns Query for the target objects.\n */\n 'target'(): Query<Relation.TargetOf<T>>;\n\n /**\n * Get the parent object of the current selection.\n * @returns Query for the parent objects.\n */\n 'parent'(): Query<any>;\n\n /**\n * Get all child objects of the current selection.\n * @returns Query for the child objects.\n */\n 'children'(): Query<any>;\n\n /**\n * Order the query results.\n * Orders are specified in priority order. The first order will be applied first, etc.\n * @param order - Order to sort the results.\n * @returns Query for the ordered results.\n */\n 'orderBy'(...order: EffectArray.NonEmptyArray<Order.Order<T>>): Query<T>;\n\n /**\n * Limit the number of results.\n * @param limit - Maximum number of results to return.\n * @returns Query for the limited results.\n */\n 'limit'(limit: number): Query<T>;\n\n /**\n * Query from selected databases only.\n *\n * Example:\n *\n * ```ts\n * Query.select(Filter.type(Person)).from(db);\n * ```\n *\n * @param options.includeFeeds [false] - Whether to include feeds in the query. Default is to query from automerge documents only.\n */\n 'from'(database: Database.Database | Database.Database[], options?: { includeFeeds?: boolean }): Query<T>;\n\n /**\n * Query from selected feeds only.\n *\n * Example:\n *\n * ```ts\n * Query.select(Filter.type(Person)).from(feed);\n * ```\n *\n */\n 'from'(feeds: Feed.Feed | Feed.Feed[]): Query<T>;\n\n /**\n * Query from all accessible spaces.\n *\n * Example:\n *\n * ```ts\n * Query.select(Filter.type(Person)).from('all-accessible-spaces');\n * ```\n *\n * @param options.includeFeeds [false] - Whether to include feeds in the query. Default is to query from automerge documents only.\n */\n 'from'(allSpaces: 'all-accessible-spaces', options?: { includeFeeds?: boolean }): Query<T>;\n\n /**\n * Query from a dataset.\n * Currently only feeds are supported.\n *\n * Example:\n *\n * ```ts\n * Query.type(Person).from(feed);\n * ```\n */\n 'from'(dataset: Dataset.Dataset): Query<T>;\n\n /**\n * Query from the results of another query.\n *\n * Example:\n *\n * ```ts\n * Query.select(Filter.props({ foo: 'foo' })).from(Query.select(Filter.type(Contact)).reference('org'));\n * ```\n */\n 'from'(query: Any): Query<T>;\n\n /**\n * Query from a raw scope specification.\n */\n 'from'(scope: QueryAST.Scope): Query<T>;\n\n /**\n * Add options to a query.\n */\n 'options'(options: QueryAST.QueryOptions): Query<T>;\n}\n\nexport type Any = Query<any>;\n\nexport type Type<Q extends Any> = Q extends Query<infer T> ? T : never;\n\nclass QueryClass implements Any {\n private static 'variance': Any['~Query'] = {} as Any['~Query'];\n\n constructor(public readonly ast: QueryAST.Query) {}\n\n '~Query' = QueryClass.variance;\n\n select(filter: Filter.Any | Filter.Props<any>): Any {\n if (Filter.is(filter)) {\n return new QueryClass({\n type: 'filter',\n selection: this.ast,\n filter: filter.ast,\n });\n } else {\n return new QueryClass({\n type: 'filter',\n selection: this.ast,\n filter: Filter.props(filter).ast,\n });\n }\n }\n\n reference(key: string): Any {\n return new QueryClass({\n type: 'reference-traversal',\n anchor: this.ast,\n property: key,\n });\n }\n\n referencedBy(target?: Schema.Schema.All | string, key?: string): Any {\n const dxn = target !== undefined ? internal.getTypeDXNFromSpecifier(target) : null;\n return new QueryClass({\n type: 'incoming-references',\n anchor: this.ast,\n property: key ?? null,\n typename: dxn?.toString() ?? null,\n });\n }\n\n sourceOf(relation?: Schema.Schema.All | string, predicates?: Filter.Props<unknown> | undefined): Any {\n return new QueryClass({\n type: 'relation',\n anchor: this.ast,\n direction: 'outgoing',\n filter: relation !== undefined ? Filter.type(relation, predicates).ast : undefined,\n });\n }\n\n targetOf(relation?: Schema.Schema.All | string, predicates?: Filter.Props<unknown> | undefined): Any {\n return new QueryClass({\n type: 'relation',\n anchor: this.ast,\n direction: 'incoming',\n filter: relation !== undefined ? Filter.type(relation, predicates).ast : undefined,\n });\n }\n\n source(): Any {\n return new QueryClass({\n type: 'relation-traversal',\n anchor: this.ast,\n direction: 'source',\n });\n }\n\n target(): Any {\n return new QueryClass({\n type: 'relation-traversal',\n anchor: this.ast,\n direction: 'target',\n });\n }\n\n parent(): Any {\n return new QueryClass({\n type: 'hierarchy-traversal',\n anchor: this.ast,\n direction: 'to-parent',\n });\n }\n\n children(): Any {\n return new QueryClass({\n type: 'hierarchy-traversal',\n anchor: this.ast,\n direction: 'to-children',\n });\n }\n\n orderBy(...order: Order.Order<any>[]): Any {\n return new QueryClass({\n type: 'order',\n query: this.ast,\n order: order.map((o) => o.ast),\n });\n }\n\n limit(limit: number): Any {\n return new QueryClass({\n type: 'limit',\n query: this.ast,\n limit,\n });\n }\n\n from(\n arg:\n | Database.Database\n | Database.Database[]\n | Feed.Feed\n | Feed.Feed[]\n | Collection.Collection\n | View.View\n | Any\n | QueryAST.Scope\n | 'all-accessible-spaces',\n options?: { includeFeeds?: boolean },\n ): Any {\n if (arg == null) {\n throw new TypeError(\n 'Query.from() requires a valid data source argument (database, feed, query, scope, or \"all-accessible-spaces\").',\n );\n }\n\n if (is(arg)) {\n return new QueryClass({\n type: 'from',\n query: this.ast,\n from: { _tag: 'query', query: arg.ast },\n });\n }\n\n if (arg === 'all-accessible-spaces') {\n return new QueryClass({\n type: 'from',\n query: this.ast,\n from: {\n _tag: 'scope',\n scope: {\n ...(options?.includeFeeds ? { allQueuesFromSpaces: true } : {}),\n },\n },\n });\n }\n\n if (_isScope(arg)) {\n return new QueryClass({\n type: 'from',\n query: this.ast,\n from: { _tag: 'scope', scope: arg },\n });\n }\n\n const items = Array.isArray(arg) ? arg : [arg];\n\n if (items.length > 0 && Database.isDatabase(items[0])) {\n const databases = items as Database.Database[];\n return new QueryClass({\n type: 'from',\n query: this.ast,\n from: {\n _tag: 'scope',\n scope: {\n spaceIds: databases.map((db) => db.spaceId),\n ...(options?.includeFeeds ? { allQueuesFromSpaces: true } : {}),\n },\n },\n });\n }\n\n if (items.length > 0) {\n const typename = Obj.getTypename(items[0] as Obj.Unknown);\n // TODO(dmaretskyi): Support querying from views.\n if (typename === 'org.dxos.type.view') {\n throw new Error('Query.from(view) is not yet supported.');\n }\n // TODO(dmaretskyi): Support querying from collections.\n if (typename === 'org.dxos.type.collection') {\n throw new Error('Query.from(collection) is not yet supported.');\n }\n // Validate that the items are Feed.Feed instances.\n for (const item of items) {\n if (!Obj.instanceOf(Feed.Feed, item)) {\n throw new TypeError(\n `Query.from() expects Feed objects (org.dxos.type.feed), but received an object with typename '${typename ?? 'unknown'}'.`,\n );\n }\n }\n }\n\n const feeds = items as Feed.Feed[];\n const queueDxns = feeds.flatMap((feed) => {\n const dxn = Feed.getQueueDxn(feed);\n return dxn ? [dxn.toString()] : [];\n });\n return new QueryClass({\n type: 'from',\n query: this.ast,\n from: {\n _tag: 'scope',\n scope: {\n queues: queueDxns,\n },\n },\n });\n }\n\n options(options: QueryAST.QueryOptions): Any {\n return new QueryClass({\n type: 'options',\n query: this.ast,\n options,\n });\n }\n}\n\nexport const is = (value: unknown): value is Any => {\n return typeof value === 'object' && value !== null && '~Query' in value;\n};\n\n/** Construct a query from an ast. */\nexport const fromAst = (ast: QueryAST.Query): Any => {\n return new QueryClass(ast);\n};\n\n/**\n * Select objects based on a filter.\n * @param filter - Filter to select the objects.\n * @returns Query for the selected objects.\n */\nexport const select = <F extends Filter.Any>(filter: F): Query<Filter.Type<F>> => {\n return new QueryClass({\n type: 'select',\n filter: filter.ast,\n });\n};\n\n/**\n * Query for objects of a given schema.\n * @param schema - Schema of the objects.\n * @param predicates - Predicates to filter the objects.\n * @returns Query for the objects.\n *\n * Shorthand for: `Query.select(Filter.type(schema, predicates))`.\n */\nexport const type: {\n <S extends Schema.Schema.All>(\n schema: S,\n predicates?: Filter.Props<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n (schema: string, predicates?: Filter.Props<unknown>): Query<any>;\n} = (schema: Schema.Schema.All | string, predicates?: Filter.Props<unknown>): Any => {\n return new QueryClass({\n type: 'select',\n filter: Filter.type(schema, predicates).ast,\n });\n};\n\n/**\n * Combine results of multiple queries.\n * @param queries - Queries to combine.\n * @returns Query for the combined results.\n */\n// TODO(dmaretskyi): Rename to `combine` or `union`.\nexport const all = (...queries: Any[]): Any => {\n if (queries.length === 0) {\n throw new TypeError(\n 'Query.all combines results of multiple queries, to query all objects use Query.select(Filter.everything())',\n );\n }\n return new QueryClass({\n type: 'union',\n queries: queries.map((q) => q.ast),\n });\n};\n\n/**\n * Subtract one query from another.\n * @param source - Query to subtract from.\n * @param exclude - Query to subtract.\n * @returns Query for the results of the source query minus the results of the exclude query.\n */\nexport const without = <T>(source: Query<T>, exclude: Query<T>): Query<T> => {\n return new QueryClass({\n type: 'set-difference',\n source: source.ast,\n exclude: exclude.ast,\n });\n};\n\n/**\n * Create a query scoped to a data source.\n * The returned query selects everything from the source; chain `.select()` to narrow results.\n *\n * @param source - Data source: database, feed, 'all-accessible-spaces', or another query.\n * @returns Query scoped to the given source.\n */\nexport const from = (\n source:\n | Database.Database\n | Database.Database[]\n | Feed.Feed\n | Feed.Feed[]\n | Any\n | QueryAST.Scope\n | 'all-accessible-spaces',\n options?: { includeFeeds?: boolean },\n): Any => {\n const baseQuery: QueryAST.Query = {\n type: 'select',\n filter: Filter.everything().ast,\n };\n const wrapper = new QueryClass(baseQuery);\n return wrapper.from(source as any, options);\n};\n\nconst SCOPE_KEYS = new Set(['spaceIds', 'queues', 'allQueuesFromSpaces']);\n\n/** Detect a raw Scope object (plain object with only Scope-valid keys). */\nconst _isScope = (value: unknown): value is QueryAST.Scope => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return false;\n }\n return Object.keys(value).every((key) => SCOPE_KEYS.has(key));\n};\n\n/**\n * Returns a human-readable string representation of a Query AST.\n */\nexport const pretty = (query: Any): string => internal.prettyQuery(query.ast);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["is", "type", "QueryClass", "ast", "variance", "select", "filter", "is", "type", "selection", "props", "reference", "key", "anchor", "property", "referencedBy", "target", "dxn", "undefined", "getTypeDXNFromSpecifier", "typename", "toString", "sourceOf", "relation", "predicates", "direction", "targetOf", "source", "parent", "children", "orderBy", "order", "query", "map", "o", "limit", "from", "arg", "options", "TypeError", "_tag", "scope", "includeFeeds", "allQueuesFromSpaces", "_isScope", "items", "Array", "isArray", "length", "isDatabase", "databases", "spaceIds", "db", "spaceId", "getTypename", "Error", "item", "instanceOf", "Feed", "feeds", "queueDxns", "flatMap", "feed", "getQueueDxn", "queues", "value", "fromAst", "schema", "all", "queries", "q", "without", "exclude", "baseQuery", "everything", "wrapper", "SCOPE_KEYS", "Set", "Object", "keys", "every", "has", "pretty", "prettyQuery"]
|
|
7
|
+
}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
JsonSchemaType,
|
|
3
3
|
toEffectSchema,
|
|
4
4
|
toJsonSchema
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-QW7YUKSA.mjs";
|
|
6
6
|
import {
|
|
7
7
|
__export
|
|
8
8
|
} from "./chunk-J5LGTIGS.mjs";
|
|
@@ -24,4 +24,4 @@ export {
|
|
|
24
24
|
JsonSchema,
|
|
25
25
|
JsonSchema_exports
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=chunk-
|
|
27
|
+
//# sourceMappingURL=chunk-7I3YIAT2.mjs.map
|
|
@@ -4,17 +4,17 @@ import {
|
|
|
4
4
|
EchoSchema,
|
|
5
5
|
PersistentSchema,
|
|
6
6
|
isMutable
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-BQN7EDPH.mjs";
|
|
8
8
|
import {
|
|
9
9
|
getSchemaDXN,
|
|
10
10
|
getSchemaTypename,
|
|
11
11
|
getSchemaVersion,
|
|
12
12
|
getTypeAnnotation
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-2KHZ36F5.mjs";
|
|
14
14
|
import {
|
|
15
15
|
EntityKind,
|
|
16
16
|
SchemaKindId
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-TBKX6JQO.mjs";
|
|
18
18
|
import {
|
|
19
19
|
__export
|
|
20
20
|
} from "./chunk-J5LGTIGS.mjs";
|
|
@@ -94,4 +94,4 @@ export {
|
|
|
94
94
|
getMeta,
|
|
95
95
|
Type_exports
|
|
96
96
|
};
|
|
97
|
-
//# sourceMappingURL=chunk-
|
|
97
|
+
//# sourceMappingURL=chunk-A2WIDONZ.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/Type.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport type * as Schema from 'effect/Schema';\n\nimport { type EncodedReference } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type DXN } from '@dxos/keys';\nimport { type ToMutable } from '@dxos/util';\n\nimport type * as Entity from './Entity';\nimport * as
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport type * as Schema from 'effect/Schema';\n\nimport { type EncodedReference } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type DXN } from '@dxos/keys';\nimport { type ToMutable } from '@dxos/util';\n\nimport type * as Entity from './Entity';\nimport * as internal from './internal';\nimport * as typeInternal from './internal/Type';\nimport type * as ObjModule from './Obj';\nimport type * as RelationModule from './Relation';\n\n/**\n * Dynamic type that can be constructed, mutated, and persisted in the ECHO database.\n */\nexport const RuntimeType = typeInternal.EchoSchema;\n\n/**\n * Dynamic type that can be constructed, mutated, and persisted in the ECHO database.\n */\nexport type RuntimeType = typeInternal.EchoSchema;\n\n//\n// Internal types (not exported)\n//\n\n/**\n * Type that marks a schema as an ECHO schema.\n * The value indicates the entity kind (Object or Relation).\n */\ntype EchoSchemaKind<K extends internal.EntityKind = internal.EntityKind> = {\n readonly [internal.SchemaKindId]: K;\n};\n\n//\n// Obj - Runtime schema for any ECHO object\n//\n\n/**\n * TypeScript type for an ECHO object schema.\n * `T` is the instance type produced by the schema.\n * `Fields` is the optional struct fields type for introspection.\n *\n * @example\n * ```ts\n * const PersonSchema: Type.Obj<Person> = Schema.Struct({\n * name: Schema.String,\n * }).pipe(Type.object({ typename: 'Person', version: '0.1.0' }));\n *\n * // Access fields for introspection:\n * Object.keys(PersonSchema.fields); // ['name']\n * ```\n */\nexport interface Obj<T, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>\n extends\n internal.TypeMeta,\n EchoSchemaKind<internal.EntityKind.Object>,\n Schema.AnnotableClass<\n Obj<T, Fields>,\n Entity.OfKind<typeof Entity.Kind.Object> & T,\n Schema.Simplify<ObjModule.BaseObjJson & ToMutable<T>>,\n never\n > {\n /**\n * The fields defined in the original struct schema.\n * Allows accessing field definitions for introspection.\n */\n readonly fields: Fields;\n}\n\n/**\n * Structural base type for any ECHO object schema.\n * Accepts both static schemas (created with Type.object()) and EchoSchema.\n * NOTE: Does not include the brand symbol to avoid TS4053 declaration portability issues.\n * Use Type.isObjectSchema() for runtime type guards.\n */\ntype ObjectSchemaBase = Schema.Schema.AnyNoContext & {\n readonly typename: string;\n readonly version: string;\n};\n\n/**\n * Type that represents any ECHO object schema.\n * Accepts both static schemas (Type.object()) and mutable schemas (EchoSchema).\n */\nexport type AnyObj = ObjectSchemaBase;\n\n/**\n * Factory function to create an ECHO object schema.\n * Adds object metadata annotations to an Effect schema.\n *\n * @example\n * ```ts\n * const Person = Schema.Struct({\n * name: Schema.String,\n * }).pipe(Type.object({ typename: 'com.example.type.person', version: '0.1.0' }));\n * ```\n */\nexport const object: {\n (opts: internal.TypeMeta): <Self extends Schema.Schema.Any>(self: Self) => Obj<Schema.Schema.Type<Self>>;\n} = internal.EchoObjectSchema as any;\n\n//\n// PersistentType (Schema stored in database)\n//\n\nexport const PersistentType: Obj<typeInternal.PersistentSchema> = typeInternal.PersistentSchema as any;\n\nexport interface PersistentType extends Schema.Schema.Type<typeof PersistentType> {}\n\n/**\n * TypeScript type for an ECHO relation schema.\n * `T` is the instance type produced by the schema (excluding source/target).\n * `Source` and `Target` are the endpoint types.\n * `Fields` is the optional struct fields type for introspection.\n */\nexport interface Relation<T, Source, Target, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>\n extends\n internal.TypeMeta,\n EchoSchemaKind<internal.EntityKind.Relation>,\n Schema.AnnotableClass<\n Relation<T, Source, Target, Fields>,\n Entity.OfKind<typeof Entity.Kind.Relation> & RelationModule.Endpoints<Source, Target> & T,\n Schema.Simplify<RelationModule.BaseRelationJson & ToMutable<T>>,\n never\n > {\n /**\n * The fields defined in the original struct schema.\n * Allows accessing field definitions for introspection.\n */\n readonly fields: Fields;\n}\n\n/**\n * Structural base type for any ECHO relation schema.\n * Accepts static schemas (created with Type.relation()).\n * NOTE: Does not include the brand symbol to avoid TS4053 declaration portability issues.\n * Use Type.isRelationSchema() for runtime type guards.\n */\ntype RelationSchemaBase = Schema.Schema.AnyNoContext & {\n readonly typename: string;\n readonly version: string;\n};\n\n/**\n * Type that represents any ECHO relation schema.\n * Accepts static schemas (Type.relation()).\n */\nexport type AnyRelation = RelationSchemaBase;\n\n/**\n * Factory function to create an ECHO relation schema.\n * Adds relation metadata annotations to an Effect schema.\n *\n * @example\n * ```ts\n * const WorksFor = Schema.Struct({\n * role: Schema.String,\n * }).pipe(Type.relation({\n * typename: 'com.example.type.works-for',\n * version: '0.1.0',\n * source: Person,\n * target: Company,\n * }));\n * ```\n */\nexport const relation: {\n <SourceSchema extends Schema.Schema.AnyNoContext, TargetSchema extends Schema.Schema.AnyNoContext>(\n opts: internal.EchoRelationSchemaOptions<SourceSchema, TargetSchema>,\n ): <Self extends Schema.Schema.Any>(\n self: Self,\n ) => Relation<Schema.Schema.Type<Self>, Schema.Schema.Type<SourceSchema>, Schema.Schema.Type<TargetSchema>>;\n} = internal.EchoRelationSchema as any;\n\n/**\n * Type alias for any ECHO entity schema (object or relation).\n * Use this in type annotations for schema parameters.\n */\nexport type AnyEntity = AnyObj | AnyRelation;\n\n/**\n * Type guard to check if a schema is an object schema.\n * NOTE: This checks SCHEMAS, not instances. Use Obj.isObject for instances.\n */\nexport const isObjectSchema = (schema: AnyEntity): schema is AnyObj => {\n return (schema as any)[internal.SchemaKindId] === internal.EntityKind.Object;\n};\n\n/**\n * Type guard to check if a schema is a relation schema.\n * NOTE: This checks SCHEMAS, not instances. Use Relation.isRelation for instances.\n */\nexport const isRelationSchema = (schema: AnyEntity): schema is AnyRelation => {\n return (schema as any)[internal.SchemaKindId] === internal.EntityKind.Relation;\n};\n\n/**\n * Type that represents any Ref schema (with unknown target type).\n * This is a schema type, not an instance type.\n */\nexport type AnyRef = Schema.Schema<internal.Ref<any>, EncodedReference>;\n\n//\n// Schema utility functions\n//\n\n/**\n * Gets the full DXN of the schema.\n * Will include the version if it's a `type` DXN.\n * @example \"dxn:com.example.type.person:0.1.0\"\n * @example \"dxn:echo:SSSSSSSSSS:XXXXXXXXXXXXX\"\n */\nexport const getDXN = (schema: AnyEntity): DXN | undefined => {\n return internal.getSchemaDXN(schema);\n};\n\n/**\n * @param schema - Schema to get the typename from.\n * @returns The typename of the schema. Example: `com.example.type.person`.\n */\nexport const getTypename = (schema: AnyEntity): string => {\n const typename = internal.getSchemaTypename(schema);\n invariant(typeof typename === 'string' && !typename.startsWith('dxn:'), 'Invalid typename');\n return typename;\n};\n\n/**\n * Gets the version of the schema.\n * @example 0.1.0\n */\nexport const getVersion = (schema: AnyEntity): string => {\n const version = internal.getSchemaVersion(schema);\n invariant(typeof version === 'string' && version.match(/^\\d+\\.\\d+\\.\\d+$/), 'Invalid version');\n return version;\n};\n\n/**\n * @returns True if the schema is mutable.\n */\nexport const isMutable = typeInternal.isMutable;\n\n/**\n * ECHO type metadata.\n */\nexport type Meta = internal.TypeAnnotation;\n\n/**\n * Gets the meta data of the schema.\n */\nexport const getMeta = (schema: AnyEntity): Meta | undefined => {\n return internal.getTypeAnnotation(schema);\n};\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;mBAAAA;EAAA;;;;;AASA,SAASC,iBAAiB;;AAanB,IAAMC,cAA2BC;AAmFjC,IAAMC,SAEAC;AAMN,IAAMC,iBAAkEC;AA4DxE,IAAMC,WAMAC;AAYN,IAAMC,iBAAiB,CAACC,WAAAA;AAC7B,SAAQA,OAAwBC,YAAY,MAAeC,WAAWC;AACxE;AAMO,IAAMC,mBAAmB,CAACJ,WAAAA;AAC/B,SAAQA,OAAwBC,YAAY,MAAeC,WAAWG;AACxE;AAkBO,IAAMC,SAAS,CAACN,WAAAA;AACrB,SAAgBO,aAAaP,MAAAA;AAC/B;AAMO,IAAMQ,cAAc,CAACR,WAAAA;AAC1B,QAAMS,WAAoBC,kBAAkBV,MAAAA;AAC5CW,YAAU,OAAOF,aAAa,YAAY,CAACA,SAASG,WAAW,MAAA,GAAS,oBAAA;;;;;;;;;AACxE,SAAOH;AACT;AAMO,IAAMI,aAAa,CAACb,WAAAA;AACzB,QAAMc,UAAmBC,iBAAiBf,MAAAA;AAC1CW,YAAU,OAAOG,YAAY,YAAYA,QAAQE,MAAM,iBAAA,GAAoB,mBAAA;;;;;;;;;AAC3E,SAAOF;AACT;AAKO,IAAMG,aAAyBA;AAU/B,IAAMC,UAAU,CAAClB,WAAAA;AACtB,SAAgBmB,kBAAkBnB,MAAAA;AACpC;",
|
|
6
6
|
"names": ["isMutable", "invariant", "RuntimeType", "EchoSchema", "object", "EchoObjectSchema", "PersistentType", "PersistentSchema", "relation", "EchoRelationSchema", "isObjectSchema", "schema", "SchemaKindId", "EntityKind", "Object", "isRelationSchema", "Relation", "getDXN", "getSchemaDXN", "getTypename", "typename", "getSchemaTypename", "invariant", "startsWith", "getVersion", "version", "getSchemaVersion", "match", "isMutable", "getMeta", "getTypeAnnotation"]
|
|
7
7
|
}
|
|
@@ -3,12 +3,12 @@ import {
|
|
|
3
3
|
JsonSchemaType,
|
|
4
4
|
toEffectSchema,
|
|
5
5
|
toJsonSchema
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QW7YUKSA.mjs";
|
|
7
7
|
import {
|
|
8
8
|
Ref,
|
|
9
9
|
refFromEncodedReference,
|
|
10
10
|
setRefResolver
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-JPWH3QJD.mjs";
|
|
12
12
|
import {
|
|
13
13
|
ATTR_PARENT,
|
|
14
14
|
ATTR_TYPE,
|
|
@@ -33,14 +33,14 @@ import {
|
|
|
33
33
|
getTypename,
|
|
34
34
|
setSchema,
|
|
35
35
|
setTypename
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-2KHZ36F5.mjs";
|
|
37
37
|
import {
|
|
38
38
|
EntityKind,
|
|
39
39
|
KindId,
|
|
40
40
|
SchemaKindId,
|
|
41
41
|
SnapshotKindId,
|
|
42
42
|
makeTypeJsonSchemaAnnotation
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-TBKX6JQO.mjs";
|
|
44
44
|
|
|
45
45
|
// src/internal/index.ts
|
|
46
46
|
import { JsonPath, JsonProp, getValue, splitJsonPath } from "@dxos/effect";
|
|
@@ -78,7 +78,7 @@ var getMeta = (obj) => {
|
|
|
78
78
|
const metadata = obj[MetaId];
|
|
79
79
|
invariant(metadata, "ObjectMeta not found.", {
|
|
80
80
|
F: __dxlog_file,
|
|
81
|
-
L:
|
|
81
|
+
L: 54,
|
|
82
82
|
S: void 0,
|
|
83
83
|
A: [
|
|
84
84
|
"metadata",
|
|
@@ -530,7 +530,7 @@ var setOwnerRecursive = (value2, owner, options = {}) => {
|
|
|
530
530
|
const ownershipAllowed = existingOwner == null || existingOwner === owner || existingOwner === newAllowedPreviousOwner;
|
|
531
531
|
invariant5(ownershipAllowed, "Cannot reassign ownership of a nested record to a different ECHO object. Use deep copy first.", {
|
|
532
532
|
F: __dxlog_file5,
|
|
533
|
-
L:
|
|
533
|
+
L: 101,
|
|
534
534
|
S: void 0,
|
|
535
535
|
A: [
|
|
536
536
|
"ownershipAllowed",
|
|
@@ -605,7 +605,7 @@ var MAX_OWNER_DEPTH = 100;
|
|
|
605
605
|
var getEchoRoot = (target, depth = 0) => {
|
|
606
606
|
invariant5(depth < MAX_OWNER_DEPTH, "Owner chain too deep - possible circular ownership", {
|
|
607
607
|
F: __dxlog_file5,
|
|
608
|
-
L:
|
|
608
|
+
L: 220,
|
|
609
609
|
S: void 0,
|
|
610
610
|
A: [
|
|
611
611
|
"depth < MAX_OWNER_DEPTH",
|
|
@@ -956,7 +956,7 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
|
|
|
956
956
|
init(target) {
|
|
957
957
|
invariant7(typeof target === "object" && target !== null, void 0, {
|
|
958
958
|
F: __dxlog_file7,
|
|
959
|
-
L:
|
|
959
|
+
L: 145,
|
|
960
960
|
S: this,
|
|
961
961
|
A: [
|
|
962
962
|
"typeof target === 'object' && target !== null",
|
|
@@ -965,7 +965,7 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
|
|
|
965
965
|
});
|
|
966
966
|
invariant7(SchemaId in target, "Schema is not defined for the target", {
|
|
967
967
|
F: __dxlog_file7,
|
|
968
|
-
L:
|
|
968
|
+
L: 146,
|
|
969
969
|
S: this,
|
|
970
970
|
A: [
|
|
971
971
|
"SchemaId in target",
|
|
@@ -1240,6 +1240,10 @@ var initMeta = (obj, meta = {
|
|
|
1240
1240
|
|
|
1241
1241
|
// src/internal/common/proxy/reactive.ts
|
|
1242
1242
|
var subscribe = (obj, callback) => {
|
|
1243
|
+
if (!isProxy(obj)) {
|
|
1244
|
+
return () => {
|
|
1245
|
+
};
|
|
1246
|
+
}
|
|
1243
1247
|
const target = getProxyTarget(obj);
|
|
1244
1248
|
if (target && EventId in target) {
|
|
1245
1249
|
return target[EventId].on(callback);
|
|
@@ -1385,7 +1389,7 @@ var getDXN = (entity) => {
|
|
|
1385
1389
|
const dxn = getObjectDXN(entity);
|
|
1386
1390
|
invariant10(dxn != null, "Invalid entity.", {
|
|
1387
1391
|
F: __dxlog_file10,
|
|
1388
|
-
L:
|
|
1392
|
+
L: 19,
|
|
1389
1393
|
S: void 0,
|
|
1390
1394
|
A: [
|
|
1391
1395
|
"dxn != null",
|
|
@@ -1437,7 +1441,7 @@ var EchoObjectSchema = ({ typename, version: version2 }) => {
|
|
|
1437
1441
|
return (self) => {
|
|
1438
1442
|
invariant11(typeof TypeAnnotationId === "symbol", "Sanity.", {
|
|
1439
1443
|
F: __dxlog_file11,
|
|
1440
|
-
L:
|
|
1444
|
+
L: 36,
|
|
1441
1445
|
S: void 0,
|
|
1442
1446
|
A: [
|
|
1443
1447
|
"typeof TypeAnnotationId === 'symbol'",
|
|
@@ -1446,7 +1450,7 @@ var EchoObjectSchema = ({ typename, version: version2 }) => {
|
|
|
1446
1450
|
});
|
|
1447
1451
|
invariant11(SchemaAST4.isTypeLiteral(self.ast), "Schema must be a TypeLiteral.", {
|
|
1448
1452
|
F: __dxlog_file11,
|
|
1449
|
-
L:
|
|
1453
|
+
L: 37,
|
|
1450
1454
|
S: void 0,
|
|
1451
1455
|
A: [
|
|
1452
1456
|
"SchemaAST.isTypeLiteral(self.ast)",
|
|
@@ -1756,7 +1760,7 @@ var objectToJSON = (obj) => {
|
|
|
1756
1760
|
});
|
|
1757
1761
|
return typedJsonSerializer.call(obj);
|
|
1758
1762
|
};
|
|
1759
|
-
var objectFromJSON = async (jsonData, { refResolver, dxn, database } = {}) => {
|
|
1763
|
+
var objectFromJSON = async (jsonData, { refResolver, dxn, database, parent } = {}) => {
|
|
1760
1764
|
assumeType4(jsonData);
|
|
1761
1765
|
assertArgument5(typeof jsonData === "object" && jsonData !== null, "jsonData", "expect object");
|
|
1762
1766
|
assertArgument5(typeof jsonData[ATTR_TYPE] === "string", "jsonData[ATTR_TYPE]", "expected object to have a type");
|
|
@@ -1765,7 +1769,7 @@ var objectFromJSON = async (jsonData, { refResolver, dxn, database } = {}) => {
|
|
|
1765
1769
|
const schema = await refResolver?.resolveSchema(type);
|
|
1766
1770
|
invariant13(schema === void 0 || Schema10.isSchema(schema), void 0, {
|
|
1767
1771
|
F: __dxlog_file13,
|
|
1768
|
-
L:
|
|
1772
|
+
L: 97,
|
|
1769
1773
|
S: void 0,
|
|
1770
1774
|
A: [
|
|
1771
1775
|
"schema === undefined || Schema.isSchema(schema)",
|
|
@@ -1786,7 +1790,7 @@ var objectFromJSON = async (jsonData, { refResolver, dxn, database } = {}) => {
|
|
|
1786
1790
|
}
|
|
1787
1791
|
invariant13(ObjectId4.isValid(obj.id), "Invalid object id", {
|
|
1788
1792
|
F: __dxlog_file13,
|
|
1789
|
-
L:
|
|
1793
|
+
L: 110,
|
|
1790
1794
|
S: void 0,
|
|
1791
1795
|
A: [
|
|
1792
1796
|
"ObjectId.isValid(obj.id)",
|
|
@@ -1815,7 +1819,7 @@ var objectFromJSON = async (jsonData, { refResolver, dxn, database } = {}) => {
|
|
|
1815
1819
|
const meta = await ObjectMetaSchema.pipe(Schema10.decodeUnknownPromise)(jsonData[ATTR_META]);
|
|
1816
1820
|
invariant13(Array.isArray(meta.keys), void 0, {
|
|
1817
1821
|
F: __dxlog_file13,
|
|
1818
|
-
L:
|
|
1822
|
+
L: 136,
|
|
1819
1823
|
S: void 0,
|
|
1820
1824
|
A: [
|
|
1821
1825
|
"Array.isArray(meta.keys)",
|
|
@@ -1830,7 +1834,9 @@ var objectFromJSON = async (jsonData, { refResolver, dxn, database } = {}) => {
|
|
|
1830
1834
|
}
|
|
1831
1835
|
if (jsonData[ATTR_PARENT]) {
|
|
1832
1836
|
const parentDxn = DXN5.parse(jsonData[ATTR_PARENT]);
|
|
1833
|
-
const
|
|
1837
|
+
const resolvedParent = await refResolver?.resolve(parentDxn);
|
|
1838
|
+
defineHiddenProperty(obj, ParentId, resolvedParent);
|
|
1839
|
+
} else if (parent) {
|
|
1834
1840
|
defineHiddenProperty(obj, ParentId, parent);
|
|
1835
1841
|
}
|
|
1836
1842
|
if (dxn) {
|
|
@@ -1842,7 +1848,7 @@ var objectFromJSON = async (jsonData, { refResolver, dxn, database } = {}) => {
|
|
|
1842
1848
|
assertObjectModel(obj);
|
|
1843
1849
|
invariant13(obj[ATTR_TYPE] === void 0, "Invalid object model", {
|
|
1844
1850
|
F: __dxlog_file13,
|
|
1845
|
-
L:
|
|
1851
|
+
L: 161,
|
|
1846
1852
|
S: void 0,
|
|
1847
1853
|
A: [
|
|
1848
1854
|
"(obj as any)[ATTR_TYPE] === undefined",
|
|
@@ -1851,7 +1857,7 @@ var objectFromJSON = async (jsonData, { refResolver, dxn, database } = {}) => {
|
|
|
1851
1857
|
});
|
|
1852
1858
|
invariant13(obj[ATTR_META] === void 0, "Invalid object model", {
|
|
1853
1859
|
F: __dxlog_file13,
|
|
1854
|
-
L:
|
|
1860
|
+
L: 162,
|
|
1855
1861
|
S: void 0,
|
|
1856
1862
|
A: [
|
|
1857
1863
|
"(obj as any)[ATTR_META] === undefined",
|
|
@@ -1860,7 +1866,7 @@ var objectFromJSON = async (jsonData, { refResolver, dxn, database } = {}) => {
|
|
|
1860
1866
|
});
|
|
1861
1867
|
invariant13(obj[ATTR_DELETED] === void 0, "Invalid object model", {
|
|
1862
1868
|
F: __dxlog_file13,
|
|
1863
|
-
L:
|
|
1869
|
+
L: 163,
|
|
1864
1870
|
S: void 0,
|
|
1865
1871
|
A: [
|
|
1866
1872
|
"(obj as any)[ATTR_DELETED] === undefined",
|
|
@@ -1869,7 +1875,7 @@ var objectFromJSON = async (jsonData, { refResolver, dxn, database } = {}) => {
|
|
|
1869
1875
|
});
|
|
1870
1876
|
invariant13(obj[ATTR_SELF_DXN] === void 0, "Invalid object model", {
|
|
1871
1877
|
F: __dxlog_file13,
|
|
1872
|
-
L:
|
|
1878
|
+
L: 164,
|
|
1873
1879
|
S: void 0,
|
|
1874
1880
|
A: [
|
|
1875
1881
|
"(obj as any)[ATTR_SELF_DXN] === undefined",
|
|
@@ -1878,7 +1884,7 @@ var objectFromJSON = async (jsonData, { refResolver, dxn, database } = {}) => {
|
|
|
1878
1884
|
});
|
|
1879
1885
|
invariant13(obj[ATTR_RELATION_SOURCE] === void 0, "Invalid object model", {
|
|
1880
1886
|
F: __dxlog_file13,
|
|
1881
|
-
L:
|
|
1887
|
+
L: 165,
|
|
1882
1888
|
S: void 0,
|
|
1883
1889
|
A: [
|
|
1884
1890
|
"(obj as any)[ATTR_RELATION_SOURCE] === undefined",
|
|
@@ -1887,7 +1893,7 @@ var objectFromJSON = async (jsonData, { refResolver, dxn, database } = {}) => {
|
|
|
1887
1893
|
});
|
|
1888
1894
|
invariant13(obj[ATTR_RELATION_TARGET] === void 0, "Invalid object model", {
|
|
1889
1895
|
F: __dxlog_file13,
|
|
1890
|
-
L:
|
|
1896
|
+
L: 166,
|
|
1891
1897
|
S: void 0,
|
|
1892
1898
|
A: [
|
|
1893
1899
|
"(obj as any)[ATTR_RELATION_TARGET] === undefined",
|
|
@@ -2181,6 +2187,124 @@ var clone = (obj, opts) => {
|
|
|
2181
2187
|
return makeObject(schema, props, meta);
|
|
2182
2188
|
};
|
|
2183
2189
|
|
|
2190
|
+
// src/internal/Query.ts
|
|
2191
|
+
var prettyFilter = (filter) => {
|
|
2192
|
+
switch (filter.type) {
|
|
2193
|
+
case "object": {
|
|
2194
|
+
const parts = [];
|
|
2195
|
+
if (filter.typename !== null) {
|
|
2196
|
+
parts.push(String(filter.typename));
|
|
2197
|
+
}
|
|
2198
|
+
if (filter.id !== void 0 && filter.id.length > 0) {
|
|
2199
|
+
parts.push(`id: [${filter.id.join(", ")}]`);
|
|
2200
|
+
}
|
|
2201
|
+
const propEntries = Object.entries(filter.props);
|
|
2202
|
+
if (propEntries.length > 0) {
|
|
2203
|
+
const propsStr = propEntries.map(([k, v]) => `${k}: ${prettyFilter(v)}`).join(", ");
|
|
2204
|
+
parts.push(`{ ${propsStr} }`);
|
|
2205
|
+
}
|
|
2206
|
+
if (filter.foreignKeys !== void 0 && filter.foreignKeys.length > 0) {
|
|
2207
|
+
parts.push(`foreignKeys: [${filter.foreignKeys.map((fk) => JSON.stringify(fk)).join(", ")}]`);
|
|
2208
|
+
}
|
|
2209
|
+
return parts.length > 0 ? `Filter.type(${parts.join(", ")})` : "Filter.everything()";
|
|
2210
|
+
}
|
|
2211
|
+
case "compare":
|
|
2212
|
+
return `Filter.${filter.operator}(${JSON.stringify(filter.value)})`;
|
|
2213
|
+
case "in":
|
|
2214
|
+
return `Filter.in([${filter.values.map((v) => JSON.stringify(v)).join(", ")}])`;
|
|
2215
|
+
case "contains":
|
|
2216
|
+
return `Filter.contains(${JSON.stringify(filter.value)})`;
|
|
2217
|
+
case "tag":
|
|
2218
|
+
return `Filter.tag(${JSON.stringify(filter.tag)})`;
|
|
2219
|
+
case "range":
|
|
2220
|
+
return `Filter.range(${JSON.stringify(filter.from)}, ${JSON.stringify(filter.to)})`;
|
|
2221
|
+
case "text-search":
|
|
2222
|
+
return filter.searchKind ? `Filter.textSearch(${JSON.stringify(filter.text)}, ${JSON.stringify(filter.searchKind)})` : `Filter.textSearch(${JSON.stringify(filter.text)})`;
|
|
2223
|
+
case "timestamp":
|
|
2224
|
+
return `Filter.${filter.field}.${filter.operator}(${filter.value})`;
|
|
2225
|
+
case "child-of":
|
|
2226
|
+
return `Filter.childOf([${filter.parents.map((p) => JSON.stringify(p)).join(", ")}], { transitive: ${filter.transitive} })`;
|
|
2227
|
+
case "not":
|
|
2228
|
+
return `Filter.not(${prettyFilter(filter.filter)})`;
|
|
2229
|
+
case "and":
|
|
2230
|
+
return `Filter.and(${filter.filters.map(prettyFilter).join(", ")})`;
|
|
2231
|
+
case "or":
|
|
2232
|
+
return `Filter.or(${filter.filters.map(prettyFilter).join(", ")})`;
|
|
2233
|
+
}
|
|
2234
|
+
};
|
|
2235
|
+
var prettyQuery = (query) => {
|
|
2236
|
+
switch (query.type) {
|
|
2237
|
+
case "select":
|
|
2238
|
+
return `Query.select(${prettyFilter(query.filter)})`;
|
|
2239
|
+
case "filter":
|
|
2240
|
+
return `${prettyQuery(query.selection)}.select(${prettyFilter(query.filter)})`;
|
|
2241
|
+
case "reference-traversal":
|
|
2242
|
+
return `${prettyQuery(query.anchor)}.reference(${JSON.stringify(query.property)})`;
|
|
2243
|
+
case "incoming-references": {
|
|
2244
|
+
const args = [];
|
|
2245
|
+
if (query.typename !== null) {
|
|
2246
|
+
args.push(String(query.typename));
|
|
2247
|
+
}
|
|
2248
|
+
if (query.property !== null) {
|
|
2249
|
+
args.push(JSON.stringify(query.property));
|
|
2250
|
+
}
|
|
2251
|
+
return `${prettyQuery(query.anchor)}.referencedBy(${args.join(", ")})`;
|
|
2252
|
+
}
|
|
2253
|
+
case "relation": {
|
|
2254
|
+
const method = query.direction === "outgoing" ? "sourceOf" : query.direction === "incoming" ? "targetOf" : "relationOf";
|
|
2255
|
+
const filterStr = query.filter !== void 0 ? prettyFilter(query.filter) : "";
|
|
2256
|
+
return `${prettyQuery(query.anchor)}.${method}(${filterStr})`;
|
|
2257
|
+
}
|
|
2258
|
+
case "relation-traversal":
|
|
2259
|
+
return `${prettyQuery(query.anchor)}.${query.direction}()`;
|
|
2260
|
+
case "hierarchy-traversal":
|
|
2261
|
+
return query.direction === "to-parent" ? `${prettyQuery(query.anchor)}.parent()` : `${prettyQuery(query.anchor)}.children()`;
|
|
2262
|
+
case "union":
|
|
2263
|
+
return `Query.all(${query.queries.map(prettyQuery).join(", ")})`;
|
|
2264
|
+
case "set-difference":
|
|
2265
|
+
return `Query.without(${prettyQuery(query.source)}, ${prettyQuery(query.exclude)})`;
|
|
2266
|
+
case "order": {
|
|
2267
|
+
const orders = query.order.map((o) => {
|
|
2268
|
+
if (o.kind === "natural") {
|
|
2269
|
+
return "Order.natural()";
|
|
2270
|
+
} else if (o.kind === "rank") {
|
|
2271
|
+
return `Order.rank(${JSON.stringify(o.direction)})`;
|
|
2272
|
+
} else {
|
|
2273
|
+
return `Order.property(${JSON.stringify(o.property)}, ${JSON.stringify(o.direction)})`;
|
|
2274
|
+
}
|
|
2275
|
+
});
|
|
2276
|
+
return `${prettyQuery(query.query)}.orderBy(${orders.join(", ")})`;
|
|
2277
|
+
}
|
|
2278
|
+
case "options": {
|
|
2279
|
+
const opts = query.options;
|
|
2280
|
+
const parts = [];
|
|
2281
|
+
if (opts.deleted !== void 0) {
|
|
2282
|
+
parts.push(`deleted: ${JSON.stringify(opts.deleted)}`);
|
|
2283
|
+
}
|
|
2284
|
+
return `${prettyQuery(query.query)}.options({ ${parts.join(", ")} })`;
|
|
2285
|
+
}
|
|
2286
|
+
case "from": {
|
|
2287
|
+
if (query.from._tag === "scope") {
|
|
2288
|
+
const scope = query.from.scope;
|
|
2289
|
+
const parts = [];
|
|
2290
|
+
if (scope.spaceIds !== void 0) {
|
|
2291
|
+
parts.push(`spaceIds: [${scope.spaceIds.map((s) => JSON.stringify(s)).join(", ")}]`);
|
|
2292
|
+
}
|
|
2293
|
+
if (scope.queues !== void 0) {
|
|
2294
|
+
parts.push(`queues: [${scope.queues.map(String).join(", ")}]`);
|
|
2295
|
+
}
|
|
2296
|
+
if (scope.allQueuesFromSpaces !== void 0) {
|
|
2297
|
+
parts.push(`allQueuesFromSpaces: ${scope.allQueuesFromSpaces}`);
|
|
2298
|
+
}
|
|
2299
|
+
return `${prettyQuery(query.query)}.from({ ${parts.join(", ")} })`;
|
|
2300
|
+
}
|
|
2301
|
+
return `${prettyQuery(query.query)}.from(${prettyQuery(query.from.query)})`;
|
|
2302
|
+
}
|
|
2303
|
+
case "limit":
|
|
2304
|
+
return `${prettyQuery(query.query)}.limit(${query.limit})`;
|
|
2305
|
+
}
|
|
2306
|
+
};
|
|
2307
|
+
|
|
2184
2308
|
// src/internal/Type/echo-schema.ts
|
|
2185
2309
|
import * as Schema13 from "effect/Schema";
|
|
2186
2310
|
import * as SchemaAST8 from "effect/SchemaAST";
|
|
@@ -2276,8 +2400,8 @@ var PersistentSchema = Schema12.Struct({
|
|
|
2276
2400
|
}), LabelAnnotation.set([
|
|
2277
2401
|
"name"
|
|
2278
2402
|
]), IconAnnotation.set({
|
|
2279
|
-
icon: "ph--
|
|
2280
|
-
hue: "
|
|
2403
|
+
icon: "ph--database--regular",
|
|
2404
|
+
hue: "green"
|
|
2281
2405
|
}));
|
|
2282
2406
|
|
|
2283
2407
|
// src/internal/Type/echo-schema.ts
|
|
@@ -2290,7 +2414,7 @@ var ImmutableSchema = class {
|
|
|
2290
2414
|
this._objectAnnotation = getTypeAnnotation(this._schema);
|
|
2291
2415
|
invariant17(this._objectAnnotation, void 0, {
|
|
2292
2416
|
F: __dxlog_file17,
|
|
2293
|
-
L:
|
|
2417
|
+
L: 48,
|
|
2294
2418
|
S: this,
|
|
2295
2419
|
A: [
|
|
2296
2420
|
"this._objectAnnotation",
|
|
@@ -2452,7 +2576,7 @@ var EchoSchema = class extends EchoSchemaConstructor() {
|
|
|
2452
2576
|
get mutable() {
|
|
2453
2577
|
invariant17(!this.readonly, "Schema is not mutable", {
|
|
2454
2578
|
F: __dxlog_file17,
|
|
2455
|
-
L:
|
|
2579
|
+
L: 278,
|
|
2456
2580
|
S: this,
|
|
2457
2581
|
A: [
|
|
2458
2582
|
"!this.readonly",
|
|
@@ -2493,7 +2617,7 @@ var EchoSchema = class extends EchoSchemaConstructor() {
|
|
|
2493
2617
|
const ast = this._getSchema().ast;
|
|
2494
2618
|
invariant17(SchemaAST8.isTypeLiteral(ast), void 0, {
|
|
2495
2619
|
F: __dxlog_file17,
|
|
2496
|
-
L:
|
|
2620
|
+
L: 313,
|
|
2497
2621
|
S: this,
|
|
2498
2622
|
A: [
|
|
2499
2623
|
"SchemaAST.isTypeLiteral(ast)",
|
|
@@ -2695,6 +2819,8 @@ export {
|
|
|
2695
2819
|
setValue,
|
|
2696
2820
|
getSnapshot,
|
|
2697
2821
|
clone,
|
|
2822
|
+
prettyFilter,
|
|
2823
|
+
prettyQuery,
|
|
2698
2824
|
addFieldsToSchema,
|
|
2699
2825
|
updateFieldsInSchema,
|
|
2700
2826
|
removeFieldsFromSchema,
|
|
@@ -2709,4 +2835,4 @@ export {
|
|
|
2709
2835
|
getValue,
|
|
2710
2836
|
splitJsonPath
|
|
2711
2837
|
};
|
|
2712
|
-
//# sourceMappingURL=chunk-
|
|
2838
|
+
//# sourceMappingURL=chunk-BQN7EDPH.mjs.map
|