@confect/server 1.0.0-next.0 → 1.0.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/ActionCtx.d.ts.map +1 -1
  3. package/dist/ActionCtx.js +2 -2
  4. package/dist/ActionRunner.d.ts.map +1 -1
  5. package/dist/ActionRunner.js +2 -2
  6. package/dist/Api.d.ts.map +1 -1
  7. package/dist/Api.js +2 -2
  8. package/dist/Api.js.map +1 -1
  9. package/dist/Auth.d.ts +8 -8
  10. package/dist/Auth.d.ts.map +1 -1
  11. package/dist/Auth.js +2 -2
  12. package/dist/DataModel.d.ts +3 -3
  13. package/dist/DataModel.d.ts.map +1 -1
  14. package/dist/DataModel.js +3 -1
  15. package/dist/DatabaseReader.d.ts +4 -4
  16. package/dist/DatabaseReader.d.ts.map +1 -1
  17. package/dist/DatabaseReader.js +2 -2
  18. package/dist/DatabaseReader.js.map +1 -1
  19. package/dist/DatabaseSchema.d.ts +32 -32
  20. package/dist/DatabaseSchema.d.ts.map +1 -1
  21. package/dist/DatabaseSchema.js +2 -2
  22. package/dist/DatabaseWriter.d.ts +24 -16
  23. package/dist/DatabaseWriter.d.ts.map +1 -1
  24. package/dist/DatabaseWriter.js +27 -25
  25. package/dist/DatabaseWriter.js.map +1 -1
  26. package/dist/Document.d.ts.map +1 -1
  27. package/dist/Document.js +2 -2
  28. package/dist/FunctionImpl.d.ts.map +1 -1
  29. package/dist/FunctionImpl.js +2 -2
  30. package/dist/GroupImpl.d.ts +1 -1
  31. package/dist/GroupImpl.d.ts.map +1 -1
  32. package/dist/GroupImpl.js +2 -2
  33. package/dist/Handler.d.ts.map +1 -1
  34. package/dist/Handler.js +3 -1
  35. package/dist/HttpApi.d.ts.map +1 -1
  36. package/dist/HttpApi.js +2 -2
  37. package/dist/HttpApi.js.map +1 -1
  38. package/dist/Impl.d.ts.map +1 -1
  39. package/dist/Impl.js +2 -2
  40. package/dist/Impl.js.map +1 -1
  41. package/dist/MutationCtx.d.ts.map +1 -1
  42. package/dist/MutationCtx.js +2 -2
  43. package/dist/MutationRunner.d.ts +3 -3
  44. package/dist/MutationRunner.d.ts.map +1 -1
  45. package/dist/MutationRunner.js +2 -2
  46. package/dist/OrderedQuery.d.ts.map +1 -1
  47. package/dist/OrderedQuery.js +2 -2
  48. package/dist/OrderedQuery.js.map +1 -1
  49. package/dist/QueryCtx.d.ts.map +1 -1
  50. package/dist/QueryCtx.js +2 -2
  51. package/dist/QueryInitializer.d.ts +1 -1
  52. package/dist/QueryInitializer.d.ts.map +1 -1
  53. package/dist/QueryInitializer.js +2 -2
  54. package/dist/QueryInitializer.js.map +1 -1
  55. package/dist/QueryRunner.d.ts.map +1 -1
  56. package/dist/QueryRunner.js +2 -2
  57. package/dist/RegisteredFunctions.d.ts +22 -20
  58. package/dist/RegisteredFunctions.d.ts.map +1 -1
  59. package/dist/RegisteredFunctions.js +2 -2
  60. package/dist/RegisteredFunctions.js.map +1 -1
  61. package/dist/Registry.d.ts.map +1 -1
  62. package/dist/Registry.js +2 -2
  63. package/dist/RegistryItem.d.ts.map +1 -1
  64. package/dist/RegistryItem.js +2 -2
  65. package/dist/Scheduler.d.ts +7 -7
  66. package/dist/Scheduler.d.ts.map +1 -1
  67. package/dist/Scheduler.js +2 -2
  68. package/dist/SchemaToValidator.d.ts +7 -7
  69. package/dist/SchemaToValidator.d.ts.map +1 -1
  70. package/dist/SchemaToValidator.js +2 -2
  71. package/dist/SchemaToValidator.js.map +1 -1
  72. package/dist/Storage.d.ts.map +1 -1
  73. package/dist/Storage.js +2 -2
  74. package/dist/Table.d.ts +53 -53
  75. package/dist/Table.d.ts.map +1 -1
  76. package/dist/Table.js +2 -2
  77. package/dist/Table.js.map +1 -1
  78. package/dist/TableInfo.d.ts +1 -1
  79. package/dist/TableInfo.d.ts.map +1 -1
  80. package/dist/TableInfo.js +3 -1
  81. package/dist/TableInfo.js.map +1 -1
  82. package/dist/VectorSearch.d.ts +7 -7
  83. package/dist/VectorSearch.d.ts.map +1 -1
  84. package/dist/VectorSearch.js +2 -2
  85. package/dist/_virtual/_rolldown/runtime.js +18 -0
  86. package/dist/internal/utils.d.ts.map +1 -1
  87. package/dist/internal/utils.js +2 -2
  88. package/dist/internal/utils.js.map +1 -1
  89. package/package.json +29 -27
  90. package/src/Api.ts +4 -2
  91. package/src/DatabaseWriter.ts +102 -113
  92. package/src/Impl.ts +4 -2
  93. package/src/RegisteredFunctions.ts +1 -9
  94. package/src/SchemaToValidator.ts +1 -3
  95. package/src/Table.ts +4 -4
  96. package/src/TableInfo.ts +0 -1
  97. package/dist/_virtual/rolldown_runtime.js +0 -13
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@confect/server",
3
- "version": "1.0.0-next.0",
4
- "description": "Confect server",
3
+ "version": "1.0.0-next.2",
4
+ "description": "Backend bindings to the Convex platform",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/rjdellecese/confect.git"
@@ -9,7 +9,7 @@
9
9
  "bugs": {
10
10
  "url": "https://github.com/rjdellecese/confect/issues"
11
11
  },
