@rocicorp/zero 0.26.0-canary.0 → 0.26.0-canary.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/out/shared/src/custom-key-map.d.ts +4 -4
  2. package/out/shared/src/custom-key-map.d.ts.map +1 -1
  3. package/out/shared/src/custom-key-map.js.map +1 -1
  4. package/out/shared/src/iterables.d.ts +6 -8
  5. package/out/shared/src/iterables.d.ts.map +1 -1
  6. package/out/shared/src/iterables.js +13 -7
  7. package/out/shared/src/iterables.js.map +1 -1
  8. package/out/shared/src/options.d.ts +1 -0
  9. package/out/shared/src/options.d.ts.map +1 -1
  10. package/out/shared/src/options.js +5 -1
  11. package/out/shared/src/options.js.map +1 -1
  12. package/out/zero/package.json.js +1 -1
  13. package/out/zero/src/zero-cache-dev.js +7 -3
  14. package/out/zero/src/zero-cache-dev.js.map +1 -1
  15. package/out/zero-cache/src/config/zero-config.d.ts +10 -1
  16. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  17. package/out/zero-cache/src/config/zero-config.js +27 -7
  18. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  19. package/out/zero-cache/src/observability/events.d.ts.map +1 -1
  20. package/out/zero-cache/src/observability/events.js +15 -5
  21. package/out/zero-cache/src/observability/events.js.map +1 -1
  22. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  23. package/out/zero-cache/src/server/change-streamer.js +10 -2
  24. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  25. package/out/zero-cache/src/server/syncer.d.ts +1 -0
  26. package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
  27. package/out/zero-cache/src/server/syncer.js +22 -4
  28. package/out/zero-cache/src/server/syncer.js.map +1 -1
  29. package/out/zero-cache/src/services/change-source/custom/change-source.js +0 -4
  30. package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
  31. package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts.map +1 -1
  32. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +1 -10
  33. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
  34. package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts.map +1 -1
  35. package/out/zero-cache/src/services/change-source/pg/schema/init.js +8 -2
  36. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  37. package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts.map +1 -1
  38. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +1 -14
  39. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
  40. package/out/zero-cache/src/services/change-source/replica-schema.d.ts.map +1 -1
  41. package/out/zero-cache/src/services/change-source/replica-schema.js +8 -1
  42. package/out/zero-cache/src/services/change-source/replica-schema.js.map +1 -1
  43. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +1 -1
  44. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
  45. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +5 -3
  46. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  47. package/out/zero-cache/src/services/change-streamer/storer.d.ts +1 -1
  48. package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
  49. package/out/zero-cache/src/services/change-streamer/storer.js +16 -5
  50. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  51. package/out/zero-cache/src/services/life-cycle.d.ts +1 -1
  52. package/out/zero-cache/src/services/life-cycle.d.ts.map +1 -1
  53. package/out/zero-cache/src/services/life-cycle.js.map +1 -1
  54. package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
  55. package/out/zero-cache/src/services/litestream/commands.js +3 -1
  56. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  57. package/out/zero-cache/src/services/litestream/config.yml +1 -0
  58. package/out/zero-cache/src/services/mutagen/mutagen.d.ts +4 -4
  59. package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
  60. package/out/zero-cache/src/services/mutagen/mutagen.js +9 -24
  61. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  62. package/out/zero-cache/src/services/mutagen/pusher.d.ts +1 -2
  63. package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
  64. package/out/zero-cache/src/services/mutagen/pusher.js +51 -12
  65. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  66. package/out/zero-cache/src/services/replicator/change-processor.js +4 -3
  67. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  68. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +3 -2
  69. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts.map +1 -1
  70. package/out/zero-cache/src/services/replicator/schema/change-log.js +36 -31
  71. package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
  72. package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +5 -6
  73. package/out/zero-cache/src/services/view-syncer/client-handler.d.ts.map +1 -1
  74. package/out/zero-cache/src/services/view-syncer/client-handler.js +5 -23
  75. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  76. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
  77. package/out/zero-cache/src/services/view-syncer/cvr-store.js +6 -4
  78. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  79. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +1 -8
  80. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  81. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +2 -11
  82. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  83. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +0 -2
  84. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
  85. package/out/zero-cache/src/services/view-syncer/snapshotter.js +2 -10
  86. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
  87. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +1 -2
  88. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  89. package/out/zero-cache/src/services/view-syncer/view-syncer.js +40 -42
  90. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  91. package/out/zero-cache/src/workers/connect-params.d.ts +0 -1
  92. package/out/zero-cache/src/workers/connect-params.d.ts.map +1 -1
  93. package/out/zero-cache/src/workers/connect-params.js +0 -2
  94. package/out/zero-cache/src/workers/connect-params.js.map +1 -1
  95. package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
  96. package/out/zero-cache/src/workers/replicator.js +2 -5
  97. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  98. package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +1 -1
  99. package/out/zero-cache/src/workers/syncer-ws-message-handler.js +1 -4
  100. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  101. package/out/zero-client/src/client/context.js +1 -0
  102. package/out/zero-client/src/client/context.js.map +1 -1
  103. package/out/zero-client/src/client/options.d.ts +1 -1
  104. package/out/zero-client/src/client/options.js.map +1 -1
  105. package/out/zero-client/src/client/version.js +1 -1
  106. package/out/zero-client/src/client/zero.d.ts +2 -4
  107. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  108. package/out/zero-client/src/client/zero.js +1 -1
  109. package/out/zero-client/src/client/zero.js.map +1 -1
  110. package/out/zero-protocol/src/push.d.ts +7 -0
  111. package/out/zero-protocol/src/push.d.ts.map +1 -1
  112. package/out/zero-protocol/src/push.js +9 -1
  113. package/out/zero-protocol/src/push.js.map +1 -1
  114. package/out/zero-server/src/process-mutations.d.ts +1 -0
  115. package/out/zero-server/src/process-mutations.d.ts.map +1 -1
  116. package/out/zero-server/src/process-mutations.js +41 -2
  117. package/out/zero-server/src/process-mutations.js.map +1 -1
  118. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  119. package/out/zero-server/src/zql-database.js +9 -0
  120. package/out/zero-server/src/zql-database.js.map +1 -1
  121. package/out/zero-solid/src/solid-view.js +1 -0
  122. package/out/zero-solid/src/solid-view.js.map +1 -1
  123. package/out/zero-solid/src/use-query.js +1 -0
  124. package/out/zero-solid/src/use-query.js.map +1 -1
  125. package/out/zql/src/ivm/stream.d.ts.map +1 -1
  126. package/out/zql/src/ivm/stream.js +1 -1
  127. package/out/zql/src/ivm/stream.js.map +1 -1
  128. package/out/zql/src/mutate/mutator.js +4 -4
  129. package/out/zql/src/mutate/mutator.js.map +1 -1
  130. package/out/zql/src/query/create-builder.js +3 -5
  131. package/out/zql/src/query/create-builder.js.map +1 -1
  132. package/out/zql/src/query/query-registry.js +4 -4
  133. package/out/zql/src/query/query-registry.js.map +1 -1
  134. package/package.json +3 -3
  135. package/out/zero-cache/src/types/schema-versions.d.ts +0 -12
  136. package/out/zero-cache/src/types/schema-versions.d.ts.map +0 -1
  137. package/out/zero-cache/src/types/schema-versions.js +0 -28
  138. package/out/zero-cache/src/types/schema-versions.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"mutator.js","sources":["../../../../../zql/src/mutate/mutator.ts"],"sourcesContent":["import type {StandardSchemaV1} from '@standard-schema/spec';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport type {\n DefaultContext,\n DefaultSchema,\n DefaultWrappedTransaction,\n} from '../../../zero-types/src/default-types.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport type {AnyTransaction, Transaction} from './custom.ts';\n\n// ----------------------------------------------------------------------------\n// defineMutator\n// ----------------------------------------------------------------------------\n\nexport type MutatorDefinitionTypes<\n TInput extends ReadonlyJSONValue | undefined,\n TOutput,\n TContext,\n TWrappedTransaction,\n> = 'MutatorDefinition' & {\n readonly $input: TInput;\n readonly $output: TOutput;\n readonly $context: TContext;\n readonly $wrappedTransaction: TWrappedTransaction;\n};\n\nexport type MutatorDefinition<\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TContext = DefaultContext,\n TWrappedTransaction = DefaultWrappedTransaction,\n> = {\n readonly 'fn': MutatorDefinitionFunction<TOutput, TContext, AnyTransaction>;\n readonly 'validator': StandardSchemaV1<TInput, TOutput> | undefined;\n readonly '~': MutatorDefinitionTypes<\n TInput,\n TOutput,\n TContext,\n TWrappedTransaction\n >;\n};\n\n// oxlint-disable-next-line no-explicit-any\nexport type AnyMutatorDefinition = MutatorDefinition<any, any, any, any>;\n\nexport function isMutatorDefinition(f: unknown): f is AnyMutatorDefinition {\n return (\n typeof f === 'object' &&\n f !== null &&\n (f as {['~']?: unknown})['~'] === 'MutatorDefinition'\n );\n}\n\n// Overload for no validator\nexport function defineMutator<\n TInput extends ReadonlyJSONValue | undefined = ReadonlyJSONValue | undefined,\n TSchema extends Schema = DefaultSchema,\n TContext = DefaultContext,\n TWrappedTransaction = DefaultWrappedTransaction,\n>(\n mutator: MutatorDefinitionFunction<\n TInput,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >,\n): MutatorDefinition<TInput, TInput, TContext, TWrappedTransaction>;\n\n// Overload for validator\nexport function defineMutator<\n TInput extends ReadonlyJSONValue | undefined = undefined,\n TOutput extends ReadonlyJSONValue | undefined = TInput,\n TSchema extends Schema = DefaultSchema,\n TContext = DefaultContext,\n TWrappedTransaction = DefaultWrappedTransaction,\n>(\n validator: StandardSchemaV1<TInput, TOutput>,\n mutator: MutatorDefinitionFunction<\n TOutput,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >,\n): MutatorDefinition<TInput, TOutput, TContext, TWrappedTransaction>;\n\n// Implementation\nexport function defineMutator<\n TInput extends ReadonlyJSONValue | undefined = undefined,\n TOutput extends ReadonlyJSONValue | undefined = TInput,\n TSchema extends Schema = DefaultSchema,\n TContext = DefaultContext,\n TWrappedTransaction = DefaultWrappedTransaction,\n>(\n validatorOrMutator:\n | StandardSchemaV1<TInput, TOutput>\n | MutatorDefinitionFunction<\n TOutput,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >,\n mutator?: MutatorDefinitionFunction<\n TOutput,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >,\n): MutatorDefinition<TInput, TOutput, TContext, TWrappedTransaction> {\n let validator: StandardSchemaV1<TInput, TOutput> | undefined;\n let actualMutator: MutatorDefinitionFunction<\n TOutput,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >;\n\n if (typeof validatorOrMutator === 'function') {\n // defineMutator(mutator) - no validator\n validator = undefined;\n actualMutator = validatorOrMutator;\n } else {\n // defineMutator(validator, mutator)\n validator = validatorOrMutator;\n actualMutator = must(mutator);\n }\n\n const mutatorDefinition: MutatorDefinition<\n TInput,\n TOutput,\n TContext,\n TWrappedTransaction\n > = {\n 'fn': actualMutator as MutatorDefinitionFunction<\n TOutput,\n TContext,\n AnyTransaction\n >,\n 'validator': validator,\n '~': 'MutatorDefinition' as unknown as MutatorDefinitionTypes<\n TInput,\n TOutput,\n TContext,\n TWrappedTransaction\n >,\n };\n return mutatorDefinition;\n}\n\n// intentionally not using DefaultSchema, DefaultContext, or DefaultWrappedTransaction\nexport function defineMutatorWithType<\n TSchema extends Schema,\n TContext = unknown,\n TWrappedTransaction = unknown,\n>(): TypedDefineMutator<TSchema, TContext, TWrappedTransaction> {\n return defineMutator;\n}\n\n/**\n * The return type of defineMutatorWithType. A function matching the\n * defineMutator overloads but with Schema, Context, and WrappedTransaction\n * pre-bound.\n *\n * This is used as a workaround to using DefaultTypes (e.g. when using\n * multiple Zero instances).\n */\ntype TypedDefineMutator<\n TSchema extends Schema,\n TContext,\n TWrappedTransaction,\n> = {\n // Without validator\n <TArgs extends ReadonlyJSONValue | undefined>(\n mutator: MutatorDefinitionFunction<\n TArgs,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >,\n ): MutatorDefinition<TArgs, TArgs, TContext, TWrappedTransaction>;\n\n // With validator\n <\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n >(\n validator: StandardSchemaV1<TInput, TOutput>,\n mutator: MutatorDefinitionFunction<\n TOutput,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >,\n ): MutatorDefinition<TInput, TOutput, TContext, TWrappedTransaction>;\n};\n\nexport type MutatorDefinitionFunction<\n TOutput extends ReadonlyJSONValue | undefined,\n TContext,\n TTransaction,\n> = (options: {\n args: TOutput;\n ctx: TContext;\n tx: TTransaction;\n}) => Promise<void>;\n\n// ----------------------------------------------------------------------------\n// Mutator and MutateRequest types\n// ----------------------------------------------------------------------------\n\nexport type MutatorTypes<\n TInput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TContext,\n TWrappedTransaction,\n> = 'Mutator' & {\n readonly $input: TInput;\n readonly $schema: TSchema;\n readonly $context: TContext;\n readonly $wrappedTransaction: TWrappedTransaction;\n};\n\n/**\n * A callable wrapper around a MutatorDefinition, created by `defineMutators()`.\n *\n * Accessed like `mutators.foo.bar`, and called to create a MutateRequest:\n * `mutators.foo.bar(42)` returns a `MutateRequest`.\n *\n * The `fn` property is used for execution and takes raw JSON args (for rebase\n * and server wire format cases) that are validated internally.\n */\nexport type Mutator<\n TInput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema = DefaultSchema,\n TContext = DefaultContext,\n TWrappedTransaction = DefaultWrappedTransaction,\n> = {\n readonly 'mutatorName': string;\n /**\n * Execute the mutation. Args are ReadonlyJSONValue because this is called\n * during rebase (from stored JSON) and on the server (from wire format).\n * Validation happens internally before the recipe function runs.\n */\n readonly 'fn': MutatorDefinitionFunction<\n TInput,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >;\n readonly '~': MutatorTypes<TInput, TSchema, TContext, TWrappedTransaction>;\n} & MutatorCallable<TInput, TSchema, TContext, TWrappedTransaction>;\n\n// Helper type for the callable part of Mutator\n// When TInput is undefined, the function is callable with 0 args\n// When TInput includes undefined (optional), args is optional\n// Otherwise, args is required\ntype MutatorCallable<\n TInput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TContext,\n TWrappedTransaction,\n> = [TInput] extends [undefined]\n ? () => MutateRequest<TInput, TSchema, TContext, TWrappedTransaction>\n : undefined extends TInput\n ? {\n (): MutateRequest<TInput, TSchema, TContext, TWrappedTransaction>;\n (\n args?: TInput,\n ): MutateRequest<TInput, TSchema, TContext, TWrappedTransaction>;\n }\n : {\n (\n args: TInput,\n ): MutateRequest<TInput, TSchema, TContext, TWrappedTransaction>;\n };\n\n// oxlint-disable-next-line no-explicit-any\nexport type AnyMutator = Mutator<any, any, any, any>;\n\n/**\n * Checks if a value is a Mutator (the result of processing a MutatorDefinition\n * through defineMutators).\n */\nexport function isMutator<S extends Schema>(\n value: unknown,\n // oxlint-disable-next-line no-explicit-any\n): value is Mutator<any, S, any, any> {\n return (\n typeof value === 'function' &&\n typeof (value as {mutatorName?: unknown}).mutatorName === 'string' &&\n typeof (value as {fn?: unknown}).fn === 'function'\n );\n}\n\nexport type MutateRequestTypes<\n TInput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TContext,\n TWrappedTransaction,\n> = 'MutateRequest' & {\n readonly $input: TInput;\n readonly $schema: TSchema;\n readonly $context: TContext;\n readonly $wrappedTransaction: TWrappedTransaction;\n};\n\n/**\n * The result of calling a Mutator with arguments.\n *\n * Created by `mutators.foo.bar(42)`, executed by `zero.mutate(mr)` on the client\n * or `mr.mutator.fn({tx, ctx, args: mr.args})` on the server.\n */\nexport type MutateRequest<\n TInput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema = DefaultSchema,\n TContext = DefaultContext,\n TWrappedTransaction = DefaultWrappedTransaction,\n> = {\n readonly 'mutator': Mutator<TInput, TSchema, TContext, TWrappedTransaction>;\n readonly 'args': TInput;\n readonly '~': MutateRequestTypes<\n TInput,\n TSchema,\n TContext,\n TWrappedTransaction\n >;\n};\n"],"names":[],"mappings":";AA8CO,SAAS,oBAAoB,GAAuC;AACzE,SACE,OAAO,MAAM,YACb,MAAM,QACL,EAAwB,GAAG,MAAM;AAEtC;AAiCO,SAAS,cAOd,oBAOA,SAKmE;AACnE,MAAI;AACJ,MAAI;AAMJ,MAAI,OAAO,uBAAuB,YAAY;AAE5C,gBAAY;AACZ,oBAAgB;AAAA,EAClB,OAAO;AAEL,gBAAY;AACZ,oBAAgB,KAAK,OAAO;AAAA,EAC9B;AAEA,QAAM,oBAKF;AAAA,IACF,MAAM;AAAA,IAKN,aAAa;AAAA,IACb,KAAK;AAAA,EAAA;AAOP,SAAO;AACT;AAGO,SAAS,wBAIgD;AAC9D,SAAO;AACT;AA4HO,SAAS,UACd,OAEoC;AACpC,SACE,OAAO,UAAU,cACjB,OAAQ,MAAkC,gBAAgB,YAC1D,OAAQ,MAAyB,OAAO;AAE5C;"}
