forked from rocicorp/mono
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrow-patch.ts
More file actions
38 lines (32 loc) · 933 Bytes
/
row-patch.ts
File metadata and controls
38 lines (32 loc) · 933 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import {jsonObjectSchema} from '../../shared/src/json-schema.js';
import * as v from '../../shared/src/valita.js';
import {rowSchema} from './data.js';
import {primaryKeyValueRecordSchema} from './primary-key.js';
const putOpSchema = v.object({
op: v.literal('put'),
tableName: v.string(),
value: rowSchema,
});
const updateOpSchema = v.object({
op: v.literal('update'),
tableName: v.string(),
id: primaryKeyValueRecordSchema,
merge: jsonObjectSchema.optional(),
constrain: v.array(v.string()).optional(),
});
const delOpSchema = v.object({
op: v.literal('del'),
tableName: v.string(),
id: primaryKeyValueRecordSchema,
});
const clearOpSchema = v.object({
op: v.literal('clear'),
});
const rowPatchOpSchema = v.union(
putOpSchema,
updateOpSchema,
delOpSchema,
clearOpSchema,
);
export const rowsPatchSchema = v.array(rowPatchOpSchema);
export type RowPatchOp = v.Infer<typeof rowPatchOpSchema>;