12
- "homepage": "https://confect.rjdellecese.com",
12
+ "homepage": "https://confect.dev",
13
13
  "sideEffects": false,
14
14
  "type": "module",
15
15
  "files": [
@@ -39,37 +39,38 @@
39
39
  "author": "RJ Dellecese",
40
40
  "license": "ISC",
41
41
  "devDependencies": {
42
- "@effect/cluster": "0.52.9",
43
- "@effect/experimental": "0.57.1",
44
- "@effect/language-service": "0.56.0",
45
- "@effect/platform-node": "0.100.0",
46
- "@effect/rpc": "0.72.1",
47
- "@effect/sql": "0.48.0",
42
+ "@effect/cluster": "0.56.3",
43
+ "@effect/experimental": "0.58.0",
44
+ "@effect/language-service": "0.73.1",
45
+ "@effect/platform": "0.94.4",
46
+ "@effect/platform-node": "0.104.1",
47
+ "@effect/rpc": "0.73.0",
48
+ "@effect/sql": "0.49.0",
48
49
  "@effect/vitest": "0.27.0",
49
- "@effect/workflow": "^0.12.5",
50
- "@eslint/js": "9.39.1",
50
+ "@effect/workflow": "0.16.0",
51
+ "@eslint/js": "9.39.2",
51
52
  "@swc/jest": "0.2.39",
52
- "@tsconfig/strictest": "2.0.8",
53
- "@types/node": "24.10.1",
53
+ "@types/node": "25.2.3",
54
54
  "@vitest/coverage-v8": "3.2.4",
55
- "convex-test": "0.0.38",
56
- "dotenv": "17.2.3",
57
- "eslint": "9.39.1",
58
- "prettier": "3.6.2",
59
- "tsdown": "0.16.4",
55
+ "convex-test": "0.0.41",
56
+ "dotenv": "17.3.1",
57
+ "effect": "3.19.16",
58
+ "eslint": "9.39.2",
59
+ "prettier": "3.8.1",
60
+ "tsdown": "0.20.3",
60
61
  "typescript": "5.9.3",
61
- "typescript-eslint": "8.46.4",
62
- "vite": "7.2.2",
63
- "vite-tsconfig-paths": "5.1.4",
62
+ "typescript-eslint": "8.55.0",
63
+ "vite": "7.3.1",
64
+ "vite-tsconfig-paths": "6.1.1",
64
65
  "vitest": "3.2.4",
65
- "@confect/cli": "1.0.0-next.0",
66
- "@confect/test": "1.0.0-next.0"
66
+ "@confect/cli": "1.0.0-next.2",
67
+ "@confect/test": "1.0.0-next.2"
67
68
  },
68
69
  "peerDependencies": {
69
- "@effect/platform": "^0.93.2",
70
+ "@effect/platform": "^0.94.4",
70
71
  "convex": "^1.30.0",
71
- "effect": "^3.19.3",
72
- "@confect/core": "1.0.0-next.0"
72
+ "effect": "^3.19.16",
73
+ "@confect/core": "1.0.0-next.2"
73
74
  },
74
75
  "engines": {
75
76
  "node": ">=22",
@@ -84,7 +85,8 @@
84
85
  "test": "vitest run",
85
86
  "typecheck": "tsc --noEmit --project tsconfig.json",
86
87
  "fix": "prettier --write . && eslint --fix . --max-warnings=0",
87
- "lint": "prettier --check . && eslint . --max-warnings=0",
88
+ "format": "prettier --check .",
89
+ "lint": "eslint . --max-warnings=0",
88
90
  "clean": "rm -rf dist coverage node_modules"
89
91
  }
90
92
  }
