@rocicorp/zero 0.23.2025082300 → 0.23.2025082500

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.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  clientToServer
3
- } from "./chunk-4AQ764RO.js";
3
+ } from "./chunk-XAUWMRGH.js";
4
4
  import {
5
5
  AbstractQuery,
6
6
  ExpressionBuilder,
@@ -267,63 +267,53 @@ function escapeLike(val) {
267
267
  }
268
268
 
269
269
  // ../zql/src/query/named.ts
270
- function createBuilder(s) {
271
- return makeQueryBuilders(s);
272
- }
273
- function syncedQuery(name, validatorOrQueryFn, maybeQueryFn) {
274
- let fn;
275
- let validator;
276
- if (maybeQueryFn === void 0) {
277
- fn = validatorOrQueryFn;
278
- } else {
279
- fn = maybeQueryFn;
280
- validator = validatorOrQueryFn;
270
+ function normalizeParser(parser) {
271
+ if (parser) {
272
+ if ("parse" in parser) {
273
+ return parser.parse.bind(parser);
274
+ }
275
+ return parser;
281
276
  }
282
- const ret = (...args) => fn(...args).nameAndArgs(name, args);
283
- ret.takesContext = false;
284
- ret.validator = validator;
277
+ return void 0;
278
+ }
279
+ function syncedQuery(name, parser, fn) {
280
+ const impl = syncedQueryImpl(name, fn, false);
281
+ const ret = (...args) => impl(void 0, args);
285
282
  ret.queryName = name;
283
+ ret.parse = normalizeParser(parser);
284
+ ret.takesContext = false;
286
285
  return ret;
287
286
  }
288
- function syncedQueryWithContext(name, queryOrValidator, query) {
289
- let fn;
290
- let validator;
291
- if (query === void 0) {
292
- fn = queryOrValidator;
293
- } else {
294
- fn = query;
295
- validator = queryOrValidator;
296
- }
297
- return contextualizedSyncedQuery(name, validator, fn);
298
- }
299
- function contextualizedSyncedQuery(name, validator, fn) {
300
- const ret = (context, ...args) => fn(context, ...args).nameAndArgs(name, args);
301
- ret.takesContext = true;
302
- if (validator) {
303
- ret.validator = validator;
304
- }
287
+ function syncedQueryWithContext(name, parser, fn) {
288
+ const impl = syncedQueryImpl(name, fn, true);
289
+ const ret = (context, ...args) => impl(context, args);
305
290
  ret.queryName = name;
291
+ ret.parse = normalizeParser(parser);
292
+ ret.takesContext = true;
306
293
  return ret;
307
294
  }
308
- function withContext(fn) {
309
- if (fn.takesContext) {
310
- return fn;
311
- }
312
- const contextualized = (_context, ...args) => fn(...args).nameAndArgs(fn.queryName, args);
313
- contextualized.takesContext = true;
314
- contextualized.queryName = fn.queryName;
315
- contextualized.validator = fn.validator;
316
- return contextualized;
295
+ function syncedQueryImpl(name, fn, takesContext) {
296
+ return (context, args) => {
297
+ const q = takesContext ? fn(context, ...args) : fn(...args);
298
+ return q.nameAndArgs(name, args);
299
+ };
317
300
  }
318
301
  function withValidation(fn) {
319
- const { validator, takesContext } = fn;
320
- if (validator) {
321
- if (takesContext) {
322
- return (context, ...args) => fn(context, ...validator(args));
323
- }
324
- return (...args) => fn(...validator(args));
302
+ if (!fn.parse) {
303
+ throw new Error("ret does not have a parse function defined");
325
304
  }
326
- throw new Error(fn.name + " does not have a validator defined");
305
+ const ret = (context, ...args) => {
306
+ const f = fn;
307
+ const parsed = f.parse(args);
308
+ return f.takesContext ? f(context, ...parsed) : f(...parsed);
309
+ };
310
+ ret.queryName = fn.queryName;
311
+ ret.parse = fn.parse;
312
+ ret.takesContext = true;
313
+ return ret;
314
+ }
315
+ function createBuilder(s) {
316
+ return makeQueryBuilders(s);
327
317
  }
328
318
  function makeQueryBuilders(schema) {
329
319
  return new Proxy(
@@ -351,10 +341,9 @@ export {
351
341
  NOBODY_CAN,
352
342
  definePermissions,
353
343
  escapeLike,
354
- createBuilder,
355
344
  syncedQuery,
356
345
  syncedQueryWithContext,
357
- withContext,
358
- withValidation
346
+ withValidation,
347
+ createBuilder
359
348
  };
360
- //# sourceMappingURL=chunk-CCP3CHEV.js.map
349
+ //# sourceMappingURL=chunk-NQQYHD2U.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../zero-schema/src/builder/relationship-builder.ts", "../../zql/src/query/static-query.ts", "../../zero-schema/src/permissions.ts", "../../zql/src/query/escape-like.ts", "../../zql/src/query/named.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {Relationship, TableSchema} from '../table-schema.ts';\nimport type {TableBuilderWithColumns} from './table-builder.ts';\n\ntype ConnectArg<TSourceField, TDestField, TDest extends TableSchema> = {\n readonly sourceField: TSourceField;\n readonly destField: TDestField;\n readonly destSchema: TableBuilderWithColumns<TDest>;\n};\n\ntype ManyConnection<TSourceField, TDestField, TDest extends TableSchema> = {\n readonly sourceField: TSourceField;\n readonly destField: TDestField;\n readonly destSchema: TDest['name'];\n readonly cardinality: 'many';\n};\n\ntype OneConnection<TSourceField, TDestField, TDest extends TableSchema> = {\n readonly sourceField: TSourceField;\n readonly destField: TDestField;\n readonly destSchema: TDest['name'];\n readonly cardinality: 'one';\n};\n\ntype Prev = [-1, 0, 1, 2, 3, 4, 5, 6];\n\nexport type PreviousSchema<\n TSource extends TableSchema,\n K extends number,\n TDests extends TableSchema[],\n> = K extends 0 ? TSource : TDests[Prev[K]];\n\nexport type Relationships = {\n name: string; // table name\n relationships: Record<string, Relationship>; // relationships for that table\n};\n\nexport function relationships<\n TSource extends TableSchema,\n TRelationships extends Record<string, Relationship>,\n>(\n table: TableBuilderWithColumns<TSource>,\n cb: (connects: {\n many: <\n TDests extends TableSchema[],\n TSourceFields extends {\n [K in keyof TDests]: (keyof PreviousSchema<\n TSource,\n K & number,\n TDests\n >['columns'] &\n string)[];\n },\n TDestFields extends {\n [K in keyof TDests]: (keyof TDests[K]['columns'] & string)[];\n },\n >(\n ...args: {\n [K in keyof TDests]: ConnectArg<\n TSourceFields[K],\n TDestFields[K],\n TDests[K]\n >;\n }\n ) => {\n [K in keyof TDests]: ManyConnection<\n TSourceFields[K],\n TDestFields[K],\n TDests[K]\n >;\n };\n one: <\n TDests extends TableSchema[],\n TSourceFields extends {\n [K in keyof TDests]: (keyof PreviousSchema<\n TSource,\n K & number,\n TDests\n >['columns'] &\n string)[];\n },\n TDestFields extends {\n [K in keyof TDests]: (keyof TDests[K]['columns'] & string)[];\n },\n >(\n ...args: {\n [K in keyof TDests]: ConnectArg<\n TSourceFields[K],\n TDestFields[K],\n TDests[K]\n >;\n }\n ) => {\n [K in keyof TDests]: OneConnection<\n TSourceFields[K],\n TDestFields[K],\n TDests[K]\n >;\n };\n }) => TRelationships,\n): {name: TSource['name']; relationships: TRelationships} {\n const relationships = cb({many, one} as any);\n\n return {\n name: table.schema.name,\n relationships,\n };\n}\n\nfunction many(\n ...args: readonly ConnectArg<any, any, TableSchema>[]\n): ManyConnection<any, any, any>[] {\n return args.map(arg => ({\n sourceField: arg.sourceField,\n destField: arg.destField,\n destSchema: arg.destSchema.schema.name,\n cardinality: 'many',\n }));\n}\n\nfunction one(\n ...args: readonly ConnectArg<any, any, TableSchema>[]\n): OneConnection<any, any, any>[] {\n return args.map(arg => ({\n sourceField: arg.sourceField,\n destField: arg.destField,\n destSchema: arg.destSchema.schema.name,\n cardinality: 'one',\n }));\n}\n", "import type {AST, System} from '../../../zero-protocol/src/ast.ts';\nimport type {Schema} from '../../../zero-schema/src/builder/schema-builder.ts';\nimport type {Format} from '../ivm/view.ts';\nimport {ExpressionBuilder} from './expression.ts';\nimport type {CustomQueryID} from './named.ts';\nimport type {QueryDelegate} from './query-delegate.ts';\nimport {AbstractQuery, defaultFormat, newQuerySymbol} from './query-impl.ts';\nimport type {HumanReadable, PullRow, Query} from './query.ts';\nimport type {TypedView} from './typed-view.ts';\n\nexport function staticQuery<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n>(schema: TSchema, tableName: TTable): Query<TSchema, TTable> {\n return new StaticQuery<TSchema, TTable>(\n schema,\n tableName,\n {table: tableName},\n defaultFormat,\n );\n}\n\n/**\n * A query that cannot be run.\n * Only serves to generate ASTs.\n */\nexport class StaticQuery<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn = PullRow<TTable, TSchema>,\n> extends AbstractQuery<TSchema, TTable, TReturn> {\n constructor(\n schema: TSchema,\n tableName: TTable,\n ast: AST,\n format: Format,\n system: System = 'permissions',\n customQueryID?: CustomQueryID | undefined,\n currentJunction?: string | undefined,\n ) {\n super(\n undefined,\n schema,\n tableName,\n ast,\n format,\n system,\n customQueryID,\n currentJunction,\n );\n }\n\n expressionBuilder() {\n return new ExpressionBuilder(this._exists);\n }\n\n protected [newQuerySymbol]<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n >(\n _delegate: QueryDelegate | undefined,\n schema: TSchema,\n tableName: TTable,\n ast: AST,\n format: Format,\n customQueryID: CustomQueryID | undefined,\n currentJunction: string | undefined,\n ): StaticQuery<TSchema, TTable, TReturn> {\n return new StaticQuery(\n schema,\n tableName,\n ast,\n format,\n 'permissions',\n customQueryID,\n currentJunction,\n );\n }\n\n get ast() {\n return this._completeAst();\n }\n\n materialize(): TypedView<HumanReadable<TReturn>> {\n throw new Error('StaticQuery cannot be materialized');\n }\n\n run(): Promise<HumanReadable<TReturn>> {\n return Promise.reject(new Error('StaticQuery cannot be run'));\n }\n\n preload(): {\n cleanup: () => void;\n complete: Promise<void>;\n } {\n throw new Error('StaticQuery cannot be preloaded');\n }\n}\n", "import {assert} from '../../shared/src/asserts.ts';\nimport {\n mapCondition,\n toStaticParam,\n type Condition,\n type Parameter,\n} from '../../zero-protocol/src/ast.ts';\nimport type {ExpressionBuilder} from '../../zql/src/query/expression.ts';\nimport {defaultFormat, staticParam} from '../../zql/src/query/query-impl.ts';\nimport type {Query} from '../../zql/src/query/query.ts';\nimport {StaticQuery} from '../../zql/src/query/static-query.ts';\nimport type {Schema} from './builder/schema-builder.ts';\nimport type {\n AssetPermissions as CompiledAssetPermissions,\n PermissionsConfig as CompiledPermissionsConfig,\n} from './compiled-permissions.ts';\nimport {clientToServer, NameMapper} from './name-mapper.ts';\n\nexport const ANYONE_CAN = [\n (_: unknown, eb: ExpressionBuilder<Schema, never>) => eb.and(),\n];\n\n/**\n * @deprecated Use {@link ANYONE_CAN} instead.\n */\nexport const ANYONE_CAN_DO_ANYTHING = {\n row: {\n select: ANYONE_CAN,\n insert: ANYONE_CAN,\n update: {\n preMutation: ANYONE_CAN,\n postMutation: ANYONE_CAN,\n },\n delete: ANYONE_CAN,\n },\n};\n\nexport const NOBODY_CAN = [];\n\nexport type Anchor = 'authData' | 'preMutationRow';\n\nexport type Queries<TSchema extends Schema> = {\n [K in keyof TSchema['tables']]: Query<Schema, K & string>;\n};\n\nexport type PermissionRule<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n> = (\n authData: TAuthDataShape,\n eb: ExpressionBuilder<TSchema, TTable>,\n) => Condition;\n\nexport type AssetPermissions<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n> = {\n // Why an array of rules?: https://github.com/rocicorp/mono/pull/3184/files#r1869680716\n select?: PermissionRule<TAuthDataShape, TSchema, TTable>[] | undefined;\n /**\n * @deprecated Use Mutators instead.\n * @see {@link https://zero.rocicorp.dev/docs/writing-data}\n */\n insert?: PermissionRule<TAuthDataShape, TSchema, TTable>[] | undefined;\n /**\n * @deprecated Use Mutators instead.\n * @see {@link https://zero.rocicorp.dev/docs/writing-data}\n */\n update?:\n | {\n preMutation?: PermissionRule<TAuthDataShape, TSchema, TTable>[];\n postMutation?: PermissionRule<TAuthDataShape, TSchema, TTable>[];\n }\n | undefined;\n /**\n * @deprecated Use Mutators instead.\n * @see {@link https://zero.rocicorp.dev/docs/writing-data}\n */\n delete?: PermissionRule<TAuthDataShape, TSchema, TTable>[] | undefined;\n};\n\nexport type PermissionsConfig<TAuthDataShape, TSchema extends Schema> = {\n [K in keyof TSchema['tables']]?: {\n row?: AssetPermissions<TAuthDataShape, TSchema, K & string> | undefined;\n cell?:\n | {\n [C in keyof TSchema['tables'][K]['columns']]?: Omit<\n AssetPermissions<TAuthDataShape, TSchema, K & string>,\n 'cell'\n >;\n }\n | undefined;\n };\n};\n\nexport async function definePermissions<TAuthDataShape, TSchema extends Schema>(\n schema: TSchema,\n definer: () =>\n | Promise<PermissionsConfig<TAuthDataShape, TSchema>>\n | PermissionsConfig<TAuthDataShape, TSchema>,\n): Promise<CompiledPermissionsConfig | undefined> {\n const expressionBuilders = {} as Record<\n string,\n ExpressionBuilder<Schema, string>\n >;\n for (const name of Object.keys(schema.tables)) {\n expressionBuilders[name] = new StaticQuery(\n schema,\n name,\n {table: name},\n defaultFormat,\n ).expressionBuilder();\n }\n\n const config = await definer();\n return compilePermissions(schema, config, expressionBuilders);\n}\n\nfunction compilePermissions<TAuthDataShape, TSchema extends Schema>(\n schema: TSchema,\n authz: PermissionsConfig<TAuthDataShape, TSchema> | undefined,\n expressionBuilders: Record<string, ExpressionBuilder<Schema, string>>,\n): CompiledPermissionsConfig | undefined {\n if (!authz) {\n return undefined;\n }\n const nameMapper = clientToServer(schema.tables);\n const ret: CompiledPermissionsConfig = {tables: {}};\n for (const [tableName, tableConfig] of Object.entries(authz)) {\n const serverName = schema.tables[tableName].serverName ?? tableName;\n ret.tables[serverName] = {\n row: compileRowConfig(\n nameMapper,\n tableName,\n tableConfig.row,\n expressionBuilders[tableName],\n ),\n cell: compileCellConfig(\n nameMapper,\n tableName,\n tableConfig.cell,\n expressionBuilders[tableName],\n ),\n };\n }\n\n return ret;\n}\n\nfunction compileRowConfig<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n>(\n clientToServer: NameMapper,\n tableName: TTable,\n rowRules: AssetPermissions<TAuthDataShape, TSchema, TTable> | undefined,\n expressionBuilder: ExpressionBuilder<TSchema, TTable>,\n): CompiledAssetPermissions | undefined {\n if (!rowRules) {\n return undefined;\n }\n return {\n select: compileRules(\n clientToServer,\n tableName,\n rowRules.select,\n expressionBuilder,\n ),\n insert: compileRules(\n clientToServer,\n tableName,\n rowRules.insert,\n expressionBuilder,\n ),\n update: {\n preMutation: compileRules(\n clientToServer,\n tableName,\n rowRules.update?.preMutation,\n expressionBuilder,\n ),\n postMutation: compileRules(\n clientToServer,\n tableName,\n rowRules.update?.postMutation,\n expressionBuilder,\n ),\n },\n delete: compileRules(\n clientToServer,\n tableName,\n rowRules.delete,\n expressionBuilder,\n ),\n };\n}\n\n/**\n * What is this \"allow\" and why are permissions policies an array of rules?\n *\n * Please read: https://github.com/rocicorp/mono/pull/3184/files#r1869680716\n */\nfunction compileRules<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n>(\n clientToServer: NameMapper,\n tableName: TTable,\n rules: PermissionRule<TAuthDataShape, TSchema, TTable>[] | undefined,\n expressionBuilder: ExpressionBuilder<TSchema, TTable>,\n): ['allow', Condition][] | undefined {\n if (!rules) {\n return undefined;\n }\n\n return rules.map(rule => {\n const cond = rule(authDataRef as TAuthDataShape, expressionBuilder);\n return ['allow', mapCondition(cond, tableName, clientToServer)] as const;\n });\n}\n\nfunction compileCellConfig<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n>(\n clientToServer: NameMapper,\n tableName: TTable,\n cellRules:\n | Record<string, AssetPermissions<TAuthDataShape, TSchema, TTable>>\n | undefined,\n expressionBuilder: ExpressionBuilder<TSchema, TTable>,\n): Record<string, CompiledAssetPermissions> | undefined {\n if (!cellRules) {\n return undefined;\n }\n const ret: Record<string, CompiledAssetPermissions> = {};\n for (const [columnName, rules] of Object.entries(cellRules)) {\n ret[columnName] = {\n select: compileRules(\n clientToServer,\n tableName,\n rules.select,\n expressionBuilder,\n ),\n insert: compileRules(\n clientToServer,\n tableName,\n rules.insert,\n expressionBuilder,\n ),\n update: {\n preMutation: compileRules(\n clientToServer,\n tableName,\n rules.update?.preMutation,\n expressionBuilder,\n ),\n postMutation: compileRules(\n clientToServer,\n tableName,\n rules.update?.postMutation,\n expressionBuilder,\n ),\n },\n delete: compileRules(\n clientToServer,\n tableName,\n rules.delete,\n expressionBuilder,\n ),\n };\n }\n return ret;\n}\n\nclass CallTracker {\n readonly #anchor: Anchor;\n readonly #path: string[];\n constructor(anchor: Anchor, path: string[]) {\n this.#anchor = anchor;\n this.#path = path;\n }\n\n get(target: {[toStaticParam]: () => Parameter}, prop: string | symbol) {\n if (prop === toStaticParam) {\n return target[toStaticParam];\n }\n assert(typeof prop === 'string');\n const path = [...this.#path, prop];\n return new Proxy(\n {\n [toStaticParam]: () => staticParam(this.#anchor, path),\n },\n new CallTracker(this.#anchor, path),\n );\n }\n}\n\nfunction baseTracker(anchor: Anchor) {\n return new Proxy(\n {\n [toStaticParam]: () => {\n throw new Error('no JWT field specified');\n },\n },\n new CallTracker(anchor, []),\n );\n}\n\nexport const authDataRef = baseTracker('authData');\nexport const preMutationRowRef = baseTracker('preMutationRow');\n", "export function escapeLike(val: string) {\n return val.replace(/[%_]/g, '\\\\$&');\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport type {Schema} from '../../../zero-schema/src/builder/schema-builder.ts';\nimport type {SchemaQuery} from '../mutate/custom.ts';\nimport {newQuery} from './query-impl.ts';\nimport type {Query} from './query.ts';\n\nexport type NamedQuery<\n TArg extends\n ReadonlyArray<ReadonlyJSONValue> = ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery extends Query<any, any, any> = Query<any, any, any>,\n> = {\n (...args: TArg): TReturnQuery;\n};\n\nexport type NamedQueryWithContext<\n TContext,\n TArg extends\n ReadonlyArray<ReadonlyJSONValue> = ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery extends Query<any, any, any> = Query<any, any, any>,\n> = {\n (context: TContext, ...args: TArg): TReturnQuery;\n};\n\nexport type SyncedQuery<\n TArg extends\n ReadonlyArray<ReadonlyJSONValue> = ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery extends Query<any, any, any> = Query<any, any, any>,\n> = NamedQuery<TArg, TReturnQuery> & {\n queryName: string;\n takesContext: boolean;\n validator?: Validator<TArg> | undefined;\n};\n\nexport type SyncedQueryWithContext<\n TContext,\n TArg extends\n ReadonlyArray<ReadonlyJSONValue> = ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery extends Query<any, any, any> = Query<any, any, any>,\n> = NamedQueryWithContext<TContext, TArg, TReturnQuery> & {\n queryName: string;\n takesContext: true;\n validator?: Validator<TArg> | undefined;\n};\n\nexport type ValidatedSyncedQuery<TReturnQuery extends Query<any, any, any>> = (\n ...args: unknown[]\n) => TReturnQuery;\nexport type ValidatedSyncedQueryWithContext<\n TContext,\n TReturnQuery extends Query<any, any, any>,\n> = (context: TContext, ...args: unknown[]) => TReturnQuery;\n\nexport type CustomQueryID = {\n name: string;\n args: ReadonlyArray<ReadonlyJSONValue>;\n};\n\nexport type Validator<T extends ReadonlyArray<ReadonlyJSONValue>> = (\n args: readonly unknown[],\n) => T | readonly [...T];\n\n/**\n * Returns a set of query builders for the given schema.\n */\nexport function createBuilder<S extends Schema>(s: S): SchemaQuery<S> {\n return makeQueryBuilders(s) as SchemaQuery<S>;\n}\n\n/**\n * Tags a query with a name and arguments.\n * Named queries are run on both the client and server.\n * The server will receive the name and arguments for a named query and can\n * either run the same query the client did or a completely different one.\n *\n * The main use case here is to apply permissions to the requested query or\n * to expand the scope of the query to include additional data. E.g., for preloading.\n */\nexport function syncedQuery<\n TArg extends ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery extends Query<any, any, any>,\n>(\n name: string,\n validator: Validator<TArg>,\n fn: NamedQuery<TArg, TReturnQuery>,\n): SyncedQuery<TArg, TReturnQuery> & {validator: Validator<TArg>};\nexport function syncedQuery<\n TArg extends ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery extends Query<any, any, any>,\n>(\n name: string,\n fn: NamedQuery<TArg, TReturnQuery>,\n): SyncedQuery<TArg, TReturnQuery>;\nexport function syncedQuery<\n TArg extends ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery extends Query<any, any, any>,\n>(\n name: string,\n validatorOrQueryFn: Validator<TArg> | NamedQuery<TArg, TReturnQuery>,\n maybeQueryFn?: NamedQuery<TArg, TReturnQuery> | undefined,\n): SyncedQuery<TArg, TReturnQuery> {\n let fn: NamedQuery<TArg, TReturnQuery>;\n let validator: Validator<TArg> | undefined;\n if (maybeQueryFn === undefined) {\n fn = validatorOrQueryFn as NamedQuery<TArg, TReturnQuery>;\n } else {\n fn = maybeQueryFn;\n validator = validatorOrQueryFn as Validator<TArg>;\n }\n const ret = ((...args: TArg) =>\n fn(...args).nameAndArgs(name, args)) as SyncedQuery<TArg, TReturnQuery>;\n ret.takesContext = false;\n ret.validator = validator;\n ret.queryName = name;\n return ret;\n}\n\nexport function syncedQueryWithContext<\n TContext,\n TArg extends ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery extends Query<any, any, any>,\n>(\n name: string,\n validator: Validator<TArg>,\n fn: NamedQueryWithContext<TContext, TArg, TReturnQuery>,\n): SyncedQueryWithContext<TContext, TArg, TReturnQuery> & {\n validator: Validator<TArg>;\n};\nexport function syncedQueryWithContext<\n TContext,\n TArg extends ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery extends Query<any, any, any>,\n>(\n name: string,\n fn: NamedQueryWithContext<TContext, TArg, TReturnQuery>,\n): SyncedQueryWithContext<TContext, TArg, TReturnQuery>;\nexport function syncedQueryWithContext<\n TContext,\n TArg extends ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery extends Query<any, any, any>,\n>(\n name: string,\n queryOrValidator:\n | NamedQueryWithContext<TContext, TArg, TReturnQuery>\n | Validator<TArg>,\n query?: NamedQueryWithContext<TContext, TArg, TReturnQuery> | undefined,\n): SyncedQueryWithContext<TContext, TArg, TReturnQuery> {\n let fn: NamedQueryWithContext<TContext, TArg, TReturnQuery>;\n let validator: Validator<TArg> | undefined;\n if (query === undefined) {\n fn = queryOrValidator as NamedQueryWithContext<\n TContext,\n TArg,\n TReturnQuery\n >;\n } else {\n fn = query;\n validator = queryOrValidator as Validator<TArg>;\n }\n\n return contextualizedSyncedQuery(name, validator, fn);\n}\n\nfunction contextualizedSyncedQuery<\n TContext,\n TArg extends ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery extends Query<any, any, any>,\n>(\n name: string,\n validator: Validator<TArg> | undefined,\n fn: NamedQueryWithContext<TContext, TArg, TReturnQuery>,\n): SyncedQueryWithContext<TContext, TArg, TReturnQuery> {\n const ret = ((context: TContext, ...args: TArg) =>\n fn(context, ...args).nameAndArgs(name, args)) as SyncedQueryWithContext<\n TContext,\n TArg,\n TReturnQuery\n >;\n\n ret.takesContext = true;\n if (validator) {\n ret.validator = validator;\n }\n ret.queryName = name;\n\n return ret;\n}\n\nexport function withContext<\n TArg extends ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery extends Query<any, any, any>,\n TContext,\n>(\n fn: SyncedQueryWithContext<TContext, TArg, TReturnQuery>,\n): SyncedQueryWithContext<TContext, TArg, TReturnQuery>;\nexport function withContext<\n TArg extends ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery extends Query<any, any, any>,\n>(\n fn: SyncedQuery<TArg, TReturnQuery>,\n): SyncedQueryWithContext<any, TArg, TReturnQuery>;\nexport function withContext<\n TArg extends ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery extends Query<any, any, any>,\n TContext,\n>(\n fn:\n | SyncedQuery<TArg, TReturnQuery>\n | SyncedQueryWithContext<TContext, TArg, TReturnQuery>,\n): SyncedQueryWithContext<TContext, TArg, TReturnQuery> {\n if (fn.takesContext) {\n return fn as SyncedQueryWithContext<TContext, TArg, TReturnQuery>;\n }\n\n const contextualized = ((_context: TContext, ...args: TArg) =>\n fn(...args).nameAndArgs(fn.queryName, args)) as SyncedQueryWithContext<\n TContext,\n TArg,\n TReturnQuery\n >;\n contextualized.takesContext = true;\n contextualized.queryName = fn.queryName;\n contextualized.validator = fn.validator;\n\n return contextualized;\n}\n\nexport function withValidation<\n TReturnQuery extends Query<any, any, any>,\n TContext,\n>(\n fn: SyncedQueryWithContext<TContext, any, TReturnQuery>,\n): ValidatedSyncedQueryWithContext<TContext, TReturnQuery>;\nexport function withValidation<TReturnQuery extends Query<any, any, any>>(\n fn: SyncedQuery<any, TReturnQuery>,\n): ValidatedSyncedQuery<TReturnQuery>;\nexport function withValidation<\n TReturnQuery extends Query<any, any, any>,\n TContext = unknown,\n>(\n fn:\n | SyncedQuery<ReadonlyArray<ReadonlyJSONValue>, TReturnQuery>\n | SyncedQueryWithContext<\n TContext,\n ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery\n >,\n):\n | ValidatedSyncedQuery<TReturnQuery>\n | ValidatedSyncedQueryWithContext<TContext, TReturnQuery> {\n const {validator, takesContext} = fn;\n\n if (validator) {\n if (takesContext) {\n return ((context, ...args) =>\n (\n fn as SyncedQueryWithContext<\n TContext,\n ReadonlyArray<ReadonlyJSONValue>,\n TReturnQuery\n >\n )(context, ...validator(args))) as ValidatedSyncedQueryWithContext<\n TContext,\n TReturnQuery\n >;\n }\n return ((...args) =>\n fn(...validator(args))) as ValidatedSyncedQuery<TReturnQuery>;\n }\n\n throw new Error(fn.name + ' does not have a validator defined');\n}\n\n/**\n * This produces the query builders for a given schema.\n * For use in Zero on the server to process custom queries.\n */\nfunction makeQueryBuilders<S extends Schema>(schema: S): SchemaQuery<S> {\n return new Proxy(\n {},\n {\n get: (\n target: Record<\n string,\n Omit<Query<S, string, any>, 'materialize' | 'preload'>\n >,\n prop: string,\n ) => {\n if (prop in target) {\n return target[prop];\n }\n\n if (!(prop in schema.tables)) {\n throw new Error(`Table ${prop} does not exist in schema`);\n }\n\n const q = newQuery(undefined, schema, prop);\n target[prop] = q;\n return q;\n },\n },\n ) as SchemaQuery<S>;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {Relationship, TableSchema} from '../table-schema.ts';\nimport type {TableBuilderWithColumns} from './table-builder.ts';\n\ntype ConnectArg<TSourceField, TDestField, TDest extends TableSchema> = {\n readonly sourceField: TSourceField;\n readonly destField: TDestField;\n readonly destSchema: TableBuilderWithColumns<TDest>;\n};\n\ntype ManyConnection<TSourceField, TDestField, TDest extends TableSchema> = {\n readonly sourceField: TSourceField;\n readonly destField: TDestField;\n readonly destSchema: TDest['name'];\n readonly cardinality: 'many';\n};\n\ntype OneConnection<TSourceField, TDestField, TDest extends TableSchema> = {\n readonly sourceField: TSourceField;\n readonly destField: TDestField;\n readonly destSchema: TDest['name'];\n readonly cardinality: 'one';\n};\n\ntype Prev = [-1, 0, 1, 2, 3, 4, 5, 6];\n\nexport type PreviousSchema<\n TSource extends TableSchema,\n K extends number,\n TDests extends TableSchema[],\n> = K extends 0 ? TSource : TDests[Prev[K]];\n\nexport type Relationships = {\n name: string; // table name\n relationships: Record<string, Relationship>; // relationships for that table\n};\n\nexport function relationships<\n TSource extends TableSchema,\n TRelationships extends Record<string, Relationship>,\n>(\n table: TableBuilderWithColumns<TSource>,\n cb: (connects: {\n many: <\n TDests extends TableSchema[],\n TSourceFields extends {\n [K in keyof TDests]: (keyof PreviousSchema<\n TSource,\n K & number,\n TDests\n >['columns'] &\n string)[];\n },\n TDestFields extends {\n [K in keyof TDests]: (keyof TDests[K]['columns'] & string)[];\n },\n >(\n ...args: {\n [K in keyof TDests]: ConnectArg<\n TSourceFields[K],\n TDestFields[K],\n TDests[K]\n >;\n }\n ) => {\n [K in keyof TDests]: ManyConnection<\n TSourceFields[K],\n TDestFields[K],\n TDests[K]\n >;\n };\n one: <\n TDests extends TableSchema[],\n TSourceFields extends {\n [K in keyof TDests]: (keyof PreviousSchema<\n TSource,\n K & number,\n TDests\n >['columns'] &\n string)[];\n },\n TDestFields extends {\n [K in keyof TDests]: (keyof TDests[K]['columns'] & string)[];\n },\n >(\n ...args: {\n [K in keyof TDests]: ConnectArg<\n TSourceFields[K],\n TDestFields[K],\n TDests[K]\n >;\n }\n ) => {\n [K in keyof TDests]: OneConnection<\n TSourceFields[K],\n TDestFields[K],\n TDests[K]\n >;\n };\n }) => TRelationships,\n): {name: TSource['name']; relationships: TRelationships} {\n const relationships = cb({many, one} as any);\n\n return {\n name: table.schema.name,\n relationships,\n };\n}\n\nfunction many(\n ...args: readonly ConnectArg<any, any, TableSchema>[]\n): ManyConnection<any, any, any>[] {\n return args.map(arg => ({\n sourceField: arg.sourceField,\n destField: arg.destField,\n destSchema: arg.destSchema.schema.name,\n cardinality: 'many',\n }));\n}\n\nfunction one(\n ...args: readonly ConnectArg<any, any, TableSchema>[]\n): OneConnection<any, any, any>[] {\n return args.map(arg => ({\n sourceField: arg.sourceField,\n destField: arg.destField,\n destSchema: arg.destSchema.schema.name,\n cardinality: 'one',\n }));\n}\n", "import type {AST, System} from '../../../zero-protocol/src/ast.ts';\nimport type {Schema} from '../../../zero-schema/src/builder/schema-builder.ts';\nimport type {Format} from '../ivm/view.ts';\nimport {ExpressionBuilder} from './expression.ts';\nimport type {CustomQueryID} from './named.ts';\nimport type {QueryDelegate} from './query-delegate.ts';\nimport {AbstractQuery, defaultFormat, newQuerySymbol} from './query-impl.ts';\nimport type {HumanReadable, PullRow, Query} from './query.ts';\nimport type {TypedView} from './typed-view.ts';\n\nexport function staticQuery<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n>(schema: TSchema, tableName: TTable): Query<TSchema, TTable> {\n return new StaticQuery<TSchema, TTable>(\n schema,\n tableName,\n {table: tableName},\n defaultFormat,\n );\n}\n\n/**\n * A query that cannot be run.\n * Only serves to generate ASTs.\n */\nexport class StaticQuery<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn = PullRow<TTable, TSchema>,\n> extends AbstractQuery<TSchema, TTable, TReturn> {\n constructor(\n schema: TSchema,\n tableName: TTable,\n ast: AST,\n format: Format,\n system: System = 'permissions',\n customQueryID?: CustomQueryID | undefined,\n currentJunction?: string | undefined,\n ) {\n super(\n undefined,\n schema,\n tableName,\n ast,\n format,\n system,\n customQueryID,\n currentJunction,\n );\n }\n\n expressionBuilder() {\n return new ExpressionBuilder(this._exists);\n }\n\n protected [newQuerySymbol]<\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n >(\n _delegate: QueryDelegate | undefined,\n schema: TSchema,\n tableName: TTable,\n ast: AST,\n format: Format,\n customQueryID: CustomQueryID | undefined,\n currentJunction: string | undefined,\n ): StaticQuery<TSchema, TTable, TReturn> {\n return new StaticQuery(\n schema,\n tableName,\n ast,\n format,\n 'permissions',\n customQueryID,\n currentJunction,\n );\n }\n\n get ast() {\n return this._completeAst();\n }\n\n materialize(): TypedView<HumanReadable<TReturn>> {\n throw new Error('StaticQuery cannot be materialized');\n }\n\n run(): Promise<HumanReadable<TReturn>> {\n return Promise.reject(new Error('StaticQuery cannot be run'));\n }\n\n preload(): {\n cleanup: () => void;\n complete: Promise<void>;\n } {\n throw new Error('StaticQuery cannot be preloaded');\n }\n}\n", "import {assert} from '../../shared/src/asserts.ts';\nimport {\n mapCondition,\n toStaticParam,\n type Condition,\n type Parameter,\n} from '../../zero-protocol/src/ast.ts';\nimport type {ExpressionBuilder} from '../../zql/src/query/expression.ts';\nimport {defaultFormat, staticParam} from '../../zql/src/query/query-impl.ts';\nimport type {Query} from '../../zql/src/query/query.ts';\nimport {StaticQuery} from '../../zql/src/query/static-query.ts';\nimport type {Schema} from './builder/schema-builder.ts';\nimport type {\n AssetPermissions as CompiledAssetPermissions,\n PermissionsConfig as CompiledPermissionsConfig,\n} from './compiled-permissions.ts';\nimport {clientToServer, NameMapper} from './name-mapper.ts';\n\nexport const ANYONE_CAN = [\n (_: unknown, eb: ExpressionBuilder<Schema, never>) => eb.and(),\n];\n\n/**\n * @deprecated Use {@link ANYONE_CAN} instead.\n */\nexport const ANYONE_CAN_DO_ANYTHING = {\n row: {\n select: ANYONE_CAN,\n insert: ANYONE_CAN,\n update: {\n preMutation: ANYONE_CAN,\n postMutation: ANYONE_CAN,\n },\n delete: ANYONE_CAN,\n },\n};\n\nexport const NOBODY_CAN = [];\n\nexport type Anchor = 'authData' | 'preMutationRow';\n\nexport type Queries<TSchema extends Schema> = {\n [K in keyof TSchema['tables']]: Query<Schema, K & string>;\n};\n\nexport type PermissionRule<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n> = (\n authData: TAuthDataShape,\n eb: ExpressionBuilder<TSchema, TTable>,\n) => Condition;\n\nexport type AssetPermissions<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n> = {\n // Why an array of rules?: https://github.com/rocicorp/mono/pull/3184/files#r1869680716\n select?: PermissionRule<TAuthDataShape, TSchema, TTable>[] | undefined;\n /**\n * @deprecated Use Mutators instead.\n * @see {@link https://zero.rocicorp.dev/docs/writing-data}\n */\n insert?: PermissionRule<TAuthDataShape, TSchema, TTable>[] | undefined;\n /**\n * @deprecated Use Mutators instead.\n * @see {@link https://zero.rocicorp.dev/docs/writing-data}\n */\n update?:\n | {\n preMutation?: PermissionRule<TAuthDataShape, TSchema, TTable>[];\n postMutation?: PermissionRule<TAuthDataShape, TSchema, TTable>[];\n }\n | undefined;\n /**\n * @deprecated Use Mutators instead.\n * @see {@link https://zero.rocicorp.dev/docs/writing-data}\n */\n delete?: PermissionRule<TAuthDataShape, TSchema, TTable>[] | undefined;\n};\n\nexport type PermissionsConfig<TAuthDataShape, TSchema extends Schema> = {\n [K in keyof TSchema['tables']]?: {\n row?: AssetPermissions<TAuthDataShape, TSchema, K & string> | undefined;\n cell?:\n | {\n [C in keyof TSchema['tables'][K]['columns']]?: Omit<\n AssetPermissions<TAuthDataShape, TSchema, K & string>,\n 'cell'\n >;\n }\n | undefined;\n };\n};\n\nexport async function definePermissions<TAuthDataShape, TSchema extends Schema>(\n schema: TSchema,\n definer: () =>\n | Promise<PermissionsConfig<TAuthDataShape, TSchema>>\n | PermissionsConfig<TAuthDataShape, TSchema>,\n): Promise<CompiledPermissionsConfig | undefined> {\n const expressionBuilders = {} as Record<\n string,\n ExpressionBuilder<Schema, string>\n >;\n for (const name of Object.keys(schema.tables)) {\n expressionBuilders[name] = new StaticQuery(\n schema,\n name,\n {table: name},\n defaultFormat,\n ).expressionBuilder();\n }\n\n const config = await definer();\n return compilePermissions(schema, config, expressionBuilders);\n}\n\nfunction compilePermissions<TAuthDataShape, TSchema extends Schema>(\n schema: TSchema,\n authz: PermissionsConfig<TAuthDataShape, TSchema> | undefined,\n expressionBuilders: Record<string, ExpressionBuilder<Schema, string>>,\n): CompiledPermissionsConfig | undefined {\n if (!authz) {\n return undefined;\n }\n const nameMapper = clientToServer(schema.tables);\n const ret: CompiledPermissionsConfig = {tables: {}};\n for (const [tableName, tableConfig] of Object.entries(authz)) {\n const serverName = schema.tables[tableName].serverName ?? tableName;\n ret.tables[serverName] = {\n row: compileRowConfig(\n nameMapper,\n tableName,\n tableConfig.row,\n expressionBuilders[tableName],\n ),\n cell: compileCellConfig(\n nameMapper,\n tableName,\n tableConfig.cell,\n expressionBuilders[tableName],\n ),\n };\n }\n\n return ret;\n}\n\nfunction compileRowConfig<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n>(\n clientToServer: NameMapper,\n tableName: TTable,\n rowRules: AssetPermissions<TAuthDataShape, TSchema, TTable> | undefined,\n expressionBuilder: ExpressionBuilder<TSchema, TTable>,\n): CompiledAssetPermissions | undefined {\n if (!rowRules) {\n return undefined;\n }\n return {\n select: compileRules(\n clientToServer,\n tableName,\n rowRules.select,\n expressionBuilder,\n ),\n insert: compileRules(\n clientToServer,\n tableName,\n rowRules.insert,\n expressionBuilder,\n ),\n update: {\n preMutation: compileRules(\n clientToServer,\n tableName,\n rowRules.update?.preMutation,\n expressionBuilder,\n ),\n postMutation: compileRules(\n clientToServer,\n tableName,\n rowRules.update?.postMutation,\n expressionBuilder,\n ),\n },\n delete: compileRules(\n clientToServer,\n tableName,\n rowRules.delete,\n expressionBuilder,\n ),\n };\n}\n\n/**\n * What is this \"allow\" and why are permissions policies an array of rules?\n *\n * Please read: https://github.com/rocicorp/mono/pull/3184/files#r1869680716\n */\nfunction compileRules<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n>(\n clientToServer: NameMapper,\n tableName: TTable,\n rules: PermissionRule<TAuthDataShape, TSchema, TTable>[] | undefined,\n expressionBuilder: ExpressionBuilder<TSchema, TTable>,\n): ['allow', Condition][] | undefined {\n if (!rules) {\n return undefined;\n }\n\n return rules.map(rule => {\n const cond = rule(authDataRef as TAuthDataShape, expressionBuilder);\n return ['allow', mapCondition(cond, tableName, clientToServer)] as const;\n });\n}\n\nfunction compileCellConfig<\n TAuthDataShape,\n TSchema extends Schema,\n TTable extends keyof TSchema['tables'] & string,\n>(\n clientToServer: NameMapper,\n tableName: TTable,\n cellRules:\n | Record<string, AssetPermissions<TAuthDataShape, TSchema, TTable>>\n | undefined,\n expressionBuilder: ExpressionBuilder<TSchema, TTable>,\n): Record<string, CompiledAssetPermissions> | undefined {\n if (!cellRules) {\n return undefined;\n }\n const ret: Record<string, CompiledAssetPermissions> = {};\n for (const [columnName, rules] of Object.entries(cellRules)) {\n ret[columnName] = {\n select: compileRules(\n clientToServer,\n tableName,\n rules.select,\n expressionBuilder,\n ),\n insert: compileRules(\n clientToServer,\n tableName,\n rules.insert,\n expressionBuilder,\n ),\n update: {\n preMutation: compileRules(\n clientToServer,\n tableName,\n rules.update?.preMutation,\n expressionBuilder,\n ),\n postMutation: compileRules(\n clientToServer,\n tableName,\n rules.update?.postMutation,\n expressionBuilder,\n ),\n },\n delete: compileRules(\n clientToServer,\n tableName,\n rules.delete,\n expressionBuilder,\n ),\n };\n }\n return ret;\n}\n\nclass CallTracker {\n readonly #anchor: Anchor;\n readonly #path: string[];\n constructor(anchor: Anchor, path: string[]) {\n this.#anchor = anchor;\n this.#path = path;\n }\n\n get(target: {[toStaticParam]: () => Parameter}, prop: string | symbol) {\n if (prop === toStaticParam) {\n return target[toStaticParam];\n }\n assert(typeof prop === 'string');\n const path = [...this.#path, prop];\n return new Proxy(\n {\n [toStaticParam]: () => staticParam(this.#anchor, path),\n },\n new CallTracker(this.#anchor, path),\n );\n }\n}\n\nfunction baseTracker(anchor: Anchor) {\n return new Proxy(\n {\n [toStaticParam]: () => {\n throw new Error('no JWT field specified');\n },\n },\n new CallTracker(anchor, []),\n );\n}\n\nexport const authDataRef = baseTracker('authData');\nexport const preMutationRowRef = baseTracker('preMutationRow');\n", "export function escapeLike(val: string) {\n return val.replace(/[%_]/g, '\\\\$&');\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport type {Schema} from '../../../zero-schema/src/builder/schema-builder.ts';\nimport type {SchemaQuery} from '../mutate/custom.ts';\nimport {newQuery} from './query-impl.ts';\nimport type {Query} from './query.ts';\n\nexport type QueryFn<\n TContext,\n TTakesContext extends boolean,\n TArg extends ReadonlyJSONValue[],\n TReturnQuery extends Query<any, any, any>,\n> = TTakesContext extends false\n ? {(...args: TArg): TReturnQuery}\n : {(context: TContext, ...args: TArg): TReturnQuery};\n\nexport type SyncedQuery<\n TName extends string,\n TContext,\n TTakesContext extends boolean,\n TArg extends ReadonlyJSONValue[],\n TReturnQuery extends Query<any, any, any>,\n> = QueryFn<TContext, TTakesContext, TArg, TReturnQuery> & {\n queryName: TName;\n parse: ParseFn<TArg> | undefined;\n takesContext: TTakesContext;\n};\n\nfunction normalizeParser<T extends ReadonlyJSONValue[]>(\n parser: ParseFn<T> | HasParseFn<T> | undefined,\n): ParseFn<T> | undefined {\n if (parser) {\n if ('parse' in parser) {\n return parser.parse.bind(parser);\n }\n return parser;\n }\n return undefined;\n}\n\nexport function syncedQuery<\n TName extends string,\n TArg extends ReadonlyJSONValue[],\n TReturnQuery extends Query<any, any, any>,\n>(\n name: TName,\n parser: ParseFn<TArg> | HasParseFn<TArg> | undefined,\n fn: QueryFn<unknown, false, TArg, TReturnQuery>,\n): SyncedQuery<TName, unknown, false, TArg, TReturnQuery> {\n const impl = syncedQueryImpl(name, fn, false);\n const ret: any = (...args: TArg) => impl(undefined, args);\n ret.queryName = name;\n ret.parse = normalizeParser(parser);\n ret.takesContext = false;\n return ret;\n}\n\nexport function syncedQueryWithContext<\n TName extends string,\n TContext,\n TArg extends ReadonlyJSONValue[],\n TReturnQuery extends Query<any, any, any>,\n>(\n name: TName,\n parser: ParseFn<TArg> | HasParseFn<TArg> | undefined,\n fn: QueryFn<TContext, true, TArg, TReturnQuery>,\n): SyncedQuery<TName, TContext, true, TArg, TReturnQuery> {\n const impl = syncedQueryImpl(name, fn, true);\n const ret: any = (context: TContext, ...args: TArg) => impl(context, args);\n ret.queryName = name;\n ret.parse = normalizeParser(parser);\n ret.takesContext = true;\n return ret;\n}\n\nfunction syncedQueryImpl<\n TName extends string,\n TContext,\n TArg extends ReadonlyJSONValue[],\n TReturnQuery extends Query<any, any, any>,\n>(name: TName, fn: any, takesContext: boolean) {\n return (context: TContext, args: TArg) => {\n const q = takesContext ? fn(context, ...args) : fn(...args);\n return q.nameAndArgs(name, args) as TReturnQuery;\n };\n}\n\nexport function withValidation<T extends SyncedQuery<any, any, any, any, any>>(\n fn: T,\n): T extends SyncedQuery<infer N, infer C, any, any, infer R>\n ? SyncedQuery<N, C, true, ReadonlyJSONValue[], R>\n : never {\n if (!fn.parse) {\n throw new Error('ret does not have a parse function defined');\n }\n const ret: any = (context: unknown, ...args: unknown[]) => {\n const f = fn as any;\n const parsed = f.parse(args);\n return f.takesContext ? f(context, ...parsed) : f(...parsed);\n };\n ret.queryName = fn.queryName;\n ret.parse = fn.parse;\n ret.takesContext = true;\n\n return ret;\n}\n\nexport type ParseFn<T extends ReadonlyJSONValue[]> = (args: unknown[]) => T;\n\nexport type HasParseFn<T extends ReadonlyJSONValue[]> = {\n parse: ParseFn<T>;\n};\n\nexport type Parser<T extends ReadonlyJSONValue[]> = ParseFn<T> | HasParseFn<T>;\n\nexport type CustomQueryID = {\n name: string;\n args: ReadonlyArray<ReadonlyJSONValue>;\n};\n\n/**\n * Returns a set of query builders for the given schema.\n */\nexport function createBuilder<S extends Schema>(s: S): SchemaQuery<S> {\n return makeQueryBuilders(s) as SchemaQuery<S>;\n}\n\n/**\n * This produces the query builders for a given schema.\n * For use in Zero on the server to process custom queries.\n */\nfunction makeQueryBuilders<S extends Schema>(schema: S): SchemaQuery<S> {\n return new Proxy(\n {},\n {\n get: (\n target: Record<\n string,\n Omit<Query<S, string, any>, 'materialize' | 'preload'>\n >,\n prop: string,\n ) => {\n if (prop in target) {\n return target[prop];\n }\n\n if (!(prop in schema.tables)) {\n throw new Error(`Table ${prop} does not exist in schema`);\n }\n\n const q = newQuery(undefined, schema, prop);\n target[prop] = q;\n return q;\n },\n },\n ) as SchemaQuery<S>;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["table", "relationships", "clientToServer"]
7
7
  }
@@ -8666,7 +8666,7 @@ function makeMessage(message, context, logLevel) {
8666
8666
  }
8667
8667
 
8668
8668
  // ../zero-client/src/client/version.ts
8669
- var version2 = "0.23.2025082300";
8669
+ var version2 = "0.23.2025082500";
8670
8670
 
8671
8671
  // ../zero-client/src/client/log-options.ts
8672
8672
  var LevelFilterLogSink = class {
@@ -11605,4 +11605,4 @@ export {
11605
11605
  update_needed_reason_type_enum_exports,
11606
11606
  Zero
11607
11607
  };
11608
- //# sourceMappingURL=chunk-4AQ764RO.js.map
11608
+ //# sourceMappingURL=chunk-XAUWMRGH.js.map
package/out/react.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Zero
3
- } from "./chunk-4AQ764RO.js";
3
+ } from "./chunk-XAUWMRGH.js";
4
4
  import "./chunk-MKB4RXL3.js";
5
5
  import {
6
6
  DEFAULT_TTL_MS,
package/out/solid.js CHANGED
@@ -1,7 +1,7 @@
1
- import "./chunk-CCP3CHEV.js";
1
+ import "./chunk-NQQYHD2U.js";
2
2
  import {
3
3
  Zero
4
- } from "./chunk-4AQ764RO.js";
4
+ } from "./chunk-XAUWMRGH.js";
5
5
  import "./chunk-MKB4RXL3.js";
6
6
  import {
7
7
  DEFAULT_TTL_MS,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rocicorp/zero",
3
- "version": "0.23.2025082300",
3
+ "version": "0.23.2025082500",
4
4
  "description": "Zero is a web framework for serverless web development.",
5
5
  "author": "Rocicorp, Inc.",
6
6
  "repository": {
package/out/zero.js CHANGED
@@ -8,9 +8,8 @@ import {
8
8
  relationships,
9
9
  syncedQuery,
10
10
  syncedQueryWithContext,
11
- withContext,
12
11
  withValidation
13
- } from "./chunk-CCP3CHEV.js";
12
+ } from "./chunk-NQQYHD2U.js";
14
13
  import {
15
14
  IDBNotFoundError,
16
15
  TransactionClosedError,
@@ -30,7 +29,7 @@ import {
30
29
  transformRequestMessageSchema,
31
30
  transformResponseMessageSchema,
32
31
  update_needed_reason_type_enum_exports
33
- } from "./chunk-4AQ764RO.js";
32
+ } from "./chunk-XAUWMRGH.js";
34
33
  import "./chunk-MKB4RXL3.js";
35
34
  import {
36
35
  applyChange
@@ -66,7 +65,6 @@ export {
66
65
  table,
67
66
  transformRequestMessageSchema,
68
67
  transformResponseMessageSchema,
69
- withContext,
70
68
  withValidation
71
69
  };
72
70
  //# sourceMappingURL=zero.js.map
@@ -2,52 +2,30 @@ import type { ReadonlyJSONValue } from '../../../shared/src/json.ts';
2
2
  import type { Schema } from '../../../zero-schema/src/builder/schema-builder.ts';
3
3
  import type { SchemaQuery } from '../mutate/custom.ts';
4
4
  import type { Query } from './query.ts';
5
- export type NamedQuery<TArg extends ReadonlyArray<ReadonlyJSONValue> = ReadonlyArray<ReadonlyJSONValue>, TReturnQuery extends Query<any, any, any> = Query<any, any, any>> = {
5
+ export type QueryFn<TContext, TTakesContext extends boolean, TArg extends ReadonlyJSONValue[], TReturnQuery extends Query<any, any, any>> = TTakesContext extends false ? {
6
6
  (...args: TArg): TReturnQuery;
7
- };
8
- export type NamedQueryWithContext<TContext, TArg extends ReadonlyArray<ReadonlyJSONValue> = ReadonlyArray<ReadonlyJSONValue>, TReturnQuery extends Query<any, any, any> = Query<any, any, any>> = {
7
+ } : {
9
8
  (context: TContext, ...args: TArg): TReturnQuery;
10
9
  };
11
- export type SyncedQuery<TArg extends ReadonlyArray<ReadonlyJSONValue> = ReadonlyArray<ReadonlyJSONValue>, TReturnQuery extends Query<any, any, any> = Query<any, any, any>> = NamedQuery<TArg, TReturnQuery> & {
12
- queryName: string;
13
- takesContext: boolean;
14
- validator?: Validator<TArg> | undefined;
10
+ export type SyncedQuery<TName extends string, TContext, TTakesContext extends boolean, TArg extends ReadonlyJSONValue[], TReturnQuery extends Query<any, any, any>> = QueryFn<TContext, TTakesContext, TArg, TReturnQuery> & {
11
+ queryName: TName;
12
+ parse: ParseFn<TArg> | undefined;
13
+ takesContext: TTakesContext;
15
14
  };
16
- export type SyncedQueryWithContext<TContext, TArg extends ReadonlyArray<ReadonlyJSONValue> = ReadonlyArray<ReadonlyJSONValue>, TReturnQuery extends Query<any, any, any> = Query<any, any, any>> = NamedQueryWithContext<TContext, TArg, TReturnQuery> & {
17
- queryName: string;
18
- takesContext: true;
19
- validator?: Validator<TArg> | undefined;
15
+ export declare function syncedQuery<TName extends string, TArg extends ReadonlyJSONValue[], TReturnQuery extends Query<any, any, any>>(name: TName, parser: ParseFn<TArg> | HasParseFn<TArg> | undefined, fn: QueryFn<unknown, false, TArg, TReturnQuery>): SyncedQuery<TName, unknown, false, TArg, TReturnQuery>;
16
+ export declare function syncedQueryWithContext<TName extends string, TContext, TArg extends ReadonlyJSONValue[], TReturnQuery extends Query<any, any, any>>(name: TName, parser: ParseFn<TArg> | HasParseFn<TArg> | undefined, fn: QueryFn<TContext, true, TArg, TReturnQuery>): SyncedQuery<TName, TContext, true, TArg, TReturnQuery>;
17
+ export declare function withValidation<T extends SyncedQuery<any, any, any, any, any>>(fn: T): T extends SyncedQuery<infer N, infer C, any, any, infer R> ? SyncedQuery<N, C, true, ReadonlyJSONValue[], R> : never;
18
+ export type ParseFn<T extends ReadonlyJSONValue[]> = (args: unknown[]) => T;
19
+ export type HasParseFn<T extends ReadonlyJSONValue[]> = {
20
+ parse: ParseFn<T>;
20
21
  };
21
- export type ValidatedSyncedQuery<TReturnQuery extends Query<any, any, any>> = (...args: unknown[]) => TReturnQuery;
22
- export type ValidatedSyncedQueryWithContext<TContext, TReturnQuery extends Query<any, any, any>> = (context: TContext, ...args: unknown[]) => TReturnQuery;
22
+ export type Parser<T extends ReadonlyJSONValue[]> = ParseFn<T> | HasParseFn<T>;
23
23
  export type CustomQueryID = {
24
24
  name: string;
25
25
  args: ReadonlyArray<ReadonlyJSONValue>;
26
26
  };
27
- export type Validator<T extends ReadonlyArray<ReadonlyJSONValue>> = (args: readonly unknown[]) => T | readonly [...T];
28
27
  /**
29
28
  * Returns a set of query builders for the given schema.
30
29
  */
31
30
  export declare function createBuilder<S extends Schema>(s: S): SchemaQuery<S>;
32
- /**
33
- * Tags a query with a name and arguments.
34
- * Named queries are run on both the client and server.
35
- * The server will receive the name and arguments for a named query and can
36
- * either run the same query the client did or a completely different one.
37
- *
38
- * The main use case here is to apply permissions to the requested query or
39
- * to expand the scope of the query to include additional data. E.g., for preloading.
40
- */
41
- export declare function syncedQuery<TArg extends ReadonlyArray<ReadonlyJSONValue>, TReturnQuery extends Query<any, any, any>>(name: string, validator: Validator<TArg>, fn: NamedQuery<TArg, TReturnQuery>): SyncedQuery<TArg, TReturnQuery> & {
42
- validator: Validator<TArg>;
43
- };
44
- export declare function syncedQuery<TArg extends ReadonlyArray<ReadonlyJSONValue>, TReturnQuery extends Query<any, any, any>>(name: string, fn: NamedQuery<TArg, TReturnQuery>): SyncedQuery<TArg, TReturnQuery>;
45
- export declare function syncedQueryWithContext<TContext, TArg extends ReadonlyArray<ReadonlyJSONValue>, TReturnQuery extends Query<any, any, any>>(name: string, validator: Validator<TArg>, fn: NamedQueryWithContext<TContext, TArg, TReturnQuery>): SyncedQueryWithContext<TContext, TArg, TReturnQuery> & {
46
- validator: Validator<TArg>;
47
- };
48
- export declare function syncedQueryWithContext<TContext, TArg extends ReadonlyArray<ReadonlyJSONValue>, TReturnQuery extends Query<any, any, any>>(name: string, fn: NamedQueryWithContext<TContext, TArg, TReturnQuery>): SyncedQueryWithContext<TContext, TArg, TReturnQuery>;
49
- export declare function withContext<TArg extends ReadonlyArray<ReadonlyJSONValue>, TReturnQuery extends Query<any, any, any>, TContext>(fn: SyncedQueryWithContext<TContext, TArg, TReturnQuery>): SyncedQueryWithContext<TContext, TArg, TReturnQuery>;
50
- export declare function withContext<TArg extends ReadonlyArray<ReadonlyJSONValue>, TReturnQuery extends Query<any, any, any>>(fn: SyncedQuery<TArg, TReturnQuery>): SyncedQueryWithContext<any, TArg, TReturnQuery>;
51
- export declare function withValidation<TReturnQuery extends Query<any, any, any>, TContext>(fn: SyncedQueryWithContext<TContext, any, TReturnQuery>): ValidatedSyncedQueryWithContext<TContext, TReturnQuery>;
52
- export declare function withValidation<TReturnQuery extends Query<any, any, any>>(fn: SyncedQuery<any, TReturnQuery>): ValidatedSyncedQuery<TReturnQuery>;
53
31
  //# sourceMappingURL=named.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"named.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/named.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"named.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/named.ts"],"names":[],"mappings":"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"}
@@ -1,66 +1,54 @@
1
1
  import { newQuery } from "./query-impl.js";
2
- /**
3
- * Returns a set of query builders for the given schema.
4
- */
5
- export function createBuilder(s) {
6
- return makeQueryBuilders(s);
7
- }
8
- export function syncedQuery(name, validatorOrQueryFn, maybeQueryFn) {
9
- let fn;
10
- let validator;
11
- if (maybeQueryFn === undefined) {
12
- fn = validatorOrQueryFn;
13
- }
14
- else {
15
- fn = maybeQueryFn;
16
- validator = validatorOrQueryFn;
2
+ function normalizeParser(parser) {
3
+ if (parser) {
4
+ if ('parse' in parser) {
5
+ return parser.parse.bind(parser);
6
+ }
7
+ return parser;
17
8
  }
18
- const ret = ((...args) => fn(...args).nameAndArgs(name, args));
19
- ret.takesContext = false;
20
- ret.validator = validator;
9
+ return undefined;
10
+ }
11
+ export function syncedQuery(name, parser, fn) {
12
+ const impl = syncedQueryImpl(name, fn, false);
13
+ const ret = (...args) => impl(undefined, args);
21
14
  ret.queryName = name;
15
+ ret.parse = normalizeParser(parser);
16
+ ret.takesContext = false;
22
17
  return ret;
23
18
  }
24
- export function syncedQueryWithContext(name, queryOrValidator, query) {
25
- let fn;
26
- let validator;
27
- if (query === undefined) {
28
- fn = queryOrValidator;
29
- }
30
- else {
31
- fn = query;
32
- validator = queryOrValidator;
33
- }
34
- return contextualizedSyncedQuery(name, validator, fn);
35
- }
36
- function contextualizedSyncedQuery(name, validator, fn) {
37
- const ret = ((context, ...args) => fn(context, ...args).nameAndArgs(name, args));
38
- ret.takesContext = true;
39
- if (validator) {
40
- ret.validator = validator;
41
- }
19
+ export function syncedQueryWithContext(name, parser, fn) {
20
+ const impl = syncedQueryImpl(name, fn, true);
21
+ const ret = (context, ...args) => impl(context, args);
42
22
  ret.queryName = name;
23
+ ret.parse = normalizeParser(parser);
24
+ ret.takesContext = true;
43
25
  return ret;
44
26
  }
45
- export function withContext(fn) {
46
- if (fn.takesContext) {
47
- return fn;
48
- }
49
- const contextualized = ((_context, ...args) => fn(...args).nameAndArgs(fn.queryName, args));
50
- contextualized.takesContext = true;
51
- contextualized.queryName = fn.queryName;
52
- contextualized.validator = fn.validator;
53
- return contextualized;
27
+ function syncedQueryImpl(name, fn, takesContext) {
28
+ return (context, args) => {
29
+ const q = takesContext ? fn(context, ...args) : fn(...args);
30
+ return q.nameAndArgs(name, args);
31
+ };
54
32
  }
55
33
  export function withValidation(fn) {
56
- const { validator, takesContext } = fn;
57
- if (validator) {
58
- if (takesContext) {
59
- return ((context, ...args) => fn(context, ...validator(args)));
60
- }
61
- return ((...args) => fn(...validator(args)));
34
+ if (!fn.parse) {
35
+ throw new Error('ret does not have a parse function defined');
62
36
  }
63
- throw new Error(fn.name + ' does not have a validator defined');
37
+ const ret = (context, ...args) => {
38
+ const f = fn;
39
+ const parsed = f.parse(args);
40
+ return f.takesContext ? f(context, ...parsed) : f(...parsed);
41
+ };
42
+ ret.queryName = fn.queryName;
43
+ ret.parse = fn.parse;
44
+ ret.takesContext = true;
45
+ return ret;
46
+ }
47
+ /**
48
+ * Returns a set of query builders for the given schema.
49
+ */
50
+ export function createBuilder(s) {
51
+ return makeQueryBuilders(s);
64
52
  }
65
53
  /**
66
54
  * This produces the query builders for a given schema.
@@ -1 +1 @@
1
- {"version":3,"file":"named.js","sourceRoot":"","sources":["../../../../../zql/src/query/named.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AA0DzC;;GAEG;AACH,MAAM,UAAU,aAAa,CAAmB,CAAI;IAClD,OAAO,iBAAiB,CAAC,CAAC,CAAmB,CAAC;AAChD,CAAC;AA0BD,MAAM,UAAU,WAAW,CAIzB,IAAY,EACZ,kBAAoE,EACpE,YAAyD;IAEzD,IAAI,EAAkC,CAAC;IACvC,IAAI,SAAsC,CAAC;IAC3C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,EAAE,GAAG,kBAAoD,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,EAAE,GAAG,YAAY,CAAC;QAClB,SAAS,GAAG,kBAAqC,CAAC;IACpD,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAU,EAAE,EAAE,CAC7B,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAoC,CAAC;IAC1E,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;IACzB,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC;AAqBD,MAAM,UAAU,sBAAsB,CAKpC,IAAY,EACZ,gBAEmB,EACnB,KAAuE;IAEvE,IAAI,EAAuD,CAAC;IAC5D,IAAI,SAAsC,CAAC;IAC3C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,EAAE,GAAG,gBAIJ,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,EAAE,GAAG,KAAK,CAAC;QACX,SAAS,GAAG,gBAAmC,CAAC;IAClD,CAAC;IAED,OAAO,yBAAyB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,yBAAyB,CAKhC,IAAY,EACZ,SAAsC,EACtC,EAAuD;IAEvD,MAAM,GAAG,GAAG,CAAC,CAAC,OAAiB,EAAE,GAAG,IAAU,EAAE,EAAE,CAChD,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAI7C,CAAC;IAEF,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC;IACxB,IAAI,SAAS,EAAE,CAAC;QACd,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IACD,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;IAErB,OAAO,GAAG,CAAC;AACb,CAAC;AAeD,MAAM,UAAU,WAAW,CAKzB,EAEwD;IAExD,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,EAA0D,CAAC;IACpE,CAAC;IAED,MAAM,cAAc,GAAG,CAAC,CAAC,QAAkB,EAAE,GAAG,IAAU,EAAE,EAAE,CAC5D,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAI5C,CAAC;IACF,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC;IACnC,cAAc,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;IACxC,cAAc,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;IAExC,OAAO,cAAc,CAAC;AACxB,CAAC;AAWD,MAAM,UAAU,cAAc,CAI5B,EAMK;IAIL,MAAM,EAAC,SAAS,EAAE,YAAY,EAAC,GAAG,EAAE,CAAC;IAErC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,CAEzB,EAKD,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAG/B,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAClB,EAAE,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAuC,CAAC;IAClE,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG,oCAAoC,CAAC,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAmB,MAAS;IACpD,OAAO,IAAI,KAAK,CACd,EAAE,EACF;QACE,GAAG,EAAE,CACH,MAGC,EACD,IAAY,EACZ,EAAE;YACF,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YAED,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,2BAA2B,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,CAAC,CAAC;QACX,CAAC;KACF,CACgB,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"named.js","sourceRoot":"","sources":["../../../../../zql/src/query/named.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AAwBzC,SAAS,eAAe,CACtB,MAA8C;IAE9C,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,WAAW,CAKzB,IAAW,EACX,MAAoD,EACpD,EAA+C;IAE/C,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAQ,CAAC,GAAG,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC1D,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACpC,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;IACzB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,sBAAsB,CAMpC,IAAW,EACX,MAAoD,EACpD,EAA+C;IAE/C,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAQ,CAAC,OAAiB,EAAE,GAAG,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3E,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACpC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC;IACxB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAKtB,IAAW,EAAE,EAAO,EAAE,YAAqB;IAC3C,OAAO,CAAC,OAAiB,EAAE,IAAU,EAAE,EAAE;QACvC,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5D,OAAO,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAiB,CAAC;IACnD,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,EAAK;IAIL,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,GAAG,GAAQ,CAAC,OAAgB,EAAE,GAAG,IAAe,EAAE,EAAE;QACxD,MAAM,CAAC,GAAG,EAAS,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IAC/D,CAAC,CAAC;IACF,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;IAC7B,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;IACrB,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC;IAExB,OAAO,GAAG,CAAC;AACb,CAAC;AAeD;;GAEG;AACH,MAAM,UAAU,aAAa,CAAmB,CAAI;IAClD,OAAO,iBAAiB,CAAC,CAAC,CAAmB,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAmB,MAAS;IACpD,OAAO,IAAI,KAAK,CACd,EAAE,EACF;QACE,GAAG,EAAE,CACH,MAGC,EACD,IAAY,EACZ,EAAE;YACF,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YAED,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,2BAA2B,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,CAAC,CAAC;QACX,CAAC;KACF,CACgB,CAAC;AACtB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rocicorp/zero",
3
- "version": "0.23.2025082300",
3
+ "version": "0.23.2025082500",
4
4
  "description": "Zero is a web framework for serverless web development.",
5
5
  "author": "Rocicorp, Inc.",
6
6
  "repository": {