@confect/server 1.0.3 → 3.0.0

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 (79) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/ActionRunner.d.ts +2 -2
  3. package/dist/ActionRunner.d.ts.map +1 -1
  4. package/dist/ActionRunner.js +9 -7
  5. package/dist/ActionRunner.js.map +1 -1
  6. package/dist/Auth.d.ts.map +1 -1
  7. package/dist/Auth.js +1 -1
  8. package/dist/Auth.js.map +1 -1
  9. package/dist/ConvexConfigProvider.d.ts +10 -0
  10. package/dist/ConvexConfigProvider.d.ts.map +1 -0
  11. package/dist/ConvexConfigProvider.js +25 -0
  12. package/dist/ConvexConfigProvider.js.map +1 -0
  13. package/dist/Document.d.ts.map +1 -1
  14. package/dist/Document.js +2 -2
  15. package/dist/Document.js.map +1 -1
  16. package/dist/FunctionImpl.js +2 -2
  17. package/dist/FunctionImpl.js.map +1 -1
  18. package/dist/Handler.d.ts +18 -12
  19. package/dist/Handler.d.ts.map +1 -1
  20. package/dist/Handler.js.map +1 -1
  21. package/dist/HttpApi.d.ts.map +1 -1
  22. package/dist/HttpApi.js +2 -1
  23. package/dist/HttpApi.js.map +1 -1
  24. package/dist/MutationRunner.d.ts +2 -2
  25. package/dist/MutationRunner.d.ts.map +1 -1
  26. package/dist/MutationRunner.js +10 -8
  27. package/dist/MutationRunner.js.map +1 -1
  28. package/dist/QueryInitializer.d.ts.map +1 -1
  29. package/dist/QueryInitializer.js +2 -2
  30. package/dist/QueryInitializer.js.map +1 -1
  31. package/dist/QueryRunner.d.ts +2 -2
  32. package/dist/QueryRunner.d.ts.map +1 -1
  33. package/dist/QueryRunner.js +7 -5
  34. package/dist/QueryRunner.js.map +1 -1
  35. package/dist/RegisteredConvexFunction.d.ts +4 -4
  36. package/dist/RegisteredConvexFunction.d.ts.map +1 -1
  37. package/dist/RegisteredConvexFunction.js +25 -21
  38. package/dist/RegisteredConvexFunction.js.map +1 -1
  39. package/dist/RegisteredFunction.d.ts +15 -4
  40. package/dist/RegisteredFunction.d.ts.map +1 -1
  41. package/dist/RegisteredFunction.js.map +1 -1
  42. package/dist/RegisteredFunctions.d.ts +4 -4
  43. package/dist/RegisteredFunctions.d.ts.map +1 -1
  44. package/dist/RegisteredFunctions.js.map +1 -1
  45. package/dist/RegisteredNodeFunction.d.ts +3 -3
  46. package/dist/RegisteredNodeFunction.d.ts.map +1 -1
  47. package/dist/RegisteredNodeFunction.js +6 -5
  48. package/dist/RegisteredNodeFunction.js.map +1 -1
  49. package/dist/RegistryItem.d.ts +9 -9
  50. package/dist/RegistryItem.d.ts.map +1 -1
  51. package/dist/RegistryItem.js +2 -2
  52. package/dist/RegistryItem.js.map +1 -1
  53. package/dist/SchemaToValidator.d.ts +7 -6
  54. package/dist/SchemaToValidator.d.ts.map +1 -1
  55. package/dist/SchemaToValidator.js.map +1 -1
  56. package/dist/Storage.d.ts.map +1 -1
  57. package/dist/Storage.js +1 -1
  58. package/dist/Storage.js.map +1 -1
  59. package/dist/index.d.ts +3 -2
  60. package/dist/index.js +2 -1
  61. package/package.json +16 -14
  62. package/src/ActionRunner.ts +27 -13
  63. package/src/Auth.ts +3 -2
  64. package/src/ConvexConfigProvider.ts +58 -0
  65. package/src/Document.ts +14 -12
  66. package/src/FunctionImpl.ts +3 -3
  67. package/src/Handler.ts +39 -14
  68. package/src/HttpApi.ts +3 -1
  69. package/src/MutationRunner.ts +33 -18
  70. package/src/QueryInitializer.ts +13 -11
  71. package/src/QueryRunner.ts +22 -8
  72. package/src/RegisteredConvexFunction.ts +59 -41
  73. package/src/RegisteredFunction.ts +86 -1
  74. package/src/RegisteredFunctions.ts +10 -11
  75. package/src/RegisteredNodeFunction.ts +23 -13
  76. package/src/RegistryItem.ts +9 -12
  77. package/src/SchemaToValidator.ts +56 -39
  78. package/src/Storage.ts +5 -4
  79. package/src/index.ts +1 -0
@@ -2,7 +2,7 @@ import { Cause, Effect, Schema, SchemaAST } from "effect";
2
2
  import { PropertyValidators, VAny, VArray, VBoolean, VBytes, VFloat64, VId, VInt64, VLiteral, VNull, VObject, VOptional, VRecord, VString, VUnion, Validator } from "convex/values";
3
3
  import * as GenericId$1 from "@confect/core/GenericId";
4
4
  import * as effect_Types0 from "effect/Types";
5
- import { DeepMutable, IsAny, IsOptional, IsRecord, IsRecursive, IsUnion, IsValueLiteral, TypeError, UnionToTuple } from "@confect/core/Types";
5
+ import { IsAny, IsOptional, IsRecord, IsRecursive, IsUnion, TypeError, UnionToTuple } from "@confect/core/Types";
6
6
 
7
7
  //#region src/SchemaToValidator.d.ts
