@dxos/echo-query 0.8.4-main.69d29f4 → 0.8.4-main.6fa680abb7
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/{browser → neutral}/index.mjs +1 -1
- package/dist/lib/{browser → neutral}/index.mjs.map +1 -1
- package/dist/lib/{browser → neutral}/meta.json +1 -1
- package/dist/query-lite/index.d.ts +1501 -376
- package/dist/query-lite/index.d.ts.map +1 -1
- package/dist/query-lite/index.js +53 -5
- package/dist/query-lite/index.js.map +1 -1
- package/dist/types/src/query-lite/query-lite.d.ts.map +1 -1
- package/dist/types/src/sandbox/query-sandbox.d.ts +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -14
- package/src/parser/query.test.ts +29 -29
- package/src/query-lite/query-lite.ts +66 -7
- package/src/sandbox/query-sandbox.test.ts +10 -10
- package/src/sandbox/query-sandbox.ts +1 -1
- package/dist/lib/node-esm/index.mjs +0 -719
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
package/dist/query-lite/index.js
CHANGED
|
@@ -10,7 +10,7 @@ var assertArgument = (condition, argumentName, message) => {
|
|
|
10
10
|
//#endregion
|
|
11
11
|
//#region src/query-lite/query-lite.ts
|
|
12
12
|
var OrderClass = class OrderClass {
|
|
13
|
-
static variance = {};
|
|
13
|
+
static "variance" = {};
|
|
14
14
|
static is(value) {
|
|
15
15
|
return typeof value === "object" && value !== null && "~Order" in value;
|
|
16
16
|
}
|
|
@@ -34,7 +34,7 @@ let Order1;
|
|
|
34
34
|
})(Order1 || (Order1 = {}));
|
|
35
35
|
const Order2 = Order1;
|
|
36
36
|
var FilterClass = class FilterClass {
|
|
37
|
-
static variance = {};
|
|
37
|
+
static "variance" = {};
|
|
38
38
|
static is(value) {
|
|
39
39
|
return typeof value === "object" && value !== null && "~Filter" in value;
|
|
40
40
|
}
|
|
@@ -234,7 +234,7 @@ const processPredicate = (predicate) => {
|
|
|
234
234
|
return FilterClass.eq(predicate).ast;
|
|
235
235
|
};
|
|
236
236
|
var QueryClass = class QueryClass {
|
|
237
|
-
static variance = {};
|
|
237
|
+
static "variance" = {};
|
|
238
238
|
static is(value) {
|
|
239
239
|
return typeof value === "object" && value !== null && "~Query" in value;
|
|
240
240
|
}
|
|
@@ -267,6 +267,12 @@ var QueryClass = class QueryClass {
|
|
|
267
267
|
exclude: exclude.ast
|
|
268
268
|
});
|
|
269
269
|
}
|
|
270
|
+
static from(source, options) {
|
|
271
|
+
return new QueryClass({
|
|
272
|
+
type: "select",
|
|
273
|
+
filter: FilterClass.everything().ast
|
|
274
|
+
}).from(source, options);
|
|
275
|
+
}
|
|
270
276
|
constructor(ast) {
|
|
271
277
|
this.ast = ast;
|
|
272
278
|
}
|
|
@@ -304,7 +310,7 @@ var QueryClass = class QueryClass {
|
|
|
304
310
|
type: "relation",
|
|
305
311
|
anchor: this.ast,
|
|
306
312
|
direction: "outgoing",
|
|
307
|
-
filter: FilterClass.type(relation, predicates).ast
|
|
313
|
+
filter: relation !== void 0 ? FilterClass.type(relation, predicates).ast : void 0
|
|
308
314
|
});
|
|
309
315
|
}
|
|
310
316
|
targetOf(relation, predicates) {
|
|
@@ -312,7 +318,7 @@ var QueryClass = class QueryClass {
|
|
|
312
318
|
type: "relation",
|
|
313
319
|
anchor: this.ast,
|
|
314
320
|
direction: "incoming",
|
|
315
|
-
filter: FilterClass.type(relation, predicates).ast
|
|
321
|
+
filter: relation !== void 0 ? FilterClass.type(relation, predicates).ast : void 0
|
|
316
322
|
});
|
|
317
323
|
}
|
|
318
324
|
source() {
|
|
@@ -329,6 +335,20 @@ var QueryClass = class QueryClass {
|
|
|
329
335
|
direction: "target"
|
|
330
336
|
});
|
|
331
337
|
}
|
|
338
|
+
parent() {
|
|
339
|
+
return new QueryClass({
|
|
340
|
+
type: "hierarchy-traversal",
|
|
341
|
+
anchor: this.ast,
|
|
342
|
+
direction: "to-parent"
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
children() {
|
|
346
|
+
return new QueryClass({
|
|
347
|
+
type: "hierarchy-traversal",
|
|
348
|
+
anchor: this.ast,
|
|
349
|
+
direction: "to-children"
|
|
350
|
+
});
|
|
351
|
+
}
|
|
332
352
|
orderBy(...order) {
|
|
333
353
|
return new QueryClass({
|
|
334
354
|
type: "order",
|
|
@@ -343,6 +363,25 @@ var QueryClass = class QueryClass {
|
|
|
343
363
|
limit
|
|
344
364
|
});
|
|
345
365
|
}
|
|
366
|
+
from(arg, options) {
|
|
367
|
+
if (arg === "all-accessible-spaces") return new QueryClass({
|
|
368
|
+
type: "from",
|
|
369
|
+
query: this.ast,
|
|
370
|
+
from: {
|
|
371
|
+
_tag: "scope",
|
|
372
|
+
scope: { ...options?.includeFeeds ? { allQueuesFromSpaces: true } : {} }
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
if (_isScopeLike(arg)) return new QueryClass({
|
|
376
|
+
type: "from",
|
|
377
|
+
query: this.ast,
|
|
378
|
+
from: {
|
|
379
|
+
_tag: "scope",
|
|
380
|
+
scope: arg
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
throw new TypeError("Database and Feed objects are not supported in query-lite sandbox");
|
|
384
|
+
}
|
|
346
385
|
options(options) {
|
|
347
386
|
return new QueryClass({
|
|
348
387
|
type: "options",
|
|
@@ -361,6 +400,15 @@ const makeTypeDxn = (typename) => {
|
|
|
361
400
|
assertArgument(!typename.startsWith("dxn:"), "typename");
|
|
362
401
|
return `dxn:type:${typename}`;
|
|
363
402
|
};
|
|
403
|
+
const SCOPE_KEYS = new Set([
|
|
404
|
+
"spaceIds",
|
|
405
|
+
"queues",
|
|
406
|
+
"allQueuesFromSpaces"
|
|
407
|
+
]);
|
|
408
|
+
const _isScopeLike = (value) => {
|
|
409
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
410
|
+
return Object.keys(value).every((key) => SCOPE_KEYS.has(key));
|
|
411
|
+
};
|
|
364
412
|
|
|
365
413
|
//#endregion
|
|
366
414
|
export { Filter1 as Filter, Filter1, Order2 as Order, Query1 as Query, Query1 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["ast: QueryAST.Order","Order2: typeof Order$","ast: QueryAST.Filter","Filter1: typeof Filter$","idFilter: readonly ObjectId[] | undefined","ast: QueryAST.Query","Query1: typeof Query$","RefTypeId: unique symbol"],"sources":["../../../../../common/invariant/dist/lib/browser/index.mjs","../../src/query-lite/query-lite.ts"],"sourcesContent":["// src/invariant.ts\nvar invariant = (condition, message, meta) => {\n if (condition) {\n return;\n }\n if (message?.startsWith(\"BUG\")) {\n debugger;\n }\n let errorMessage = \"invariant violation\";\n if (message) {\n errorMessage += `: ${message}`;\n }\n if (meta?.A) {\n errorMessage += ` [${meta.A[0]}]`;\n }\n if (meta?.F) {\n errorMessage += ` at ${getRelativeFilename(meta.F)}:${meta.L}`;\n }\n const error = new InvariantViolation(errorMessage);\n Error.captureStackTrace(error, invariant);\n throw error;\n};\nvar InvariantViolation = class extends Error {\n constructor(message) {\n super(message);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n};\nvar getRelativeFilename = (filename) => {\n const match = filename.match(/.+\\/(packages\\/.+\\/.+)/);\n if (match) {\n const [, filePath] = match;\n return filePath;\n }\n return filename;\n};\nvar failedInvariant = (message1, message2, meta) => {\n let errorMessage = \"invariant violation\";\n const message = [\n message1,\n message2\n ].filter((str) => typeof str === \"string\").join(\" \");\n if (message) {\n errorMessage += `: ${message}`;\n }\n if (meta?.A) {\n errorMessage += ` [${meta.A[0]}]`;\n }\n if (meta?.F) {\n errorMessage += ` at ${getRelativeFilename(meta.F)}:${meta.L}`;\n }\n throw new InvariantViolation(errorMessage);\n};\n\n// src/assert.ts\nvar assertArgument = (condition, argumentName, message) => {\n if (!condition) {\n const error = new TypeError(`Invalid argument \\`${argumentName}\\`` + (message ? `: ${message}` : \"\"));\n Error.captureStackTrace(error, assertArgument);\n throw error;\n }\n};\nvar assertState = (condition, message) => {\n if (!condition) {\n const error = new InvalidStateError(message);\n Error.captureStackTrace(error, assertState);\n throw error;\n }\n};\nvar InvalidStateError = class extends Error {\n};\nexport {\n InvalidStateError,\n InvariantViolation,\n assertArgument,\n assertState,\n failedInvariant,\n invariant\n};\n//# sourceMappingURL=index.mjs.map\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport type { Filter as Filter$, Order as Order$, Query as Query$, Ref } from '@dxos/echo';\nimport type { ForeignKey, QueryAST } from '@dxos/echo-protocol';\nimport { assertArgument } from '@dxos/invariant';\nimport type { DXN, ObjectId } from '@dxos/keys';\n\n//\n// Light-weight implementation of query execution.\n//\n\n// TODO(wittjosiah): The `export * as ...` syntax causes tsdown to genereate multiple files which breaks the sandbox.\n\nclass OrderClass implements Order$.Any {\n private static variance: Order$.Any['~Order'] = {} as Order$.Any['~Order'];\n\n static is(value: unknown): value is Order$.Any {\n return typeof value === 'object' && value !== null && '~Order' in value;\n }\n\n constructor(public readonly ast: QueryAST.Order) {}\n\n '~Order' = OrderClass.variance;\n}\n\nnamespace Order1 {\n export const natural: Order$.Any = new OrderClass({ kind: 'natural' });\n export const property = <T>(property: keyof T & string, direction: QueryAST.OrderDirection): Order$.Order<T> =>\n new OrderClass({\n kind: 'property',\n property,\n direction,\n });\n export const rank = <T>(direction: QueryAST.OrderDirection = 'desc'): Order$.Order<T> =>\n new OrderClass({\n kind: 'rank',\n direction,\n });\n}\n\nconst Order2: typeof Order$ = Order1;\nexport { Order2 as Order };\n\nclass FilterClass implements Filter$.Any {\n private static variance: Filter$.Any['~Filter'] = {} as Filter$.Any['~Filter'];\n\n static is(value: unknown): value is Filter$.Any {\n return typeof value === 'object' && value !== null && '~Filter' in value;\n }\n\n static fromAst(ast: QueryAST.Filter): Filter$.Any {\n return new FilterClass(ast);\n }\n\n static everything(): FilterClass {\n return new FilterClass({\n type: 'object',\n typename: null,\n props: {},\n });\n }\n\n static nothing(): FilterClass {\n return new FilterClass({\n type: 'not',\n filter: {\n type: 'object',\n typename: null,\n props: {},\n },\n });\n }\n\n static relation() {\n return new FilterClass({\n type: 'object',\n typename: null,\n props: {},\n });\n }\n\n static id(...ids: ObjectId[]): Filter$.Any {\n // assertArgument(\n // ids.every((id) => ObjectId.isValid(id)),\n // 'ids',\n // 'ids must be valid',\n // );\n\n if (ids.length === 0) {\n return FilterClass.nothing();\n }\n\n return new FilterClass({\n type: 'object',\n typename: null,\n id: ids,\n props: {},\n });\n }\n\n static type<S extends Schema.Schema.All>(\n schema: S | string,\n props?: Filter$.Props<Schema.Schema.Type<S>>,\n ): Filter$.Filter<Schema.Schema.Type<S>> {\n if (typeof schema !== 'string') {\n throw new TypeError('expected typename as the first paramter');\n }\n return new FilterClass({\n type: 'object',\n typename: makeTypeDxn(schema),\n ...propsFilterToAst(props ?? {}),\n });\n }\n\n static typename(typename: string): Filter$.Any {\n return new FilterClass({\n type: 'object',\n typename: makeTypeDxn(typename),\n props: {},\n });\n }\n\n static typeDXN(dxn: DXN): Filter$.Any {\n return new FilterClass({\n type: 'object',\n typename: dxn.toString(),\n props: {},\n });\n }\n\n static tag(tag: string): Filter$.Any {\n return new FilterClass({\n type: 'tag',\n tag,\n });\n }\n\n static props<T>(props: Filter$.Props<T>): Filter$.Filter<T> {\n return new FilterClass({\n type: 'object',\n typename: null,\n ...propsFilterToAst(props),\n });\n }\n\n static text(text: string, options?: Filter$.TextSearchOptions): Filter$.Any {\n return new FilterClass({\n type: 'text-search',\n text,\n searchKind: options?.type,\n });\n }\n\n static foreignKeys<S extends Schema.Schema.All>(\n schema: S | string,\n keys: ForeignKey[],\n ): Filter$.Filter<Schema.Schema.Type<S>> {\n assertArgument(typeof schema === 'string', 'schema');\n assertArgument(!schema.startsWith('dxn:'), 'schema');\n return new FilterClass({\n type: 'object',\n typename: `dxn:type:${schema}`,\n props: {},\n foreignKeys: keys,\n });\n }\n\n static eq<T>(value: T): Filter$.Filter<T | undefined> {\n if (!isRef(value) && typeof value === 'object' && value !== null) {\n throw new TypeError('Cannot use object as a value for eq filter');\n }\n\n return new FilterClass({\n type: 'compare',\n operator: 'eq',\n value: isRef(value) ? value.noInline().encode() : value,\n });\n }\n\n static neq<T>(value: T): Filter$.Filter<T | undefined> {\n return new FilterClass({\n type: 'compare',\n operator: 'neq',\n value,\n });\n }\n\n static gt<T>(value: T): Filter$.Filter<T | undefined> {\n return new FilterClass({\n type: 'compare',\n operator: 'gt',\n value,\n });\n }\n\n static gte<T>(value: T): Filter$.Filter<T | undefined> {\n return new FilterClass({\n type: 'compare',\n operator: 'gte',\n value,\n });\n }\n\n static lt<T>(value: T): Filter$.Filter<T | undefined> {\n return new FilterClass({\n type: 'compare',\n operator: 'lt',\n value,\n });\n }\n\n static lte<T>(value: T): Filter$.Filter<T | undefined> {\n return new FilterClass({\n type: 'compare',\n operator: 'lte',\n value,\n });\n }\n\n static in<T>(...values: T[]): Filter$.Filter<T | undefined> {\n return new FilterClass({\n type: 'in',\n values,\n });\n }\n\n static contains<T>(value: T): Filter$.Filter<readonly T[] | undefined> {\n return new FilterClass({\n type: 'contains',\n value,\n });\n }\n\n static between<T>(from: T, to: T): Filter$.Filter<unknown> {\n return new FilterClass({\n type: 'range',\n from,\n to,\n });\n }\n\n static not<F extends Filter$.Any>(filter: F): Filter$.Filter<Filter$.Type<F>> {\n return new FilterClass({\n type: 'not',\n filter: filter.ast,\n });\n }\n\n static and<Filters extends readonly Filter$.Any[]>(\n ...filters: Filters\n ): Filter$.Filter<Filter$.Type<Filters[number]>> {\n return new FilterClass({\n type: 'and',\n filters: filters.map((f) => f.ast),\n });\n }\n\n static or<Filters extends readonly Filter$.Any[]>(\n ...filters: Filters\n ): Filter$.Filter<Filter$.Type<Filters[number]>> {\n return new FilterClass({\n type: 'or',\n filters: filters.map((f) => f.ast),\n });\n }\n\n private constructor(public readonly ast: QueryAST.Filter) {}\n\n '~Filter' = FilterClass.variance;\n}\n\nexport const Filter1: typeof Filter$ = FilterClass;\nexport { Filter1 as Filter };\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\nconst propsFilterToAst = (predicates: Filter$.Props<any>): Pick<QueryAST.FilterObject, 'id' | 'props'> => {\n let idFilter: readonly ObjectId[] | undefined;\n if ('id' in predicates) {\n assertArgument(\n typeof predicates.id === 'string' || Array.isArray(predicates.id),\n 'predicates.id',\n 'invalid id filter',\n );\n idFilter = typeof predicates.id === 'string' ? [predicates.id] : predicates.id;\n }\n\n return {\n id: idFilter,\n props: Object.fromEntries(\n Object.entries(predicates)\n .filter(([prop, _value]) => prop !== 'id')\n .map(([prop, predicate]) => [prop, processPredicate(predicate)]),\n ) as Record<string, QueryAST.Filter>,\n };\n};\n\nconst processPredicate = (predicate: any): QueryAST.Filter => {\n if (FilterClass.is(predicate)) {\n return predicate.ast;\n }\n\n if (Array.isArray(predicate)) {\n throw new Error('Array predicates are not yet supported.');\n }\n\n if (!isRef(predicate) && typeof predicate === 'object' && predicate !== null) {\n const nestedProps = Object.fromEntries(\n Object.entries(predicate).map(([key, value]) => [key, processPredicate(value)]),\n );\n\n return {\n type: 'object',\n typename: null,\n props: nestedProps,\n };\n }\n\n return FilterClass.eq(predicate).ast;\n};\n\nclass QueryClass implements Query$.Any {\n private static variance: Query$.Any['~Query'] = {} as Query$.Any['~Query'];\n\n static is(value: unknown): value is Query$.Any {\n return typeof value === 'object' && value !== null && '~Query' in value;\n }\n\n static fromAst(ast: QueryAST.Query): Query$.Any {\n return new QueryClass(ast);\n }\n\n static select<F extends Filter$.Any>(filter: F): Query$.Query<Filter$.Type<F>> {\n return new QueryClass({\n type: 'select',\n filter: filter.ast,\n });\n }\n\n static type(schema: Schema.Schema.All | string, predicates?: Filter$.Props<unknown>): Query$.Any {\n return new QueryClass({\n type: 'select',\n filter: FilterClass.type(schema, predicates).ast,\n });\n }\n\n static all(...queries: Query$.Any[]): Query$.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 static without<T>(source: Query$.Query<T>, exclude: Query$.Query<T>): Query$.Query<T> {\n return new QueryClass({\n type: 'set-difference',\n source: source.ast,\n exclude: exclude.ast,\n });\n }\n\n constructor(public readonly ast: QueryAST.Query) {}\n\n '~Query' = QueryClass.variance;\n\n select(filter: Filter$.Any | Filter$.Props<any>): Query$.Any {\n if (FilterClass.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: FilterClass.props(filter).ast,\n });\n }\n }\n\n reference(key: string): Query$.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): Query$.Any {\n const typename =\n target !== undefined\n ? (assertArgument(typeof target === 'string', 'target'),\n assertArgument(!target.startsWith('dxn:'), 'target'),\n target)\n : null;\n return new QueryClass({\n type: 'incoming-references',\n anchor: this.ast,\n property: key ?? null,\n typename,\n });\n }\n\n sourceOf(relation: Schema.Schema.All | string, predicates?: Filter$.Props<unknown> | undefined): Query$.Any {\n return new QueryClass({\n type: 'relation',\n anchor: this.ast,\n direction: 'outgoing',\n filter: FilterClass.type(relation, predicates).ast,\n });\n }\n\n targetOf(relation: Schema.Schema.All | string, predicates?: Filter$.Props<unknown> | undefined): Query$.Any {\n return new QueryClass({\n type: 'relation',\n anchor: this.ast,\n direction: 'incoming',\n filter: FilterClass.type(relation, predicates).ast,\n });\n }\n\n source(): Query$.Any {\n return new QueryClass({\n type: 'relation-traversal',\n anchor: this.ast,\n direction: 'source',\n });\n }\n\n target(): Query$.Any {\n return new QueryClass({\n type: 'relation-traversal',\n anchor: this.ast,\n direction: 'target',\n });\n }\n\n orderBy(...order: Order$.Any[]): Query$.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): Query$.Any {\n return new QueryClass({\n type: 'limit',\n query: this.ast,\n limit,\n });\n }\n\n options(options: QueryAST.QueryOptions): Query$.Any {\n return new QueryClass({\n type: 'options',\n query: this.ast,\n options,\n });\n }\n}\n\nexport const Query1: typeof Query$ = QueryClass;\nexport { Query1 as Query };\n\nconst RefTypeId: unique symbol = Symbol('@dxos/echo-query/Ref');\nconst isRef = (obj: any): obj is Ref.Ref<any> => {\n return obj && typeof obj === 'object' && RefTypeId in obj;\n};\n\nconst makeTypeDxn = (typename: string) => {\n assertArgument(typeof typename === 'string', 'typename');\n assertArgument(!typename.startsWith('dxn:'), 'typename');\n return `dxn:type:${typename}`;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["ast: QueryAST.Order","Order2: typeof Order$","ast: QueryAST.Filter","Filter1: typeof Filter$","idFilter: readonly ObjectId[] | undefined","ast: QueryAST.Query","Query1: typeof Query$","RefTypeId: unique symbol"],"sources":["../../../../../common/invariant/dist/lib/browser/index.mjs","../../src/query-lite/query-lite.ts"],"sourcesContent":["// src/invariant.ts\nvar invariant = (condition, message, meta) => {\n if (condition) {\n return;\n }\n if (message?.startsWith(\"BUG\")) {\n debugger;\n }\n let errorMessage = \"invariant violation\";\n if (message) {\n errorMessage += `: ${message}`;\n }\n if (meta?.A) {\n errorMessage += ` [${meta.A[0]}]`;\n }\n if (meta?.F) {\n errorMessage += ` at ${getRelativeFilename(meta.F)}:${meta.L}`;\n }\n const error = new InvariantViolation(errorMessage);\n Error.captureStackTrace(error, invariant);\n throw error;\n};\nvar InvariantViolation = class extends Error {\n constructor(message) {\n super(message);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n};\nvar getRelativeFilename = (filename) => {\n const match = filename.match(/.+\\/(packages\\/.+\\/.+)/);\n if (match) {\n const [, filePath] = match;\n return filePath;\n }\n return filename;\n};\nvar failedInvariant = (message1, message2, meta) => {\n let errorMessage = \"invariant violation\";\n const message = [\n message1,\n message2\n ].filter((str) => typeof str === \"string\").join(\" \");\n if (message) {\n errorMessage += `: ${message}`;\n }\n if (meta?.A) {\n errorMessage += ` [${meta.A[0]}]`;\n }\n if (meta?.F) {\n errorMessage += ` at ${getRelativeFilename(meta.F)}:${meta.L}`;\n }\n throw new InvariantViolation(errorMessage);\n};\n\n// src/assert.ts\nvar assertArgument = (condition, argumentName, message) => {\n if (!condition) {\n const error = new TypeError(`Invalid argument \\`${argumentName}\\`` + (message ? `: ${message}` : \"\"));\n Error.captureStackTrace(error, assertArgument);\n throw error;\n }\n};\nvar assertState = (condition, message) => {\n if (!condition) {\n const error = new InvalidStateError(message);\n Error.captureStackTrace(error, assertState);\n throw error;\n }\n};\nvar InvalidStateError = class extends Error {\n};\nexport {\n InvalidStateError,\n InvariantViolation,\n assertArgument,\n assertState,\n failedInvariant,\n invariant\n};\n//# sourceMappingURL=index.mjs.map\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport type { Filter as Filter$, Order as Order$, Query as Query$, Ref } from '@dxos/echo';\nimport type { ForeignKey, QueryAST } from '@dxos/echo-protocol';\nimport { assertArgument } from '@dxos/invariant';\nimport type { DXN, ObjectId } from '@dxos/keys';\n\n//\n// Light-weight implementation of query execution.\n//\n\n// TODO(wittjosiah): The `export * as ...` syntax causes tsdown to genereate multiple files which breaks the sandbox.\n\nclass OrderClass implements Order$.Any {\n private static 'variance': Order$.Any['~Order'] = {} as Order$.Any['~Order'];\n\n static is(value: unknown): value is Order$.Any {\n return typeof value === 'object' && value !== null && '~Order' in value;\n }\n\n constructor(public readonly ast: QueryAST.Order) {}\n\n '~Order' = OrderClass.variance;\n}\n\nnamespace Order1 {\n export const natural: Order$.Any = new OrderClass({ kind: 'natural' });\n export const property = <T>(property: keyof T & string, direction: QueryAST.OrderDirection): Order$.Order<T> =>\n new OrderClass({\n kind: 'property',\n property,\n direction,\n });\n export const rank = <T>(direction: QueryAST.OrderDirection = 'desc'): Order$.Order<T> =>\n new OrderClass({\n kind: 'rank',\n direction,\n });\n}\n\nconst Order2: typeof Order$ = Order1;\nexport { Order2 as Order };\n\nclass FilterClass implements Filter$.Any {\n private static 'variance': Filter$.Any['~Filter'] = {} as Filter$.Any['~Filter'];\n\n static is(value: unknown): value is Filter$.Any {\n return typeof value === 'object' && value !== null && '~Filter' in value;\n }\n\n static fromAst(ast: QueryAST.Filter): Filter$.Any {\n return new FilterClass(ast);\n }\n\n static everything(): FilterClass {\n return new FilterClass({\n type: 'object',\n typename: null,\n props: {},\n });\n }\n\n static nothing(): FilterClass {\n return new FilterClass({\n type: 'not',\n filter: {\n type: 'object',\n typename: null,\n props: {},\n },\n });\n }\n\n static relation() {\n return new FilterClass({\n type: 'object',\n typename: null,\n props: {},\n });\n }\n\n static id(...ids: ObjectId[]): Filter$.Any {\n // assertArgument(\n // ids.every((id) => ObjectId.isValid(id)),\n // 'ids',\n // 'ids must be valid',\n // );\n\n if (ids.length === 0) {\n return FilterClass.nothing();\n }\n\n return new FilterClass({\n type: 'object',\n typename: null,\n id: ids,\n props: {},\n });\n }\n\n static type<S extends Schema.Schema.All>(\n schema: S | string,\n props?: Filter$.Props<Schema.Schema.Type<S>>,\n ): Filter$.Filter<Schema.Schema.Type<S>> {\n if (typeof schema !== 'string') {\n throw new TypeError('expected typename as the first paramter');\n }\n return new FilterClass({\n type: 'object',\n typename: makeTypeDxn(schema),\n ...propsFilterToAst(props ?? {}),\n });\n }\n\n static typename(typename: string): Filter$.Any {\n return new FilterClass({\n type: 'object',\n typename: makeTypeDxn(typename),\n props: {},\n });\n }\n\n static typeDXN(dxn: DXN): Filter$.Any {\n return new FilterClass({\n type: 'object',\n typename: dxn.toString(),\n props: {},\n });\n }\n\n static tag(tag: string): Filter$.Any {\n return new FilterClass({\n type: 'tag',\n tag,\n });\n }\n\n static props<T>(props: Filter$.Props<T>): Filter$.Filter<T> {\n return new FilterClass({\n type: 'object',\n typename: null,\n ...propsFilterToAst(props),\n });\n }\n\n static text(text: string, options?: Filter$.TextSearchOptions): Filter$.Any {\n return new FilterClass({\n type: 'text-search',\n text,\n searchKind: options?.type,\n });\n }\n\n static foreignKeys<S extends Schema.Schema.All>(\n schema: S | string,\n keys: ForeignKey[],\n ): Filter$.Filter<Schema.Schema.Type<S>> {\n assertArgument(typeof schema === 'string', 'schema');\n assertArgument(!schema.startsWith('dxn:'), 'schema');\n return new FilterClass({\n type: 'object',\n typename: `dxn:type:${schema}`,\n props: {},\n foreignKeys: keys,\n });\n }\n\n static eq<T>(value: T): Filter$.Filter<T | undefined> {\n if (!isRef(value) && typeof value === 'object' && value !== null) {\n throw new TypeError('Cannot use object as a value for eq filter');\n }\n\n return new FilterClass({\n type: 'compare',\n operator: 'eq',\n value: isRef(value) ? value.noInline().encode() : value,\n });\n }\n\n static neq<T>(value: T): Filter$.Filter<T | undefined> {\n return new FilterClass({\n type: 'compare',\n operator: 'neq',\n value,\n });\n }\n\n static gt<T>(value: T): Filter$.Filter<T | undefined> {\n return new FilterClass({\n type: 'compare',\n operator: 'gt',\n value,\n });\n }\n\n static gte<T>(value: T): Filter$.Filter<T | undefined> {\n return new FilterClass({\n type: 'compare',\n operator: 'gte',\n value,\n });\n }\n\n static lt<T>(value: T): Filter$.Filter<T | undefined> {\n return new FilterClass({\n type: 'compare',\n operator: 'lt',\n value,\n });\n }\n\n static lte<T>(value: T): Filter$.Filter<T | undefined> {\n return new FilterClass({\n type: 'compare',\n operator: 'lte',\n value,\n });\n }\n\n static in<T>(...values: T[]): Filter$.Filter<T | undefined> {\n return new FilterClass({\n type: 'in',\n values,\n });\n }\n\n static contains<T>(value: T): Filter$.Filter<readonly T[] | undefined> {\n return new FilterClass({\n type: 'contains',\n value,\n });\n }\n\n static between<T>(from: T, to: T): Filter$.Filter<unknown> {\n return new FilterClass({\n type: 'range',\n from,\n to,\n });\n }\n\n static not<F extends Filter$.Any>(filter: F): Filter$.Filter<Filter$.Type<F>> {\n return new FilterClass({\n type: 'not',\n filter: filter.ast,\n });\n }\n\n static and<Filters extends readonly Filter$.Any[]>(\n ...filters: Filters\n ): Filter$.Filter<Filter$.Type<Filters[number]>> {\n return new FilterClass({\n type: 'and',\n filters: filters.map((f) => f.ast),\n });\n }\n\n static or<Filters extends readonly Filter$.Any[]>(\n ...filters: Filters\n ): Filter$.Filter<Filter$.Type<Filters[number]>> {\n return new FilterClass({\n type: 'or',\n filters: filters.map((f) => f.ast),\n });\n }\n\n private constructor(public readonly ast: QueryAST.Filter) {}\n\n '~Filter' = FilterClass.variance;\n}\n\nexport const Filter1: typeof Filter$ = FilterClass;\nexport { Filter1 as Filter };\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\nconst propsFilterToAst = (predicates: Filter$.Props<any>): Pick<QueryAST.FilterObject, 'id' | 'props'> => {\n let idFilter: readonly ObjectId[] | undefined;\n if ('id' in predicates) {\n assertArgument(\n typeof predicates.id === 'string' || Array.isArray(predicates.id),\n 'predicates.id',\n 'invalid id filter',\n );\n idFilter = typeof predicates.id === 'string' ? [predicates.id] : predicates.id;\n }\n\n return {\n id: idFilter,\n props: Object.fromEntries(\n Object.entries(predicates)\n .filter(([prop, _value]) => prop !== 'id')\n .map(([prop, predicate]) => [prop, processPredicate(predicate)]),\n ) as Record<string, QueryAST.Filter>,\n };\n};\n\nconst processPredicate = (predicate: any): QueryAST.Filter => {\n if (FilterClass.is(predicate)) {\n return predicate.ast;\n }\n\n if (Array.isArray(predicate)) {\n throw new Error('Array predicates are not yet supported.');\n }\n\n if (!isRef(predicate) && typeof predicate === 'object' && predicate !== null) {\n const nestedProps = Object.fromEntries(\n Object.entries(predicate).map(([key, value]) => [key, processPredicate(value)]),\n );\n\n return {\n type: 'object',\n typename: null,\n props: nestedProps,\n };\n }\n\n return FilterClass.eq(predicate).ast;\n};\n\nclass QueryClass implements Query$.Any {\n private static 'variance': Query$.Any['~Query'] = {} as Query$.Any['~Query'];\n\n static is(value: unknown): value is Query$.Any {\n return typeof value === 'object' && value !== null && '~Query' in value;\n }\n\n static fromAst(ast: QueryAST.Query): Query$.Any {\n return new QueryClass(ast);\n }\n\n static select<F extends Filter$.Any>(filter: F): Query$.Query<Filter$.Type<F>> {\n return new QueryClass({\n type: 'select',\n filter: filter.ast,\n });\n }\n\n static type(schema: Schema.Schema.All | string, predicates?: Filter$.Props<unknown>): Query$.Any {\n return new QueryClass({\n type: 'select',\n filter: FilterClass.type(schema, predicates).ast,\n });\n }\n\n static all(...queries: Query$.Any[]): Query$.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 static without<T>(source: Query$.Query<T>, exclude: Query$.Query<T>): Query$.Query<T> {\n return new QueryClass({\n type: 'set-difference',\n source: source.ast,\n exclude: exclude.ast,\n });\n }\n\n static from(source: any, options?: { includeFeeds?: boolean }): Query$.Any {\n const baseQuery: QueryAST.Query = {\n type: 'select',\n filter: FilterClass.everything().ast,\n };\n const wrapper = new QueryClass(baseQuery);\n return wrapper.from(source, options);\n }\n\n constructor(public readonly ast: QueryAST.Query) {}\n\n '~Query' = QueryClass.variance;\n\n select(filter: Filter$.Any | Filter$.Props<any>): Query$.Any {\n if (FilterClass.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: FilterClass.props(filter).ast,\n });\n }\n }\n\n reference(key: string): Query$.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): Query$.Any {\n const typename =\n target !== undefined\n ? (assertArgument(typeof target === 'string', 'target'),\n assertArgument(!target.startsWith('dxn:'), 'target'),\n target)\n : null;\n return new QueryClass({\n type: 'incoming-references',\n anchor: this.ast,\n property: key ?? null,\n typename,\n });\n }\n\n sourceOf(relation?: Schema.Schema.All | string, predicates?: Filter$.Props<unknown> | undefined): Query$.Any {\n return new QueryClass({\n type: 'relation',\n anchor: this.ast,\n direction: 'outgoing',\n filter: relation !== undefined ? FilterClass.type(relation, predicates).ast : undefined,\n });\n }\n\n targetOf(relation?: Schema.Schema.All | string, predicates?: Filter$.Props<unknown> | undefined): Query$.Any {\n return new QueryClass({\n type: 'relation',\n anchor: this.ast,\n direction: 'incoming',\n filter: relation !== undefined ? FilterClass.type(relation, predicates).ast : undefined,\n });\n }\n\n source(): Query$.Any {\n return new QueryClass({\n type: 'relation-traversal',\n anchor: this.ast,\n direction: 'source',\n });\n }\n\n target(): Query$.Any {\n return new QueryClass({\n type: 'relation-traversal',\n anchor: this.ast,\n direction: 'target',\n });\n }\n\n parent(): Query$.Any {\n return new QueryClass({\n type: 'hierarchy-traversal',\n anchor: this.ast,\n direction: 'to-parent',\n });\n }\n\n children(): Query$.Any {\n return new QueryClass({\n type: 'hierarchy-traversal',\n anchor: this.ast,\n direction: 'to-children',\n });\n }\n\n orderBy(...order: Order$.Any[]): Query$.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): Query$.Any {\n return new QueryClass({\n type: 'limit',\n query: this.ast,\n limit,\n });\n }\n\n from(arg: any, options?: { includeFeeds?: boolean }): Query$.Any {\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 (_isScopeLike(arg)) {\n return new QueryClass({\n type: 'from',\n query: this.ast,\n from: { _tag: 'scope', scope: arg },\n });\n }\n\n throw new TypeError('Database and Feed objects are not supported in query-lite sandbox');\n }\n\n options(options: QueryAST.QueryOptions): Query$.Any {\n return new QueryClass({\n type: 'options',\n query: this.ast,\n options,\n });\n }\n}\n\nexport const Query1: typeof Query$ = QueryClass;\nexport { Query1 as Query };\n\nconst RefTypeId: unique symbol = Symbol('@dxos/echo-query/Ref');\nconst isRef = (obj: any): obj is Ref.Ref<any> => {\n return obj && typeof obj === 'object' && RefTypeId in obj;\n};\n\nconst makeTypeDxn = (typename: string) => {\n assertArgument(typeof typename === 'string', 'typename');\n assertArgument(!typename.startsWith('dxn:'), 'typename');\n return `dxn:type:${typename}`;\n};\n\nconst SCOPE_KEYS = new Set(['spaceIds', 'queues', 'allQueuesFromSpaces']);\n\nconst _isScopeLike = (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"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-lite.d.ts","sourceRoot":"","sources":["../../../../src/query-lite/query-lite.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,IAAI,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,EAAO,MAAM,YAAY,CAAC;AAsC3F,QAAA,MAAM,MAAM,EAAE,OAAO,MAAe,CAAC;AACrC,OAAO,EAAE,MAAM,IAAI,KAAK,EAAE,CAAC;AAsO3B,eAAO,MAAM,OAAO,EAAE,OAAO,OAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"query-lite.d.ts","sourceRoot":"","sources":["../../../../src/query-lite/query-lite.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,IAAI,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,EAAO,MAAM,YAAY,CAAC;AAsC3F,QAAA,MAAM,MAAM,EAAE,OAAO,MAAe,CAAC;AACrC,OAAO,EAAE,MAAM,IAAI,KAAK,EAAE,CAAC;AAsO3B,eAAO,MAAM,OAAO,EAAE,OAAO,OAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC;AA0P7B,eAAO,MAAM,MAAM,EAAE,OAAO,MAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,IAAI,KAAK,EAAE,CAAC"}
|
|
@@ -14,7 +14,7 @@ export declare class QuerySandbox extends Resource {
|
|
|
14
14
|
protected _close(): Promise<void>;
|
|
15
15
|
/**
|
|
16
16
|
* Evaluates the query code.
|
|
17
|
-
* @param queryCode Example: `Query.select(Filter.typename('dxos.
|
|
17
|
+
* @param queryCode Example: `Query.select(Filter.typename('org.dxos.type.person'))`
|
|
18
18
|
*/
|
|
19
19
|
eval(queryCode: string): QueryAST.Query;
|
|
20
20
|
}
|