@gaganref/confect-server 10.3.1-fork.81 → 10.3.1-fork.83

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,7 @@
1
1
  import type * as IdScope from "@confect/core/IdScope";
2
2
  import type { GenericId, Rebase } from "@confect/core/GenericId";
3
3
  import type { DocumentByName, GenericActionCtx, GenericDataModel, GenericMutationCtx, GenericQueryCtx, QueryInitializer, NamedTableInfo, TableNamesInDataModel, SystemDataModel, WithoutSystemFields, WithOptionalSystemFields, SchedulableFunctionReference, OptionalRestArgs, VectorIndexNames, VectorSearchQuery } from "convex/server";
4
+ import type { CommitTsPlaceholder } from "convex/values";
4
5
  import type { PatchValue } from "./DatabaseWriter.js";
5
6
  /**
6
7
  * Distinguishes raw component services from structurally compatible app ctxs.
@@ -30,6 +31,9 @@ export interface DatabaseWriter<DataModel extends GenericDataModel, Scope extend
30
31
  replace<TableName extends TableNamesInDataModel<DataModel>>(id: GenericId<TableName, Scope>, value: WithOptionalSystemFields<DocumentByName<DataModel, TableName>>): Promise<void>;
31
32
  delete<TableName extends TableNamesInDataModel<DataModel>>(table: TableName, id: GenericId<NoInfer<TableName>, Scope>): Promise<void>;
32
33
  delete<TableName extends TableNamesInDataModel<DataModel>>(id: GenericId<TableName, Scope>): Promise<void>;
34
+ readonly vars: {
35
+ readonly commitTs: CommitTsPlaceholder;
36
+ };
33
37
  }
34
38
  export interface StorageReader<Scope extends IdScope.IdScope> {
35
39
  getUrl(id: GenericId<"_storage", Scope>): Promise<string | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentCtx.d.ts","sourceRoot":"","sources":["../src/ComponentCtx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ComponentCtx.d.ts","sourceRoot":"","sources":["../src/ComponentCtx.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { GenericDatabaseWriter } from "convex/server";
2
+ import type { CommitTsPlaceholder } from "convex/values";
2
3
  import * as Context from "effect/Context";
3
4
  import * as Effect from "effect/Effect";
4
5
  import * as Layer from "effect/Layer";
@@ -30,6 +31,13 @@ export interface DatabaseWriterTableAccessor<DataModel_ extends DataModel.AnyWit
30
31
  */
31
32
  export interface DatabaseWriterService<DatabaseSchema_ extends DatabaseSchema.AnyWithProps, Docs = {}> {
32
33
  readonly table: <const TableName extends DataModel.TableNames<DataModel.FromSchema<DatabaseSchema_>>>(tableName: TableName) => DatabaseWriterTableAccessor<DataModel.FromSchema<DatabaseSchema_>, TableName, TableName extends keyof Docs ? Docs[TableName] : DocumentByName_<DataModel.FromSchema<DatabaseSchema_>, TableName>>;
34
+ /**
35
+ * Values not known until the mutation commits. Write `vars.commitTs` into a
36
+ * `CommitTs` field to store the transaction's commit timestamp.
37
+ */
38
+ readonly vars: {
39
+ readonly commitTs: CommitTsPlaceholder;
40
+ };
33
41
  }