package/src/Api.ts CHANGED
@@ -23,8 +23,10 @@ export interface Any {
23
23
  readonly [TypeId]: TypeId;
24
24
  }
25
25
 
26
- export interface AnyWithProps
27
- extends Api<DatabaseSchema.AnyWithProps, Spec.AnyWithProps> {}
26
+ export interface AnyWithProps extends Api<
27
+ DatabaseSchema.AnyWithProps,
28
+ Spec.AnyWithProps
29
+ > {}
28
30
 
29
31
  export type Schema<Api_ extends AnyWithProps> = Api_["databaseSchema"];
30
32
 
@@ -22,124 +22,113 @@ export const make = <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(
22
22
  >,
23
23
  ) => {
24
24
  type DataModel_ = DataModel.FromSchema<DatabaseSchema_>;
25
+ const tables = databaseSchema.tables as Record<string, Table.AnyWithProps>;
25
26
 
26
- const insert = <TableName extends DataModel.TableNames<DataModel_>>(
27
+ const table = <const TableName extends DataModel.TableNames<DataModel_>>(
27
28
  tableName: TableName,
28
- document: Document.WithoutSystemFields<
29
- DocumentByName_<DataModel_, TableName>
30
- >,
31
- ) =>
32
- Effect.gen(function* () {
33
- const table = (
34
- databaseSchema.tables as Record<string, Table.AnyWithProps>
35
- )[tableName]!;
36
-
37
- const encodedDocument = yield* Document.encode(
38
- document,
39
- tableName,
40
- table.Fields,
41
- );
42
-
43
- const id = yield* Effect.promise(() =>
44
- convexDatabaseWriter.insert(
29
+ ) => {
30
+ const tableDef = tables[tableName]!;
31
+ const tableSchema = tableDef.Fields as TableInfo.TableSchema<
32
+ DataModel.TableInfoWithName_<DataModel_, TableName>
33
+ >;
34
+
35
+ const insert = (
36
+ document: Document.WithoutSystemFields<
37
+ DocumentByName_<DataModel_, TableName>
38
+ >,
39
+ ) =>
40
+ Effect.gen(function* () {
41
+ const encodedDocument = yield* Document.encode(
42
+ document,
45
43
  tableName,
46
- encodedDocument as WithoutSystemFields<
47
- DocumentByName<DataModel.ToConvex<DataModel_>, TableName>
48
- >,
49
- ),
50
- );
51
-
52
- return id;
53
- });
54
-
55
- const patch = <TableName extends DataModel.TableNames<DataModel_>>(
56
- tableName: TableName,
57
- id: GenericId<TableName>,
58
- patchedValues: Partial<
59
- WithoutSystemFields<DocumentByName_<DataModel_, TableName>>
60
- >,
61
- ) =>
62
- Effect.gen(function* () {
63
- const table = (
64
- databaseSchema.tables as Record<string, Table.AnyWithProps>
65
- )[tableName]!;
66
-
67
- const tableSchema = table.Fields as TableInfo.TableSchema<
68
- DataModel.TableInfoWithName_<DataModel_, TableName>
69
- >;
70
-
71
- const originalDecodedDoc = yield* QueryInitializer.getById(
72
- tableName,
73
- convexDatabaseWriter as any,
74
- table,
75
- )(id);
76
-
77
- const updatedEncodedDoc = yield* pipe(
78
- patchedValues,
79
- Record.reduce(originalDecodedDoc, (acc, value, key) =>
80
- value === undefined
81
- ? Record.remove(acc, key)
82
- : Record.set(acc, key, value),
83
- ),
84
- Document.encode(tableName, tableSchema),
85
- );
86
-
87
- yield* Effect.promise(() =>
88
- convexDatabaseWriter.replace(
89
- id,
90
- updatedEncodedDoc as Expand<
91
- BetterOmit<
92
- DocumentByName<DataModel.ToConvex<DataModel_>, TableName>,
93
- "_creationTime" | "_id"
94
- >
95
- >,
96
- ),
97
- );
98
- });
99
-
100
- const replace = <TableName extends DataModel.TableNames<DataModel_>>(
101
- tableName: TableName,
102
- id: GenericId<TableName>,
103
- value: WithoutSystemFields<DocumentByName_<DataModel_, TableName>>,
104
- ) =>
105
- Effect.gen(function* () {
106
- const table = (
107
- databaseSchema.tables as Record<string, Table.AnyWithProps>
108
- )[tableName]!;
109
-
110
- const tableSchema = table.Fields as TableInfo.TableSchema<
111
- DataModel.TableInfoWithName_<DataModel_, TableName>
112
- >;
113
-
114
- const updatedEncodedDoc = yield* Document.encode(
115
- value,
116
- tableName,
117
- tableSchema,
118
- );
119
-
120
- yield* Effect.promise(() =>
121
- convexDatabaseWriter.replace(
122
- id,
123
- updatedEncodedDoc as Expand<
124
- BetterOmit<
125
- DocumentByName<DataModel.ToConvex<DataModel_>, TableName>,
126
- "_creationTime" | "_id"
127
- >
128
- >,
129
- ),
130
- );
131
- });
132
-
133
- const delete_ = <TableName extends DataModel.TableNames<DataModel_>>(
134
- _tableName: TableName,
135
- id: GenericId<TableName>,
136
- ) => Effect.promise(() => convexDatabaseWriter.delete(id));
44
+ tableDef.Fields,
45
+ );
46
+
47
+ const id = yield* Effect.promise(() =>
48
+ convexDatabaseWriter.insert(
49
+ tableName,
50
+ encodedDocument as WithoutSystemFields<
51
+ DocumentByName<DataModel.ToConvex<DataModel_>, TableName>
52
+ >,
53
+ ),
54
+ );
55
+
56
+ return id;
57
+ });
58
+
59
+ const patch = (
60
+ id: GenericId<TableName>,
61
+ patchedValues: Partial<
62
+ WithoutSystemFields<DocumentByName_<DataModel_, TableName>>
63
+ >,
64
+ ) =>
65
+ Effect.gen(function* () {
66
+ const originalDecodedDoc = yield* QueryInitializer.getById(
67
+ tableName,
68
+ convexDatabaseWriter as any,
69
+ tableDef,
70
+ )(id);
71
+
72
+ const updatedEncodedDoc = yield* pipe(
73
+ patchedValues,
74
+ Record.reduce(originalDecodedDoc, (acc, value, key) =>
75
+ value === undefined
76
+ ? Record.remove(acc, key)
77
+ : Record.set(acc, key, value),
78
+ ),
79
+ Document.encode(tableName, tableSchema),
80
+ );
81
+
82
+ yield* Effect.promise(() =>
83
+ convexDatabaseWriter.replace(
84
+ id,
85
+ updatedEncodedDoc as Expand<
86
+ BetterOmit<
87
+ DocumentByName<DataModel.ToConvex<DataModel_>, TableName>,
88
+ "_creationTime" | "_id"
89
+ >
90
+ >,
91
+ ),
92
+ );
93
+ });
94
+
95
+ const replace = (
96
+ id: GenericId<TableName>,
97
+ value: WithoutSystemFields<DocumentByName_<DataModel_, TableName>>,
98
+ ) =>
99
+ Effect.gen(function* () {
100
+ const updatedEncodedDoc = yield* Document.encode(
101
+ value,
102
+ tableName,
103
+ tableSchema,
104
+ );
105
+
106
+ yield* Effect.promise(() =>
107
+ convexDatabaseWriter.replace(
108
+ id,
109
+ updatedEncodedDoc as Expand<
110
+ BetterOmit<
111
+ DocumentByName<DataModel.ToConvex<DataModel_>, TableName>,
112
+ "_creationTime" | "_id"
113
+ >
114
+ >,
115
+ ),
116
+ );
117
+ });
118
+
119
+ const delete_ = (id: GenericId<TableName>) =>
120
+ Effect.promise(() => convexDatabaseWriter.delete(id));
121
+
122
+ return {
123
+ insert,
124
+ patch,
125
+ replace,
126
+ delete: delete_,
127
+ };
128
+ };
137
129
 
138
130
  return {
139
- insert,
140
- patch,
141
- replace,
142
- delete: delete_,
131
+ table,
143
132
  };
144
133
  };
