convex-verify 1.1.0 → 1.2.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.
- package/README.md +148 -80
- package/dist/core/index.d.mts +14 -55
- package/dist/core/index.d.ts +14 -55
- package/dist/core/index.js +492 -92
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +491 -92
- package/dist/core/index.mjs.map +1 -1
- package/dist/index.d.mts +9 -6
- package/dist/index.d.ts +9 -6
- package/dist/index.js +378 -271
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +378 -267
- package/dist/index.mjs.map +1 -1
- package/dist/types-B8ZkLuJ2.d.mts +141 -0
- package/dist/types-B8ZkLuJ2.d.ts +141 -0
- package/dist/utils/index.d.mts +3 -2
- package/dist/utils/index.d.ts +3 -2
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +1 -1
- package/dist/utils/index.mjs.map +1 -1
- package/dist/verifyConfig-CTrtqMr_.d.ts +94 -0
- package/dist/verifyConfig-Kn3Ikj00.d.mts +94 -0
- package/package.json +1 -16
- package/dist/configs/index.d.mts +0 -51
- package/dist/configs/index.d.ts +0 -51
- package/dist/configs/index.js +0 -38
- package/dist/configs/index.js.map +0 -1
- package/dist/configs/index.mjs +0 -11
- package/dist/configs/index.mjs.map +0 -1
- package/dist/plugin-BOb1Kw1A.d.ts +0 -47
- package/dist/plugin-DlsboiCF.d.mts +0 -47
- package/dist/plugins/index.d.mts +0 -85
- package/dist/plugins/index.d.ts +0 -85
- package/dist/plugins/index.js +0 -312
- package/dist/plugins/index.js.map +0 -1
- package/dist/plugins/index.mjs +0 -284
- package/dist/plugins/index.mjs.map +0 -1
- package/dist/transforms/index.d.mts +0 -38
- package/dist/transforms/index.d.ts +0 -38
- package/dist/transforms/index.js +0 -46
- package/dist/transforms/index.js.map +0 -1
- package/dist/transforms/index.mjs +0 -19
- package/dist/transforms/index.mjs.map +0 -1
- package/dist/types-DvJMYubf.d.mts +0 -151
- package/dist/types-DvJMYubf.d.ts +0 -151
package/README.md
CHANGED
|
@@ -24,36 +24,30 @@ pnpm install convex-verify
|
|
|
24
24
|
## Quick Start
|
|
25
25
|
|
|
26
26
|
```ts
|
|
27
|
-
import {
|
|
28
|
-
defaultValuesConfig,
|
|
29
|
-
protectedColumnsConfig,
|
|
30
|
-
uniqueColumnConfig,
|
|
31
|
-
uniqueRowConfig,
|
|
32
|
-
verifyConfig,
|
|
33
|
-
} from "convex-verify";
|
|
27
|
+
import { verifyConfig } from "convex-verify";
|
|
34
28
|
|
|
35
29
|
import schema from "./schema";
|
|
36
30
|
|
|
37
|
-
export const { insert, patch, dangerouslyPatch } = verifyConfig(schema, {
|
|
38
|
-
defaultValues:
|
|
31
|
+
export const { insert, patch, dangerouslyPatch, verify, config } = verifyConfig(schema, {
|
|
32
|
+
defaultValues: {
|
|
39
33
|
posts: { status: "draft", views: 0 },
|
|
40
|
-
}
|
|
34
|
+
},
|
|
41
35
|
|
|
42
|
-
protectedColumns:
|
|
36
|
+
protectedColumns: {
|
|
43
37
|
posts: ["authorId"],
|
|
44
|
-
}
|
|
38
|
+
},
|
|
45
39
|
|
|
46
|
-
uniqueRow:
|
|
40
|
+
uniqueRow: {
|
|
47
41
|
posts: ["by_author_slug"],
|
|
48
|
-
}
|
|
42
|
+
},
|
|
49
43
|
|
|
50
|
-
uniqueColumn:
|
|
44
|
+
uniqueColumn: {
|
|
51
45
|
users: ["by_email", "by_username"],
|
|
52
|
-
}
|
|
46
|
+
},
|
|
53
47
|
});
|
|
54
48
|
```
|
|
55
49
|
|
|
56
|
-
|
|
50
|
+
Use the returned helpers in mutations:
|
|
57
51
|
|
|
58
52
|
```ts
|
|
59
53
|
import { insert, patch } from "./verify";
|
|
@@ -82,48 +76,68 @@ export const updatePost = mutation({
|
|
|
82
76
|
});
|
|
83
77
|
```
|
|
84
78
|
|
|
79
|
+
And use the returned verifier surface directly when you need schema-aware built-in checks outside the insert/patch helpers:
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
await verify.uniqueRow(ctx, "posts", {
|
|
83
|
+
title: "Hello",
|
|
84
|
+
slug: "hello",
|
|
85
|
+
authorId: "author-1",
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
config.uniqueRow.posts; // typed configured options
|
|
89
|
+
```
|
|
90
|
+
|
|
85
91
|
---
|
|
86
92
|
|
|
87
93
|
## API Reference
|
|
88
94
|
|
|
89
95
|
### `verifyConfig(schema, config)`
|
|
90
96
|
|
|
91
|
-
Main configuration function
|
|
97
|
+
Main configuration function. It accepts inline schema-aware config and returns typed mutation helpers plus a direct `verify` registry.
|
|
92
98
|
|
|
93
99
|
```ts
|
|
94
|
-
const { insert, patch, dangerouslyPatch } = verifyConfig(schema, {
|
|
95
|
-
defaultValues?:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
100
|
+
const { insert, patch, dangerouslyPatch, verify, config } = verifyConfig(schema, {
|
|
101
|
+
defaultValues?: {
|
|
102
|
+
posts?: { status?: "draft"; views?: number };
|
|
103
|
+
} | (() => { ... } | Promise<{ ... }>),
|
|
104
|
+
protectedColumns?: {
|
|
105
|
+
posts?: ["authorId"];
|
|
106
|
+
},
|
|
107
|
+
uniqueRow?: {
|
|
108
|
+
posts?: ["by_author_slug"];
|
|
109
|
+
},
|
|
110
|
+
uniqueColumn?: {
|
|
111
|
+
users?: ["by_email", "by_username"];
|
|
112
|
+
},
|
|
99
113
|
extensions?: Extension[],
|
|
100
114
|
});
|
|
101
115
|
```
|
|
102
116
|
|
|
103
117
|
#### Returns
|
|
104
118
|
|
|
105
|
-
| Function
|
|
119
|
+
| Function/Value | Description |
|
|
106
120
|
| ------------------ | ----------------------------------------------------------------------------------- |
|
|
107
121
|
| `insert` | Insert with default values applied and extensions run |
|
|
108
122
|
| `patch` | Patch with protected columns removed and extensions run |
|
|
109
123
|
| `dangerouslyPatch` | Patch with full access to all columns (bypasses protected columns type restriction) |
|
|
124
|
+
| `verify` | Built-in verifier functions for configured features only |
|
|
125
|
+
| `config` | Passive typed snapshot of the built-in config that was passed in |
|
|
110
126
|
|
|
111
127
|
---
|
|
112
128
|
|
|
113
|
-
## `
|
|
114
|
-
|
|
115
|
-
Makes specified fields optional in `insert()` by providing default values. The types update automatically - fields with defaults become optional.
|
|
129
|
+
## `defaultValues`
|
|
116
130
|
|
|
117
|
-
|
|
118
|
-
import { defaultValuesConfig } from "convex-verify";
|
|
119
|
-
```
|
|
131
|
+
Makes specified fields optional in `insert()` by providing default values. The types update automatically.
|
|
120
132
|
|
|
121
133
|
### Static Values
|
|
122
134
|
|
|
123
135
|
```ts
|
|
124
|
-
const
|
|
136
|
+
const { insert } = verifyConfig(schema, {
|
|
137
|
+
defaultValues: {
|
|
125
138
|
posts: { status: "draft", views: 0 },
|
|
126
139
|
comments: { likes: 0 },
|
|
140
|
+
},
|
|
127
141
|
});
|
|
128
142
|
```
|
|
129
143
|
|
|
@@ -132,41 +146,58 @@ const config = defaultValuesConfig(schema, {
|
|
|
132
146
|
Use a function when values should be generated fresh on each insert:
|
|
133
147
|
|
|
134
148
|
```ts
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}
|
|
149
|
+
const { insert } = verifyConfig(schema, {
|
|
150
|
+
defaultValues: () => ({
|
|
151
|
+
posts: {
|
|
152
|
+
status: "draft",
|
|
153
|
+
slug: generateRandomSlug(),
|
|
154
|
+
createdAt: Date.now(),
|
|
155
|
+
},
|
|
156
|
+
}),
|
|
157
|
+
});
|
|
142
158
|
```
|
|
143
159
|
|
|
144
160
|
### Async Values
|
|
145
161
|
|
|
146
162
|
```ts
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
|
|
163
|
+
const { insert } = verifyConfig(schema, {
|
|
164
|
+
defaultValues: async () => ({
|
|
165
|
+
posts: {
|
|
166
|
+
category: await fetchDefaultCategory(),
|
|
167
|
+
},
|
|
168
|
+
}),
|
|
169
|
+
});
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Direct Verifier Calls
|
|
173
|
+
|
|
174
|
+
```ts
|
|
175
|
+
const { verify } = verifyConfig(schema, {
|
|
176
|
+
defaultValues: {
|
|
177
|
+
users: { status: "pending" },
|
|
150
178
|
},
|
|
151
|
-
})
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
const user = await verify.defaultValues("users", {
|
|
182
|
+
email: "alice@example.com",
|
|
183
|
+
username: "alice",
|
|
184
|
+
});
|
|
152
185
|
```
|
|
153
186
|
|
|
154
187
|
---
|
|
155
188
|
|
|
156
|
-
## `
|
|
189
|
+
## `protectedColumns`
|
|
157
190
|
|
|
158
191
|
Removes specified columns from the `patch()` input type, preventing accidental updates to critical fields like `authorId` or `createdAt`.
|
|
159
192
|
|
|
160
|
-
```ts
|
|
161
|
-
import { protectedColumnsConfig } from "convex-verify";
|
|
162
|
-
```
|
|
163
|
-
|
|
164
193
|
### Usage
|
|
165
194
|
|
|
166
195
|
```ts
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
196
|
+
const { patch, dangerouslyPatch } = verifyConfig(schema, {
|
|
197
|
+
protectedColumns: {
|
|
198
|
+
posts: ["authorId", "createdAt"],
|
|
199
|
+
comments: ["postId", "authorId"],
|
|
200
|
+
},
|
|
170
201
|
});
|
|
171
202
|
```
|
|
172
203
|
|
|
@@ -192,33 +223,33 @@ await dangerouslyPatch(ctx, "posts", id, {
|
|
|
192
223
|
|
|
193
224
|
---
|
|
194
225
|
|
|
195
|
-
## `
|
|
226
|
+
## `uniqueRow`
|
|
196
227
|
|
|
197
228
|
Enforces uniqueness across multiple columns using composite indexes. Useful for things like "unique slug per author" or "unique name per organization".
|
|
198
229
|
|
|
199
|
-
```ts
|
|
200
|
-
import { uniqueRowConfig } from "convex-verify";
|
|
201
|
-
```
|
|
202
|
-
|
|
203
230
|
### Usage
|
|
204
231
|
|
|
205
232
|
```ts
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
|
|
233
|
+
const { verify } = verifyConfig(schema, {
|
|
234
|
+
uniqueRow: {
|
|
235
|
+
posts: ["by_author_slug"], // Unique author + slug combination
|
|
236
|
+
projects: ["by_org_name"], // Unique org + name combination
|
|
237
|
+
},
|
|
209
238
|
});
|
|
210
239
|
```
|
|
211
240
|
|
|
212
241
|
### With Options
|
|
213
242
|
|
|
214
243
|
```ts
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
244
|
+
const { verify } = verifyConfig(schema, {
|
|
245
|
+
uniqueRow: {
|
|
246
|
+
posts: [
|
|
247
|
+
{
|
|
248
|
+
index: "by_author_slug",
|
|
249
|
+
identifiers: ["_id", "authorId"], // Fields that identify "same document"
|
|
250
|
+
},
|
|
251
|
+
],
|
|
252
|
+
},
|
|
222
253
|
});
|
|
223
254
|
```
|
|
224
255
|
|
|
@@ -226,20 +257,18 @@ The `identifiers` option controls which fields are checked when determining if a
|
|
|
226
257
|
|
|
227
258
|
---
|
|
228
259
|
|
|
229
|
-
## `
|
|
260
|
+
## `uniqueColumn`
|
|
230
261
|
|
|
231
262
|
Enforces uniqueness on single columns using indexes. Useful for email addresses, usernames, slugs, etc.
|
|
232
263
|
|
|
233
|
-
```ts
|
|
234
|
-
import { uniqueColumnConfig } from "convex-verify";
|
|
235
|
-
```
|
|
236
|
-
|
|
237
264
|
### Usage
|
|
238
265
|
|
|
239
266
|
```ts
|
|
240
|
-
const
|
|
241
|
-
|
|
242
|
-
|
|
267
|
+
const { verify } = verifyConfig(schema, {
|
|
268
|
+
uniqueColumn: {
|
|
269
|
+
users: ["by_email", "by_username"],
|
|
270
|
+
organizations: ["by_slug"],
|
|
271
|
+
},
|
|
243
272
|
});
|
|
244
273
|
```
|
|
245
274
|
|
|
@@ -251,14 +280,43 @@ The column name is derived from the index name by removing the `by_` prefix:
|
|
|
251
280
|
### With Options
|
|
252
281
|
|
|
253
282
|
```ts
|
|
254
|
-
const
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
283
|
+
const { verify } = verifyConfig(schema, {
|
|
284
|
+
uniqueColumn: {
|
|
285
|
+
users: [
|
|
286
|
+
"by_username",
|
|
287
|
+
{ index: "by_email", identifiers: ["_id", "clerkId"] },
|
|
288
|
+
],
|
|
289
|
+
},
|
|
259
290
|
});
|
|
260
291
|
```
|
|
261
292
|
|
|
293
|
+
### Direct Verifier Calls
|
|
294
|
+
|
|
295
|
+
```ts
|
|
296
|
+
await verify.uniqueColumn(ctx, "users", {
|
|
297
|
+
email: "alice@example.com",
|
|
298
|
+
});
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
Patch checks use the document id:
|
|
302
|
+
|
|
303
|
+
```ts
|
|
304
|
+
await verify.uniqueColumn(ctx, "users", userId, {
|
|
305
|
+
username: "alice",
|
|
306
|
+
});
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
Direct uniqueness verifier calls may use partial data. Only configured unique fields present in the payload are checked.
|
|
310
|
+
|
|
311
|
+
### Breaking Change
|
|
312
|
+
|
|
313
|
+
Version `2.0.0` removes the old helper-wrapper API:
|
|
314
|
+
|
|
315
|
+
- `defaultValuesConfig`
|
|
316
|
+
- `protectedColumnsConfig`
|
|
317
|
+
- `uniqueRowConfig`
|
|
318
|
+
- `uniqueColumnConfig`
|
|
319
|
+
|
|
262
320
|
---
|
|
263
321
|
|
|
264
322
|
## Custom Extensions
|
|
@@ -283,15 +341,25 @@ Custom extensions let you add your own validation and transformation logic that
|
|
|
283
341
|
- `patch()` still strips protected columns at runtime; use `dangerouslyPatch()` if an extension must change them
|
|
284
342
|
- Extension errors should use `ConvexError` for proper error handling on the client
|
|
285
343
|
|
|
344
|
+
### Execution Order
|
|
345
|
+
|
|
346
|
+
Custom extensions always run before built-in uniqueness checks.
|
|
347
|
+
|
|
348
|
+
- `insert()`: `defaultValues` → custom `extensions` → `uniqueRow` → `uniqueColumn`
|
|
349
|
+
- `patch()`: protected-column strip → custom `extensions` → `uniqueRow` → `uniqueColumn` → protected-column strip again
|
|
350
|
+
- `dangerouslyPatch()`: custom `extensions` → `uniqueRow` → `uniqueColumn`
|
|
351
|
+
|
|
352
|
+
`defaultValues` and protected-column stripping are preprocessing steps, not entries in the custom `extensions` array.
|
|
353
|
+
|
|
286
354
|
### Creating an Extension
|
|
287
355
|
|
|
288
|
-
Use `createExtension`.
|
|
356
|
+
Use `createExtension`. For schema-aware typing in the callback, pass the schema as the first argument:
|
|
289
357
|
|
|
290
358
|
```ts
|
|
291
359
|
import { createExtension } from "convex-verify";
|
|
292
360
|
import { ConvexError } from "convex/values";
|
|
293
361
|
|
|
294
|
-
const normalizeEmail = createExtension
|
|
362
|
+
const normalizeEmail = createExtension(schema, (input) => {
|
|
295
363
|
if (input.tableName !== "users") {
|
|
296
364
|
return input.data;
|
|
297
365
|
}
|
package/dist/core/index.d.mts
CHANGED
|
@@ -1,58 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
export { B as BaseConfigReturn, k as DMGeneric, D as DefaultValuesConfigData, l as DefaultValuesInput, E as ExtractDefaultValuesConfig, c as ExtractProtectedColumnsConfig, I as IndexConfigBaseOptions, j as IndexConfigEntry, N as NormalizedIndexConfig, O as OnFailArgs, P as Prettify, m as ProtectedColumnsInput, g as UniqueColumnConfigData, h as UniqueColumnConfigEntry, i as UniqueColumnConfigOptions, U as UniqueRowConfigData, e as UniqueRowConfigEntry, f as UniqueRowConfigOptions, n as normalizeIndexConfigEntry } from '../types-DvJMYubf.mjs';
|
|
1
|
+
import { c as createExtension$1, i as isExtension$1, r as runExtensions$1 } from '../verifyConfig-Kn3Ikj00.mjs';
|
|
2
|
+
export { d as Extension, E as ExtensionContext, a as ExtensionInput, b as ExtensionInputForSchema, e as ExtensionRecord, S as SchemaExtension, v as verifyConfig } from '../verifyConfig-Kn3Ikj00.mjs';
|
|
3
|
+
export { v as BaseConfigReturn, B as BuiltinConfigKey, C as ConfigRegistry, w as DMGeneric, D as DataModelForSchema, c as DefaultValuesConfigData, d as DefaultValuesConfigInput, k as DefaultValuesVerifyFn, m as ExtensionStyleVerifyFn, E as ExtractDefaultValuesConfig, g as ExtractProtectedColumnsConfig, H as HasKey, I as IndexConfigBaseOptions, u as IndexConfigEntry, M as MakeOptional, a as MutationCtxForSchema, N as NormalizedIndexConfig, O as OnFailArgs, b as OnFailCallback, f as OptionalKeysForTable, P as Prettify, e as ProtectedColumnsConfigData, l as ProtectedColumnsVerifyFn, h as ProtectedKeysForTable, q as UniqueColumnConfigData, r as UniqueColumnConfigEntry, s as UniqueColumnConfigOptions, U as UniqueRowConfigData, o as UniqueRowConfigEntry, p as UniqueRowConfigOptions, V as VerifyConfigInput, i as VerifyInsertInput, j as VerifyPatchInput, n as VerifyRegistry, t as normalizeIndexConfigEntry } from '../types-B8ZkLuJ2.mjs';
|
|
4
|
+
import 'convex/server';
|
|
5
|
+
import 'convex/values';
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Unique row validation config.
|
|
14
|
-
* Enforces uniqueness across multiple columns using composite indexes.
|
|
15
|
-
*
|
|
16
|
-
* Can also be added to the `extensions` array.
|
|
17
|
-
*/
|
|
18
|
-
uniqueRow?: SchemaExtension<S, "uniqueRow", any>;
|
|
19
|
-
/**
|
|
20
|
-
* Unique column validation config.
|
|
21
|
-
* Enforces uniqueness on single columns using indexes.
|
|
22
|
-
*
|
|
23
|
-
* Can also be added to the `extensions` array.
|
|
24
|
-
*/
|
|
25
|
-
uniqueColumn?: SchemaExtension<S, "uniqueColumn", any>;
|
|
26
|
-
/**
|
|
27
|
-
* Additional extensions to run after transform configs (defaultValues, etc.).
|
|
28
|
-
* These extensions can validate data, transform/mutate it, or both.
|
|
29
|
-
* Custom extensions run before built-in uniqueness extensions so the built-ins
|
|
30
|
-
* validate the final transformed payload.
|
|
31
|
-
* Extensions run in order; each receives the (possibly transformed) output of the previous.
|
|
32
|
-
*
|
|
33
|
-
* Built-in extensions (uniqueRow, uniqueColumn) can be added here
|
|
34
|
-
* as an alternative to using their dedicated config keys when you need
|
|
35
|
-
* explicit ordering.
|
|
36
|
-
*/
|
|
37
|
-
extensions?: SchemaExtension<S>[];
|
|
38
|
-
};
|
|
39
|
-
/**
|
|
40
|
-
* Configure type-safe insert and patch functions with validation and transforms.
|
|
41
|
-
*
|
|
42
|
-
* @param schema - Your Convex schema definition
|
|
43
|
-
* @param configs - Configuration object with transforms, configs, and extensions
|
|
44
|
-
* @returns Object with `insert`, `patch`, and `dangerouslyPatch` functions
|
|
45
|
-
*/
|
|
46
|
-
declare const verifyConfig: <S extends GenericSchema, SD extends SchemaDefinition<S, boolean>, const VC extends VerifyConfigInputWithExtensions<SD>>(_schema: SD, configs: VC) => {
|
|
47
|
-
insert: <const TN extends TableNamesInDataModel<DataModelFromSchemaDefinition<SD>>, const D extends DocumentByName<DataModelFromSchemaDefinition<SD>, TN>>(ctx: Omit<GenericMutationCtx<DataModelFromSchemaDefinition<SD>>, never>, tableName: TN, data: HasKey<VC, "defaultValues"> extends true ? MakeOptional<WithoutSystemFields<D>, OptionalKeysForTable<VC, TN> & keyof WithoutSystemFields<D>> : WithoutSystemFields<D>, options?: {
|
|
48
|
-
onFail?: OnFailCallback<D>;
|
|
49
|
-
}) => Promise<GenericId<TN>>;
|
|
50
|
-
patch: <const TN extends TableNamesInDataModel<DataModelFromSchemaDefinition<SD>>, const D_1 extends DocumentByName<DataModelFromSchemaDefinition<SD>, TN>>(ctx: Omit<GenericMutationCtx<DataModelFromSchemaDefinition<SD>>, never>, tableName: TN, id: GenericId<TN>, data: HasKey<VC, "protectedColumns"> extends true ? Omit<Partial<WithoutSystemFields<D_1>>, ProtectedKeysForTable<VC, TN> & keyof WithoutSystemFields<D_1>> : Partial<WithoutSystemFields<D_1>>, options?: {
|
|
51
|
-
onFail?: OnFailCallback<D_1>;
|
|
52
|
-
}) => Promise<void>;
|
|
53
|
-
dangerouslyPatch: <const TN extends TableNamesInDataModel<DataModelFromSchemaDefinition<SD>>, const D_2 extends DocumentByName<DataModelFromSchemaDefinition<SD>, TN>>(ctx: Omit<GenericMutationCtx<DataModelFromSchemaDefinition<SD>>, never>, tableName: TN, id: GenericId<TN>, data: Partial<WithoutSystemFields<D_2>>, options?: {
|
|
54
|
-
onFail?: OnFailCallback<D_2>;
|
|
55
|
-
}) => Promise<void>;
|
|
7
|
+
type ProtectedColumnsLike = Record<string, readonly PropertyKey[] | undefined>;
|
|
8
|
+
declare const stripProtectedPatchColumns: <T extends Record<string, any>>(protectedColumns: ProtectedColumnsLike, tableName: string, data: T) => {
|
|
9
|
+
filteredData: T;
|
|
10
|
+
removedColumns: string[];
|
|
56
11
|
};
|
|
57
12
|
|
|
58
|
-
|
|
13
|
+
declare const createExtension: typeof createExtension$1;
|
|
14
|
+
declare const isExtension: typeof isExtension$1;
|
|
15
|
+
declare const runExtensions: typeof runExtensions$1;
|
|
16
|
+
|
|
17
|
+
export { createExtension, isExtension, runExtensions, stripProtectedPatchColumns };
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,58 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
export { B as BaseConfigReturn, k as DMGeneric, D as DefaultValuesConfigData, l as DefaultValuesInput, E as ExtractDefaultValuesConfig, c as ExtractProtectedColumnsConfig, I as IndexConfigBaseOptions, j as IndexConfigEntry, N as NormalizedIndexConfig, O as OnFailArgs, P as Prettify, m as ProtectedColumnsInput, g as UniqueColumnConfigData, h as UniqueColumnConfigEntry, i as UniqueColumnConfigOptions, U as UniqueRowConfigData, e as UniqueRowConfigEntry, f as UniqueRowConfigOptions, n as normalizeIndexConfigEntry } from '../types-DvJMYubf.js';
|
|
1
|
+
import { c as createExtension$1, i as isExtension$1, r as runExtensions$1 } from '../verifyConfig-CTrtqMr_.js';
|
|
2
|
+
export { d as Extension, E as ExtensionContext, a as ExtensionInput, b as ExtensionInputForSchema, e as ExtensionRecord, S as SchemaExtension, v as verifyConfig } from '../verifyConfig-CTrtqMr_.js';
|
|
3
|
+
export { v as BaseConfigReturn, B as BuiltinConfigKey, C as ConfigRegistry, w as DMGeneric, D as DataModelForSchema, c as DefaultValuesConfigData, d as DefaultValuesConfigInput, k as DefaultValuesVerifyFn, m as ExtensionStyleVerifyFn, E as ExtractDefaultValuesConfig, g as ExtractProtectedColumnsConfig, H as HasKey, I as IndexConfigBaseOptions, u as IndexConfigEntry, M as MakeOptional, a as MutationCtxForSchema, N as NormalizedIndexConfig, O as OnFailArgs, b as OnFailCallback, f as OptionalKeysForTable, P as Prettify, e as ProtectedColumnsConfigData, l as ProtectedColumnsVerifyFn, h as ProtectedKeysForTable, q as UniqueColumnConfigData, r as UniqueColumnConfigEntry, s as UniqueColumnConfigOptions, U as UniqueRowConfigData, o as UniqueRowConfigEntry, p as UniqueRowConfigOptions, V as VerifyConfigInput, i as VerifyInsertInput, j as VerifyPatchInput, n as VerifyRegistry, t as normalizeIndexConfigEntry } from '../types-B8ZkLuJ2.js';
|
|
4
|
+
import 'convex/server';
|
|
5
|
+
import 'convex/values';
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Unique row validation config.
|
|
14
|
-
* Enforces uniqueness across multiple columns using composite indexes.
|
|
15
|
-
*
|
|
16
|
-
* Can also be added to the `extensions` array.
|
|
17
|
-
*/
|
|
18
|
-
uniqueRow?: SchemaExtension<S, "uniqueRow", any>;
|
|
19
|
-
/**
|
|
20
|
-
* Unique column validation config.
|
|
21
|
-
* Enforces uniqueness on single columns using indexes.
|
|
22
|
-
*
|
|
23
|
-
* Can also be added to the `extensions` array.
|
|
24
|
-
*/
|
|
25
|
-
uniqueColumn?: SchemaExtension<S, "uniqueColumn", any>;
|
|
26
|
-
/**
|
|
27
|
-
* Additional extensions to run after transform configs (defaultValues, etc.).
|
|
28
|
-
* These extensions can validate data, transform/mutate it, or both.
|
|
29
|
-
* Custom extensions run before built-in uniqueness extensions so the built-ins
|
|
30
|
-
* validate the final transformed payload.
|
|
31
|
-
* Extensions run in order; each receives the (possibly transformed) output of the previous.
|
|
32
|
-
*
|
|
33
|
-
* Built-in extensions (uniqueRow, uniqueColumn) can be added here
|
|
34
|
-
* as an alternative to using their dedicated config keys when you need
|
|
35
|
-
* explicit ordering.
|
|
36
|
-
*/
|
|
37
|
-
extensions?: SchemaExtension<S>[];
|
|
38
|
-
};
|
|
39
|
-
/**
|
|
40
|
-
* Configure type-safe insert and patch functions with validation and transforms.
|
|
41
|
-
*
|
|
42
|
-
* @param schema - Your Convex schema definition
|
|
43
|
-
* @param configs - Configuration object with transforms, configs, and extensions
|
|
44
|
-
* @returns Object with `insert`, `patch`, and `dangerouslyPatch` functions
|
|
45
|
-
*/
|
|
46
|
-
declare const verifyConfig: <S extends GenericSchema, SD extends SchemaDefinition<S, boolean>, const VC extends VerifyConfigInputWithExtensions<SD>>(_schema: SD, configs: VC) => {
|
|
47
|
-
insert: <const TN extends TableNamesInDataModel<DataModelFromSchemaDefinition<SD>>, const D extends DocumentByName<DataModelFromSchemaDefinition<SD>, TN>>(ctx: Omit<GenericMutationCtx<DataModelFromSchemaDefinition<SD>>, never>, tableName: TN, data: HasKey<VC, "defaultValues"> extends true ? MakeOptional<WithoutSystemFields<D>, OptionalKeysForTable<VC, TN> & keyof WithoutSystemFields<D>> : WithoutSystemFields<D>, options?: {
|
|
48
|
-
onFail?: OnFailCallback<D>;
|
|
49
|
-
}) => Promise<GenericId<TN>>;
|
|
50
|
-
patch: <const TN extends TableNamesInDataModel<DataModelFromSchemaDefinition<SD>>, const D_1 extends DocumentByName<DataModelFromSchemaDefinition<SD>, TN>>(ctx: Omit<GenericMutationCtx<DataModelFromSchemaDefinition<SD>>, never>, tableName: TN, id: GenericId<TN>, data: HasKey<VC, "protectedColumns"> extends true ? Omit<Partial<WithoutSystemFields<D_1>>, ProtectedKeysForTable<VC, TN> & keyof WithoutSystemFields<D_1>> : Partial<WithoutSystemFields<D_1>>, options?: {
|
|
51
|
-
onFail?: OnFailCallback<D_1>;
|
|
52
|
-
}) => Promise<void>;
|
|
53
|
-
dangerouslyPatch: <const TN extends TableNamesInDataModel<DataModelFromSchemaDefinition<SD>>, const D_2 extends DocumentByName<DataModelFromSchemaDefinition<SD>, TN>>(ctx: Omit<GenericMutationCtx<DataModelFromSchemaDefinition<SD>>, never>, tableName: TN, id: GenericId<TN>, data: Partial<WithoutSystemFields<D_2>>, options?: {
|
|
54
|
-
onFail?: OnFailCallback<D_2>;
|
|
55
|
-
}) => Promise<void>;
|
|
7
|
+
type ProtectedColumnsLike = Record<string, readonly PropertyKey[] | undefined>;
|
|
8
|
+
declare const stripProtectedPatchColumns: <T extends Record<string, any>>(protectedColumns: ProtectedColumnsLike, tableName: string, data: T) => {
|
|
9
|
+
filteredData: T;
|
|
10
|
+
removedColumns: string[];
|
|
56
11
|
};
|
|
57
12
|
|
|
58
|
-
|
|
13
|
+
declare const createExtension: typeof createExtension$1;
|
|
14
|
+
declare const isExtension: typeof isExtension$1;
|
|
15
|
+
declare const runExtensions: typeof runExtensions$1;
|
|
16
|
+
|
|
17
|
+
export { createExtension, isExtension, runExtensions, stripProtectedPatchColumns };
|