1
+ {"version":3,"file":"mutator.js","sources":["../../../../../zql/src/mutate/mutator.ts"],"sourcesContent":["import type {StandardSchemaV1} from '@standard-schema/spec';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport type {\n DefaultContext,\n DefaultSchema,\n DefaultWrappedTransaction,\n} from '../../../zero-types/src/default-types.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport type {AnyTransaction, Transaction} from './custom.ts';\n\n// ----------------------------------------------------------------------------\n// defineMutator\n// ----------------------------------------------------------------------------\n\nexport type MutatorDefinitionTypes<\n TInput extends ReadonlyJSONValue | undefined,\n TOutput,\n TContext,\n TWrappedTransaction,\n> = 'MutatorDefinition' & {\n readonly $input: TInput;\n readonly $output: TOutput;\n readonly $context: TContext;\n readonly $wrappedTransaction: TWrappedTransaction;\n};\n\nexport type MutatorDefinition<\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TContext = DefaultContext,\n TWrappedTransaction = DefaultWrappedTransaction,\n> = {\n readonly 'fn': MutatorDefinitionFunction<TOutput, TContext, AnyTransaction>;\n readonly 'validator': StandardSchemaV1<TInput, TOutput> | undefined;\n readonly '~': MutatorDefinitionTypes<\n TInput,\n TOutput,\n TContext,\n TWrappedTransaction\n >;\n};\n\n// oxlint-disable-next-line no-explicit-any\nexport type AnyMutatorDefinition = MutatorDefinition<any, any, any, any>;\n\nexport function isMutatorDefinition(f: unknown): f is AnyMutatorDefinition {\n return (\n typeof f === 'object' &&\n f !== null &&\n (f as {['~']?: unknown})['~'] === 'MutatorDefinition'\n );\n}\n\n// Overload for no validator\nexport function defineMutator<\n TInput extends ReadonlyJSONValue | undefined = ReadonlyJSONValue | undefined,\n TSchema extends Schema = DefaultSchema,\n TContext = DefaultContext,\n TWrappedTransaction = DefaultWrappedTransaction,\n>(\n mutator: MutatorDefinitionFunction<\n TInput,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >,\n): MutatorDefinition<TInput, TInput, TContext, TWrappedTransaction>;\n\n// Overload for validator\nexport function defineMutator<\n TInput extends ReadonlyJSONValue | undefined = undefined,\n TOutput extends ReadonlyJSONValue | undefined = TInput,\n TSchema extends Schema = DefaultSchema,\n TContext = DefaultContext,\n TWrappedTransaction = DefaultWrappedTransaction,\n>(\n validator: StandardSchemaV1<TInput, TOutput>,\n mutator: MutatorDefinitionFunction<\n TOutput,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >,\n): MutatorDefinition<TInput, TOutput, TContext, TWrappedTransaction>;\n\n// Implementation\nexport function defineMutator<\n TInput extends ReadonlyJSONValue | undefined = undefined,\n TOutput extends ReadonlyJSONValue | undefined = TInput,\n TSchema extends Schema = DefaultSchema,\n TContext = DefaultContext,\n TWrappedTransaction = DefaultWrappedTransaction,\n>(\n validatorOrMutator:\n | StandardSchemaV1<TInput, TOutput>\n | MutatorDefinitionFunction<\n TOutput,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >,\n mutator?: MutatorDefinitionFunction<\n TOutput,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >,\n): MutatorDefinition<TInput, TOutput, TContext, TWrappedTransaction> {\n let validator: StandardSchemaV1<TInput, TOutput> | undefined;\n let actualMutator: MutatorDefinitionFunction<\n TOutput,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >;\n\n if ('~standard' in validatorOrMutator) {\n // defineMutator(validator, mutator)\n validator = validatorOrMutator;\n actualMutator = must(mutator);\n } else {\n // defineMutator(mutator) - no validator\n validator = undefined;\n actualMutator = validatorOrMutator;\n }\n\n const mutatorDefinition: MutatorDefinition<\n TInput,\n TOutput,\n TContext,\n TWrappedTransaction\n > = {\n 'fn': actualMutator as MutatorDefinitionFunction<\n TOutput,\n TContext,\n AnyTransaction\n >,\n 'validator': validator,\n '~': 'MutatorDefinition' as unknown as MutatorDefinitionTypes<\n TInput,\n TOutput,\n TContext,\n TWrappedTransaction\n >,\n };\n return mutatorDefinition;\n}\n\n// intentionally not using DefaultSchema, DefaultContext, or DefaultWrappedTransaction\nexport function defineMutatorWithType<\n TSchema extends Schema,\n TContext = unknown,\n TWrappedTransaction = unknown,\n>(): TypedDefineMutator<TSchema, TContext, TWrappedTransaction> {\n return defineMutator;\n}\n\n/**\n * The return type of defineMutatorWithType. A function matching the\n * defineMutator overloads but with Schema, Context, and WrappedTransaction\n * pre-bound.\n *\n * This is used as a workaround to using DefaultTypes (e.g. when using\n * multiple Zero instances).\n */\ntype TypedDefineMutator<\n TSchema extends Schema,\n TContext,\n TWrappedTransaction,\n> = {\n // Without validator\n <TArgs extends ReadonlyJSONValue | undefined>(\n mutator: MutatorDefinitionFunction<\n TArgs,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >,\n ): MutatorDefinition<TArgs, TArgs, TContext, TWrappedTransaction>;\n\n // With validator\n <\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n >(\n validator: StandardSchemaV1<TInput, TOutput>,\n mutator: MutatorDefinitionFunction<\n TOutput,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >,\n ): MutatorDefinition<TInput, TOutput, TContext, TWrappedTransaction>;\n};\n\nexport type MutatorDefinitionFunction<\n TOutput extends ReadonlyJSONValue | undefined,\n TContext,\n TTransaction,\n> = (options: {\n args: TOutput;\n ctx: TContext;\n tx: TTransaction;\n}) => Promise<void>;\n\n// ----------------------------------------------------------------------------\n// Mutator and MutateRequest types\n// ----------------------------------------------------------------------------\n\nexport type MutatorTypes<\n TInput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TContext,\n TWrappedTransaction,\n> = 'Mutator' & {\n readonly $input: TInput;\n readonly $schema: TSchema;\n readonly $context: TContext;\n readonly $wrappedTransaction: TWrappedTransaction;\n};\n\n/**\n * A callable wrapper around a MutatorDefinition, created by `defineMutators()`.\n *\n * Accessed like `mutators.foo.bar`, and called to create a MutateRequest:\n * `mutators.foo.bar(42)` returns a `MutateRequest`.\n *\n * The `fn` property is used for execution and takes raw JSON args (for rebase\n * and server wire format cases) that are validated internally.\n */\nexport type Mutator<\n TInput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema = DefaultSchema,\n TContext = DefaultContext,\n TWrappedTransaction = DefaultWrappedTransaction,\n> = {\n readonly 'mutatorName': string;\n /**\n * Execute the mutation. Args are ReadonlyJSONValue because this is called\n * during rebase (from stored JSON) and on the server (from wire format).\n * Validation happens internally before the recipe function runs.\n */\n readonly 'fn': MutatorDefinitionFunction<\n TInput,\n TContext,\n Transaction<TSchema, TWrappedTransaction>\n >;\n readonly '~': MutatorTypes<TInput, TSchema, TContext, TWrappedTransaction>;\n} & MutatorCallable<TInput, TSchema, TContext, TWrappedTransaction>;\n\n// Helper type for the callable part of Mutator\n// When TInput is undefined, the function is callable with 0 args\n// When TInput includes undefined (optional), args is optional\n// Otherwise, args is required\ntype MutatorCallable<\n TInput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TContext,\n TWrappedTransaction,\n> = [TInput] extends [undefined]\n ? () => MutateRequest<TInput, TSchema, TContext, TWrappedTransaction>\n : undefined extends TInput\n ? {\n (): MutateRequest<TInput, TSchema, TContext, TWrappedTransaction>;\n (\n args?: TInput,\n ): MutateRequest<TInput, TSchema, TContext, TWrappedTransaction>;\n }\n : {\n (\n args: TInput,\n ): MutateRequest<TInput, TSchema, TContext, TWrappedTransaction>;\n };\n\n// oxlint-disable-next-line no-explicit-any\nexport type AnyMutator = Mutator<any, any, any, any>;\n\n/**\n * Checks if a value is a Mutator (the result of processing a MutatorDefinition\n * through defineMutators).\n */\nexport function isMutator<S extends Schema>(\n value: unknown,\n // oxlint-disable-next-line no-explicit-any\n): value is Mutator<any, S, any, any> {\n return (\n typeof value === 'function' &&\n typeof (value as {mutatorName?: unknown}).mutatorName === 'string' &&\n typeof (value as {fn?: unknown}).fn === 'function'\n );\n}\n\nexport type MutateRequestTypes<\n TInput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TContext,\n TWrappedTransaction,\n> = 'MutateRequest' & {\n readonly $input: TInput;\n readonly $schema: TSchema;\n readonly $context: TContext;\n readonly $wrappedTransaction: TWrappedTransaction;\n};\n\n/**\n * The result of calling a Mutator with arguments.\n *\n * Created by `mutators.foo.bar(42)`, executed by `zero.mutate(mr)` on the client\n * or `mr.mutator.fn({tx, ctx, args: mr.args})` on the server.\n */\nexport type MutateRequest<\n TInput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema = DefaultSchema,\n TContext = DefaultContext,\n TWrappedTransaction = DefaultWrappedTransaction,\n> = {\n readonly 'mutator': Mutator<TInput, TSchema, TContext, TWrappedTransaction>;\n readonly 'args': TInput;\n readonly '~': MutateRequestTypes<\n TInput,\n TSchema,\n TContext,\n TWrappedTransaction\n >;\n};\n"],"names":[],"mappings":";AA8CO,SAAS,oBAAoB,GAAuC;AACzE,SACE,OAAO,MAAM,YACb,MAAM,QACL,EAAwB,GAAG,MAAM;AAEtC;AAiCO,SAAS,cAOd,oBAOA,SAKmE;AACnE,MAAI;AACJ,MAAI;AAMJ,MAAI,eAAe,oBAAoB;AAErC,gBAAY;AACZ,oBAAgB,KAAK,OAAO;AAAA,EAC9B,OAAO;AAEL,gBAAY;AACZ,oBAAgB;AAAA,EAClB;AAEA,QAAM,oBAKF;AAAA,IACF,MAAM;AAAA,IAKN,aAAa;AAAA,IACb,KAAK;AAAA,EAAA;AAOP,SAAO;AACT;AAGO,SAAS,wBAIgD;AAC9D,SAAO;AACT;AA4HO,SAAS,UACd,OAEoC;AACpC,SACE,OAAO,UAAU,cACjB,OAAQ,MAAkC,gBAAgB,YAC1D,OAAQ,MAAyB,OAAO;AAE5C;"}
@@ -17,12 +17,10 @@ function createRunnableBuilder(delegate, schema) {
17
17
  );