34
42
  /**
35
43
  * The tag's _Identifier_ is `Docs`-independent (see `DatabaseReaderTag`); only
@@ -1 +1 @@
1
- {"version":3,"file":"DatabaseWriter.d.ts","sourceRoot":"","sources":["../src/DatabaseWriter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DatabaseWriter.d.ts","sourceRoot":"","sources":["../src/DatabaseWriter.ts"],"names":[],"mappings":"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"}
@@ -84,7 +84,10 @@ const make = (databaseSchema, convexDatabaseWriter, hook) => {
84
84
  })
85
85
  };
86
86
  };
87
- return { table };
87
+ return {
88
+ table,
89
+ vars: convexDatabaseWriter.vars
90
+ };
88
91
  };
89
92
  const DatabaseWriter = () => Context.Service("@confect/server/DatabaseWriter");
90
93
  const layer = (databaseSchema, convexDatabaseWriter, hook) => Layer.succeed(DatabaseWriter(), make(databaseSchema, convexDatabaseWriter, hook));
@@ -1 +1 @@
1
- {"version":3,"file":"DatabaseWriter.js","names":["DatabaseSchema.tables","Document.encode","QueryInitializer.getById","DocumentPatch.encoder","QueryInitializer.GetByIdFailure","Document.decode","Document.DocumentEncodeError"],"sources":["../src/DatabaseWriter.ts"],"sourcesContent":["import type {\n BetterOmit,\n DocumentByName,\n Expand,\n GenericDatabaseWriter,\n WithoutSystemFields,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\nimport { pipe } from \"effect/Function\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Predicate from \"effect/Predicate\";\nimport * as Record from \"effect/Record\";\nimport * as Result from \"effect/Result\";\nimport * as DatabaseSchema from \"./DatabaseSchema.js\";\nimport type * as DataModel from \"./DataModel.js\";\nimport type { DocumentByName as DocumentByName_ } from \"./DataModel.js\";\nimport * as Document from \"./Document.js\";\nimport * as DocumentPatch from \"./internal/DocumentPatch.js\";\nimport * as QueryInitializer from \"./QueryInitializer.js\";\nimport type * as Table from \"./Table.js\";\n\n/**\n * The argument accepted by `patch`: like `Partial<Doc>` without system fields,\n * but the fields that are already optional also accept `undefined`, since\n * setting a field to `undefined` unsets it.\n */\nexport type PatchValue<Doc> = {\n [\n K in keyof Doc as K extends \"_id\" | \"_creationTime\" ? never : K\n ]?: undefined extends Doc[K] ? Doc[K] | undefined : Doc[K];\n};\n\nexport interface DatabaseWriterTableAccessor<\n DataModel_ extends DataModel.AnyWithProps,\n TableName extends DataModel.TableNames<DataModel_>,\n Doc = DocumentByName_<DataModel_, TableName>,\n> {\n readonly insert: (\n document: Document.WithoutSystemFields<Doc>,\n ) => Effect.Effect<\n DataModel.Id<DataModel_, TableName>,\n Document.DocumentEncodeError\n >;\n readonly patch: (\n id: DataModel.Id<DataModel_, TableName>,\n patchedValues: PatchValue<Doc>,\n ) => Effect.Effect<\n void,\n | QueryInitializer.GetByIdFailure\n | Document.DocumentDecodeError\n | Document.DocumentEncodeError\n >;\n readonly replace: (\n id: DataModel.Id<DataModel_, TableName>,\n value: Document.WithoutSystemFields<Doc>,\n ) => Effect.Effect<void, Document.DocumentEncodeError>;\n readonly delete: (\n id: DataModel.Id<DataModel_, TableName>,\n ) => Effect.Effect<void>;\n}\n\n/**\n * The service shape backing the `DatabaseWriter` tag. Named (rather than an\n * inferred anonymous object) so declaration emit prints\n * `DatabaseWriterService<…>` by reference instead of expanding the data model.\n * `Docs` is the optional named document registry (see\n * `DatabaseReaderService`).\n */\nexport interface DatabaseWriterService<\n DatabaseSchema_ extends DatabaseSchema.AnyWithProps,\n Docs = {},\n> {\n readonly table: <\n const TableName extends DataModel.TableNames<\n DataModel.FromSchema<DatabaseSchema_>\n >,\n >(\n tableName: TableName,\n ) => DatabaseWriterTableAccessor<\n DataModel.FromSchema<DatabaseSchema_>,\n TableName,\n TableName extends keyof Docs\n ? Docs[TableName]\n : DocumentByName_<DataModel.FromSchema<DatabaseSchema_>, TableName>\n >;\n}\n\n/**\n * The tag's _Identifier_ is `Docs`-independent (see `DatabaseReaderTag`); only\n * the _Service_ carries `Docs` so writer inputs print the named doc\n * interfaces.\n */\nexport type DatabaseWriterTag<\n DatabaseSchema_ extends DatabaseSchema.AnyWithProps,\n Docs = {},\n> = Context.Service<\n DatabaseWriterService<DatabaseSchema_>,\n DatabaseWriterService<DatabaseSchema_, Docs>\n>;\n\n/**\n * Decoded documents surrounding one successful write.\n */\nexport type Change<S extends DatabaseSchema.AnyWithProps> = {\n [Name in DataModel.TableNames<DataModel.FromSchema<S>>]: {\n readonly tableName: Name;\n } & (\n | {\n readonly operation: \"insert\";\n readonly oldDoc: null;\n readonly newDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;\n }\n | {\n readonly operation: \"update\";\n readonly oldDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;\n readonly newDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;\n }\n | {\n readonly operation: \"delete\";\n readonly oldDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;\n readonly newDoc: null;\n }\n );\n}[DataModel.TableNames<DataModel.FromSchema<S>>];\n\n/**\n * Runs after the write, in its transaction. A defect aborts the mutation.\n *\n * Only writes through this writer are observed. Raw `ctx.db`, `MutationCtx`\n * writes and a second `DatabaseWriter.make` bypass the hook, so a host that\n * relies on it keeps raw writers out of its functions. Component writers and\n * nested `runMutation` calls each need their own hook installation.\n *\n * Concurrent writes to one document (for example under `Effect.all`) can\n * interleave the read-write-read steps. Await them sequentially when the hook\n * needs exact per-write snapshots. The writer takes no lock, because a hook\n * that writes through the same writer would deadlock under one.\n */\nexport type Hook<S extends DatabaseSchema.AnyWithProps> = (\n change: Change<S>,\n) => Effect.Effect<void>;\n\nexport const make = <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(\n databaseSchema: DatabaseSchema_,\n convexDatabaseWriter: GenericDatabaseWriter<\n DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>\n >,\n hook?: Hook<DatabaseSchema_>,\n): DatabaseWriterService<DatabaseSchema_> => {\n type DataModel_ = DataModel.FromSchema<DatabaseSchema_>;\n\n const table = <const TableName extends DataModel.TableNames<DataModel_>>(\n tableName: TableName,\n ) => {\n const tableDef = DatabaseSchema.tables(databaseSchema)[tableName];\n\n const insert = Effect.fn(\"DatabaseWriter.insert\")(function* (\n document: Document.WithoutSystemFields<\n DocumentByName_<DataModel_, TableName>\n >,\n ) {\n const encodedDocument = yield* Document.encode(document, tableDef);\n\n const id = yield* Effect.promise(() =>\n convexDatabaseWriter.insert(\n tableName,\n encodedDocument as WithoutSystemFields<\n DocumentByName<DataModel.ToConvex<DataModel_>, TableName>\n >,\n ),\n );\n\n // The database supplies the ID in this table's execution scope. Its\n // scope brand is erased at the Convex syscall boundary.\n return id as unknown as DataModel.Id<DataModel_, TableName>;\n });\n\n // A codec whose encoding spans fields cannot encode a patch on its own, so\n // the patch is merged into the decoded document and the result replaces it.\n const replacePatched = (\n id: DataModel.Id<DataModel_, TableName>,\n patchedValues: PatchValue<\n Document.WithoutSystemFields<DocumentByName_<DataModel_, TableName>>\n >,\n ) =>\n Effect.gen(function* () {\n const originalDecodedDoc = yield* QueryInitializer.getById<\n Table.AnyWithProps,\n TableName\n >(\n convexDatabaseWriter as any,\n tableDef,\n )(id as unknown as GenericId<TableName>);\n\n const updatedEncodedDoc = yield* pipe(\n patchedValues,\n Record.reduce(originalDecodedDoc, (acc, value, key) =>\n value === undefined\n ? Record.remove(acc, key)\n : Record.set(acc, key, value),\n ),\n Document.encode(tableDef),\n );\n\n yield* Effect.promise(() =>\n convexDatabaseWriter.replace(\n id as unknown as GenericId<TableName>,\n updatedEncodedDoc as Expand<\n BetterOmit<\n DocumentByName<DataModel.ToConvex<DataModel_>, TableName>,\n \"_creationTime\" | \"_id\"\n >\n >,\n ),\n );\n });\n\n const patch = Effect.fn(\"DatabaseWriter.patch\")(function* (\n id: DataModel.Id<DataModel_, TableName>,\n patchedValues: PatchValue<\n Document.WithoutSystemFields<DocumentByName_<DataModel_, TableName>>\n >,\n ) {\n const encodePatch = DocumentPatch.encoder(tableDef);\n if (encodePatch === undefined) {\n return yield* replacePatched(id, patchedValues);\n }\n\n const storedDoc = yield* pipe(\n Effect.promise(() =>\n convexDatabaseWriter.get(id as unknown as GenericId<TableName>),\n ),\n Effect.andThen((value) =>\n Effect.fromResult(\n Result.fromNullishOr(\n value,\n () =>\n new QueryInitializer.GetByIdFailure({\n tableName,\n id,\n }),\n ),\n ),\n ),\n );\n // The patch must encode and the patched document must decode. When\n // either fails, the stored document decides whose fault that is.\n const encodedPatch = yield* pipe(\n encodePatch(patchedValues),\n Effect.mapError(({ message }) => message),\n Effect.tap((delta) =>\n pipe(\n { ...storedDoc, ...delta },\n Record.filter(Predicate.isNotUndefined),\n Document.decode(tableDef),\n Effect.mapError(({ parseError }) => parseError),\n ),\n ),\n Effect.catch((parseError) =>\n pipe(\n Document.decode(storedDoc, tableDef),\n Effect.andThen(\n Effect.fail(\n new Document.DocumentEncodeError({\n tableName,\n id,\n parseError,\n }),\n ),\n ),\n ),\n ),\n );\n\n yield* Effect.promise(() =>\n convexDatabaseWriter.patch(\n id as unknown as GenericId<TableName>,\n encodedPatch as Partial<\n DocumentByName<DataModel.ToConvex<DataModel_>, TableName>\n >,\n ),\n );\n });\n\n const replace = Effect.fn(\"DatabaseWriter.replace\")(function* (\n id: DataModel.Id<DataModel_, TableName>,\n value: Document.WithoutSystemFields<\n DocumentByName_<DataModel_, TableName>\n >,\n ) {\n const updatedEncodedDoc = yield* Document.encode(value, tableDef);\n\n yield* Effect.promise(() =>\n convexDatabaseWriter.replace(\n id as unknown as GenericId<TableName>,\n updatedEncodedDoc as Expand<\n BetterOmit<\n DocumentByName<DataModel.ToConvex<DataModel_>, TableName>,\n \"_creationTime\" | \"_id\"\n >\n >,\n ),\n );\n });\n\n const delete_ = (id: DataModel.Id<DataModel_, TableName>) =>\n Effect.promise(() =>\n convexDatabaseWriter.delete(id as unknown as GenericId<TableName>),\n );\n\n const accessor = { insert, patch, replace, delete: delete_ };\n if (hook === undefined) return accessor;\n\n const read = (id: DataModel.Id<DataModel_, TableName>) =>\n QueryInitializer.getById<Table.AnyWithProps, TableName>(\n convexDatabaseWriter as any,\n tableDef,\n )(id as unknown as GenericId<TableName>);\n const notify = (\n operation: \"insert\" | \"update\" | \"delete\",\n oldDoc: unknown,\n newDoc: unknown,\n ) =>\n hook({ tableName, operation, oldDoc, newDoc } as Change<DatabaseSchema_>);\n const update =\n <A extends ReadonlyArray<unknown>, E, BeforeError>(\n before: (\n id: DataModel.Id<DataModel_, TableName>,\n ) => Effect.Effect<unknown, BeforeError>,\n write: (\n id: DataModel.Id<DataModel_, TableName>,\n ...args: A\n ) => Effect.Effect<void, E>,\n ) =>\n (id: DataModel.Id<DataModel_, TableName>, ...args: A) =>\n Effect.gen(function* () {\n const oldDoc = yield* before(id);\n yield* write(id, ...args);\n yield* notify(\"update\", oldDoc, yield* read(id).pipe(Effect.orDie));\n });\n\n return {\n insert: (document: Parameters<typeof insert>[0]) =>\n Effect.gen(function* () {\n const id = yield* insert(document);\n yield* notify(\"insert\", null, yield* read(id).pipe(Effect.orDie));\n return id;\n }),\n patch: update(read, patch),\n replace: update((id) => read(id).pipe(Effect.orDie), replace),\n delete: (id: DataModel.Id<DataModel_, TableName>) =>\n Effect.gen(function* () {\n const oldDoc = yield* read(id).pipe(Effect.orDie);\n yield* delete_(id);\n yield* notify(\"delete\", oldDoc, null);\n }),\n };\n };\n\n return {\n table,\n } as DatabaseWriterService<DatabaseSchema_>;\n};\n\nexport const DatabaseWriter = <\n DatabaseSchema_ extends DatabaseSchema.AnyWithProps,\n Docs = {},\n>(): DatabaseWriterTag<DatabaseSchema_, Docs> =>\n Context.Service<\n DatabaseWriterService<DatabaseSchema_>,\n DatabaseWriterService<DatabaseSchema_, Docs>\n >(\"@confect/server/DatabaseWriter\");\n\nexport type DatabaseWriter<\n DatabaseSchema_ extends DatabaseSchema.AnyWithProps,\n> = DatabaseWriterService<DatabaseSchema_>;\n\nexport const layer = <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(\n databaseSchema: DatabaseSchema_,\n convexDatabaseWriter: GenericDatabaseWriter<\n DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>\n >,\n hook?: Hook<DatabaseSchema_>,\n) =>\n Layer.succeed(\n DatabaseWriter<DatabaseSchema_>(),\n make(databaseSchema, convexDatabaseWriter, hook),\n );\n"],"mappings":"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"}
1
+ {"version":3,"file":"DatabaseWriter.js","names":["DatabaseSchema.tables","Document.encode","QueryInitializer.getById","DocumentPatch.encoder","QueryInitializer.GetByIdFailure","Document.decode","Document.DocumentEncodeError"],"sources":["../src/DatabaseWriter.ts"],"sourcesContent":["import type {\n BetterOmit,\n DocumentByName,\n Expand,\n GenericDatabaseWriter,\n WithoutSystemFields,\n} from \"convex/server\";\nimport type { CommitTsPlaceholder, GenericId } from \"convex/values\";\nimport { pipe } from \"effect/Function\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Predicate from \"effect/Predicate\";\nimport * as Record from \"effect/Record\";\nimport * as Result from \"effect/Result\";\nimport * as DatabaseSchema from \"./DatabaseSchema.js\";\nimport type * as DataModel from \"./DataModel.js\";\nimport type { DocumentByName as DocumentByName_ } from \"./DataModel.js\";\nimport * as Document from \"./Document.js\";\nimport * as DocumentPatch from \"./internal/DocumentPatch.js\";\nimport * as QueryInitializer from \"./QueryInitializer.js\";\nimport type * as Table from \"./Table.js\";\n\n/**\n * The argument accepted by `patch`: like `Partial<Doc>` without system fields,\n * but the fields that are already optional also accept `undefined`, since\n * setting a field to `undefined` unsets it.\n */\nexport type PatchValue<Doc> = {\n [\n K in keyof Doc as K extends \"_id\" | \"_creationTime\" ? never : K\n ]?: undefined extends Doc[K] ? Doc[K] | undefined : Doc[K];\n};\n\nexport interface DatabaseWriterTableAccessor<\n DataModel_ extends DataModel.AnyWithProps,\n TableName extends DataModel.TableNames<DataModel_>,\n Doc = DocumentByName_<DataModel_, TableName>,\n> {\n readonly insert: (\n document: Document.WithoutSystemFields<Doc>,\n ) => Effect.Effect<\n DataModel.Id<DataModel_, TableName>,\n Document.DocumentEncodeError\n >;\n readonly patch: (\n id: DataModel.Id<DataModel_, TableName>,\n patchedValues: PatchValue<Doc>,\n ) => Effect.Effect<\n void,\n | QueryInitializer.GetByIdFailure\n | Document.DocumentDecodeError\n | Document.DocumentEncodeError\n >;\n readonly replace: (\n id: DataModel.Id<DataModel_, TableName>,\n value: Document.WithoutSystemFields<Doc>,\n ) => Effect.Effect<void, Document.DocumentEncodeError>;\n readonly delete: (\n id: DataModel.Id<DataModel_, TableName>,\n ) => Effect.Effect<void>;\n}\n\n/**\n * The service shape backing the `DatabaseWriter` tag. Named (rather than an\n * inferred anonymous object) so declaration emit prints\n * `DatabaseWriterService<…>` by reference instead of expanding the data model.\n * `Docs` is the optional named document registry (see\n * `DatabaseReaderService`).\n */\nexport interface DatabaseWriterService<\n DatabaseSchema_ extends DatabaseSchema.AnyWithProps,\n Docs = {},\n> {\n readonly table: <\n const TableName extends DataModel.TableNames<\n DataModel.FromSchema<DatabaseSchema_>\n >,\n >(\n tableName: TableName,\n ) => DatabaseWriterTableAccessor<\n DataModel.FromSchema<DatabaseSchema_>,\n TableName,\n TableName extends keyof Docs\n ? Docs[TableName]\n : DocumentByName_<DataModel.FromSchema<DatabaseSchema_>, TableName>\n >;\n /**\n * Values not known until the mutation commits. Write `vars.commitTs` into a\n * `CommitTs` field to store the transaction's commit timestamp.\n */\n readonly vars: { readonly commitTs: CommitTsPlaceholder };\n}\n\n/**\n * The tag's _Identifier_ is `Docs`-independent (see `DatabaseReaderTag`); only\n * the _Service_ carries `Docs` so writer inputs print the named doc\n * interfaces.\n */\nexport type DatabaseWriterTag<\n DatabaseSchema_ extends DatabaseSchema.AnyWithProps,\n Docs = {},\n> = Context.Service<\n DatabaseWriterService<DatabaseSchema_>,\n DatabaseWriterService<DatabaseSchema_, Docs>\n>;\n\n/**\n * Decoded documents surrounding one successful write.\n */\nexport type Change<S extends DatabaseSchema.AnyWithProps> = {\n [Name in DataModel.TableNames<DataModel.FromSchema<S>>]: {\n readonly tableName: Name;\n } & (\n | {\n readonly operation: \"insert\";\n readonly oldDoc: null;\n readonly newDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;\n }\n | {\n readonly operation: \"update\";\n readonly oldDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;\n readonly newDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;\n }\n | {\n readonly operation: \"delete\";\n readonly oldDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;\n readonly newDoc: null;\n }\n );\n}[DataModel.TableNames<DataModel.FromSchema<S>>];\n\n/**\n * Runs after the write, in its transaction. A defect aborts the mutation.\n *\n * Only writes through this writer are observed. Raw `ctx.db`, `MutationCtx`\n * writes and a second `DatabaseWriter.make` bypass the hook, so a host that\n * relies on it keeps raw writers out of its functions. Component writers and\n * nested `runMutation` calls each need their own hook installation.\n *\n * Concurrent writes to one document (for example under `Effect.all`) can\n * interleave the read-write-read steps. Await them sequentially when the hook\n * needs exact per-write snapshots. The writer takes no lock, because a hook\n * that writes through the same writer would deadlock under one.\n */\nexport type Hook<S extends DatabaseSchema.AnyWithProps> = (\n change: Change<S>,\n) => Effect.Effect<void>;\n\nexport const make = <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(\n databaseSchema: DatabaseSchema_,\n convexDatabaseWriter: GenericDatabaseWriter<\n DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>\n >,\n hook?: Hook<DatabaseSchema_>,\n): DatabaseWriterService<DatabaseSchema_> => {\n type DataModel_ = DataModel.FromSchema<DatabaseSchema_>;\n\n const table = <const TableName extends DataModel.TableNames<DataModel_>>(\n tableName: TableName,\n ) => {\n const tableDef = DatabaseSchema.tables(databaseSchema)[tableName];\n\n const insert = Effect.fn(\"DatabaseWriter.insert\")(function* (\n document: Document.WithoutSystemFields<\n DocumentByName_<DataModel_, TableName>\n >,\n ) {\n const encodedDocument = yield* Document.encode(document, tableDef);\n\n const id = yield* Effect.promise(() =>\n convexDatabaseWriter.insert(\n tableName,\n encodedDocument as WithoutSystemFields<\n DocumentByName<DataModel.ToConvex<DataModel_>, TableName>\n >,\n ),\n );\n\n // The database supplies the ID in this table's execution scope. Its\n // scope brand is erased at the Convex syscall boundary.\n return id as unknown as DataModel.Id<DataModel_, TableName>;\n });\n\n // A codec whose encoding spans fields cannot encode a patch on its own, so\n // the patch is merged into the decoded document and the result replaces it.\n const replacePatched = (\n id: DataModel.Id<DataModel_, TableName>,\n patchedValues: PatchValue<\n Document.WithoutSystemFields<DocumentByName_<DataModel_, TableName>>\n >,\n ) =>\n Effect.gen(function* () {\n const originalDecodedDoc = yield* QueryInitializer.getById<\n Table.AnyWithProps,\n TableName\n >(\n convexDatabaseWriter as any,\n tableDef,\n )(id as unknown as GenericId<TableName>);\n\n const updatedEncodedDoc = yield* pipe(\n patchedValues,\n Record.reduce(originalDecodedDoc, (acc, value, key) =>\n value === undefined\n ? Record.remove(acc, key)\n : Record.set(acc, key, value),\n ),\n Document.encode(tableDef),\n );\n\n yield* Effect.promise(() =>\n convexDatabaseWriter.replace(\n id as unknown as GenericId<TableName>,\n updatedEncodedDoc as Expand<\n BetterOmit<\n DocumentByName<DataModel.ToConvex<DataModel_>, TableName>,\n \"_creationTime\" | \"_id\"\n >\n >,\n ),\n );\n });\n\n const patch = Effect.fn(\"DatabaseWriter.patch\")(function* (\n id: DataModel.Id<DataModel_, TableName>,\n patchedValues: PatchValue<\n Document.WithoutSystemFields<DocumentByName_<DataModel_, TableName>>\n >,\n ) {\n const encodePatch = DocumentPatch.encoder(tableDef);\n if (encodePatch === undefined) {\n return yield* replacePatched(id, patchedValues);\n }\n\n const storedDoc = yield* pipe(\n Effect.promise(() =>\n convexDatabaseWriter.get(id as unknown as GenericId<TableName>),\n ),\n Effect.andThen((value) =>\n Effect.fromResult(\n Result.fromNullishOr(\n value,\n () =>\n new QueryInitializer.GetByIdFailure({\n tableName,\n id,\n }),\n ),\n ),\n ),\n );\n // The patch must encode and the patched document must decode. When\n // either fails, the stored document decides whose fault that is.\n const encodedPatch = yield* pipe(\n encodePatch(patchedValues),\n Effect.mapError(({ message }) => message),\n Effect.tap((delta) =>\n pipe(\n { ...storedDoc, ...delta },\n Record.filter(Predicate.isNotUndefined),\n Document.decode(tableDef),\n Effect.mapError(({ parseError }) => parseError),\n ),\n ),\n Effect.catch((parseError) =>\n pipe(\n Document.decode(storedDoc, tableDef),\n Effect.andThen(\n Effect.fail(\n new Document.DocumentEncodeError({\n tableName,\n id,\n parseError,\n }),\n ),\n ),\n ),\n ),\n );\n\n yield* Effect.promise(() =>\n convexDatabaseWriter.patch(\n id as unknown as GenericId<TableName>,\n encodedPatch as Partial<\n DocumentByName<DataModel.ToConvex<DataModel_>, TableName>\n >,\n ),\n );\n });\n\n const replace = Effect.fn(\"DatabaseWriter.replace\")(function* (\n id: DataModel.Id<DataModel_, TableName>,\n value: Document.WithoutSystemFields<\n DocumentByName_<DataModel_, TableName>\n >,\n ) {\n const updatedEncodedDoc = yield* Document.encode(value, tableDef);\n\n yield* Effect.promise(() =>\n convexDatabaseWriter.replace(\n id as unknown as GenericId<TableName>,\n updatedEncodedDoc as Expand<\n BetterOmit<\n DocumentByName<DataModel.ToConvex<DataModel_>, TableName>,\n \"_creationTime\" | \"_id\"\n >\n >,\n ),\n );\n });\n\n const delete_ = (id: DataModel.Id<DataModel_, TableName>) =>\n Effect.promise(() =>\n convexDatabaseWriter.delete(id as unknown as GenericId<TableName>),\n );\n\n const accessor = { insert, patch, replace, delete: delete_ };\n if (hook === undefined) return accessor;\n\n const read = (id: DataModel.Id<DataModel_, TableName>) =>\n QueryInitializer.getById<Table.AnyWithProps, TableName>(\n convexDatabaseWriter as any,\n tableDef,\n )(id as unknown as GenericId<TableName>);\n const notify = (\n operation: \"insert\" | \"update\" | \"delete\",\n oldDoc: unknown,\n newDoc: unknown,\n ) =>\n hook({ tableName, operation, oldDoc, newDoc } as Change<DatabaseSchema_>);\n const update =\n <A extends ReadonlyArray<unknown>, E, BeforeError>(\n before: (\n id: DataModel.Id<DataModel_, TableName>,\n ) => Effect.Effect<unknown, BeforeError>,\n write: (\n id: DataModel.Id<DataModel_, TableName>,\n ...args: A\n ) => Effect.Effect<void, E>,\n ) =>\n (id: DataModel.Id<DataModel_, TableName>, ...args: A) =>\n Effect.gen(function* () {\n const oldDoc = yield* before(id);\n yield* write(id, ...args);\n yield* notify(\"update\", oldDoc, yield* read(id).pipe(Effect.orDie));\n });\n\n return {\n insert: (document: Parameters<typeof insert>[0]) =>\n Effect.gen(function* () {\n const id = yield* insert(document);\n yield* notify(\"insert\", null, yield* read(id).pipe(Effect.orDie));\n return id;\n }),\n patch: update(read, patch),\n replace: update((id) => read(id).pipe(Effect.orDie), replace),\n delete: (id: DataModel.Id<DataModel_, TableName>) =>\n Effect.gen(function* () {\n const oldDoc = yield* read(id).pipe(Effect.orDie);\n yield* delete_(id);\n yield* notify(\"delete\", oldDoc, null);\n }),\n };\n };\n\n return {\n table,\n vars: convexDatabaseWriter.vars,\n } as DatabaseWriterService<DatabaseSchema_>;\n};\n\nexport const DatabaseWriter = <\n DatabaseSchema_ extends DatabaseSchema.AnyWithProps,\n Docs = {},\n>(): DatabaseWriterTag<DatabaseSchema_, Docs> =>\n Context.Service<\n DatabaseWriterService<DatabaseSchema_>,\n DatabaseWriterService<DatabaseSchema_, Docs>\n >(\"@confect/server/DatabaseWriter\");\n\nexport type DatabaseWriter<\n DatabaseSchema_ extends DatabaseSchema.AnyWithProps,\n> = DatabaseWriterService<DatabaseSchema_>;\n\nexport const layer = <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(\n databaseSchema: DatabaseSchema_,\n convexDatabaseWriter: GenericDatabaseWriter<\n DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>\n >,\n hook?: Hook<DatabaseSchema_>,\n) =>\n Layer.succeed(\n DatabaseWriter<DatabaseSchema_>(),\n make(databaseSchema, convexDatabaseWriter, hook),\n );\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@gaganref/confect-server",
3
- "version": "10.3.1-fork.81",
3
+ "version": "10.3.1-fork.83",
4
4
  "dependencies": {
5
5
  "@effect/ai-openai-compat": "4.0.4",
6
6
  "@effect/ai-openrouter": "4.0.4"
7
7
  },
8
8
  "peerDependencies": {
9
- "@confect/core": "npm:@gaganref/confect-core@10.3.1-fork.81",
9
+ "@confect/core": "npm:@gaganref/confect-core@10.3.1-fork.83",
10
10
  "@effect/platform-node": ">=4.0.0 <4.1.0",
11
11
  "convex": "^1.49.0",
12
12
  "effect": ">=4.0.4 <4.1.0"
@@ -17,6 +17,7 @@ import type {
17
17
  VectorIndexNames,
18
18
  VectorSearchQuery,
19
19
  } from "convex/server";
20
+ import type { CommitTsPlaceholder } from "convex/values";
20
21
  import type { PatchValue } from "./DatabaseWriter.js";
21
22
 
22
23
  /**
@@ -104,6 +105,7 @@ export interface DatabaseWriter<
104
105
  delete<TableName extends TableNamesInDataModel<DataModel>>(
105
106
  id: GenericId<TableName, Scope>,
106
107
  ): Promise<void>;
108
+ readonly vars: { readonly commitTs: CommitTsPlaceholder };
107
109
  }
108
110
 
109
111
  export interface StorageReader<Scope extends IdScope.IdScope> {
@@ -5,7 +5,7 @@ import type {
5
5
  GenericDatabaseWriter,
6
6
  WithoutSystemFields,
7
7
  } from "convex/server";
8
- import type { GenericId } from "convex/values";
8
+ import type { CommitTsPlaceholder, GenericId } from "convex/values";
9
9
  import { pipe } from "effect/Function";
10
10
  import * as Context from "effect/Context";
11
11
  import * as Effect from "effect/Effect";
@@ -85,6 +85,11 @@ export interface DatabaseWriterService<
85
85
  ? Docs[TableName]
86
86
  : DocumentByName_<DataModel.FromSchema<DatabaseSchema_>, TableName>
87
87
  >;
88
+ /**
89
+ * Values not known until the mutation commits. Write `vars.commitTs` into a
90
+ * `CommitTs` field to store the transaction's commit timestamp.
91
+ */
92
+ readonly vars: { readonly commitTs: CommitTsPlaceholder };
88
93
  }
89
94
 
90
95
  /**
@@ -361,6 +366,7 @@ export const make = <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(
361
366
 
362
367
  return {
363
368
  table,
369
+ vars: convexDatabaseWriter.vars,
364
370
  } as DatabaseWriterService<DatabaseSchema_>;
365
371
  };
366
372