8
8
  declare namespace SchemaToValidator_d_exports {
@@ -20,13 +20,14 @@ type ReadonlyArrayValue = readonly ReadonlyValue[];
20
20
  type ReadonlyRecordValue = {
21
21
  readonly [key: string]: ReadonlyValue | undefined;
22
22
  };
23
- type ValueToValidator<Vl> = IsRecursive<Vl> extends true ? VAny : [Vl] extends [never] ? never : IsAny<Vl> extends true ? VAny : [Vl] extends [ReadonlyValue] ? Vl extends {
23
+ type MutableValue<T> = T extends ReadonlyArray<infer El> ? MutableValue<El>[] : T extends ReadonlyRecordValue ? { -readonly [K in keyof T]: MutableValue<T[K]> } : T;
24
+ type ValueToValidator<Vl> = [Vl] extends [never] ? never : IsAny<Vl> extends true ? VAny : [Vl] extends [null] ? VNull : [Vl] extends [boolean] ? [boolean] extends [Vl] ? VBoolean : VLiteral<Vl> : IsUnion<Vl> extends true ? IsRecursive<Vl> extends true ? VAny : [Vl] extends [ReadonlyValue] ? UnionValueToValidator<Vl> : TypeError<"Provided value is not a valid Convex value", Vl> : [Vl] extends [number] ? [number] extends [Vl] ? VFloat64 : VLiteral<Vl> : [Vl] extends [bigint] ? [bigint] extends [Vl] ? VInt64 : VLiteral<Vl> : [Vl] extends [string] ? Vl extends {
24
25
  __tableName: infer TableName extends string;
25
- } ? VId<GenericId$1.GenericId<TableName>> : IsValueLiteral<Vl> extends true ? VLiteral<Vl> : [Vl] extends [null] ? VNull : [Vl] extends [boolean] ? VBoolean : IsUnion<Vl> extends true ? UnionValueToValidator<Vl> : [Vl] extends [number] ? VFloat64 : [Vl] extends [bigint] ? VInt64 : [Vl] extends [string] ? VString : [Vl] extends [ArrayBuffer] ? VBytes : Vl extends ReadonlyArray<ReadonlyValue> ? ArrayValueToValidator<Vl> : Vl extends ReadonlyRecordValue ? RecordValueToValidator<Vl> : TypeError<"Unexpected value", Vl> : TypeError<"Provided value is not a valid Convex value", Vl>;
26
- type ArrayValueToValidator<Vl extends ReadonlyArray<ReadonlyValue>> = Vl extends ReadonlyArray<infer El extends ReadonlyValue> ? ValueToValidator<El> extends infer Vd extends Validator<any, any, any> ? VArray<DeepMutable<El[]>, Vd> : never : never;
27
- type RecordValueToValidator<Vl> = Vl extends ReadonlyRecordValue ? { -readonly [K in keyof Vl]-?: IsAny<Vl[K]> extends true ? IsOptional<Vl, K> extends true ? VOptional<VAny> : VAny : UndefinedOrValueToValidator<Vl[K]> } extends infer VdRecord extends Record<string, any> ? { -readonly [K in keyof Vl]: undefined extends Vl[K] ? DeepMutable<Exclude<Vl[K], undefined>> : DeepMutable<Vl[K]> } extends infer VlRecord extends Record<string, any> ? IsRecord<VlRecord> extends true ? VRecord<VlRecord, VString, VdRecord[keyof VdRecord]> : VObject<VlRecord, VdRecord> : never : never : never;
26
+ } ? VId<GenericId$1.GenericId<TableName>> : [string] extends [Vl] ? VString : VLiteral<Vl> : [Vl] extends [ArrayBuffer] ? VBytes : IsRecursive<Vl> extends true ? VAny : [Vl] extends [ReadonlyValue] ? Vl extends ReadonlyArray<ReadonlyValue> ? ArrayValueToValidator<Vl> : Vl extends ReadonlyRecordValue ? RecordValueToValidator<Vl> : TypeError<"Unexpected value", Vl> : TypeError<"Provided value is not a valid Convex value", Vl>;
27
+ type ArrayValueToValidator<Vl extends ReadonlyArray<ReadonlyValue>> = Vl extends ReadonlyArray<infer El extends ReadonlyValue> ? ValueToValidator<El> extends infer Vd extends Validator<any, any, any> ? VArray<MutableValue<El[]>, Vd> : never : never;
28
+ type RecordValueToValidator<Vl> = Vl extends ReadonlyRecordValue ? { -readonly [K in keyof Vl]-?: IsAny<Vl[K]> extends true ? IsOptional<Vl, K> extends true ? VOptional<VAny> : VAny : UndefinedOrValueToValidator<Vl[K]> } extends infer VdRecord extends Record<string, any> ? { -readonly [K in keyof Vl]: undefined extends Vl[K] ? MutableValue<Exclude<Vl[K], undefined>> : MutableValue<Vl[K]> } extends infer VlRecord extends Record<string, any> ? IsRecord<VlRecord> extends true ? VRecord<VlRecord, VString, VdRecord[keyof VdRecord]> : VObject<VlRecord, VdRecord> : never : never : never;
28
29
  type UndefinedOrValueToValidator<Vl extends ReadonlyValue | undefined> = undefined extends Vl ? [Vl] extends [(infer Val extends ReadonlyValue) | undefined] ? ValueToValidator<Val> extends infer Vd extends Validator<any, "required", any> ? VOptional<Vd> : never : never : [Vl] extends [ReadonlyValue] ? ValueToValidator<Vl> : never;
29
- type UnionValueToValidator<Vl extends ReadonlyValue> = [Vl] extends [ReadonlyValue] ? IsUnion<Vl> extends true ? UnionToTuple<Vl> extends infer VlTuple extends ReadonlyArray<ReadonlyValue> ? ValueTupleToValidatorTuple<VlTuple> extends infer VdTuple extends Validator<any, "required", any>[] ? VUnion<DeepMutable<Vl>, VdTuple> : TypeError<"Failed to convert value tuple to validator tuple"> : TypeError<"Failed to convert union to tuple"> : TypeError<"Expected a union of values, but got a single value instead"> : TypeError<"Provided value is not a valid Convex value">;
30
+ type UnionValueToValidator<Vl extends ReadonlyValue> = [Vl] extends [ReadonlyValue] ? IsUnion<Vl> extends true ? UnionToTuple<Vl> extends infer VlTuple extends ReadonlyArray<ReadonlyValue> ? ValueTupleToValidatorTuple<VlTuple> extends infer VdTuple extends Validator<any, "required", any>[] ? VUnion<MutableValue<Vl>, VdTuple> : TypeError<"Failed to convert value tuple to validator tuple"> : TypeError<"Failed to convert union to tuple"> : TypeError<"Expected a union of values, but got a single value instead"> : TypeError<"Provided value is not a valid Convex value">;
30
31
  type ValueTupleToValidatorTuple<VlTuple extends ReadonlyArray<ReadonlyValue>> = VlTuple extends [true, false, ...infer VlRest extends ReadonlyArray<ReadonlyValue>] | [false, true, ...infer VlRest extends ReadonlyArray<ReadonlyValue>] ? ValueTupleToValidatorTuple<VlRest> extends infer VdRest extends Validator<any, any, any>[] ? [VBoolean<boolean>, ...VdRest] : never : VlTuple extends [infer Vl extends ReadonlyValue, ...infer VlRest extends ReadonlyArray<ReadonlyValue>] ? ValueToValidator<Vl> extends infer Vd extends Validator<any, any, any> ? ValueTupleToValidatorTuple<VlRest> extends infer VdRest extends Validator<any, "required", any>[] ? [Vd, ...VdRest] : never : never : [];
31
32
  declare const compileSchema: <T, E>(schema: Schema.Schema<T, E>) => ValueToValidator<(typeof schema)["Encoded"]>;
32
33
  declare const isRecursive: (ast: SchemaAST.AST) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaToValidator.d.ts","names":[],"sources":["../src/SchemaToValidator.ts"],"mappings":"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"}
1
+ {"version":3,"file":"SchemaToValidator.d.ts","names":[],"sources":["../src/SchemaToValidator.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaToValidator.js","names":["GenericId"],"sources":["../src/SchemaToValidator.ts"],"sourcesContent":["import type {\n PropertyValidators,\n Validator,\n VAny,\n VArray,\n VBoolean,\n VBytes,\n VFloat64,\n VId,\n VInt64,\n VLiteral,\n VNull,\n VObject,\n VOptional,\n VRecord,\n VString,\n VUnion,\n} from \"convex/values\";\nimport { v } from \"convex/values\";\nimport {\n Array,\n Cause,\n Data,\n Effect,\n Exit,\n Match,\n Number,\n Option,\n type ParseResult,\n pipe,\n Predicate,\n Schema,\n SchemaAST,\n String,\n} from \"effect\";\n\nimport * as GenericId from \"@confect/core/GenericId\";\nimport type {\n DeepMutable,\n IsAny,\n IsOptional,\n IsRecord,\n IsRecursive,\n IsUnion,\n IsValueLiteral,\n TypeError,\n UnionToTuple,\n} from \"@confect/core/Types\";\n\n// Args\n\nexport const compileArgsSchema = <ConfectValue, ConvexValue>(\n argsSchema: Schema.Schema<ConfectValue, ConvexValue>,\n): PropertyValidators => {\n const ast = Schema.encodedSchema(argsSchema).ast;\n\n return pipe(\n ast,\n Match.value,\n Match.tag(\"TypeLiteral\", (typeLiteralAst) =>\n Array.isEmptyReadonlyArray(typeLiteralAst.indexSignatures)\n ? handlePropertySignatures(typeLiteralAst)\n : Effect.fail(new IndexSignaturesAreNotSupportedError()),\n ),\n Match.orElse(() => Effect.fail(new TopLevelMustBeObjectError())),\n runSyncThrow,\n );\n};\n\n// Returns\n\nexport const compileReturnsSchema = <ConfectValue, ConvexValue>(\n schema: Schema.Schema<ConfectValue, ConvexValue>,\n): Validator<any, any, any> =>\n runSyncThrow(compileAst(Schema.encodedSchema(schema).ast));\n\n// Table\n\n/**\n * Convert a table `Schema` to a table `Validator`.\n */\nexport type TableSchemaToTableValidator<\n TableSchema extends Schema.Schema.AnyNoContext,\n> =\n ValueToValidator<TableSchema[\"Encoded\"]> extends infer Vd extends\n | VObject<any, any, any, any>\n | VUnion<any, any, any, any>\n ? Vd\n : never;\n\nexport const compileTableSchema = <\n TableSchema extends Schema.Schema.AnyNoContext,\n>(\n schema: TableSchema,\n): TableSchemaToTableValidator<TableSchema> => {\n const ast = Schema.encodedSchema(schema).ast;\n\n return pipe(\n ast,\n Match.value,\n Match.tag(\"TypeLiteral\", ({ indexSignatures }) =>\n Array.isEmptyReadonlyArray(indexSignatures)\n ? (compileAst(ast) as Effect.Effect<any>)\n : Effect.fail(new IndexSignaturesAreNotSupportedError()),\n ),\n Match.tag(\"Union\", (unionAst) => compileAst(unionAst)),\n Match.orElse(() => Effect.fail(new TopLevelMustBeObjectOrUnionError())),\n runSyncThrow,\n );\n};\n\n// Compiler\n\nexport type ReadonlyValue =\n | string\n | number\n | bigint\n | boolean\n | ArrayBuffer\n | ReadonlyArrayValue\n | ReadonlyRecordValue\n | null;\n\ntype ReadonlyArrayValue = readonly ReadonlyValue[];\n\nexport type ReadonlyRecordValue = {\n readonly [key: string]: ReadonlyValue | undefined;\n};\n\nexport type ValueToValidator<Vl> =\n IsRecursive<Vl> extends true\n ? VAny\n : [Vl] extends [never]\n ? never\n : IsAny<Vl> extends true\n ? VAny\n : [Vl] extends [ReadonlyValue]\n ? Vl extends {\n __tableName: infer TableName extends string;\n }\n ? VId<GenericId.GenericId<TableName>>\n : IsValueLiteral<Vl> extends true\n ? VLiteral<Vl>\n : [Vl] extends [null]\n ? VNull\n : [Vl] extends [boolean]\n ? VBoolean\n : IsUnion<Vl> extends true\n ? UnionValueToValidator<Vl>\n : [Vl] extends [number]\n ? VFloat64\n : [Vl] extends [bigint]\n ? VInt64\n : [Vl] extends [string]\n ? VString\n : [Vl] extends [ArrayBuffer]\n ? VBytes\n : Vl extends ReadonlyArray<ReadonlyValue>\n ? ArrayValueToValidator<Vl>\n : Vl extends ReadonlyRecordValue\n ? RecordValueToValidator<Vl>\n : TypeError<\"Unexpected value\", Vl>\n : TypeError<\"Provided value is not a valid Convex value\", Vl>;\n\ntype ArrayValueToValidator<Vl extends ReadonlyArray<ReadonlyValue>> =\n Vl extends ReadonlyArray<infer El extends ReadonlyValue>\n ? ValueToValidator<El> extends infer Vd extends Validator<any, any, any>\n ? VArray<DeepMutable<El[]>, Vd>\n : never\n : never;\n\ntype RecordValueToValidator<Vl> = Vl extends ReadonlyRecordValue\n ? {\n -readonly [K in keyof Vl]-?: IsAny<Vl[K]> extends true\n ? IsOptional<Vl, K> extends true\n ? VOptional<VAny>\n : VAny\n : UndefinedOrValueToValidator<Vl[K]>;\n } extends infer VdRecord extends Record<string, any>\n ? {\n -readonly [K in keyof Vl]: undefined extends Vl[K]\n ? DeepMutable<Exclude<Vl[K], undefined>>\n : DeepMutable<Vl[K]>;\n } extends infer VlRecord extends Record<string, any>\n ? IsRecord<VlRecord> extends true\n ? VRecord<VlRecord, VString, VdRecord[keyof VdRecord]>\n : VObject<VlRecord, VdRecord>\n : never\n : never\n : never;\n\nexport type UndefinedOrValueToValidator<Vl extends ReadonlyValue | undefined> =\n undefined extends Vl\n ? [Vl] extends [(infer Val extends ReadonlyValue) | undefined]\n ? ValueToValidator<Val> extends infer Vd extends Validator<\n any,\n \"required\",\n any\n >\n ? VOptional<Vd>\n : never\n : never\n : [Vl] extends [ReadonlyValue]\n ? ValueToValidator<Vl>\n : never;\n\ntype UnionValueToValidator<Vl extends ReadonlyValue> = [Vl] extends [\n ReadonlyValue,\n]\n ? IsUnion<Vl> extends true\n ? UnionToTuple<Vl> extends infer VlTuple extends\n ReadonlyArray<ReadonlyValue>\n ? ValueTupleToValidatorTuple<VlTuple> extends infer VdTuple extends\n Validator<any, \"required\", any>[]\n ? VUnion<DeepMutable<Vl>, VdTuple>\n : TypeError<\"Failed to convert value tuple to validator tuple\">\n : TypeError<\"Failed to convert union to tuple\">\n : TypeError<\"Expected a union of values, but got a single value instead\">\n : TypeError<\"Provided value is not a valid Convex value\">;\n\ntype ValueTupleToValidatorTuple<VlTuple extends ReadonlyArray<ReadonlyValue>> =\n VlTuple extends\n | [true, false, ...infer VlRest extends ReadonlyArray<ReadonlyValue>]\n | [false, true, ...infer VlRest extends ReadonlyArray<ReadonlyValue>]\n ? ValueTupleToValidatorTuple<VlRest> extends infer VdRest extends Validator<\n any,\n any,\n any\n >[]\n ? [VBoolean<boolean>, ...VdRest]\n : never\n : VlTuple extends [\n infer Vl extends ReadonlyValue,\n ...infer VlRest extends ReadonlyArray<ReadonlyValue>,\n ]\n ? ValueToValidator<Vl> extends infer Vd extends Validator<any, any, any>\n ? ValueTupleToValidatorTuple<VlRest> extends infer VdRest extends\n Validator<any, \"required\", any>[]\n ? [Vd, ...VdRest]\n : never\n : never\n : [];\n\nexport const compileSchema = <T, E>(\n schema: Schema.Schema<T, E>,\n): ValueToValidator<(typeof schema)[\"Encoded\"]> =>\n runSyncThrow(compileAst(schema.ast)) as any;\n\nexport const isRecursive = (ast: SchemaAST.AST): boolean =>\n pipe(\n ast,\n Match.value,\n Match.tag(\n \"Literal\",\n \"BooleanKeyword\",\n \"StringKeyword\",\n \"NumberKeyword\",\n \"BigIntKeyword\",\n \"UnknownKeyword\",\n \"AnyKeyword\",\n \"Declaration\",\n \"UniqueSymbol\",\n \"SymbolKeyword\",\n \"UndefinedKeyword\",\n \"VoidKeyword\",\n \"NeverKeyword\",\n \"Enums\",\n \"TemplateLiteral\",\n \"ObjectKeyword\",\n \"Transformation\",\n () => false,\n ),\n Match.tag(\"Union\", ({ types }) =>\n Array.some(types, (type) => isRecursive(type)),\n ),\n Match.tag(\"TypeLiteral\", ({ propertySignatures }) =>\n Array.some(propertySignatures, ({ type }) => isRecursive(type)),\n ),\n Match.tag(\n \"TupleType\",\n ({ elements: optionalElements, rest: elements }) =>\n Array.some(optionalElements, (optionalElement) =>\n isRecursive(optionalElement.type),\n ) || Array.some(elements, (element) => isRecursive(element.type)),\n ),\n Match.tag(\"Refinement\", ({ from }) => isRecursive(from)),\n Match.tag(\"Suspend\", () => true),\n Match.exhaustive,\n );\n\nexport const compileAst = (\n ast: SchemaAST.AST,\n isOptionalPropertyOfTypeLiteral = false,\n): Effect.Effect<\n Validator<any, any, any>,\n | UnsupportedSchemaTypeError\n | UnsupportedPropertySignatureKeyTypeError\n | IndexSignaturesAreNotSupportedError\n | MixedIndexAndPropertySignaturesAreNotSupportedError\n | OptionalTupleElementsAreNotSupportedError\n | EmptyTupleIsNotSupportedError\n> =>\n isRecursive(ast)\n ? Effect.succeed(v.any())\n : pipe(\n ast,\n Match.value,\n Match.tag(\"Literal\", ({ literal }) =>\n pipe(\n literal,\n Match.value,\n Match.whenOr(\n Match.string,\n Match.number,\n Match.bigint,\n Match.boolean,\n (l) => v.literal(l),\n ),\n Match.when(Match.null, () => v.null()),\n Match.exhaustive,\n Effect.succeed,\n ),\n ),\n Match.tag(\"BooleanKeyword\", () => Effect.succeed(v.boolean())),\n Match.tag(\"StringKeyword\", (stringAst) =>\n GenericId.tableName(stringAst).pipe(\n Option.match({\n onNone: () => Effect.succeed(v.string()),\n onSome: (tableName) => Effect.succeed(v.id(tableName)),\n }),\n ),\n ),\n Match.tag(\"NumberKeyword\", () => Effect.succeed(v.float64())),\n Match.tag(\"BigIntKeyword\", () => Effect.succeed(v.int64())),\n Match.tag(\"Union\", (unionAst) =>\n handleUnion(unionAst, isOptionalPropertyOfTypeLiteral),\n ),\n Match.tag(\"TypeLiteral\", (typeLiteralAst) =>\n handleTypeLiteral(typeLiteralAst),\n ),\n Match.tag(\"TupleType\", (tupleTypeAst) => handleTupleType(tupleTypeAst)),\n Match.tag(\"UnknownKeyword\", \"AnyKeyword\", () =>\n Effect.succeed(v.any()),\n ),\n Match.tag(\"Declaration\", (declaration) =>\n Effect.mapBoth(\n declaration.decodeUnknown(...declaration.typeParameters)(\n new ArrayBuffer(0),\n {},\n declaration,\n ) as Effect.Effect<ArrayBuffer, ParseResult.ParseIssue>,\n {\n onSuccess: () => v.bytes(),\n onFailure: () =>\n new UnsupportedSchemaTypeError({\n schemaType: declaration._tag,\n }),\n },\n ),\n ),\n Match.tag(\"Refinement\", ({ from }) => compileAst(from)),\n Match.tag(\"Suspend\", () => Effect.succeed(v.any())),\n Match.tag(\n \"UniqueSymbol\",\n \"SymbolKeyword\",\n \"UndefinedKeyword\",\n \"VoidKeyword\",\n \"NeverKeyword\",\n \"Enums\",\n \"TemplateLiteral\",\n \"ObjectKeyword\",\n \"Transformation\",\n () =>\n new UnsupportedSchemaTypeError({\n schemaType: ast._tag,\n }),\n ),\n Match.exhaustive,\n );\n\nconst handleUnion = (\n { types: [first, second, ...rest] }: SchemaAST.Union,\n isOptionalPropertyOfTypeLiteral: boolean,\n) =>\n Effect.gen(function* () {\n const validatorEffects = isOptionalPropertyOfTypeLiteral\n ? Array.filterMap([first, second, ...rest], (type) =>\n Predicate.not(SchemaAST.isUndefinedKeyword)(type)\n ? Option.some(compileAst(type))\n : Option.none(),\n )\n : Array.map([first, second, ...rest], (type) => compileAst(type));\n\n const [firstValidator, secondValidator, ...restValidators] =\n yield* Effect.all(validatorEffects);\n\n /* v8 ignore start */\n if (firstValidator === undefined) {\n return yield* Effect.dieMessage(\n \"First validator of union is undefined; this should be impossible.\",\n );\n /* v8 ignore stop */\n } else if (secondValidator === undefined) {\n return firstValidator;\n } else {\n return v.union(firstValidator, secondValidator, ...restValidators);\n }\n });\n\nconst handleTypeLiteral = (typeLiteralAst: SchemaAST.TypeLiteral) =>\n pipe(\n typeLiteralAst.indexSignatures,\n Array.head,\n Option.match({\n onNone: () =>\n Effect.map(handlePropertySignatures(typeLiteralAst), v.object),\n onSome: ({ parameter, type }) =>\n pipe(\n typeLiteralAst.propertySignatures,\n Array.head,\n Option.match({\n onNone: () =>\n Effect.map(\n Effect.all({\n parameter_: compileAst(parameter),\n type_: compileAst(type),\n }),\n ({ parameter_, type_ }) => v.record(parameter_, type_),\n ),\n onSome: () =>\n Effect.fail(\n new MixedIndexAndPropertySignaturesAreNotSupportedError(),\n ),\n }),\n ),\n }),\n );\n\nconst handleTupleType = ({ elements, rest }: SchemaAST.TupleType) =>\n Effect.gen(function* () {\n const restValidator = pipe(\n rest,\n Array.head,\n Option.map(({ type }) => compileAst(type)),\n Effect.flatten,\n );\n\n const [f, s, ...r] = elements;\n\n const elementToValidator = ({ type, isOptional }: SchemaAST.OptionalType) =>\n Effect.if(isOptional, {\n onTrue: () =>\n Effect.fail(new OptionalTupleElementsAreNotSupportedError()),\n onFalse: () => compileAst(type),\n });\n\n const arrayItemsValidator = yield* f === undefined\n ? pipe(\n restValidator,\n Effect.catchTag(\"NoSuchElementException\", () =>\n Effect.fail(new EmptyTupleIsNotSupportedError()),\n ),\n )\n : s === undefined\n ? elementToValidator(f)\n : Effect.gen(function* () {\n const firstValidator = yield* elementToValidator(f);\n const secondValidator = yield* elementToValidator(s);\n const restValidators = yield* Effect.forEach(r, elementToValidator);\n\n return v.union(firstValidator, secondValidator, ...restValidators);\n });\n\n return v.array(arrayItemsValidator);\n });\n\nconst handlePropertySignatures = (typeLiteralAst: SchemaAST.TypeLiteral) =>\n pipe(\n typeLiteralAst.propertySignatures,\n Effect.forEach(({ type, name, isOptional }) => {\n if (String.isString(name)) {\n // Somehow, somewhere, keys of type number are being coerced to strings…\n return Option.match(Number.parse(name), {\n onNone: () =>\n Effect.gen(function* () {\n const validator = yield* compileAst(type, isOptional);\n\n return {\n propertyName: name,\n validator: isOptional ? v.optional(validator) : validator,\n };\n }),\n onSome: (number) =>\n Effect.fail(\n new UnsupportedPropertySignatureKeyTypeError({\n propertyKey: number,\n }),\n ),\n });\n } else {\n return Effect.fail(\n new UnsupportedPropertySignatureKeyTypeError({ propertyKey: name }),\n );\n }\n }),\n Effect.andThen((propertyNamesWithValidators) =>\n pipe(\n propertyNamesWithValidators,\n Array.reduce(\n {} as Record<string, Validator<any, any, any>>,\n (acc, { propertyName, validator }) => ({\n [propertyName]: validator,\n ...acc,\n }),\n ),\n Effect.succeed,\n ),\n ),\n );\n\n// Errors\n\nconst runSyncThrow = <A, E>(effect: Effect.Effect<A, E>) =>\n pipe(\n effect,\n Effect.runSyncExit,\n Exit.match({\n onSuccess: (validator) => validator,\n onFailure: (cause) => {\n throw Cause.squash(cause);\n },\n }),\n );\n\nexport class TopLevelMustBeObjectError extends Data.TaggedError(\n \"TopLevelMustBeObjectError\",\n) {\n /* v8 ignore start */\n override get message() {\n return \"Top level schema must be an object\";\n }\n /* v8 ignore stop */\n}\n\nexport class TopLevelMustBeObjectOrUnionError extends Data.TaggedError(\n \"TopLevelMustBeObjectOrUnionError\",\n) {\n /* v8 ignore start */\n override get message() {\n return \"Top level schema must be an object or a union\";\n }\n /* v8 ignore stop */\n}\n\nexport class UnsupportedPropertySignatureKeyTypeError extends Data.TaggedError(\n \"UnsupportedPropertySignatureKeyTypeError\",\n)<{\n readonly propertyKey: number | symbol;\n}> {\n /* v8 ignore start */\n override get message() {\n return `Unsupported property signature '${this.propertyKey.toString()}'. Property is of type '${typeof this.propertyKey}' but only 'string' properties are supported.`;\n }\n /* v8 ignore stop */\n}\n\nexport class EmptyTupleIsNotSupportedError extends Data.TaggedError(\n \"EmptyTupleIsNotSupportedError\",\n) {\n /* v8 ignore start */\n override get message() {\n return \"Tuple must have at least one element\";\n }\n /* v8 ignore stop */\n}\n\nexport class UnsupportedSchemaTypeError extends Data.TaggedError(\n \"UnsupportedSchemaTypeError\",\n)<{\n readonly schemaType: SchemaAST.AST[\"_tag\"];\n}> {\n /* v8 ignore start */\n override get message() {\n return `Unsupported schema type '${this.schemaType}'`;\n }\n /* v8 ignore stop */\n}\n\nexport class IndexSignaturesAreNotSupportedError extends Data.TaggedError(\n \"IndexSignaturesAreNotSupportedError\",\n) {\n /* v8 ignore start */\n override get message() {\n return \"Index signatures are not supported\";\n }\n /* v8 ignore stop */\n}\n\nexport class MixedIndexAndPropertySignaturesAreNotSupportedError extends Data.TaggedError(\n \"MixedIndexAndPropertySignaturesAreNotSupportedError\",\n) {\n /* v8 ignore start */\n override get message() {\n return \"Mixed index and property signatures are not supported\";\n }\n /* v8 ignore stop */\n}\n\nexport class OptionalTupleElementsAreNotSupportedError extends Data.TaggedError(\n \"OptionalTupleElementsAreNotSupportedError\",\n) {\n /* v8 ignore start */\n override get message() {\n return \"Optional tuple elements are not supported\";\n }\n /* v8 ignore stop */\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SchemaToValidator.js","names":["GenericId"],"sources":["../src/SchemaToValidator.ts"],"sourcesContent":["import type {\n PropertyValidators,\n Validator,\n VAny,\n VArray,\n VBoolean,\n VBytes,\n VFloat64,\n VId,\n VInt64,\n VLiteral,\n VNull,\n VObject,\n VOptional,\n VRecord,\n VString,\n VUnion,\n} from \"convex/values\";\nimport { v } from \"convex/values\";\nimport {\n Array,\n Cause,\n Data,\n Effect,\n Exit,\n Match,\n Number,\n Option,\n type ParseResult,\n pipe,\n Predicate,\n Schema,\n SchemaAST,\n String,\n} from \"effect\";\n\nimport * as GenericId from \"@confect/core/GenericId\";\nimport type {\n IsAny,\n IsOptional,\n IsRecord,\n IsRecursive,\n IsUnion,\n TypeError,\n UnionToTuple,\n} from \"@confect/core/Types\";\n\n// Args\n\nexport const compileArgsSchema = <ConfectValue, ConvexValue>(\n argsSchema: Schema.Schema<ConfectValue, ConvexValue>,\n): PropertyValidators => {\n const ast = Schema.encodedSchema(argsSchema).ast;\n\n return pipe(\n ast,\n Match.value,\n Match.tag(\"TypeLiteral\", (typeLiteralAst) =>\n Array.isEmptyReadonlyArray(typeLiteralAst.indexSignatures)\n ? handlePropertySignatures(typeLiteralAst)\n : Effect.fail(new IndexSignaturesAreNotSupportedError()),\n ),\n Match.orElse(() => Effect.fail(new TopLevelMustBeObjectError())),\n runSyncThrow,\n );\n};\n\n// Returns\n\nexport const compileReturnsSchema = <ConfectValue, ConvexValue>(\n schema: Schema.Schema<ConfectValue, ConvexValue>,\n): Validator<any, any, any> =>\n runSyncThrow(compileAst(Schema.encodedSchema(schema).ast));\n\n// Table\n\n/**\n * Convert a table `Schema` to a table `Validator`.\n */\nexport type TableSchemaToTableValidator<\n TableSchema extends Schema.Schema.AnyNoContext,\n> =\n ValueToValidator<TableSchema[\"Encoded\"]> extends infer Vd extends\n | VObject<any, any, any, any>\n | VUnion<any, any, any, any>\n ? Vd\n : never;\n\nexport const compileTableSchema = <\n TableSchema extends Schema.Schema.AnyNoContext,\n>(\n schema: TableSchema,\n): TableSchemaToTableValidator<TableSchema> => {\n const ast = Schema.encodedSchema(schema).ast;\n\n return pipe(\n ast,\n Match.value,\n Match.tag(\"TypeLiteral\", ({ indexSignatures }) =>\n Array.isEmptyReadonlyArray(indexSignatures)\n ? (compileAst(ast) as Effect.Effect<any>)\n : Effect.fail(new IndexSignaturesAreNotSupportedError()),\n ),\n Match.tag(\"Union\", (unionAst) => compileAst(unionAst)),\n Match.orElse(() => Effect.fail(new TopLevelMustBeObjectOrUnionError())),\n runSyncThrow,\n );\n};\n\n// Compiler\n\nexport type ReadonlyValue =\n | string\n | number\n | bigint\n | boolean\n | ArrayBuffer\n | ReadonlyArrayValue\n | ReadonlyRecordValue\n | null;\n\ntype ReadonlyArrayValue = readonly ReadonlyValue[];\n\nexport type ReadonlyRecordValue = {\n readonly [key: string]: ReadonlyValue | undefined;\n};\n\ntype MutableValue<T> =\n T extends ReadonlyArray<infer El>\n ? MutableValue<El>[]\n : T extends ReadonlyRecordValue\n ? { -readonly [K in keyof T]: MutableValue<T[K]> }\n : T;\n\nexport type ValueToValidator<Vl> = [Vl] extends [never]\n ? never\n : IsAny<Vl> extends true\n ? VAny\n : [Vl] extends [null]\n ? VNull\n : [Vl] extends [boolean]\n ? [boolean] extends [Vl]\n ? VBoolean\n : VLiteral<Vl>\n : IsUnion<Vl> extends true\n ? IsRecursive<Vl> extends true\n ? VAny\n : [Vl] extends [ReadonlyValue]\n ? UnionValueToValidator<Vl>\n : TypeError<\"Provided value is not a valid Convex value\", Vl>\n : [Vl] extends [number]\n ? [number] extends [Vl]\n ? VFloat64\n : VLiteral<Vl>\n : [Vl] extends [bigint]\n ? [bigint] extends [Vl]\n ? VInt64\n : VLiteral<Vl>\n : [Vl] extends [string]\n ? Vl extends {\n __tableName: infer TableName extends string;\n }\n ? VId<GenericId.GenericId<TableName>>\n : [string] extends [Vl]\n ? VString\n : VLiteral<Vl>\n : [Vl] extends [ArrayBuffer]\n ? VBytes\n : IsRecursive<Vl> extends true\n ? VAny\n : [Vl] extends [ReadonlyValue]\n ? Vl extends ReadonlyArray<ReadonlyValue>\n ? ArrayValueToValidator<Vl>\n : Vl extends ReadonlyRecordValue\n ? RecordValueToValidator<Vl>\n : TypeError<\"Unexpected value\", Vl>\n : TypeError<\n \"Provided value is not a valid Convex value\",\n Vl\n >;\n\ntype ArrayValueToValidator<Vl extends ReadonlyArray<ReadonlyValue>> =\n Vl extends ReadonlyArray<infer El extends ReadonlyValue>\n ? ValueToValidator<El> extends infer Vd extends Validator<any, any, any>\n ? VArray<MutableValue<El[]>, Vd>\n : never\n : never;\n\ntype RecordValueToValidator<Vl> = Vl extends ReadonlyRecordValue\n ? {\n -readonly [K in keyof Vl]-?: IsAny<Vl[K]> extends true\n ? IsOptional<Vl, K> extends true\n ? VOptional<VAny>\n : VAny\n : UndefinedOrValueToValidator<Vl[K]>;\n } extends infer VdRecord extends Record<string, any>\n ? {\n -readonly [K in keyof Vl]: undefined extends Vl[K]\n ? MutableValue<Exclude<Vl[K], undefined>>\n : MutableValue<Vl[K]>;\n } extends infer VlRecord extends Record<string, any>\n ? IsRecord<VlRecord> extends true\n ? VRecord<VlRecord, VString, VdRecord[keyof VdRecord]>\n : VObject<VlRecord, VdRecord>\n : never\n : never\n : never;\n\nexport type UndefinedOrValueToValidator<Vl extends ReadonlyValue | undefined> =\n undefined extends Vl\n ? [Vl] extends [(infer Val extends ReadonlyValue) | undefined]\n ? ValueToValidator<Val> extends infer Vd extends Validator<\n any,\n \"required\",\n any\n >\n ? VOptional<Vd>\n : never\n : never\n : [Vl] extends [ReadonlyValue]\n ? ValueToValidator<Vl>\n : never;\n\ntype UnionValueToValidator<Vl extends ReadonlyValue> = [Vl] extends [\n ReadonlyValue,\n]\n ? IsUnion<Vl> extends true\n ? UnionToTuple<Vl> extends infer VlTuple extends\n ReadonlyArray<ReadonlyValue>\n ? ValueTupleToValidatorTuple<VlTuple> extends infer VdTuple extends\n Validator<any, \"required\", any>[]\n ? VUnion<MutableValue<Vl>, VdTuple>\n : TypeError<\"Failed to convert value tuple to validator tuple\">\n : TypeError<\"Failed to convert union to tuple\">\n : TypeError<\"Expected a union of values, but got a single value instead\">\n : TypeError<\"Provided value is not a valid Convex value\">;\n\ntype ValueTupleToValidatorTuple<VlTuple extends ReadonlyArray<ReadonlyValue>> =\n VlTuple extends\n | [true, false, ...infer VlRest extends ReadonlyArray<ReadonlyValue>]\n | [false, true, ...infer VlRest extends ReadonlyArray<ReadonlyValue>]\n ? ValueTupleToValidatorTuple<VlRest> extends infer VdRest extends Validator<\n any,\n any,\n any\n >[]\n ? [VBoolean<boolean>, ...VdRest]\n : never\n : VlTuple extends [\n infer Vl extends ReadonlyValue,\n ...infer VlRest extends ReadonlyArray<ReadonlyValue>,\n ]\n ? ValueToValidator<Vl> extends infer Vd extends Validator<any, any, any>\n ? ValueTupleToValidatorTuple<VlRest> extends infer VdRest extends\n Validator<any, \"required\", any>[]\n ? [Vd, ...VdRest]\n : never\n : never\n : [];\n\nexport const compileSchema = <T, E>(\n schema: Schema.Schema<T, E>,\n): ValueToValidator<(typeof schema)[\"Encoded\"]> =>\n runSyncThrow(compileAst(schema.ast)) as any;\n\nexport const isRecursive = (ast: SchemaAST.AST): boolean =>\n pipe(\n ast,\n Match.value,\n Match.tag(\n \"Literal\",\n \"BooleanKeyword\",\n \"StringKeyword\",\n \"NumberKeyword\",\n \"BigIntKeyword\",\n \"UnknownKeyword\",\n \"AnyKeyword\",\n \"Declaration\",\n \"UniqueSymbol\",\n \"SymbolKeyword\",\n \"UndefinedKeyword\",\n \"VoidKeyword\",\n \"NeverKeyword\",\n \"Enums\",\n \"TemplateLiteral\",\n \"ObjectKeyword\",\n \"Transformation\",\n () => false,\n ),\n Match.tag(\"Union\", ({ types }) =>\n Array.some(types, (type) => isRecursive(type)),\n ),\n Match.tag(\"TypeLiteral\", ({ propertySignatures }) =>\n Array.some(propertySignatures, ({ type }) => isRecursive(type)),\n ),\n Match.tag(\n \"TupleType\",\n ({ elements: optionalElements, rest: elements }) =>\n Array.some(optionalElements, (optionalElement) =>\n isRecursive(optionalElement.type),\n ) || Array.some(elements, (element) => isRecursive(element.type)),\n ),\n Match.tag(\"Refinement\", ({ from }) => isRecursive(from)),\n Match.tag(\"Suspend\", () => true),\n Match.exhaustive,\n );\n\nexport const compileAst = (\n ast: SchemaAST.AST,\n isOptionalPropertyOfTypeLiteral = false,\n): Effect.Effect<\n Validator<any, any, any>,\n | UnsupportedSchemaTypeError\n | UnsupportedPropertySignatureKeyTypeError\n | IndexSignaturesAreNotSupportedError\n | MixedIndexAndPropertySignaturesAreNotSupportedError\n | OptionalTupleElementsAreNotSupportedError\n | EmptyTupleIsNotSupportedError\n> =>\n isRecursive(ast)\n ? Effect.succeed(v.any())\n : pipe(\n ast,\n Match.value,\n Match.tag(\"Literal\", ({ literal }) =>\n pipe(\n literal,\n Match.value,\n Match.whenOr(\n Match.string,\n Match.number,\n Match.bigint,\n Match.boolean,\n (l) => v.literal(l),\n ),\n Match.when(Match.null, () => v.null()),\n Match.exhaustive,\n Effect.succeed,\n ),\n ),\n Match.tag(\"BooleanKeyword\", () => Effect.succeed(v.boolean())),\n Match.tag(\"StringKeyword\", (stringAst) =>\n GenericId.tableName(stringAst).pipe(\n Option.match({\n onNone: () => Effect.succeed(v.string()),\n onSome: (tableName) => Effect.succeed(v.id(tableName)),\n }),\n ),\n ),\n Match.tag(\"NumberKeyword\", () => Effect.succeed(v.float64())),\n Match.tag(\"BigIntKeyword\", () => Effect.succeed(v.int64())),\n Match.tag(\"Union\", (unionAst) =>\n handleUnion(unionAst, isOptionalPropertyOfTypeLiteral),\n ),\n Match.tag(\"TypeLiteral\", (typeLiteralAst) =>\n handleTypeLiteral(typeLiteralAst),\n ),\n Match.tag(\"TupleType\", (tupleTypeAst) => handleTupleType(tupleTypeAst)),\n Match.tag(\"UnknownKeyword\", \"AnyKeyword\", () =>\n Effect.succeed(v.any()),\n ),\n Match.tag(\"Declaration\", (declaration) =>\n Effect.mapBoth(\n declaration.decodeUnknown(...declaration.typeParameters)(\n new ArrayBuffer(0),\n {},\n declaration,\n ) as Effect.Effect<ArrayBuffer, ParseResult.ParseIssue>,\n {\n onSuccess: () => v.bytes(),\n onFailure: () =>\n new UnsupportedSchemaTypeError({\n schemaType: declaration._tag,\n }),\n },\n ),\n ),\n Match.tag(\"Refinement\", ({ from }) => compileAst(from)),\n Match.tag(\"Suspend\", () => Effect.succeed(v.any())),\n Match.tag(\n \"UniqueSymbol\",\n \"SymbolKeyword\",\n \"UndefinedKeyword\",\n \"VoidKeyword\",\n \"NeverKeyword\",\n \"Enums\",\n \"TemplateLiteral\",\n \"ObjectKeyword\",\n \"Transformation\",\n () =>\n new UnsupportedSchemaTypeError({\n schemaType: ast._tag,\n }),\n ),\n Match.exhaustive,\n );\n\nconst handleUnion = (\n { types: [first, second, ...rest] }: SchemaAST.Union,\n isOptionalPropertyOfTypeLiteral: boolean,\n) =>\n Effect.gen(function* () {\n const validatorEffects = isOptionalPropertyOfTypeLiteral\n ? Array.filterMap([first, second, ...rest], (type) =>\n Predicate.not(SchemaAST.isUndefinedKeyword)(type)\n ? Option.some(compileAst(type))\n : Option.none(),\n )\n : Array.map([first, second, ...rest], (type) => compileAst(type));\n\n const [firstValidator, secondValidator, ...restValidators] =\n yield* Effect.all(validatorEffects);\n\n /* v8 ignore start */\n if (firstValidator === undefined) {\n return yield* Effect.dieMessage(\n \"First validator of union is undefined; this should be impossible.\",\n );\n /* v8 ignore stop */\n } else if (secondValidator === undefined) {\n return firstValidator;\n } else {\n return v.union(firstValidator, secondValidator, ...restValidators);\n }\n });\n\nconst handleTypeLiteral = (typeLiteralAst: SchemaAST.TypeLiteral) =>\n pipe(\n typeLiteralAst.indexSignatures,\n Array.head,\n Option.match({\n onNone: () =>\n Effect.map(handlePropertySignatures(typeLiteralAst), v.object),\n onSome: ({ parameter, type }) =>\n pipe(\n typeLiteralAst.propertySignatures,\n Array.head,\n Option.match({\n onNone: () =>\n Effect.map(\n Effect.all({\n parameter_: compileAst(parameter),\n type_: compileAst(type),\n }),\n ({ parameter_, type_ }) => v.record(parameter_, type_),\n ),\n onSome: () =>\n Effect.fail(\n new MixedIndexAndPropertySignaturesAreNotSupportedError(),\n ),\n }),\n ),\n }),\n );\n\nconst handleTupleType = ({ elements, rest }: SchemaAST.TupleType) =>\n Effect.gen(function* () {\n const restValidator = pipe(\n rest,\n Array.head,\n Option.map(({ type }) => compileAst(type)),\n Effect.flatten,\n );\n\n const [f, s, ...r] = elements;\n\n const elementToValidator = ({ type, isOptional }: SchemaAST.OptionalType) =>\n Effect.if(isOptional, {\n onTrue: () =>\n Effect.fail(new OptionalTupleElementsAreNotSupportedError()),\n onFalse: () => compileAst(type),\n });\n\n const arrayItemsValidator = yield* f === undefined\n ? pipe(\n restValidator,\n Effect.catchTag(\"NoSuchElementException\", () =>\n Effect.fail(new EmptyTupleIsNotSupportedError()),\n ),\n )\n : s === undefined\n ? elementToValidator(f)\n : Effect.gen(function* () {\n const firstValidator = yield* elementToValidator(f);\n const secondValidator = yield* elementToValidator(s);\n const restValidators = yield* Effect.forEach(r, elementToValidator);\n\n return v.union(firstValidator, secondValidator, ...restValidators);\n });\n\n return v.array(arrayItemsValidator);\n });\n\nconst handlePropertySignatures = (typeLiteralAst: SchemaAST.TypeLiteral) =>\n pipe(\n typeLiteralAst.propertySignatures,\n Effect.forEach(({ type, name, isOptional }) => {\n if (String.isString(name)) {\n // Somehow, somewhere, keys of type number are being coerced to strings…\n return Option.match(Number.parse(name), {\n onNone: () =>\n Effect.gen(function* () {\n const validator = yield* compileAst(type, isOptional);\n\n return {\n propertyName: name,\n validator: isOptional ? v.optional(validator) : validator,\n };\n }),\n onSome: (number) =>\n Effect.fail(\n new UnsupportedPropertySignatureKeyTypeError({\n propertyKey: number,\n }),\n ),\n });\n } else {\n return Effect.fail(\n new UnsupportedPropertySignatureKeyTypeError({ propertyKey: name }),\n );\n }\n }),\n Effect.andThen((propertyNamesWithValidators) =>\n pipe(\n propertyNamesWithValidators,\n Array.reduce(\n {} as Record<string, Validator<any, any, any>>,\n (acc, { propertyName, validator }) => ({\n [propertyName]: validator,\n ...acc,\n }),\n ),\n Effect.succeed,\n ),\n ),\n );\n\n// Errors\n\nconst runSyncThrow = <A, E>(effect: Effect.Effect<A, E>) =>\n pipe(\n effect,\n Effect.runSyncExit,\n Exit.match({\n onSuccess: (validator) => validator,\n onFailure: (cause) => {\n throw Cause.squash(cause);\n },\n }),\n );\n\nexport class TopLevelMustBeObjectError extends Data.TaggedError(\n \"TopLevelMustBeObjectError\",\n) {\n /* v8 ignore start */\n override get message() {\n return \"Top level schema must be an object\";\n }\n /* v8 ignore stop */\n}\n\nexport class TopLevelMustBeObjectOrUnionError extends Data.TaggedError(\n \"TopLevelMustBeObjectOrUnionError\",\n) {\n /* v8 ignore start */\n override get message() {\n return \"Top level schema must be an object or a union\";\n }\n /* v8 ignore stop */\n}\n\nexport class UnsupportedPropertySignatureKeyTypeError extends Data.TaggedError(\n \"UnsupportedPropertySignatureKeyTypeError\",\n)<{\n readonly propertyKey: number | symbol;\n}> {\n /* v8 ignore start */\n override get message() {\n return `Unsupported property signature '${this.propertyKey.toString()}'. Property is of type '${typeof this.propertyKey}' but only 'string' properties are supported.`;\n }\n /* v8 ignore stop */\n}\n\nexport class EmptyTupleIsNotSupportedError extends Data.TaggedError(\n \"EmptyTupleIsNotSupportedError\",\n) {\n /* v8 ignore start */\n override get message() {\n return \"Tuple must have at least one element\";\n }\n /* v8 ignore stop */\n}\n\nexport class UnsupportedSchemaTypeError extends Data.TaggedError(\n \"UnsupportedSchemaTypeError\",\n)<{\n readonly schemaType: SchemaAST.AST[\"_tag\"];\n}> {\n /* v8 ignore start */\n override get message() {\n return `Unsupported schema type '${this.schemaType}'`;\n }\n /* v8 ignore stop */\n}\n\nexport class IndexSignaturesAreNotSupportedError extends Data.TaggedError(\n \"IndexSignaturesAreNotSupportedError\",\n) {\n /* v8 ignore start */\n override get message() {\n return \"Index signatures are not supported\";\n }\n /* v8 ignore stop */\n}\n\nexport class MixedIndexAndPropertySignaturesAreNotSupportedError extends Data.TaggedError(\n \"MixedIndexAndPropertySignaturesAreNotSupportedError\",\n) {\n /* v8 ignore start */\n override get message() {\n return \"Mixed index and property signatures are not supported\";\n }\n /* v8 ignore stop */\n}\n\nexport class OptionalTupleElementsAreNotSupportedError extends Data.TaggedError(\n \"OptionalTupleElementsAreNotSupportedError\",\n) {\n /* v8 ignore start */\n override get message() {\n return \"Optional tuple elements are not supported\";\n }\n /* v8 ignore stop */\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Storage.d.ts","names":[],"sources":["../src/Storage.ts"],"mappings":";;;;;;;;;;cAMmE,kBAAA,EAGxB,eAAA,CAAA,QAAA;sBAArB,SAAA,iBAAqB,MAAA,CAAA,MAAA,CAAA,GAAA,EAAA,iBAAA;AAAA;sBAArB,SAAA,iBAAqB,MAAA,CAAA,MAAA,CAAA,GAAA,EAAA,iBAAA;AAAA;;wBAArB,SAAA,iBAAqB,MAAA,CAAA,MAAA,CAAA,GAAA,EAAA,iBAAA;EAAA;;cA+C9B,aAAA,SAAsB,kBAAA;EAAA,gBAGjB,KAAA,GAAS,aAAA,EAAe,eAAA,KAAmB,KAAA,CAAA,KAAA,CAAA,aAAA;AAAA;AAAA,cAE5D,kBAAA,EA/B0C,eAAA,CAAA,QAAA;;sBAArB,SAAA,iBAAqB,MAAA,CAAA,MAAA,OAAA,iBAAA;AAAA;;sBAArB,SAAA,iBAAqB,MAAA,CAAA,MAAA,OAAA,iBAAA;AAAA;;;wBAArB,SAAA,iBAAqB,MAAA,CAAA,MAAA,OAAA,iBAAA;EAAA;;cAiC9B,aAAA,SAAsB,kBAAA;EAAA,gBAGjB,KAAA,GAAS,aAAA,EAAe,eAAA,KAAmB,KAAA,CAAA,KAAA,CAAA,aAAA;AAAA;AAAA,cAE5D,wBAAA,EAhBkD,eAAA,CAAA,QAAA;mBAZhC,SAAA,iBAAqB,MAAA,CAAA,MAAA,CAAA,IAAA,EAAA,iBAAA;gBAYxB,IAAA,EAAI,OAAA;IAAc,MAAA;EAAA,MAAiB,MAAA,CAAA,MAAA,CAAA,SAAA;AAAA;mBAZhC,SAAA,iBAAqB,MAAA,CAAA,MAAA,CAAA,IAAA,EAAA,iBAAA;gBAYxB,IAAA,EAAI,OAAA;IAAc,MAAA;EAAA,MAAiB,MAAA,CAAA,MAAA,CAAA,SAAA;AAAA;;qBAZhC,SAAA,iBAAqB,MAAA,CAAA,MAAA,CAAA,IAAA,EAAA,iBAAA;kBAYxB,IAAA,EAAI,OAAA;MAAc,MAAA;IAAA,MAAiB,MAAA,CAAA,MAAA,CAAA,SAAA;EAAA;;cAkBtC,mBAAA,SAA4B,wBAAA;EAAA,gBAGvB,KAAA,GAAS,mBAAA,EAAqB,qBAAA,KAAyB,KAAA,CAAA,KAAA,CAAA,mBAAA;AAAA;AAAA,cAExE,sBAAA;;;;;cAEY,iBAAA,SAA0B,sBAAA;EAAA,IAKxB,OAAA,CAAA;AAAA"}
1
+ {"version":3,"file":"Storage.d.ts","names":[],"sources":["../src/Storage.ts"],"mappings":";;;;;;;;;;cAMmE,kBAAA,EAGxB,eAAA,CAAA,QAAA;sBAArB,SAAA,iBAAqB,MAAA,CAAA,MAAA,CAAA,GAAA,EAAA,iBAAA;AAAA;sBAArB,SAAA,iBAAqB,MAAA,CAAA,MAAA,CAAA,GAAA,EAAA,iBAAA;AAAA;;wBAArB,SAAA,iBAAqB,MAAA,CAAA,MAAA,CAAA,GAAA,EAAA,iBAAA;EAAA;;cA+C9B,aAAA,SAAsB,kBAAA;EAAA,gBAGjB,KAAA,GAAS,aAAA,EAAe,eAAA,KAAmB,KAAA,CAAA,KAAA,CAAA,aAAA;AAAA;AAAA,cAE5D,kBAAA,EA/B0C,eAAA,CAAA,QAAA;;sBAArB,SAAA,iBAAqB,MAAA,CAAA,MAAA,OAAA,iBAAA;AAAA;;sBAArB,SAAA,iBAAqB,MAAA,CAAA,MAAA,OAAA,iBAAA;AAAA;;;wBAArB,SAAA,iBAAqB,MAAA,CAAA,MAAA,OAAA,iBAAA;EAAA;;cAiC9B,aAAA,SAAsB,kBAAA;EAAA,gBAGjB,KAAA,GAAS,aAAA,EAAe,eAAA,KAAmB,KAAA,CAAA,KAAA,CAAA,aAAA;AAAA;AAAA,cAE5D,wBAAA,EAhBkD,eAAA,CAAA,QAAA;mBAZhC,SAAA,iBAAqB,MAAA,CAAA,MAAA,CAAA,IAAA,EAAA,iBAAA;gBAYxB,IAAA,EAAI,OAAA;IAAc,MAAA;EAAA,MAAiB,MAAA,CAAA,MAAA,CAAA,SAAA;AAAA;mBAZhC,SAAA,iBAAqB,MAAA,CAAA,MAAA,CAAA,IAAA,EAAA,iBAAA;gBAYxB,IAAA,EAAI,OAAA;IAAc,MAAA;EAAA,MAAiB,MAAA,CAAA,MAAA,CAAA,SAAA;AAAA;;qBAZhC,SAAA,iBAAqB,MAAA,CAAA,MAAA,CAAA,IAAA,EAAA,iBAAA;kBAYxB,IAAA,EAAI,OAAA;MAAc,MAAA;IAAA,MAAiB,MAAA,CAAA,MAAA,CAAA,SAAA;EAAA;;cAkBtC,mBAAA,SAA4B,wBAAA;EAAA,gBAGvB,KAAA,GAAS,mBAAA,EAAqB,qBAAA,KAAyB,KAAA,CAAA,KAAA,CAAA,mBAAA;AAAA;AAAA,cAExE,sBAAA;;;;;cAEY,iBAAA,SAA0B,sBAAA;EAAA,IAMxB,OAAA,CAAA;AAAA"}
package/dist/Storage.js CHANGED
@@ -35,7 +35,7 @@ var StorageWriter = class extends Effect.Tag("@confect/server/Storage/StorageWri
35
35
  var StorageActionWriter = class extends Effect.Tag("@confect/server/Storage/StorageActionWriter")() {
36
36
  static layer = (storageActionWriter) => Layer.succeed(this, makeStorageActionWriter(storageActionWriter));
37
37
  };
38
- var BlobNotFoundError = class extends Schema.TaggedError("BlobNotFoundError")("BlobNotFoundError", { id: Schema.String }) {
38
+ var BlobNotFoundError = class extends Schema.TaggedError()("BlobNotFoundError", { id: Schema.String }) {
39
39
  get message() {
40
40
  return `File with ID '${this.id}' not found`;
41
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Storage.js","names":[],"sources":["../src/Storage.ts"],"sourcesContent":["import type {\n StorageActionWriter as ConvexStorageActionWriter,\n StorageReader as ConvexStorageReader,\n StorageWriter as ConvexStorageWriter,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\nimport { Effect, flow, Layer, Option, pipe, Schema } from \"effect\";\n\nconst makeStorageReader = (storageReader: ConvexStorageReader) => ({\n getUrl: (storageId: GenericId<\"_storage\">) =>\n Effect.promise(() => storageReader.getUrl(storageId)).pipe(\n Effect.andThen(\n flow(\n Option.fromNullable,\n Option.match({\n onNone: () => Effect.fail(new BlobNotFoundError({ id: storageId })),\n onSome: (doc) => pipe(doc, Schema.decode(Schema.URL), Effect.orDie),\n }),\n ),\n ),\n ),\n});\n\nconst makeStorageWriter = (storageWriter: ConvexStorageWriter) => ({\n generateUploadUrl: () =>\n Effect.promise(() => storageWriter.generateUploadUrl()).pipe(\n Effect.andThen((url) =>\n pipe(url, Schema.decode(Schema.URL), Effect.orDie),\n ),\n ),\n delete: (storageId: GenericId<\"_storage\">) =>\n Effect.tryPromise({\n try: () => storageWriter.delete(storageId),\n catch: () => new BlobNotFoundError({ id: storageId }),\n }),\n});\n\nconst makeStorageActionWriter = (\n storageActionWriter: ConvexStorageActionWriter,\n) => ({\n get: (storageId: GenericId<\"_storage\">) =>\n Effect.promise(() => storageActionWriter.get(storageId)).pipe(\n Effect.andThen(\n flow(\n Option.fromNullable,\n Option.match({\n onNone: () => Effect.fail(new BlobNotFoundError({ id: storageId })),\n onSome: Effect.succeed,\n }),\n ),\n ),\n ),\n store: (blob: Blob, options?: { sha256?: string }) =>\n Effect.promise(() => storageActionWriter.store(blob, options)),\n});\n\nexport class StorageReader extends Effect.Tag(\n \"@confect/server/Storage/StorageReader\",\n)<StorageReader, ReturnType<typeof makeStorageReader>>() {\n static readonly layer = (storageReader: ConvexStorageReader) =>\n Layer.succeed(this, makeStorageReader(storageReader));\n}\n\nexport class StorageWriter extends Effect.Tag(\n \"@confect/server/Storage/StorageWriter\",\n)<StorageWriter, ReturnType<typeof makeStorageWriter>>() {\n static readonly layer = (storageWriter: ConvexStorageWriter) =>\n Layer.succeed(this, makeStorageWriter(storageWriter));\n}\n\nexport class StorageActionWriter extends Effect.Tag(\n \"@confect/server/Storage/StorageActionWriter\",\n)<StorageActionWriter, ReturnType<typeof makeStorageActionWriter>>() {\n static readonly layer = (storageActionWriter: ConvexStorageActionWriter) =>\n Layer.succeed(this, makeStorageActionWriter(storageActionWriter));\n}\n\nexport class BlobNotFoundError extends Schema.TaggedError<BlobNotFoundError>(\n \"BlobNotFoundError\",\n)(\"BlobNotFoundError\", {\n id: Schema.String,\n}) {\n override get message(): string {\n return `File with ID '${this.id}' not found`;\n }\n}\n"],"mappings":";;;;;;;;;;AAQA,MAAM,qBAAqB,mBAAwC,EACjE,SAAS,cACP,OAAO,cAAc,cAAc,OAAO,UAAU,CAAC,CAAC,KACpD,OAAO,QACL,KACE,OAAO,cACP,OAAO,MAAM;CACX,cAAc,OAAO,KAAK,IAAI,kBAAkB,EAAE,IAAI,WAAW,CAAC,CAAC;CACnE,SAAS,QAAQ,KAAK,KAAK,OAAO,OAAO,OAAO,IAAI,EAAE,OAAO,MAAM;CACpE,CAAC,CACH,CACF,CACF,EACJ;AAED,MAAM,qBAAqB,mBAAwC;CACjE,yBACE,OAAO,cAAc,cAAc,mBAAmB,CAAC,CAAC,KACtD,OAAO,SAAS,QACd,KAAK,KAAK,OAAO,OAAO,OAAO,IAAI,EAAE,OAAO,MAAM,CACnD,CACF;CACH,SAAS,cACP,OAAO,WAAW;EAChB,WAAW,cAAc,OAAO,UAAU;EAC1C,aAAa,IAAI,kBAAkB,EAAE,IAAI,WAAW,CAAC;EACtD,CAAC;CACL;AAED,MAAM,2BACJ,yBACI;CACJ,MAAM,cACJ,OAAO,cAAc,oBAAoB,IAAI,UAAU,CAAC,CAAC,KACvD,OAAO,QACL,KACE,OAAO,cACP,OAAO,MAAM;EACX,cAAc,OAAO,KAAK,IAAI,kBAAkB,EAAE,IAAI,WAAW,CAAC,CAAC;EACnE,QAAQ,OAAO;EAChB,CAAC,CACH,CACF,CACF;CACH,QAAQ,MAAY,YAClB,OAAO,cAAc,oBAAoB,MAAM,MAAM,QAAQ,CAAC;CACjE;AAED,IAAa,gBAAb,cAAmC,OAAO,IACxC,wCACD,EAAuD,CAAC;CACvD,OAAgB,SAAS,kBACvB,MAAM,QAAQ,MAAM,kBAAkB,cAAc,CAAC;;AAGzD,IAAa,gBAAb,cAAmC,OAAO,IACxC,wCACD,EAAuD,CAAC;CACvD,OAAgB,SAAS,kBACvB,MAAM,QAAQ,MAAM,kBAAkB,cAAc,CAAC;;AAGzD,IAAa,sBAAb,cAAyC,OAAO,IAC9C,8CACD,EAAmE,CAAC;CACnE,OAAgB,SAAS,wBACvB,MAAM,QAAQ,MAAM,wBAAwB,oBAAoB,CAAC;;AAGrE,IAAa,oBAAb,cAAuC,OAAO,YAC5C,oBACD,CAAC,qBAAqB,EACrB,IAAI,OAAO,QACZ,CAAC,CAAC;CACD,IAAa,UAAkB;AAC7B,SAAO,iBAAiB,KAAK,GAAG"}
1
+ {"version":3,"file":"Storage.js","names":[],"sources":["../src/Storage.ts"],"sourcesContent":["import type {\n StorageActionWriter as ConvexStorageActionWriter,\n StorageReader as ConvexStorageReader,\n StorageWriter as ConvexStorageWriter,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\nimport { Effect, flow, Layer, Option, pipe, Schema } from \"effect\";\n\nconst makeStorageReader = (storageReader: ConvexStorageReader) => ({\n getUrl: (storageId: GenericId<\"_storage\">) =>\n Effect.promise(() => storageReader.getUrl(storageId)).pipe(\n Effect.andThen(\n flow(\n Option.fromNullable,\n Option.match({\n onNone: () => Effect.fail(new BlobNotFoundError({ id: storageId })),\n onSome: (doc) => pipe(doc, Schema.decode(Schema.URL), Effect.orDie),\n }),\n ),\n ),\n ),\n});\n\nconst makeStorageWriter = (storageWriter: ConvexStorageWriter) => ({\n generateUploadUrl: () =>\n Effect.promise(() => storageWriter.generateUploadUrl()).pipe(\n Effect.andThen((url) =>\n pipe(url, Schema.decode(Schema.URL), Effect.orDie),\n ),\n ),\n delete: (storageId: GenericId<\"_storage\">) =>\n Effect.tryPromise({\n try: () => storageWriter.delete(storageId),\n catch: () => new BlobNotFoundError({ id: storageId }),\n }),\n});\n\nconst makeStorageActionWriter = (\n storageActionWriter: ConvexStorageActionWriter,\n) => ({\n get: (storageId: GenericId<\"_storage\">) =>\n Effect.promise(() => storageActionWriter.get(storageId)).pipe(\n Effect.andThen(\n flow(\n Option.fromNullable,\n Option.match({\n onNone: () => Effect.fail(new BlobNotFoundError({ id: storageId })),\n onSome: Effect.succeed,\n }),\n ),\n ),\n ),\n store: (blob: Blob, options?: { sha256?: string }) =>\n Effect.promise(() => storageActionWriter.store(blob, options)),\n});\n\nexport class StorageReader extends Effect.Tag(\n \"@confect/server/Storage/StorageReader\",\n)<StorageReader, ReturnType<typeof makeStorageReader>>() {\n static readonly layer = (storageReader: ConvexStorageReader) =>\n Layer.succeed(this, makeStorageReader(storageReader));\n}\n\nexport class StorageWriter extends Effect.Tag(\n \"@confect/server/Storage/StorageWriter\",\n)<StorageWriter, ReturnType<typeof makeStorageWriter>>() {\n static readonly layer = (storageWriter: ConvexStorageWriter) =>\n Layer.succeed(this, makeStorageWriter(storageWriter));\n}\n\nexport class StorageActionWriter extends Effect.Tag(\n \"@confect/server/Storage/StorageActionWriter\",\n)<StorageActionWriter, ReturnType<typeof makeStorageActionWriter>>() {\n static readonly layer = (storageActionWriter: ConvexStorageActionWriter) =>\n Layer.succeed(this, makeStorageActionWriter(storageActionWriter));\n}\n\nexport class BlobNotFoundError extends Schema.TaggedError<BlobNotFoundError>()(\n \"BlobNotFoundError\",\n {\n id: Schema.String,\n },\n) {\n override get message(): string {\n return `File with ID '${this.id}' not found`;\n }\n}\n"],"mappings":";;;;;;;;;;AAQA,MAAM,qBAAqB,mBAAwC,EACjE,SAAS,cACP,OAAO,cAAc,cAAc,OAAO,UAAU,CAAC,CAAC,KACpD,OAAO,QACL,KACE,OAAO,cACP,OAAO,MAAM;CACX,cAAc,OAAO,KAAK,IAAI,kBAAkB,EAAE,IAAI,WAAW,CAAC,CAAC;CACnE,SAAS,QAAQ,KAAK,KAAK,OAAO,OAAO,OAAO,IAAI,EAAE,OAAO,MAAM;CACpE,CAAC,CACH,CACF,CACF,EACJ;AAED,MAAM,qBAAqB,mBAAwC;CACjE,yBACE,OAAO,cAAc,cAAc,mBAAmB,CAAC,CAAC,KACtD,OAAO,SAAS,QACd,KAAK,KAAK,OAAO,OAAO,OAAO,IAAI,EAAE,OAAO,MAAM,CACnD,CACF;CACH,SAAS,cACP,OAAO,WAAW;EAChB,WAAW,cAAc,OAAO,UAAU;EAC1C,aAAa,IAAI,kBAAkB,EAAE,IAAI,WAAW,CAAC;EACtD,CAAC;CACL;AAED,MAAM,2BACJ,yBACI;CACJ,MAAM,cACJ,OAAO,cAAc,oBAAoB,IAAI,UAAU,CAAC,CAAC,KACvD,OAAO,QACL,KACE,OAAO,cACP,OAAO,MAAM;EACX,cAAc,OAAO,KAAK,IAAI,kBAAkB,EAAE,IAAI,WAAW,CAAC,CAAC;EACnE,QAAQ,OAAO;EAChB,CAAC,CACH,CACF,CACF;CACH,QAAQ,MAAY,YAClB,OAAO,cAAc,oBAAoB,MAAM,MAAM,QAAQ,CAAC;CACjE;AAED,IAAa,gBAAb,cAAmC,OAAO,IACxC,wCACD,EAAuD,CAAC;CACvD,OAAgB,SAAS,kBACvB,MAAM,QAAQ,MAAM,kBAAkB,cAAc,CAAC;;AAGzD,IAAa,gBAAb,cAAmC,OAAO,IACxC,wCACD,EAAuD,CAAC;CACvD,OAAgB,SAAS,kBACvB,MAAM,QAAQ,MAAM,kBAAkB,cAAc,CAAC;;AAGzD,IAAa,sBAAb,cAAyC,OAAO,IAC9C,8CACD,EAAmE,CAAC;CACnE,OAAgB,SAAS,wBACvB,MAAM,QAAQ,MAAM,wBAAwB,oBAAoB,CAAC;;AAGrE,IAAa,oBAAb,cAAuC,OAAO,aAAgC,CAC5E,qBACA,EACE,IAAI,OAAO,QACZ,CACF,CAAC;CACA,IAAa,UAAkB;AAC7B,SAAO,iBAAiB,KAAK,GAAG"}
package/dist/index.d.ts CHANGED
@@ -5,6 +5,7 @@ import { Table_d_exports } from "./Table.js";
5
5
  import { DatabaseSchema_d_exports } from "./DatabaseSchema.js";
6
6
  import { Api_d_exports } from "./Api.js";
7
7
  import { Auth_d_exports } from "./Auth.js";
8
+ import { ConvexConfigProvider_d_exports } from "./ConvexConfigProvider.js";
8
9
  import { Document_d_exports } from "./Document.js";
9
10
  import { TableInfo_d_exports } from "./TableInfo.js";
10
11
  import { DataModel_d_exports } from "./DataModel.js";
@@ -19,14 +20,14 @@ import { QueryRunner_d_exports } from "./QueryRunner.js";
19
20
  import { Scheduler_d_exports } from "./Scheduler.js";
20
21
  import { Storage_d_exports } from "./Storage.js";
21
22
  import { VectorSearch_d_exports } from "./VectorSearch.js";
23
+ import { RegisteredFunction_d_exports } from "./RegisteredFunction.js";
22
24
  import { Handler_d_exports } from "./Handler.js";
23
25
  import { FunctionImpl_d_exports } from "./FunctionImpl.js";
24
26
  import { GroupImpl_d_exports } from "./GroupImpl.js";
25
27
  import { HttpApi_d_exports } from "./HttpApi.js";
26
28
  import { Impl_d_exports } from "./Impl.js";
27
- import { RegisteredFunction_d_exports } from "./RegisteredFunction.js";
28
29
  import { RegistryItem_d_exports } from "./RegistryItem.js";
29
30
  import { RegisteredConvexFunction_d_exports } from "./RegisteredConvexFunction.js";
30
31
  import { RegisteredFunctions_d_exports } from "./RegisteredFunctions.js";
31
32
  import { Registry_d_exports } from "./Registry.js";
32
- export { ActionCtx_d_exports as ActionCtx, ActionRunner_d_exports as ActionRunner, Api_d_exports as Api, Auth_d_exports as Auth, DataModel_d_exports as DataModel, DatabaseReader_d_exports as DatabaseReader, DatabaseSchema_d_exports as DatabaseSchema, DatabaseWriter_d_exports as DatabaseWriter, Document_d_exports as Document, FunctionImpl_d_exports as FunctionImpl, GroupImpl_d_exports as GroupImpl, Handler_d_exports as Handler, HttpApi_d_exports as HttpApi, Impl_d_exports as Impl, MutationCtx_d_exports as MutationCtx, MutationRunner_d_exports as MutationRunner, OrderedQuery_d_exports as OrderedQuery, QueryCtx_d_exports as QueryCtx, QueryInitializer_d_exports as QueryInitializer, QueryRunner_d_exports as QueryRunner, RegisteredConvexFunction_d_exports as RegisteredConvexFunction, RegisteredFunction_d_exports as RegisteredFunction, RegisteredFunctions_d_exports as RegisteredFunctions, Registry_d_exports as Registry, RegistryItem_d_exports as RegistryItem, Scheduler_d_exports as Scheduler, SchemaToValidator_d_exports as SchemaToValidator, Storage_d_exports as Storage, Table_d_exports as Table, TableInfo_d_exports as TableInfo, VectorSearch_d_exports as VectorSearch };
33
+ export { ActionCtx_d_exports as ActionCtx, ActionRunner_d_exports as ActionRunner, Api_d_exports as Api, Auth_d_exports as Auth, ConvexConfigProvider_d_exports as ConvexConfigProvider, DataModel_d_exports as DataModel, DatabaseReader_d_exports as DatabaseReader, DatabaseSchema_d_exports as DatabaseSchema, DatabaseWriter_d_exports as DatabaseWriter, Document_d_exports as Document, FunctionImpl_d_exports as FunctionImpl, GroupImpl_d_exports as GroupImpl, Handler_d_exports as Handler, HttpApi_d_exports as HttpApi, Impl_d_exports as Impl, MutationCtx_d_exports as MutationCtx, MutationRunner_d_exports as MutationRunner, OrderedQuery_d_exports as OrderedQuery, QueryCtx_d_exports as QueryCtx, QueryInitializer_d_exports as QueryInitializer, QueryRunner_d_exports as QueryRunner, RegisteredConvexFunction_d_exports as RegisteredConvexFunction, RegisteredFunction_d_exports as RegisteredFunction, RegisteredFunctions_d_exports as RegisteredFunctions, Registry_d_exports as Registry, RegistryItem_d_exports as RegistryItem, Scheduler_d_exports as Scheduler, SchemaToValidator_d_exports as SchemaToValidator, Storage_d_exports as Storage, Table_d_exports as Table, TableInfo_d_exports as TableInfo, VectorSearch_d_exports as VectorSearch };
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@ import { ActionCtx_exports } from "./ActionCtx.js";
2
2
  import { ActionRunner_exports } from "./ActionRunner.js";
3
3
  import { Api_exports } from "./Api.js";
4
4
  import { Auth_exports } from "./Auth.js";
5
+ import { ConvexConfigProvider_exports } from "./ConvexConfigProvider.js";
5
6
  import { DataModel_exports } from "./DataModel.js";
6
7
  import { SchemaToValidator_exports } from "./SchemaToValidator.js";
7
8
  import { Table_exports } from "./Table.js";
@@ -30,4 +31,4 @@ import { RegisteredConvexFunction_exports } from "./RegisteredConvexFunction.js"
30
31
  import { RegisteredFunctions_exports } from "./RegisteredFunctions.js";
31
32
  import { TableInfo_exports } from "./TableInfo.js";
32
33
 
33
- export { ActionCtx_exports as ActionCtx, ActionRunner_exports as ActionRunner, Api_exports as Api, Auth_exports as Auth, DataModel_exports as DataModel, DatabaseReader_exports as DatabaseReader, DatabaseSchema_exports as DatabaseSchema, DatabaseWriter_exports as DatabaseWriter, Document_exports as Document, FunctionImpl_exports as FunctionImpl, GroupImpl_exports as GroupImpl, Handler_exports as Handler, HttpApi_exports as HttpApi, Impl_exports as Impl, MutationCtx_exports as MutationCtx, MutationRunner_exports as MutationRunner, OrderedQuery_exports as OrderedQuery, QueryCtx_exports as QueryCtx, QueryInitializer_exports as QueryInitializer, QueryRunner_exports as QueryRunner, RegisteredConvexFunction_exports as RegisteredConvexFunction, RegisteredFunction_exports as RegisteredFunction, RegisteredFunctions_exports as RegisteredFunctions, Registry_exports as Registry, RegistryItem_exports as RegistryItem, Scheduler_exports as Scheduler, SchemaToValidator_exports as SchemaToValidator, Storage_exports as Storage, Table_exports as Table, TableInfo_exports as TableInfo, VectorSearch_exports as VectorSearch };
34
+ export { ActionCtx_exports as ActionCtx, ActionRunner_exports as ActionRunner, Api_exports as Api, Auth_exports as Auth, ConvexConfigProvider_exports as ConvexConfigProvider, DataModel_exports as DataModel, DatabaseReader_exports as DatabaseReader, DatabaseSchema_exports as DatabaseSchema, DatabaseWriter_exports as DatabaseWriter, Document_exports as Document, FunctionImpl_exports as FunctionImpl, GroupImpl_exports as GroupImpl, Handler_exports as Handler, HttpApi_exports as HttpApi, Impl_exports as Impl, MutationCtx_exports as MutationCtx, MutationRunner_exports as MutationRunner, OrderedQuery_exports as OrderedQuery, QueryCtx_exports as QueryCtx, QueryInitializer_exports as QueryInitializer, QueryRunner_exports as QueryRunner, RegisteredConvexFunction_exports as RegisteredConvexFunction, RegisteredFunction_exports as RegisteredFunction, RegisteredFunctions_exports as RegisteredFunctions, Registry_exports as Registry, RegistryItem_exports as RegistryItem, Scheduler_exports as Scheduler, SchemaToValidator_exports as SchemaToValidator, Storage_exports as Storage, Table_exports as Table, TableInfo_exports as TableInfo, VectorSearch_exports as VectorSearch };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@confect/server",
3
- "version": "1.0.3",
3
+ "version": "3.0.0",
4
4
  "description": "Backend bindings to the Convex platform",
5
5
  "repository": {
6
6
  "type": "git",
@@ -43,38 +43,39 @@
43
43
  "author": "RJ Dellecese",
44
44
  "license": "ISC",
45
45
  "devDependencies": {
46
- "@effect/cluster": "0.56.3",
46
+ "@ark/attest": "0.56.0",
47
+ "@effect/cluster": "0.56.4",
47
48
  "@effect/experimental": "0.58.0",
48
- "@effect/language-service": "0.73.1",
49
- "@effect/platform": "0.94.4",
50
- "@effect/rpc": "0.73.0",
49
+ "@effect/platform": "0.94.5",
50
+ "@effect/rpc": "0.73.2",
51
51
  "@effect/sql": "0.49.0",
52
52
  "@effect/vitest": "0.27.0",
53
53
  "@effect/workflow": "0.16.0",
54
- "@eslint/js": "9.39.2",
54
+ "@eslint/js": "10.0.1",
55
55
  "@swc/jest": "0.2.39",
56
- "@types/node": "25.2.3",
56
+ "@types/node": "25.3.3",
57
57
  "@vitest/coverage-v8": "3.2.4",
58
58
  "convex-test": "0.0.41",
59
59
  "dotenv": "17.3.1",
60
- "effect": "3.19.16",
61
- "eslint": "9.39.2",
60
+ "effect": "3.19.19",
61
+ "eslint": "10.0.2",
62
62
  "prettier": "3.8.1",
63
63
  "tsdown": "0.20.3",
64
+ "tsx": "^4.21.0",
64
65
  "typescript": "5.9.3",
65
- "typescript-eslint": "8.55.0",
66
+ "typescript-eslint": "8.56.1",
66
67
  "vite": "7.3.1",
67
68
  "vite-tsconfig-paths": "6.1.1",
68
69
  "vitest": "3.2.4",
69
- "@confect/test": "1.0.3",
70
- "@confect/cli": "1.0.3"
70
+ "@confect/cli": "3.0.0",
71
+ "@confect/test": "3.0.0"
71
72
  },
72
73
  "peerDependencies": {
73
- "@effect/platform": "^0.94.4",
74
+ "@effect/platform": "^0.94.5",
74
75
  "@effect/platform-node": "^0.104.1",
75
76
  "convex": "^1.30.0",
76
77
  "effect": "^3.19.16",
77
- "@confect/core": "1.0.3"
78
+ "@confect/core": "3.0.0"
78
79
  },
79
80
  "engines": {
80
81
  "node": ">=22",
@@ -91,6 +92,7 @@
91
92
  "fix": "prettier --write . && eslint --fix . --max-warnings=0",
92
93
  "format": "prettier --check .",
93
94
  "lint": "eslint . --max-warnings=0",
95
+ "bench": "tsx test/SchemaToValidator.bench.ts",
94
96
  "clean": "rm -rf dist coverage node_modules"
95
97
  }
96
98
  }
@@ -1,29 +1,43 @@
1
1
  import * as Ref from "@confect/core/Ref";
2
2
  import { type GenericActionCtx } from "convex/server";
3
3
  import type { ParseResult } from "effect";
4
- import { Context, Effect, Layer, Schema } from "effect";
4
+ import { Context, Effect, Layer, Match, Schema } from "effect";
5
5
 
6
- const makeActionRunner =
6
+ const make =
7
7
  (runAction: GenericActionCtx<any>["runAction"]) =>
8
8
  <Action extends Ref.AnyAction>(
9
9
  action: Action,
10
- args: Ref.Args<Action>["Type"],
11
- ): Effect.Effect<Ref.Returns<Action>["Type"], ParseResult.ParseError> =>
10
+ args: Ref.Args<Action>,
11
+ ): Effect.Effect<Ref.Returns<Action>, ParseResult.ParseError> =>
12
12
  Effect.gen(function* () {
13
- const function_ = Ref.getFunction(action);
13
+ const functionSpec = Ref.getFunctionSpec(action);
14
14
  const functionName = Ref.getConvexFunctionName(action);
15
15
 
16
- const encodedArgs = yield* Schema.encode(function_.args)(args);
17
- const encodedReturns = yield* Effect.promise(() =>
18
- runAction(functionName as any, encodedArgs),
16
+ return yield* Match.value(functionSpec.functionProvenance).pipe(
17
+ Match.tag("Confect", (confectFunctionSpec) =>
18
+ Effect.gen(function* () {
19
+ const encodedArgs = yield* Schema.encode(confectFunctionSpec.args)(
20
+ args,
21
+ );
22
+ const encodedReturns = yield* Effect.promise(() =>
23
+ runAction(functionName as any, encodedArgs),
24
+ );
25
+ return yield* Schema.decode(confectFunctionSpec.returns)(
26
+ encodedReturns,
27
+ );
28
+ }),
29
+ ),
30
+ Match.tag("Convex", () =>
31
+ Effect.promise(() => runAction(functionName as any, args as any)),
32
+ ),
33
+ Match.exhaustive,
19
34
  );
20
- return yield* Schema.decode(function_.returns)(encodedReturns);
21
35
  });
22
36
 
23
- export const ActionRunner = Context.GenericTag<
24
- ReturnType<typeof makeActionRunner>
25
- >("@confect/server/ActionRunner");
37
+ export const ActionRunner = Context.GenericTag<ReturnType<typeof make>>(
38
+ "@confect/server/ActionRunner",
39
+ );
26
40
  export type ActionRunner = typeof ActionRunner.Identifier;
27
41
 
28
42
  export const layer = (runAction: GenericActionCtx<any>["runAction"]) =>
29
- Layer.succeed(ActionRunner, makeActionRunner(runAction));
43
+ Layer.succeed(ActionRunner, make(runAction));
package/src/Auth.ts CHANGED
@@ -22,9 +22,10 @@ export class Auth extends Effect.Tag("@confect/server/Auth")<
22
22
 
23
23
  export const layer = (auth: ConvexAuth) => Layer.succeed(Auth, make(auth));
24
24
 
25
- export class NoUserIdentityFoundError extends Schema.TaggedError<NoUserIdentityFoundError>(
25
+ export class NoUserIdentityFoundError extends Schema.TaggedError<NoUserIdentityFoundError>()(
26
26
  "NoUserIdentityFoundError",
27
- )("NoUserIdentityFoundError", {}) {
27
+ {},
28
+ ) {
28
29
  override get message(): string {
29
30
  return "No user identity found";
30
31
  }
@@ -0,0 +1,58 @@
1
+ import {
2
+ Array,
3
+ ConfigError,
4
+ ConfigProvider,
5
+ ConfigProviderPathPatch,
6
+ Effect,
7
+ pipe,
8
+ } from "effect";
9
+
10
+ declare const process: { env: Record<string, string | undefined> };
11
+
12
+ export const make = (
13
+ options?: Partial<ConfigProvider.ConfigProvider.FromEnvConfig>,
14
+ ): ConfigProvider.ConfigProvider => {
15
+ const pathDelim = options?.pathDelim ?? "_";
16
+ const seqDelim = options?.seqDelim ?? ",";
17
+
18
+ return ConfigProvider.fromFlat(
19
+ ConfigProvider.makeFlat({
20
+ load: (path, primitive, split = true) => {
21
+ const pathString = Array.join(path, pathDelim);
22
+ const value = process.env[pathString];
23
+
24
+ if (value === undefined) {
25
+ return Effect.fail(
26
+ ConfigError.MissingData(
27
+ [...path],
28
+ `Expected ${pathString} to exist in the process context`,
29
+ ),
30
+ );
31
+ }
32
+
33
+ const parse = (text: string) =>
34
+ pipe(
35
+ primitive.parse(text.trim()),
36
+ Effect.mapError(ConfigError.prefixed([...path])),
37
+ );
38
+
39
+ if (!split) {
40
+ return pipe(parse(value), Effect.map(Array.of));
41
+ } else {
42
+ return pipe(
43
+ value.split(seqDelim),
44
+ Effect.forEach((v) => parse(v)),
45
+ );
46
+ }
47
+ },
48
+ enumerateChildren: (path) =>
49
+ Effect.fail(
50
+ ConfigError.Unsupported(
51
+ [...path],
52
+ "process.env is not enumerable in the Convex runtime",
53
+ ),
54
+ ),
55
+ patch: ConfigProviderPathPatch.empty,
56
+ }),
57
+ );
58
+ };
package/src/Document.ts CHANGED
@@ -157,13 +157,14 @@ export const encode = Function.dual<
157
157
  }),
158
158
  );
159
159
 
160
- export class DocumentDecodeError extends Schema.TaggedError<DocumentDecodeError>(
160
+ export class DocumentDecodeError extends Schema.TaggedError<DocumentDecodeError>()(
161
161
  "DocumentDecodeError",
162
- )("DocumentDecodeError", {
163
- tableName: Schema.String,
164
- id: Schema.String,
165
- parseError: Schema.String,
166
- }) {
162
+ {
163
+ tableName: Schema.String,
164
+ id: Schema.String,
165
+ parseError: Schema.String,
166
+ },
167
+ ) {
167
168
  override get message(): string {
168
169
  return documentErrorMessage({
169
170
  id: this.id,
@@ -173,13 +174,14 @@ export class DocumentDecodeError extends Schema.TaggedError<DocumentDecodeError>
173
174
  }
174
175
  }
175
176
 
176
- export class DocumentEncodeError extends Schema.TaggedError<DocumentEncodeError>(
177
+ export class DocumentEncodeError extends Schema.TaggedError<DocumentEncodeError>()(
177
178
  "DocumentEncodeError",
178
- )("DocumentEncodeError", {
179
- tableName: Schema.String,
180
- id: Schema.String,
181
- parseError: Schema.String,
182
- }) {
179
+ {
180
+ tableName: Schema.String,
181
+ id: Schema.String,
182
+ parseError: Schema.String,
183
+ },
184
+ ) {
183
185
  override get message(): string {
184
186
  return documentErrorMessage({
185
187
  id: this.id,
@@ -56,7 +56,7 @@ export const make = <
56
56
  currentGroup.groups[groupPathPart],
57
57
  );
58
58
 
59
- const function_ = group_.functions[functionName]!;
59
+ const functionSpec = group_.functions[functionName]!;
60
60
 
61
61
  return Layer.effect(
62
62
  FunctionImpl<GroupPath_, FunctionName>({
@@ -71,8 +71,8 @@ export const make = <
71
71
  registryItems,
72
72
  [...groupPathParts, functionName],
73
73
  RegistryItem.make({
74
- function_,
75
- handler: handler as Handler.AnyWithProps,
74
+ functionSpec,
75
+ handler,
76
76
  }),
77
77
  ),
78
78
  );