145
134
 
package/src/Impl.ts CHANGED
@@ -20,8 +20,10 @@ export interface Impl<
20
20
 
21
21
  export type FinalizationStatus = "Unfinalized" | "Finalized";
22
22
 
23
- export interface AnyWithProps
24
- extends Impl<Api.AnyWithProps, FinalizationStatus> {}
23
+ export interface AnyWithProps extends Impl<
24
+ Api.AnyWithProps,
25
+ FinalizationStatus
26
+ > {}
25
27
 
26
28
  export const Impl = <
27
29
  Api_ extends Api.AnyWithProps,
@@ -17,15 +17,7 @@ import {
17
17
  type RegisteredMutation,
18
18
  type RegisteredQuery,
19
19
  } from "convex/server";
20
- import {
21
- Effect,
22
- Layer,
23
- Match,
24
- pipe,
25
- Ref,
26
- Schema,
27
- type Types,
28
- } from "effect";
20
+ import { Effect, Layer, Match, pipe, Ref, Schema, type Types } from "effect";
29
21
  import * as ActionCtx from "./ActionCtx";
30
22
  import * as ActionRunner from "./ActionRunner";
31
23
  import type * as Api from "./Api";
@@ -86,8 +86,7 @@ export type TableSchemaToTableValidator<
86
86
  | VObject<any, any, any, any>