18
18
  }
19
19
  function createBuilderWithQueryFactory(schema, queryFactory) {
20
+ const target = Object.assign(/* @__PURE__ */ Object.create(null), schema.tables);
20
21
  return recordProxy(
21
- schema.tables,
22
- (_tableSchema, prop) => queryFactory(prop),
23
- (prop) => {
24
- throw new Error(`Table ${prop} does not exist in schema`);
25
- }
22
+ target,
23
+ (_tableSchema, prop) => queryFactory(prop)
26
24
  );
27
25
  }
28
26
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"create-builder.js","sources":["../../../../../zql/src/query/create-builder.ts"],"sourcesContent":["import {recordProxy} from '../../../shared/src/record-proxy.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport type {QueryDelegate} from './query-delegate.ts';\nimport {newQuery} from './query-impl.ts';\nimport type {Query} from './query.ts';\nimport {newRunnableQuery} from './runnable-query-impl.ts';\nimport type {ConditionalSchemaQuery, SchemaQuery} from './schema-query.ts';\n\n/**\n * Returns a set of query builders for the given schema.\n */\nexport function createBuilder<S extends Schema>(schema: S): SchemaQuery<S> {\n return createBuilderWithQueryFactory(schema, table =>\n newQuery(schema, table),\n );\n}\n\n/** @deprecated Use {@linkcode createBuilder} with `tx.run(zql.table.where(...))` instead. */\nexport function createRunnableBuilder<S extends Schema>(\n delegate: QueryDelegate,\n schema: S,\n): ConditionalSchemaQuery<S> {\n if (!schema.enableLegacyQueries) {\n return undefined as ConditionalSchemaQuery<S>;\n }\n\n return createBuilderWithQueryFactory(schema, table =>\n newRunnableQuery(delegate, schema, table),\n ) as ConditionalSchemaQuery<S>;\n}\n\nfunction createBuilderWithQueryFactory<S extends Schema>(\n schema: S,\n queryFactory: (table: keyof S['tables'] & string) => Query<string, S>,\n): SchemaQuery<S> {\n return recordProxy(\n schema.tables,\n (_tableSchema, prop) => queryFactory(prop),\n prop => {\n throw new Error(`Table ${prop} does not exist in schema`);\n },\n ) as SchemaQuery<S>;\n}\n"],"names":[],"mappings":";;;AAWO,SAAS,cAAgC,QAA2B;AACzE,SAAO;AAAA,IAA8B;AAAA,IAAQ,CAAA,UAC3C,SAAS,QAAQ,KAAK;AAAA,EAAA;AAE1B;AAGO,SAAS,sBACd,UACA,QAC2B;AAC3B,MAAI,CAAC,OAAO,qBAAqB;AAC/B,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IAA8B;AAAA,IAAQ,CAAA,UAC3C,iBAAiB,UAAU,QAAQ,KAAK;AAAA,EAAA;AAE5C;AAEA,SAAS,8BACP,QACA,cACgB;AAChB,SAAO;AAAA,IACL,OAAO;AAAA,IACP,CAAC,cAAc,SAAS,aAAa,IAAI;AAAA,IACzC,CAAA,SAAQ;AACN,YAAM,IAAI,MAAM,SAAS,IAAI,2BAA2B;AAAA,IAC1D;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"create-builder.js","sources":["../../../../../zql/src/query/create-builder.ts"],"sourcesContent":["import {recordProxy} from '../../../shared/src/record-proxy.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport type {QueryDelegate} from './query-delegate.ts';\nimport {newQuery} from './query-impl.ts';\nimport type {Query} from './query.ts';\nimport {newRunnableQuery} from './runnable-query-impl.ts';\nimport type {ConditionalSchemaQuery, SchemaQuery} from './schema-query.ts';\n\n/**\n * Returns a set of query builders for the given schema.\n */\nexport function createBuilder<S extends Schema>(schema: S): SchemaQuery<S> {\n return createBuilderWithQueryFactory(schema, table =>\n newQuery(schema, table),\n );\n}\n\n/** @deprecated Use {@linkcode createBuilder} with `tx.run(zql.table.where(...))` instead. */\nexport function createRunnableBuilder<S extends Schema>(\n delegate: QueryDelegate,\n schema: S,\n): ConditionalSchemaQuery<S> {\n if (!schema.enableLegacyQueries) {\n return undefined as ConditionalSchemaQuery<S>;\n }\n\n return createBuilderWithQueryFactory(schema, table =>\n newRunnableQuery(delegate, schema, table),\n ) as ConditionalSchemaQuery<S>;\n}\n\nfunction createBuilderWithQueryFactory<S extends Schema>(\n schema: S,\n queryFactory: (table: keyof S['tables'] & string) => Query<string, S>,\n): SchemaQuery<S> {\n // Create a target with no prototype so accessing unknown properties returns\n // undefined instead of inherited Object.prototype methods (e.g., toString).\n // This fixes React 19 dev mode compatibility where accessing $$typeof should\n // return undefined rather than throwing.\n const target = Object.assign(Object.create(null), schema.tables) as Record<\n string,\n unknown\n >;\n\n // No onMissing handler needed - unknown properties return undefined due to\n // null prototype, which is the desired behavior for normal JS object semantics.\n return recordProxy(target, (_tableSchema, prop) =>\n queryFactory(prop),\n ) as SchemaQuery<S>;\n}\n"],"names":[],"mappings":";;;AAWO,SAAS,cAAgC,QAA2B;AACzE,SAAO;AAAA,IAA8B;AAAA,IAAQ,CAAA,UAC3C,SAAS,QAAQ,KAAK;AAAA,EAAA;AAE1B;AAGO,SAAS,sBACd,UACA,QAC2B;AAC3B,MAAI,CAAC,OAAO,qBAAqB;AAC/B,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IAA8B;AAAA,IAAQ,CAAA,UAC3C,iBAAiB,UAAU,QAAQ,KAAK;AAAA,EAAA;AAE5C;AAEA,SAAS,8BACP,QACA,cACgB;AAKhB,QAAM,SAAS,OAAO,OAAO,uBAAO,OAAO,IAAI,GAAG,OAAO,MAAM;AAO/D,SAAO;AAAA,IAAY;AAAA,IAAQ,CAAC,cAAc,SACxC,aAAa,IAAI;AAAA,EAAA;AAErB;"}
@@ -16,12 +16,12 @@ function isQueryDefinition(f) {
16
16
  function defineQuery(validatorOrQueryFn, queryFn) {
17
17
  let validator;
18
18
  let actualQueryFn;
19
- if (typeof validatorOrQueryFn === "function") {
20
- validator = void 0;
21
- actualQueryFn = validatorOrQueryFn;
22
- } else {
19
+ if ("~standard" in validatorOrQueryFn) {
23
20
  validator = validatorOrQueryFn;
24
21
  actualQueryFn = must(queryFn);
22
+ } else {
23
+ validator = void 0;
24
+ actualQueryFn = validatorOrQueryFn;
25
25
  }
26
26
  const queryDefinition = {
27
27
  "fn": actualQueryFn,
@@ -1 +1 @@
1
- {"version":3,"file":"query-registry.js","sources":["../../../../../zql/src/query/query-registry.ts"],"sourcesContent":["import type {StandardSchemaV1} from '@standard-schema/spec';\nimport {\n deepMerge,\n isPlainObject,\n type DeepMerge,\n} from '../../../shared/src/deep-merge.ts';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport {getValueAtPath} from '../../../shared/src/object-traversal.ts';\nimport type {\n DefaultContext,\n DefaultSchema,\n} from '../../../zero-types/src/default-types.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {asQueryInternals} from './query-internals.ts';\nimport type {PullRow, Query} from './query.ts';\nimport {validateInput} from './validate-input.ts';\n\n// ----------------------------------------------------------------------------\n// CustomQuery and QueryRequest types\n// ----------------------------------------------------------------------------\n\nexport type CustomQueryTypes<\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TReturn,\n TContext,\n> = 'Query' & {\n readonly $tableName: TTable;\n readonly $input: TInput;\n readonly $schema: TSchema;\n readonly $return: TReturn;\n readonly $context: TContext;\n};\n\n/**\n * CustomQuery is returned from defineQueries. It is a callable that captures\n * args and can be turned into a Query via {@link QueryRequest}.\n */\nexport type CustomQuery<\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined = TInput,\n TSchema extends Schema = DefaultSchema,\n TReturn = PullRow<TTable, TSchema>,\n TContext = DefaultContext,\n> = {\n readonly 'queryName': string;\n readonly 'fn': QueryDefinitionFunction<TTable, TInput, TReturn, TContext>;\n readonly '~': CustomQueryTypes<TTable, TInput, TSchema, TReturn, TContext>;\n} & CustomQueryCallable<TTable, TInput, TOutput, TSchema, TReturn, TContext>;\n\ntype CustomQueryCallable<\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TReturn,\n TContext,\n> = [TInput] extends [undefined]\n ? () => QueryRequest<TTable, TInput, TOutput, TSchema, TReturn, TContext>\n : undefined extends TInput\n ? {\n (): QueryRequest<TTable, TInput, TOutput, TSchema, TReturn, TContext>;\n (\n args?: TInput,\n ): QueryRequest<TTable, TInput, TOutput, TSchema, TReturn, TContext>;\n }\n : {\n (\n args: TInput,\n ): QueryRequest<TTable, TInput, TOutput, TSchema, TReturn, TContext>;\n };\n\n// oxlint-disable-next-line no-explicit-any\nexport type AnyCustomQuery = CustomQuery<string, any, any, Schema, any, any>;\n\nexport function isQuery<S extends Schema>(\n value: unknown,\n // oxlint-disable-next-line no-explicit-any\n): value is CustomQuery<string, any, any, S, any, any> {\n return (\n typeof value === 'function' &&\n typeof (value as {queryName?: unknown}).queryName === 'string' &&\n typeof (value as {fn?: unknown}).fn === 'function'\n );\n}\n\nexport type QueryRequestTypes<\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TReturn,\n TContext,\n> = 'QueryRequest' & {\n readonly $tableName: TTable;\n readonly $input: TInput;\n readonly $output: TOutput;\n readonly $schema: TSchema;\n readonly $return: TReturn;\n readonly $context: TContext;\n};\n\nexport type QueryRequest<\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TReturn,\n TContext,\n> = {\n readonly 'query': CustomQuery<\n TTable,\n TInput,\n TOutput,\n TSchema,\n TReturn,\n TContext\n >;\n readonly 'args': TInput;\n readonly '~': QueryRequestTypes<\n TTable,\n TInput,\n TOutput,\n TSchema,\n TReturn,\n TContext\n >;\n};\n\n/**\n * A shared type that can be a query request or a query builder.\n *\n * If it is a query request, it will be converted to a {@link Query} using the context.\n * Otherwise, it will be returned as is.\n */\nexport type QueryOrQueryRequest<\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TReturn,\n TContext,\n> =\n | QueryRequest<TTable, TInput, TOutput, TSchema, TReturn, TContext>\n | Query<TTable, TSchema, TReturn>;\n\n/**\n * Converts a query request to a {@link Query} using the context,\n * or returns the query as is.\n *\n * @param query - The query request or query builder to convert\n * @param context - The context to use to convert the query request\n */\nexport const addContextToQuery = <\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TReturn,\n TContext,\n>(\n query: QueryOrQueryRequest<\n TTable,\n TInput,\n TOutput,\n TSchema,\n TReturn,\n TContext\n >,\n context: TContext,\n): Query<TTable, TSchema, TReturn> =>\n 'query' in query ? query.query.fn({ctx: context, args: query.args}) : query;\n\n// ----------------------------------------------------------------------------\n// QueryRegistry types\n// ----------------------------------------------------------------------------\n\nexport function isQueryRegistry(obj: unknown): obj is AnyQueryRegistry {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n (obj as unknown as {['~']: string})?.['~'] === 'QueryRegistry'\n );\n}\n\nexport type QueryRegistryTypes<TSchema extends Schema> = 'QueryRegistry' & {\n readonly $schema: TSchema;\n};\n\nexport type QueryRegistry<\n QD extends QueryDefinitions,\n S extends Schema,\n> = ToQueryTree<QD, S> & {\n ['~']: QueryRegistryTypes<S>;\n};\n\nexport type AnyQueryRegistry = {\n ['~']: QueryRegistryTypes<Schema>;\n [key: string]: unknown;\n};\n\ntype ToQueryTree<QD extends QueryDefinitions, S extends Schema> = {\n readonly [K in keyof QD]: QD[K] extends AnyQueryDefinition\n ? // pull types from the phantom property\n CustomQuery<\n QD[K]['~']['$tableName'],\n QD[K]['~']['$input'],\n QD[K]['~']['$output'],\n S,\n QD[K]['~']['$return'],\n QD[K]['~']['$context']\n >\n : QD[K] extends QueryDefinitions\n ? ToQueryTree<QD[K], S>\n : never;\n};\n\nexport type FromQueryTree<QD extends QueryDefinitions, S extends Schema> = {\n readonly [K in keyof QD]: QD[K] extends AnyQueryDefinition\n ? CustomQuery<\n QD[K]['~']['$tableName'],\n // intentionally left as generic to avoid variance issues\n ReadonlyJSONValue | undefined,\n ReadonlyJSONValue | undefined,\n S,\n QD[K]['~']['$return'],\n QD[K]['~']['$context']\n >\n : QD[K] extends QueryDefinitions\n ? FromQueryTree<QD[K], S>\n : never;\n}[keyof QD];\n\nexport type QueryDefinitions = {\n readonly [key: string]: AnyQueryDefinition | QueryDefinitions;\n};\n\n// ----------------------------------------------------------------------------\n// defineQuery\n// ----------------------------------------------------------------------------\n\nexport type QueryDefinitionTypes<\n TTable extends string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput,\n TReturn,\n TContext,\n> = 'QueryDefinition' & {\n readonly $tableName: TTable;\n readonly $input: TInput;\n readonly $output: TOutput;\n readonly $return: TReturn;\n readonly $context: TContext;\n};\n\n/**\n * A query definition is the return type of `defineQuery()`.\n */\nexport type QueryDefinition<\n TTable extends string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TReturn,\n TContext = DefaultContext,\n> = {\n readonly 'fn': QueryDefinitionFunction<TTable, TOutput, TReturn, TContext>;\n readonly 'validator': StandardSchemaV1<TInput, TOutput> | undefined;\n readonly '~': QueryDefinitionTypes<\n TTable,\n TInput,\n TOutput,\n TReturn,\n TContext\n >;\n};\n\n// oxlint-disable-next-line no-explicit-any\nexport type AnyQueryDefinition = QueryDefinition<any, any, any, any, any>;\n\nexport function isQueryDefinition(f: unknown): f is AnyQueryDefinition {\n return (\n typeof f === 'object' &&\n f !== null &&\n (f as {['~']?: unknown})['~'] === 'QueryDefinition'\n );\n}\n\nexport type QueryDefinitionFunction<\n TTable extends string,\n TInput extends ReadonlyJSONValue | undefined,\n TReturn,\n TContext,\n> = (options: {args: TInput; ctx: TContext}) => Query<TTable, Schema, TReturn>;\n\n/**\n * Defines a query to be used with {@link defineQueries}.\n *\n * The query function receives an object with `args` (the query arguments) and\n * `ctx` (the context). It should return a {@link Query} built using a builder\n * created from {@link createBuilder}.\n *\n * Note: A query defined with `defineQuery` must be passed to\n * {@link defineQueries} to be usable. The query name is derived from its\n * position in the `defineQueries` object.\n *\n * @example\n * ```ts\n * const builder = createBuilder(schema);\n *\n * const queries = defineQueries({\n * // Simple query with no arguments\n * allIssues: defineQuery(() => builder.issue.orderBy('created', 'desc')),\n *\n * // Query with typed arguments\n * issueById: defineQuery(({args}: {args: {id: string}}) =>\n * builder.issue.where('id', args.id).one(),\n * ),\n *\n * // Query with validation using a Standard Schema validator (e.g., Zod)\n * issuesByStatus: defineQuery(\n * z.object({status: z.enum(['open', 'closed'])}),\n * ({args}) => builder.issue.where('status', args.status),\n * ),\n *\n * // Query using context\n * myIssues: defineQuery(({ctx}: {ctx: {userID: string}}) =>\n * builder.issue.where('creatorID', ctx.userID),\n * ),\n * });\n * ```\n *\n * @param queryFn - A function that receives `{args, ctx}` and returns a Query.\n * @returns A {@link QueryDefinition} that can be passed to {@link defineQueries}.\n *\n * @overload\n * @param validator - A Standard Schema validator for the arguments.\n * @param queryFn - A function that receives `{args, ctx}` and returns a Query.\n * @returns A {@link QueryDefinition} with validated arguments.\n */\n// Overload for no validator parameter with default inference for untyped functions\nexport function defineQuery<\n TInput extends ReadonlyJSONValue | undefined,\n TContext = DefaultContext,\n TSchema extends Schema = DefaultSchema,\n TTable extends keyof TSchema['tables'] & string = keyof TSchema['tables'] &\n string,\n TReturn = PullRow<TTable, TSchema>,\n>(\n queryFn: QueryDefinitionFunction<TTable, TInput, TReturn, TContext>,\n): QueryDefinition<TTable, TInput, TInput, TReturn, TContext>;\n\n// Overload for validator parameter - Input and Output can be different\nexport function defineQuery<\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TContext = DefaultContext,\n TSchema extends Schema = DefaultSchema,\n TTable extends keyof TSchema['tables'] & string = keyof TSchema['tables'] &\n string,\n TReturn = PullRow<TTable, TSchema>,\n>(\n validator: StandardSchemaV1<TInput, TOutput>,\n queryFn: QueryDefinitionFunction<TTable, TOutput, TReturn, TContext>,\n): QueryDefinition<TTable, TInput, TOutput, TReturn, TContext>;\n\n// Implementation\nexport function defineQuery<\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TContext = DefaultContext,\n TSchema extends Schema = DefaultSchema,\n TTable extends keyof TSchema['tables'] & string = keyof TSchema['tables'] &\n string,\n TReturn = PullRow<TTable, TSchema>,\n>(\n validatorOrQueryFn:\n | StandardSchemaV1<TInput, TOutput>\n | QueryDefinitionFunction<TTable, TOutput, TReturn, TContext>,\n queryFn?: QueryDefinitionFunction<TTable, TOutput, TReturn, TContext>,\n): QueryDefinition<TTable, TInput, TOutput, TReturn, TContext> {\n // Handle different parameter patterns\n let validator: StandardSchemaV1<TInput, TOutput> | undefined;\n let actualQueryFn: QueryDefinitionFunction<\n TTable,\n TOutput,\n TReturn,\n TContext\n >;\n\n if (typeof validatorOrQueryFn === 'function') {\n // defineQuery(queryFn) - no validator\n validator = undefined;\n actualQueryFn = validatorOrQueryFn;\n } else {\n // defineQuery(validator, queryFn) - with validator\n validator = validatorOrQueryFn;\n actualQueryFn = must(queryFn);\n }\n\n const queryDefinition: QueryDefinition<\n TTable,\n TInput,\n TOutput,\n TReturn,\n TContext\n > = {\n 'fn': actualQueryFn,\n 'validator': validator,\n '~': 'QueryDefinition' as unknown as QueryDefinitionTypes<\n TTable,\n TInput,\n TOutput,\n TReturn,\n TContext\n >,\n };\n return queryDefinition;\n}\n\n/**\n * Returns a typed version of {@link defineQuery} with the schema and context\n * types pre-specified. This enables better type inference when defining\n * queries.\n *\n * @example\n * ```ts\n * const zql = createBuilder(schema);\n *\n * // With both Schema and Context types\n * const defineAppQuery = defineQueryWithType<AppSchema, AppContext>();\n * const myQuery = defineAppQuery(({ctx}) =>\n * zql.issue.where('userID', ctx.userID),\n * );\n *\n * // With just Context type (Schema inferred)\n * const defineAppQuery = defineQueryWithType<AppContext>();\n * ```\n *\n * @typeParam S - The Zero schema type.\n * @typeParam C - The context type passed to query functions.\n * @returns A function equivalent to {@link defineQuery} but with types\n * pre-bound.\n */\nexport function defineQueryWithType<\n S extends Schema,\n C = unknown,\n>(): TypedDefineQuery<S, C>;\n\n/**\n * Returns a typed version of {@link defineQuery} with the context type\n * pre-specified.\n *\n * @typeParam C - The context type passed to query functions.\n * @returns A function equivalent to {@link defineQuery} but with the context\n * type pre-bound.\n */\nexport function defineQueryWithType<C>(): TypedDefineQuery<Schema, C>;\n\nexport function defineQueryWithType() {\n return defineQuery;\n}\n\n/**\n * The return type of defineQueryWithType. A function matching the\n * defineQuery overloads but with Schema and Context pre-bound.\n */\ntype TypedDefineQuery<TSchema extends Schema, TContext> = {\n // Without validator\n <\n TArgs extends ReadonlyJSONValue | undefined,\n TReturn,\n TTable extends keyof TSchema['tables'] & string = keyof TSchema['tables'] &\n string,\n >(\n queryFn: QueryDefinitionFunction<TTable, TArgs, TReturn, TContext>,\n ): QueryDefinition<TTable, TArgs, TArgs, TReturn, TContext>;\n\n // With validator\n <\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TReturn,\n TTable extends keyof TSchema['tables'] & string = keyof TSchema['tables'] &\n string,\n >(\n validator: StandardSchemaV1<TInput, TOutput>,\n queryFn: QueryDefinitionFunction<TTable, TOutput, TReturn, TContext>,\n ): QueryDefinition<TTable, TInput, TOutput, TReturn, TContext>;\n};\n\n// ----------------------------------------------------------------------------\n// createQuery\n// ----------------------------------------------------------------------------\n\nexport function createQuery<\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TReturn,\n TContext,\n>(\n name: string,\n definition: QueryDefinition<TTable, TInput, TOutput, TReturn, TContext>,\n): CustomQuery<TTable, TInput, TOutput, TSchema, TReturn, TContext> {\n const {validator} = definition;\n\n const fn: QueryDefinitionFunction<\n TTable,\n TInput,\n TReturn,\n TContext\n > = options => {\n const validatedArgs = validator\n ? validateInput(name, options.args, validator, 'query')\n : (options.args as unknown as TOutput);\n\n return asQueryInternals(\n definition.fn({\n args: validatedArgs,\n ctx: options.ctx,\n }),\n ).nameAndArgs(\n name,\n // TODO(arv): Get rid of the array?\n // Send original input args to server (not transformed output)\n options.args === undefined ? [] : [options.args],\n );\n };\n\n const query = (\n args: TInput,\n ): QueryRequest<TTable, TInput, TOutput, TSchema, TReturn, TContext> => ({\n args,\n '~': 'QueryRequest' as QueryRequestTypes<\n TTable,\n TInput,\n TOutput,\n TSchema,\n TReturn,\n TContext\n >,\n 'query': query as unknown as CustomQuery<\n TTable,\n TInput,\n TOutput,\n TSchema,\n TReturn,\n TContext\n >,\n });\n\n query.queryName = name;\n query.fn = fn;\n query['~'] = 'Query' as CustomQueryTypes<\n TTable,\n TInput,\n TSchema,\n TReturn,\n TContext\n >;\n\n return query as unknown as CustomQuery<\n TTable,\n TInput,\n TOutput,\n TSchema,\n TReturn,\n TContext\n >;\n}\n\n// ----------------------------------------------------------------------------\n// defineQueries\n// ----------------------------------------------------------------------------\n\n/**\n * Converts query definitions created with {@link defineQuery} into callable\n * {@link Query} objects that can be invoked with arguments and a context.\n *\n * Query definitions can be nested for organization. The resulting query names\n * are dot-separated paths (e.g., `users.byId`).\n *\n * @example\n * ```ts\n * const builder = createBuilder(schema);\n *\n * const queries = defineQueries({\n * issues: defineQuery(() => builder.issue.orderBy('created', 'desc')),\n * users: {\n * byId: defineQuery(({args}: {args: {id: string}}) =>\n * builder.user.where('id', args.id),\n * ),\n * },\n * });\n *\n * // Usage:\n * const request = queries.issues.byId({id: '123'});\n * const [data] = zero.useQuery(request);\n * ```\n *\n * @param defs - An object containing query definitions or nested objects of\n * query definitions.\n * @returns An object with the same structure where each query definition is\n * converted to a {@link CustomQuery}.\n */\nexport function defineQueries<\n // let QD infer freely so defaults aren't erased by a QueryDefinitions<any, any> constraint\n const QD,\n S extends Schema = DefaultSchema,\n>(\n defs: QD & AssertQueryDefinitions<QD>,\n): QueryRegistry<EnsureQueryDefinitions<QD>, S>;\n\nexport function defineQueries<\n const TBase,\n const TOverrides,\n S extends Schema = DefaultSchema,\n>(\n base:\n | QueryRegistry<EnsureQueryDefinitions<TBase>, S>\n | (TBase & AssertQueryDefinitions<TBase>),\n overrides: TOverrides & AssertQueryDefinitions<TOverrides>,\n): QueryRegistry<\n DeepMerge<\n EnsureQueryDefinitions<TBase>,\n EnsureQueryDefinitions<TOverrides>,\n AnyQueryDefinition\n >,\n S\n>;\n\nexport function defineQueries<QD extends QueryDefinitions, S extends Schema>(\n defsOrBase: QD | QueryRegistry<QD, S>,\n overrides?: QueryDefinitions,\n): QueryRegistry<QD, S> {\n function processDefinitions(\n definitions: QueryDefinitions,\n path: string[],\n ): Record<string | symbol, unknown> {\n const result: Record<string | symbol, unknown> = {\n ['~']: 'QueryRegistry',\n };\n\n for (const [key, value] of Object.entries(definitions)) {\n path.push(key);\n const defaultName = path.join('.');\n\n if (isQueryDefinition(value)) {\n result[key] = createQuery(defaultName, value);\n } else {\n // Nested definitions\n result[key] = processDefinitions(value, path);\n }\n path.pop();\n }\n\n return result;\n }\n\n if (overrides !== undefined) {\n // Merge base and overrides\n\n let base: Record<string | symbol, unknown>;\n if (!isQueryRegistry(defsOrBase)) {\n base = processDefinitions(defsOrBase, []);\n } else {\n base = defsOrBase;\n }\n\n const processed = processDefinitions(overrides, []);\n\n const merged = deepMerge(base, processed, isQueryLeaf);\n merged['~'] = 'QueryRegistry';\n return merged as QueryRegistry<QD, S>;\n }\n\n return processDefinitions(defsOrBase as QD, []) as QueryRegistry<QD, S>;\n}\n\nconst isQueryLeaf = (value: unknown): boolean =>\n !isPlainObject(value) || isQuery(value);\n\nexport type AssertQueryDefinitions<QD> = QD extends QueryDefinitions\n ? unknown\n : never;\n\nexport type EnsureQueryDefinitions<QD> = QD extends QueryDefinitions\n ? QD\n : QD extends QueryRegistry<infer InnerQD, infer _S>\n ? InnerQD\n : never;\n\n/**\n * Creates a function that can be used to define queries with a specific schema.\n */\nexport function defineQueriesWithType<\n TSchema extends Schema,\n>(): TypedDefineQueries<TSchema> {\n return defineQueries;\n}\n\n/**\n * The return type of defineQueriesWithType. A function matching the\n * defineQueries overloads but with Schema pre-bound.\n */\ntype TypedDefineQueries<S extends Schema> = {\n // Single definitions\n <QD>(\n definitions: QD & AssertQueryDefinitions<QD>,\n ): QueryRegistry<EnsureQueryDefinitions<QD>, S>;\n\n // Base and overrides\n <TBase, TOverrides>(\n base:\n | QueryRegistry<EnsureQueryDefinitions<TBase>, S>\n | (TBase & AssertQueryDefinitions<TBase>),\n overrides: TOverrides & AssertQueryDefinitions<TOverrides>,\n ): QueryRegistry<\n DeepMerge<\n EnsureQueryDefinitions<TBase>,\n EnsureQueryDefinitions<TOverrides>,\n AnyQueryDefinition\n >,\n S\n >;\n};\n\n// ----------------------------------------------------------------------------\n// getQuery / mustGetQuery\n// ----------------------------------------------------------------------------\n\nexport function getQuery<QD extends QueryDefinitions, S extends Schema>(\n queries: QueryRegistry<QD, S>,\n name: string,\n): FromQueryTree<QD, S> | undefined {\n const q = getValueAtPath(queries, name, /[.|]/);\n return q as FromQueryTree<QD, S> | undefined;\n}\n\nexport function mustGetQuery<QD extends QueryDefinitions, S extends Schema>(\n queries: QueryRegistry<QD, S>,\n name: string,\n): FromQueryTree<QD, S> {\n const query = getQuery(queries, name);\n if (query === undefined) {\n throw new Error(`Query not found: ${name}`);\n }\n return query;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-registry.js","sources":["../../../../../zql/src/query/query-registry.ts"],"sourcesContent":["import type {StandardSchemaV1} from '@standard-schema/spec';\nimport {\n deepMerge,\n isPlainObject,\n type DeepMerge,\n} from '../../../shared/src/deep-merge.ts';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport {getValueAtPath} from '../../../shared/src/object-traversal.ts';\nimport type {\n DefaultContext,\n DefaultSchema,\n} from '../../../zero-types/src/default-types.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {asQueryInternals} from './query-internals.ts';\nimport type {PullRow, Query} from './query.ts';\nimport {validateInput} from './validate-input.ts';\n\n// ----------------------------------------------------------------------------\n// CustomQuery and QueryRequest types\n// ----------------------------------------------------------------------------\n\nexport type CustomQueryTypes<\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TReturn,\n TContext,\n> = 'Query' & {\n readonly $tableName: TTable;\n readonly $input: TInput;\n readonly $schema: TSchema;\n readonly $return: TReturn;\n readonly $context: TContext;\n};\n\n/**\n * CustomQuery is returned from defineQueries. It is a callable that captures\n * args and can be turned into a Query via {@link QueryRequest}.\n */\nexport type CustomQuery<\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined = TInput,\n TSchema extends Schema = DefaultSchema,\n TReturn = PullRow<TTable, TSchema>,\n TContext = DefaultContext,\n> = {\n readonly 'queryName': string;\n readonly 'fn': QueryDefinitionFunction<TTable, TInput, TReturn, TContext>;\n readonly '~': CustomQueryTypes<TTable, TInput, TSchema, TReturn, TContext>;\n} & CustomQueryCallable<TTable, TInput, TOutput, TSchema, TReturn, TContext>;\n\ntype CustomQueryCallable<\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TReturn,\n TContext,\n> = [TInput] extends [undefined]\n ? () => QueryRequest<TTable, TInput, TOutput, TSchema, TReturn, TContext>\n : undefined extends TInput\n ? {\n (): QueryRequest<TTable, TInput, TOutput, TSchema, TReturn, TContext>;\n (\n args?: TInput,\n ): QueryRequest<TTable, TInput, TOutput, TSchema, TReturn, TContext>;\n }\n : {\n (\n args: TInput,\n ): QueryRequest<TTable, TInput, TOutput, TSchema, TReturn, TContext>;\n };\n\n// oxlint-disable-next-line no-explicit-any\nexport type AnyCustomQuery = CustomQuery<string, any, any, Schema, any, any>;\n\nexport function isQuery<S extends Schema>(\n value: unknown,\n // oxlint-disable-next-line no-explicit-any\n): value is CustomQuery<string, any, any, S, any, any> {\n return (\n typeof value === 'function' &&\n typeof (value as {queryName?: unknown}).queryName === 'string' &&\n typeof (value as {fn?: unknown}).fn === 'function'\n );\n}\n\nexport type QueryRequestTypes<\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TReturn,\n TContext,\n> = 'QueryRequest' & {\n readonly $tableName: TTable;\n readonly $input: TInput;\n readonly $output: TOutput;\n readonly $schema: TSchema;\n readonly $return: TReturn;\n readonly $context: TContext;\n};\n\nexport type QueryRequest<\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TReturn,\n TContext,\n> = {\n readonly 'query': CustomQuery<\n TTable,\n TInput,\n TOutput,\n TSchema,\n TReturn,\n TContext\n >;\n readonly 'args': TInput;\n readonly '~': QueryRequestTypes<\n TTable,\n TInput,\n TOutput,\n TSchema,\n TReturn,\n TContext\n >;\n};\n\n/**\n * A shared type that can be a query request or a query builder.\n *\n * If it is a query request, it will be converted to a {@link Query} using the context.\n * Otherwise, it will be returned as is.\n */\nexport type QueryOrQueryRequest<\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TReturn,\n TContext,\n> =\n | QueryRequest<TTable, TInput, TOutput, TSchema, TReturn, TContext>\n | Query<TTable, TSchema, TReturn>;\n\n/**\n * Converts a query request to a {@link Query} using the context,\n * or returns the query as is.\n *\n * @param query - The query request or query builder to convert\n * @param context - The context to use to convert the query request\n */\nexport const addContextToQuery = <\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TReturn,\n TContext,\n>(\n query: QueryOrQueryRequest<\n TTable,\n TInput,\n TOutput,\n TSchema,\n TReturn,\n TContext\n >,\n context: TContext,\n): Query<TTable, TSchema, TReturn> =>\n 'query' in query ? query.query.fn({ctx: context, args: query.args}) : query;\n\n// ----------------------------------------------------------------------------\n// QueryRegistry types\n// ----------------------------------------------------------------------------\n\nexport function isQueryRegistry(obj: unknown): obj is AnyQueryRegistry {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n (obj as unknown as {['~']: string})?.['~'] === 'QueryRegistry'\n );\n}\n\nexport type QueryRegistryTypes<TSchema extends Schema> = 'QueryRegistry' & {\n readonly $schema: TSchema;\n};\n\nexport type QueryRegistry<\n QD extends QueryDefinitions,\n S extends Schema,\n> = ToQueryTree<QD, S> & {\n ['~']: QueryRegistryTypes<S>;\n};\n\nexport type AnyQueryRegistry = {\n ['~']: QueryRegistryTypes<Schema>;\n [key: string]: unknown;\n};\n\ntype ToQueryTree<QD extends QueryDefinitions, S extends Schema> = {\n readonly [K in keyof QD]: QD[K] extends AnyQueryDefinition\n ? // pull types from the phantom property\n CustomQuery<\n QD[K]['~']['$tableName'],\n QD[K]['~']['$input'],\n QD[K]['~']['$output'],\n S,\n QD[K]['~']['$return'],\n QD[K]['~']['$context']\n >\n : QD[K] extends QueryDefinitions\n ? ToQueryTree<QD[K], S>\n : never;\n};\n\nexport type FromQueryTree<QD extends QueryDefinitions, S extends Schema> = {\n readonly [K in keyof QD]: QD[K] extends AnyQueryDefinition\n ? CustomQuery<\n QD[K]['~']['$tableName'],\n // intentionally left as generic to avoid variance issues\n ReadonlyJSONValue | undefined,\n ReadonlyJSONValue | undefined,\n S,\n QD[K]['~']['$return'],\n QD[K]['~']['$context']\n >\n : QD[K] extends QueryDefinitions\n ? FromQueryTree<QD[K], S>\n : never;\n}[keyof QD];\n\nexport type QueryDefinitions = {\n readonly [key: string]: AnyQueryDefinition | QueryDefinitions;\n};\n\n// ----------------------------------------------------------------------------\n// defineQuery\n// ----------------------------------------------------------------------------\n\nexport type QueryDefinitionTypes<\n TTable extends string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput,\n TReturn,\n TContext,\n> = 'QueryDefinition' & {\n readonly $tableName: TTable;\n readonly $input: TInput;\n readonly $output: TOutput;\n readonly $return: TReturn;\n readonly $context: TContext;\n};\n\n/**\n * A query definition is the return type of `defineQuery()`.\n */\nexport type QueryDefinition<\n TTable extends string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TReturn,\n TContext = DefaultContext,\n> = {\n readonly 'fn': QueryDefinitionFunction<TTable, TOutput, TReturn, TContext>;\n readonly 'validator': StandardSchemaV1<TInput, TOutput> | undefined;\n readonly '~': QueryDefinitionTypes<\n TTable,\n TInput,\n TOutput,\n TReturn,\n TContext\n >;\n};\n\n// oxlint-disable-next-line no-explicit-any\nexport type AnyQueryDefinition = QueryDefinition<any, any, any, any, any>;\n\nexport function isQueryDefinition(f: unknown): f is AnyQueryDefinition {\n return (\n typeof f === 'object' &&\n f !== null &&\n (f as {['~']?: unknown})['~'] === 'QueryDefinition'\n );\n}\n\nexport type QueryDefinitionFunction<\n TTable extends string,\n TInput extends ReadonlyJSONValue | undefined,\n TReturn,\n TContext,\n> = (options: {args: TInput; ctx: TContext}) => Query<TTable, Schema, TReturn>;\n\n/**\n * Defines a query to be used with {@link defineQueries}.\n *\n * The query function receives an object with `args` (the query arguments) and\n * `ctx` (the context). It should return a {@link Query} built using a builder\n * created from {@link createBuilder}.\n *\n * Note: A query defined with `defineQuery` must be passed to\n * {@link defineQueries} to be usable. The query name is derived from its\n * position in the `defineQueries` object.\n *\n * @example\n * ```ts\n * const builder = createBuilder(schema);\n *\n * const queries = defineQueries({\n * // Simple query with no arguments\n * allIssues: defineQuery(() => builder.issue.orderBy('created', 'desc')),\n *\n * // Query with typed arguments\n * issueById: defineQuery(({args}: {args: {id: string}}) =>\n * builder.issue.where('id', args.id).one(),\n * ),\n *\n * // Query with validation using a Standard Schema validator (e.g., Zod)\n * issuesByStatus: defineQuery(\n * z.object({status: z.enum(['open', 'closed'])}),\n * ({args}) => builder.issue.where('status', args.status),\n * ),\n *\n * // Query using context\n * myIssues: defineQuery(({ctx}: {ctx: {userID: string}}) =>\n * builder.issue.where('creatorID', ctx.userID),\n * ),\n * });\n * ```\n *\n * @param queryFn - A function that receives `{args, ctx}` and returns a Query.\n * @returns A {@link QueryDefinition} that can be passed to {@link defineQueries}.\n *\n * @overload\n * @param validator - A Standard Schema validator for the arguments.\n * @param queryFn - A function that receives `{args, ctx}` and returns a Query.\n * @returns A {@link QueryDefinition} with validated arguments.\n */\n// Overload for no validator parameter with default inference for untyped functions\nexport function defineQuery<\n TInput extends ReadonlyJSONValue | undefined,\n TContext = DefaultContext,\n TSchema extends Schema = DefaultSchema,\n TTable extends keyof TSchema['tables'] & string = keyof TSchema['tables'] &\n string,\n TReturn = PullRow<TTable, TSchema>,\n>(\n queryFn: QueryDefinitionFunction<TTable, TInput, TReturn, TContext>,\n): QueryDefinition<TTable, TInput, TInput, TReturn, TContext>;\n\n// Overload for validator parameter - Input and Output can be different\nexport function defineQuery<\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TContext = DefaultContext,\n TSchema extends Schema = DefaultSchema,\n TTable extends keyof TSchema['tables'] & string = keyof TSchema['tables'] &\n string,\n TReturn = PullRow<TTable, TSchema>,\n>(\n validator: StandardSchemaV1<TInput, TOutput>,\n queryFn: QueryDefinitionFunction<TTable, TOutput, TReturn, TContext>,\n): QueryDefinition<TTable, TInput, TOutput, TReturn, TContext>;\n\n// Implementation\nexport function defineQuery<\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TContext = DefaultContext,\n TSchema extends Schema = DefaultSchema,\n TTable extends keyof TSchema['tables'] & string = keyof TSchema['tables'] &\n string,\n TReturn = PullRow<TTable, TSchema>,\n>(\n validatorOrQueryFn:\n | StandardSchemaV1<TInput, TOutput>\n | QueryDefinitionFunction<TTable, TOutput, TReturn, TContext>,\n queryFn?: QueryDefinitionFunction<TTable, TOutput, TReturn, TContext>,\n): QueryDefinition<TTable, TInput, TOutput, TReturn, TContext> {\n // Handle different parameter patterns\n let validator: StandardSchemaV1<TInput, TOutput> | undefined;\n let actualQueryFn: QueryDefinitionFunction<\n TTable,\n TOutput,\n TReturn,\n TContext\n >;\n\n if ('~standard' in validatorOrQueryFn) {\n // defineQuery(validator, queryFn) - with validator\n validator = validatorOrQueryFn;\n actualQueryFn = must(queryFn);\n } else {\n // defineQuery(queryFn) - no validator\n validator = undefined;\n actualQueryFn = validatorOrQueryFn;\n }\n\n const queryDefinition: QueryDefinition<\n TTable,\n TInput,\n TOutput,\n TReturn,\n TContext\n > = {\n 'fn': actualQueryFn,\n 'validator': validator,\n '~': 'QueryDefinition' as unknown as QueryDefinitionTypes<\n TTable,\n TInput,\n TOutput,\n TReturn,\n TContext\n >,\n };\n return queryDefinition;\n}\n\n/**\n * Returns a typed version of {@link defineQuery} with the schema and context\n * types pre-specified. This enables better type inference when defining\n * queries.\n *\n * @example\n * ```ts\n * const zql = createBuilder(schema);\n *\n * // With both Schema and Context types\n * const defineAppQuery = defineQueryWithType<AppSchema, AppContext>();\n * const myQuery = defineAppQuery(({ctx}) =>\n * zql.issue.where('userID', ctx.userID),\n * );\n *\n * // With just Context type (Schema inferred)\n * const defineAppQuery = defineQueryWithType<AppContext>();\n * ```\n *\n * @typeParam S - The Zero schema type.\n * @typeParam C - The context type passed to query functions.\n * @returns A function equivalent to {@link defineQuery} but with types\n * pre-bound.\n */\nexport function defineQueryWithType<\n S extends Schema,\n C = unknown,\n>(): TypedDefineQuery<S, C>;\n\n/**\n * Returns a typed version of {@link defineQuery} with the context type\n * pre-specified.\n *\n * @typeParam C - The context type passed to query functions.\n * @returns A function equivalent to {@link defineQuery} but with the context\n * type pre-bound.\n */\nexport function defineQueryWithType<C>(): TypedDefineQuery<Schema, C>;\n\nexport function defineQueryWithType() {\n return defineQuery;\n}\n\n/**\n * The return type of defineQueryWithType. A function matching the\n * defineQuery overloads but with Schema and Context pre-bound.\n */\ntype TypedDefineQuery<TSchema extends Schema, TContext> = {\n // Without validator\n <\n TArgs extends ReadonlyJSONValue | undefined,\n TReturn,\n TTable extends keyof TSchema['tables'] & string = keyof TSchema['tables'] &\n string,\n >(\n queryFn: QueryDefinitionFunction<TTable, TArgs, TReturn, TContext>,\n ): QueryDefinition<TTable, TArgs, TArgs, TReturn, TContext>;\n\n // With validator\n <\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TReturn,\n TTable extends keyof TSchema['tables'] & string = keyof TSchema['tables'] &\n string,\n >(\n validator: StandardSchemaV1<TInput, TOutput>,\n queryFn: QueryDefinitionFunction<TTable, TOutput, TReturn, TContext>,\n ): QueryDefinition<TTable, TInput, TOutput, TReturn, TContext>;\n};\n\n// ----------------------------------------------------------------------------\n// createQuery\n// ----------------------------------------------------------------------------\n\nexport function createQuery<\n TTable extends keyof TSchema['tables'] & string,\n TInput extends ReadonlyJSONValue | undefined,\n TOutput extends ReadonlyJSONValue | undefined,\n TSchema extends Schema,\n TReturn,\n TContext,\n>(\n name: string,\n definition: QueryDefinition<TTable, TInput, TOutput, TReturn, TContext>,\n): CustomQuery<TTable, TInput, TOutput, TSchema, TReturn, TContext> {\n const {validator} = definition;\n\n const fn: QueryDefinitionFunction<\n TTable,\n TInput,\n TReturn,\n TContext\n > = options => {\n const validatedArgs = validator\n ? validateInput(name, options.args, validator, 'query')\n : (options.args as unknown as TOutput);\n\n return asQueryInternals(\n definition.fn({\n args: validatedArgs,\n ctx: options.ctx,\n }),\n ).nameAndArgs(\n name,\n // TODO(arv): Get rid of the array?\n // Send original input args to server (not transformed output)\n options.args === undefined ? [] : [options.args],\n );\n };\n\n const query = (\n args: TInput,\n ): QueryRequest<TTable, TInput, TOutput, TSchema, TReturn, TContext> => ({\n args,\n '~': 'QueryRequest' as QueryRequestTypes<\n TTable,\n TInput,\n TOutput,\n TSchema,\n TReturn,\n TContext\n >,\n 'query': query as unknown as CustomQuery<\n TTable,\n TInput,\n TOutput,\n TSchema,\n TReturn,\n TContext\n >,\n });\n\n query.queryName = name;\n query.fn = fn;\n query['~'] = 'Query' as CustomQueryTypes<\n TTable,\n TInput,\n TSchema,\n TReturn,\n TContext\n >;\n\n return query as unknown as CustomQuery<\n TTable,\n TInput,\n TOutput,\n TSchema,\n TReturn,\n TContext\n >;\n}\n\n// ----------------------------------------------------------------------------\n// defineQueries\n// ----------------------------------------------------------------------------\n\n/**\n * Converts query definitions created with {@link defineQuery} into callable\n * {@link Query} objects that can be invoked with arguments and a context.\n *\n * Query definitions can be nested for organization. The resulting query names\n * are dot-separated paths (e.g., `users.byId`).\n *\n * @example\n * ```ts\n * const builder = createBuilder(schema);\n *\n * const queries = defineQueries({\n * issues: defineQuery(() => builder.issue.orderBy('created', 'desc')),\n * users: {\n * byId: defineQuery(({args}: {args: {id: string}}) =>\n * builder.user.where('id', args.id),\n * ),\n * },\n * });\n *\n * // Usage:\n * const request = queries.issues.byId({id: '123'});\n * const [data] = zero.useQuery(request);\n * ```\n *\n * @param defs - An object containing query definitions or nested objects of\n * query definitions.\n * @returns An object with the same structure where each query definition is\n * converted to a {@link CustomQuery}.\n */\nexport function defineQueries<\n // let QD infer freely so defaults aren't erased by a QueryDefinitions<any, any> constraint\n const QD,\n S extends Schema = DefaultSchema,\n>(\n defs: QD & AssertQueryDefinitions<QD>,\n): QueryRegistry<EnsureQueryDefinitions<QD>, S>;\n\nexport function defineQueries<\n const TBase,\n const TOverrides,\n S extends Schema = DefaultSchema,\n>(\n base:\n | QueryRegistry<EnsureQueryDefinitions<TBase>, S>\n | (TBase & AssertQueryDefinitions<TBase>),\n overrides: TOverrides & AssertQueryDefinitions<TOverrides>,\n): QueryRegistry<\n DeepMerge<\n EnsureQueryDefinitions<TBase>,\n EnsureQueryDefinitions<TOverrides>,\n AnyQueryDefinition\n >,\n S\n>;\n\nexport function defineQueries<QD extends QueryDefinitions, S extends Schema>(\n defsOrBase: QD | QueryRegistry<QD, S>,\n overrides?: QueryDefinitions,\n): QueryRegistry<QD, S> {\n function processDefinitions(\n definitions: QueryDefinitions,\n path: string[],\n ): Record<string | symbol, unknown> {\n const result: Record<string | symbol, unknown> = {\n ['~']: 'QueryRegistry',\n };\n\n for (const [key, value] of Object.entries(definitions)) {\n path.push(key);\n const defaultName = path.join('.');\n\n if (isQueryDefinition(value)) {\n result[key] = createQuery(defaultName, value);\n } else {\n // Nested definitions\n result[key] = processDefinitions(value, path);\n }\n path.pop();\n }\n\n return result;\n }\n\n if (overrides !== undefined) {\n // Merge base and overrides\n\n let base: Record<string | symbol, unknown>;\n if (!isQueryRegistry(defsOrBase)) {\n base = processDefinitions(defsOrBase, []);\n } else {\n base = defsOrBase;\n }\n\n const processed = processDefinitions(overrides, []);\n\n const merged = deepMerge(base, processed, isQueryLeaf);\n merged['~'] = 'QueryRegistry';\n return merged as QueryRegistry<QD, S>;\n }\n\n return processDefinitions(defsOrBase as QD, []) as QueryRegistry<QD, S>;\n}\n\nconst isQueryLeaf = (value: unknown): boolean =>\n !isPlainObject(value) || isQuery(value);\n\nexport type AssertQueryDefinitions<QD> = QD extends QueryDefinitions\n ? unknown\n : never;\n\nexport type EnsureQueryDefinitions<QD> = QD extends QueryDefinitions\n ? QD\n : QD extends QueryRegistry<infer InnerQD, infer _S>\n ? InnerQD\n : never;\n\n/**\n * Creates a function that can be used to define queries with a specific schema.\n */\nexport function defineQueriesWithType<\n TSchema extends Schema,\n>(): TypedDefineQueries<TSchema> {\n return defineQueries;\n}\n\n/**\n * The return type of defineQueriesWithType. A function matching the\n * defineQueries overloads but with Schema pre-bound.\n */\ntype TypedDefineQueries<S extends Schema> = {\n // Single definitions\n <QD>(\n definitions: QD & AssertQueryDefinitions<QD>,\n ): QueryRegistry<EnsureQueryDefinitions<QD>, S>;\n\n // Base and overrides\n <TBase, TOverrides>(\n base:\n | QueryRegistry<EnsureQueryDefinitions<TBase>, S>\n | (TBase & AssertQueryDefinitions<TBase>),\n overrides: TOverrides & AssertQueryDefinitions<TOverrides>,\n ): QueryRegistry<\n DeepMerge<\n EnsureQueryDefinitions<TBase>,\n EnsureQueryDefinitions<TOverrides>,\n AnyQueryDefinition\n >,\n S\n >;\n};\n\n// ----------------------------------------------------------------------------\n// getQuery / mustGetQuery\n// ----------------------------------------------------------------------------\n\nexport function getQuery<QD extends QueryDefinitions, S extends Schema>(\n queries: QueryRegistry<QD, S>,\n name: string,\n): FromQueryTree<QD, S> | undefined {\n const q = getValueAtPath(queries, name, /[.|]/);\n return q as FromQueryTree<QD, S> | undefined;\n}\n\nexport function mustGetQuery<QD extends QueryDefinitions, S extends Schema>(\n queries: QueryRegistry<QD, S>,\n name: string,\n): FromQueryTree<QD, S> {\n const query = getQuery(queries, name);\n if (query === undefined) {\n throw new Error(`Query not found: ${name}`);\n }\n return query;\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rocicorp/zero",
3
- "version": "0.26.0-canary.0",
3
+ "version": "0.26.0-canary.2",
4
4
  "description": "Zero is a web framework for serverless web development.",
5
5
  "author": "Rocicorp, Inc.",
6
6
  "repository": {
@@ -85,8 +85,8 @@
85
85
  "expo-sqlite": ">=15",
86
86
  "replicache": "15.2.1",
87
87
  "shared": "0.0.0",
88
- "typedoc": "^0.28.2",
89
- "typedoc-plugin-markdown": "^4.6.1",
88
+ "typedoc": "^0.28.15",
89
+ "typedoc-plugin-markdown": "^4.9.0",
90
90
  "typescript": "~5.9.3",
91
91
  "vite": "7.2.7",
92
92
  "vitest": "4.0.15",
@@ -1,12 +0,0 @@
1
- import { ProtocolError } from '../../../zero-protocol/src/error.ts';
2
- export type SchemaVersions = {
3
- readonly minSupportedVersion: number;
4
- readonly maxSupportedVersion: number;
5
- };
6
- export declare function throwProtocolErrorIfSchemaVersionNotSupported(schemaVersion: number, schemaVersions: SchemaVersions): void;
7
- export declare function getProtocolErrorIfSchemaVersionNotSupported(schemaVersion: number, schemaVersions: SchemaVersions): ProtocolError<{
8
- readonly kind: "SchemaVersionNotSupported";
9
- readonly message: `Schema version ${number} is not in range of supported schema versions [${number}, ${number}].`;
10
- readonly origin: "zeroCache";
11
- }> | undefined;
12
- //# sourceMappingURL=schema-versions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema-versions.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/types/schema-versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,qCAAqC,CAAC;AAIlE,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC,CAAC;AAEF,wBAAgB,6CAA6C,CAC3D,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,cAAc,QAS/B;AAED,wBAAgB,2CAA2C,CACzD,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,cAAc;;;;eAc/B"}
@@ -1,28 +0,0 @@
1
- import { ProtocolError } from "../../../zero-protocol/src/error.js";
2
- import { SchemaVersionNotSupported } from "../../../zero-protocol/src/error-kind-enum.js";
3
- import { ZeroCache } from "../../../zero-protocol/src/error-origin-enum.js";
4
- function throwProtocolErrorIfSchemaVersionNotSupported(schemaVersion, schemaVersions) {
5
- const error = getProtocolErrorIfSchemaVersionNotSupported(
6
- schemaVersion,
7
- schemaVersions
8
- );
9
- if (error) {
10
- throw error;
11
- }
12
- }
13
- function getProtocolErrorIfSchemaVersionNotSupported(schemaVersion, schemaVersions) {
14
- const { minSupportedVersion, maxSupportedVersion } = schemaVersions;
15
- if (schemaVersion < minSupportedVersion || schemaVersion > maxSupportedVersion) {
16
- return new ProtocolError({
17
- kind: SchemaVersionNotSupported,
18
- message: `Schema version ${schemaVersion} is not in range of supported schema versions [${minSupportedVersion}, ${maxSupportedVersion}].`,
19
- origin: ZeroCache
20
- });
21
- }
22
- return void 0;
23
- }
24
- export {
25
- getProtocolErrorIfSchemaVersionNotSupported,
26
- throwProtocolErrorIfSchemaVersionNotSupported
27
- };
28
- //# sourceMappingURL=schema-versions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema-versions.js","sources":["../../../../../zero-cache/src/types/schema-versions.ts"],"sourcesContent":["import {ProtocolError} from '../../../zero-protocol/src/error.ts';\nimport {ErrorKind} from '../../../zero-protocol/src/error-kind.ts';\nimport {ErrorOrigin} from '../../../zero-protocol/src/error-origin.ts';\n\nexport type SchemaVersions = {\n readonly minSupportedVersion: number;\n readonly maxSupportedVersion: number;\n};\n\nexport function throwProtocolErrorIfSchemaVersionNotSupported(\n schemaVersion: number,\n schemaVersions: SchemaVersions,\n) {\n const error = getProtocolErrorIfSchemaVersionNotSupported(\n schemaVersion,\n schemaVersions,\n );\n if (error) {\n throw error;\n }\n}\n\nexport function getProtocolErrorIfSchemaVersionNotSupported(\n schemaVersion: number,\n schemaVersions: SchemaVersions,\n) {\n const {minSupportedVersion, maxSupportedVersion} = schemaVersions;\n if (\n schemaVersion < minSupportedVersion ||\n schemaVersion > maxSupportedVersion\n ) {\n return new ProtocolError({\n kind: ErrorKind.SchemaVersionNotSupported,\n message: `Schema version ${schemaVersion} is not in range of supported schema versions [${minSupportedVersion}, ${maxSupportedVersion}].`,\n origin: ErrorOrigin.ZeroCache,\n });\n }\n return undefined;\n}\n"],"names":["ErrorKind.SchemaVersionNotSupported","ErrorOrigin.ZeroCache"],"mappings":";;;AASO,SAAS,8CACd,eACA,gBACA;AACA,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,EAAA;AAEF,MAAI,OAAO;AACT,UAAM;AAAA,EACR;AACF;AAEO,SAAS,4CACd,eACA,gBACA;AACA,QAAM,EAAC,qBAAqB,oBAAA,IAAuB;AACnD,MACE,gBAAgB,uBAChB,gBAAgB,qBAChB;AACA,WAAO,IAAI,cAAc;AAAA,MACvB,MAAMA;AAAAA,MACN,SAAS,kBAAkB,aAAa,kDAAkD,mBAAmB,KAAK,mBAAmB;AAAA,MACrI,QAAQC;AAAAA,IAAY,CACrB;AAAA,EACH;AACA,SAAO;AACT;"}