87
87
  | VUnion<any, any, any, any>
88
88
  ? Vd
89
- : // TODO: Add type error message
90
- never;
89
+ : never;
91
90
 
92
91
  export const compileTableSchema = <
93
92
  TableSchema extends Schema.Schema.AnyNoContext,
@@ -244,7 +243,6 @@ type ValueTupleToValidatorTuple<VlTuple extends ReadonlyArray<ReadonlyValue>> =
244
243
 
245
244
  export const compileSchema = <T, E>(
246
245
  schema: Schema.Schema<T, E>,
247
- // TODO: Can `ValueToValidator` here just accept `E` directly?
248
246
  ): ValueToValidator<(typeof schema)["Encoded"]> =>
249
247
  runSyncThrow(compileAst(schema.ast)) as any;
250
248
 
package/src/Table.ts CHANGED
@@ -27,8 +27,8 @@ export const isTable = (u: unknown): u is Any =>
27
27
  export interface Table<
28
28
  Name_ extends string,
29
29
  TableSchema_ extends Schema.Schema.AnyNoContext,
30
- TableValidator_ extends
31
- GenericValidator = TableSchemaToTableValidator<TableSchema_>,
30
+ TableValidator_ extends GenericValidator =
31
+ TableSchemaToTableValidator<TableSchema_>,
32
32
  Indexes_ extends GenericTableIndexes = {},
33
33
  SearchIndexes_ extends GenericTableSearchIndexes = {},
34
34
  VectorIndexes_ extends GenericTableVectorIndexes = {},
@@ -349,8 +349,8 @@ const makeProto = <
349
349
  export const make = <
350
350
  const Name_ extends string,
351
351
  TableSchema_ extends Schema.Schema.AnyNoContext,
352
- TableValidator_ extends
353
- GenericValidator = TableSchemaToTableValidator<TableSchema_>,
352
+ TableValidator_ extends GenericValidator =
353
+ TableSchemaToTableValidator<TableSchema_>,
354
354
  Indexes_ extends GenericTableIndexes = {},
355
355
  SearchIndexes_ extends GenericTableSearchIndexes = {},
356
356
  VectorIndexes_ extends GenericTableVectorIndexes = {},
package/src/TableInfo.ts CHANGED
@@ -30,7 +30,6 @@ export type TableInfo<Table_ extends Table.AnyWithProps> =
30
30
  readonly [TypeId]: TypeId;
31
31
  readonly document: Table_["Doc"]["Type"];
32
32
  readonly encodedDocument: Table_["Doc"]["Encoded"];
33
- // TODO: Can we exclude this and derive the convex document type from the encoded document?
34
33
  readonly convexDocument: ExtractConvexDocument<
35
34
  TableName,
36
35
  TableValidator
@@ -1,13 +0,0 @@
1
- //#region rolldown:runtime
2
- var __defProp = Object.defineProperty;
3
- var __export = (all) => {
4
- let target = {};
5
- for (var name in all) __defProp(target, name, {
6
- get: all[name],
7
- enumerable: true
8
- });
9
- return target;
10
- };
11
-
12
- //#endregion
13
- export { __export };