@procedures/store 0.44.0 → 0.46.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 (52) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +63 -0
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/indexeddb/idb.d.ts +2 -1
  5. package/dist/indexeddb/idb.d.ts.map +1 -1
  6. package/dist/indexeddb/idb.js +2 -1
  7. package/dist/indexeddb/idb.js.map +1 -1
  8. package/dist/indexeddb/program-store.d.ts +7 -3
  9. package/dist/indexeddb/program-store.d.ts.map +1 -1
  10. package/dist/indexeddb/program-store.js +28 -6
  11. package/dist/indexeddb/program-store.js.map +1 -1
  12. package/dist/indexeddb.d.ts +1 -1
  13. package/dist/indexeddb.d.ts.map +1 -1
  14. package/dist/program-store/collection.d.ts +13 -4
  15. package/dist/program-store/collection.d.ts.map +1 -1
  16. package/dist/program-store/collection.js +29 -6
  17. package/dist/program-store/collection.js.map +1 -1
  18. package/dist/program-store/file.d.ts +7 -3
  19. package/dist/program-store/file.d.ts.map +1 -1
  20. package/dist/program-store/file.js +18 -5
  21. package/dist/program-store/file.js.map +1 -1
  22. package/dist/program-store/index.d.ts +4 -2
  23. package/dist/program-store/index.d.ts.map +1 -1
  24. package/dist/program-store/index.js +2 -1
  25. package/dist/program-store/index.js.map +1 -1
  26. package/dist/program-store/memory.d.ts +7 -4
  27. package/dist/program-store/memory.d.ts.map +1 -1
  28. package/dist/program-store/memory.js +12 -5
  29. package/dist/program-store/memory.js.map +1 -1
  30. package/dist/program-store/procedures.d.ts +6 -1
  31. package/dist/program-store/procedures.d.ts.map +1 -1
  32. package/dist/program-store/procedures.js +4 -2
  33. package/dist/program-store/procedures.js.map +1 -1
  34. package/dist/program-store/programs.d.ts +110 -0
  35. package/dist/program-store/programs.d.ts.map +1 -0
  36. package/dist/program-store/programs.js +202 -0
  37. package/dist/program-store/programs.js.map +1 -0
  38. package/dist/program-store/types.d.ts +53 -4
  39. package/dist/program-store/types.d.ts.map +1 -1
  40. package/dist/program-store/types.js +51 -0
  41. package/dist/program-store/types.js.map +1 -1
  42. package/package.json +4 -4
  43. package/src/indexeddb/idb.ts +3 -2
  44. package/src/indexeddb/program-store.ts +36 -6
  45. package/src/indexeddb.ts +1 -1
  46. package/src/program-store/collection.ts +39 -6
  47. package/src/program-store/file.ts +30 -5
  48. package/src/program-store/index.ts +12 -2
  49. package/src/program-store/memory.ts +20 -5
  50. package/src/program-store/procedures.ts +4 -2
  51. package/src/program-store/programs.ts +307 -0
  52. package/src/program-store/types.ts +85 -4
@@ -1 +1 @@
1
- {"version":3,"file":"procedures.js","sourceRoot":"","sources":["../../src/program-store/procedures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"procedures.js","sourceRoot":"","sources":["../../src/program-store/procedures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * The procedures of the saved programs of a tenant (AG1-B): `programs.save`, `get`, `list` and
3
+ * `remove`.
4
+ *
5
+ * One program store has two scopes:
6
+ *
7
+ * - The scope "host": the store of a registry (`attachProgramStore`). `procedure.store`, `load` and
8
+ * `sync` use it, and `procedure.load` defines its programs in the registry.
9
+ * - The scope "tenant": the store of a partition. The procedures of this module read and write it.
10
+ * They do not define a program in a registry. A program of a tenant is data: a view lists it,
11
+ * and a caller starts it with `client.chain` or `client.exec`.
12
+ *
13
+ * The partition of each call comes from the resolver of the host, as for `createCollectionProcedures`.
14
+ * The resolver gets the context (with `ctx.principal`) and the partition that the input asks for.
15
+ * The input only selects: the resolver decides. A `null` result refuses the call (`FORBIDDEN`,
16
+ * reason `partition-not-allowed`). The function `storeFor` gives the store of the partition.
17
+ * Thus one tenant does not read the store of another tenant.
18
+ *
19
+ * A save tests the record with `checkStoredProgram`, and the program with the test of
20
+ * `procedure.define` (`isAnyProcedureRef`). A save and a remove take `expectedVersion` (decision
21
+ * D11): a conflict rejects with `VersionConflictError` and changes nothing.
22
+ */
23
+ import { type AnyProcedure, type PartitionResolver, type ProcedureModule, type ProcedurePath } from "@procedures/client";
24
+ import { type ProgramStore } from "./types.js";
25
+ /** The options of `createProgramProcedures`. */
26
+ export interface ProgramProceduresOptions {
27
+ /**
28
+ * The resolver of the partition of a call: the tenant comes from the principal, not from the
29
+ * input alone. It gives the partition, `undefined` for the store without a partition, or `null`
30
+ * to refuse the call.
31
+ */
32
+ readonly partition: PartitionResolver;
33
+ /**
34
+ * The store of a partition. Give the same store for the same partition each time, and a store of
35
+ * its own for each tenant.
36
+ */
37
+ readonly storeFor: (partition: string | undefined) => ProgramStore | Promise<ProgramStore>;
38
+ /**
39
+ * The namespace of the procedures.
40
+ * @default ["programs"]
41
+ */
42
+ readonly namespace?: ProcedurePath | undefined;
43
+ }
44
+ /** The program of `programs.save`: a procedure ref, as `procedure.define` takes it. */
45
+ export interface ProgramSaveDefinition {
46
+ [field: string]: unknown;
47
+ $proc: ProcedurePath;
48
+ input?: unknown;
49
+ $name?: string | undefined;
50
+ }
51
+ /** The input of `programs.save`. */
52
+ export interface ProgramSaveInput {
53
+ path: ProcedurePath | string;
54
+ program: ProgramSaveDefinition;
55
+ name?: string | undefined;
56
+ description?: string | undefined;
57
+ expectedVersion?: string | number | null | undefined;
58
+ partition?: string | undefined;
59
+ }
60
+ /** The input of `programs.get`: a path or a key. */
61
+ export interface ProgramGetInput {
62
+ path?: ProcedurePath | string | undefined;
63
+ key?: string | undefined;
64
+ partition?: string | undefined;
65
+ }
66
+ /** The input of `programs.list`. */
67
+ export interface ProgramListInput {
68
+ prefix?: ProcedurePath | string | undefined;
69
+ partition?: string | undefined;
70
+ }
71
+ /** The input of `programs.remove`. */
72
+ export interface ProgramRemoveInput {
73
+ path: ProcedurePath | string;
74
+ expectedVersion?: string | number | null | undefined;
75
+ partition?: string | undefined;
76
+ }
77
+ /** The output of `programs.remove`. */
78
+ export interface ProgramRemoveOutput {
79
+ /** True when the store had the program. */
80
+ removed: boolean;
81
+ /** The key of the program. */
82
+ key: string;
83
+ }
84
+ /**
85
+ * This function gives the procedures of the saved programs of a tenant: `save`, `get`, `list` and
86
+ * `remove` under the namespace. Each call resolves its partition, and reads and writes only the
87
+ * store of that partition. The function registers nothing.
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * const stores = new Map<string, ProgramStore>();
92
+ * const procedures = createProgramProcedures({
93
+ * // The tenant comes from the principal. A call without a principal is refused.
94
+ * partition: (ctx) => ctx.principal?.id ?? null,
95
+ * storeFor: (tenant) => {
96
+ * const key = tenant ?? "";
97
+ * if (!stores.has(key)) stores.set(key, new MemoryProgramStore());
98
+ * return stores.get(key)!;
99
+ * },
100
+ * });
101
+ * ```
102
+ */
103
+ export declare function createProgramProcedures(options: ProgramProceduresOptions): AnyProcedure[];
104
+ /**
105
+ * This function gives the procedures of `createProgramProcedures` as a module, for
106
+ * `createRegistry()` or `registerModules()`. The name of the module has the namespace, so two
107
+ * namespaces give two modules. The function registers nothing.
108
+ */
109
+ export declare function createProgramModule(options: ProgramProceduresOptions): ProcedureModule;
110
+ //# sourceMappingURL=programs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"programs.d.ts","sourceRoot":"","sources":["../../src/program-store/programs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAUL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAsB,KAAK,YAAY,EAAgD,MAAM,YAAY,CAAC;AAEjH,gDAAgD;AAChD,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,KAAK,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3F;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAChD;AAED,uFAAuF;AACvF,MAAM,WAAW,qBAAqB;IACpC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,GAAG,MAAM,CAAC;IAC7B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1C,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,GAAG,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,uCAAuC;AACvC,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;CACb;AA8BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,YAAY,EAAE,CA4IzF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,wBAAwB,GAAG,eAAe,CAGtF"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * The procedures of the saved programs of a tenant (AG1-B): `programs.save`, `get`, `list` and
3
+ * `remove`.
4
+ *
5
+ * One program store has two scopes:
6
+ *
7
+ * - The scope "host": the store of a registry (`attachProgramStore`). `procedure.store`, `load` and
8
+ * `sync` use it, and `procedure.load` defines its programs in the registry.
9
+ * - The scope "tenant": the store of a partition. The procedures of this module read and write it.
10
+ * They do not define a program in a registry. A program of a tenant is data: a view lists it,
11
+ * and a caller starts it with `client.chain` or `client.exec`.
12
+ *
13
+ * The partition of each call comes from the resolver of the host, as for `createCollectionProcedures`.
14
+ * The resolver gets the context (with `ctx.principal`) and the partition that the input asks for.
15
+ * The input only selects: the resolver decides. A `null` result refuses the call (`FORBIDDEN`,
16
+ * reason `partition-not-allowed`). The function `storeFor` gives the store of the partition.
17
+ * Thus one tenant does not read the store of another tenant.
18
+ *
19
+ * A save tests the record with `checkStoredProgram`, and the program with the test of
20
+ * `procedure.define` (`isAnyProcedureRef`). A save and a remove take `expectedVersion` (decision
21
+ * D11): a conflict rejects with `VersionConflictError` and changes nothing.
22
+ */
23
+ import { z } from "zod";
24
+ import { createProcedure, defineModule, InvocationError, isAnyProcedureRef, pathToKey, PARTITION_PATTERN, RAW_INPUT_TAG, typed, } from "@procedures/client";
25
+ import { pathField, toPath } from "./procedures.js";
26
+ import { checkStoredProgram } from "./types.js";
27
+ /** The resource of the effects of the procedures. */
28
+ const PROGRAMS = "programs";
29
+ const partitionField = z
30
+ .string()
31
+ .regex(PARTITION_PATTERN)
32
+ .optional()
33
+ .describe("The partition that the call asks for, for example a scope. The resolver of the host decides.");
34
+ const expectedVersionField = z
35
+ .union([z.string().max(1024), z.number(), z.null()])
36
+ .optional()
37
+ .describe("The version that the write expects for the current program. null expects no program. Absent: the last write wins.");
38
+ /** The schema of a program, as `procedure.define` takes it. */
39
+ const programField = z
40
+ .looseObject({
41
+ $proc: z.array(z.string().min(1)).min(1).describe("The path of the procedure that the program calls"),
42
+ input: z.unknown().optional().describe("The input of that call"),
43
+ $name: z.string().optional().describe("A name that a $ref can read"),
44
+ })
45
+ .describe('The program: a procedure ref, for example { "$proc": ["client", "chain"], "input": { "steps": [...] } }');
46
+ /** The options of a write: only a given `expectedVersion`, so a store without versions gets no field. */
47
+ function writeOptionsOf(expectedVersion) {
48
+ return expectedVersion === undefined ? undefined : { expectedVersion };
49
+ }
50
+ /**
51
+ * This function gives the procedures of the saved programs of a tenant: `save`, `get`, `list` and
52
+ * `remove` under the namespace. Each call resolves its partition, and reads and writes only the
53
+ * store of that partition. The function registers nothing.
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * const stores = new Map<string, ProgramStore>();
58
+ * const procedures = createProgramProcedures({
59
+ * // The tenant comes from the principal. A call without a principal is refused.
60
+ * partition: (ctx) => ctx.principal?.id ?? null,
61
+ * storeFor: (tenant) => {
62
+ * const key = tenant ?? "";
63
+ * if (!stores.has(key)) stores.set(key, new MemoryProgramStore());
64
+ * return stores.get(key)!;
65
+ * },
66
+ * });
67
+ * ```
68
+ */
69
+ export function createProgramProcedures(options) {
70
+ const namespace = [...(options.namespace ?? [PROGRAMS])];
71
+ if (namespace.length === 0 || !namespace.every((segment) => typeof segment === "string" && segment !== "")) {
72
+ throw new TypeError("The namespace of the program procedures must be a list of non-empty strings");
73
+ }
74
+ const what = pathToKey(namespace);
75
+ /** The store of a call: the resolver gives the partition, and `storeFor` its store. */
76
+ const storeOf = async (ctx, requested) => {
77
+ const partition = await options.partition(ctx, requested);
78
+ if (partition === null) {
79
+ const of = requested === undefined ? "" : ` "${requested}"`;
80
+ throw new InvocationError("FORBIDDEN", `The call cannot use the partition${of} of ${what}`, ctx.path, "partition-not-allowed");
81
+ }
82
+ if (partition !== undefined && !PARTITION_PATTERN.test(partition)) {
83
+ throw new Error(`The partition resolver gave a partition that is not valid: ${JSON.stringify(partition).slice(0, 80)}`);
84
+ }
85
+ return options.storeFor(partition);
86
+ };
87
+ const notFound = (ctx, key) => new InvocationError("NOT_FOUND", `No program is saved at ${key}`, ctx.path);
88
+ const save = createProcedure()
89
+ .path([...namespace, "save"])
90
+ .input(z.object({
91
+ path: pathField,
92
+ program: programField,
93
+ name: z.string().min(1).max(200).optional().describe("The name of the program, for a list of programs"),
94
+ description: z.string().max(2000).optional().describe("The description of the program, in words"),
95
+ expectedVersion: expectedVersionField,
96
+ partition: partitionField,
97
+ }))
98
+ .output(typed())
99
+ .meta({
100
+ description: "Save a program of the caller's partition: a new program, or a new version of a saved one",
101
+ // The program is data: exec() does not run its refs
102
+ tags: ["programs", "storage", RAW_INPUT_TAG],
103
+ // It replaces the saved program of the same path
104
+ effects: { reads: [PROGRAMS], writes: [PROGRAMS] },
105
+ args: ["path"],
106
+ })
107
+ .handler(async (input, ctx) => {
108
+ const path = toPath(input.path);
109
+ if (!isAnyProcedureRef(input.program)) {
110
+ throw new InvocationError("VALIDATION_ERROR", 'The program must be a procedure ref: { "$proc": [...], "input": {...} }', ctx.path);
111
+ }
112
+ const record = checkStoredProgram({
113
+ key: pathToKey(path),
114
+ path: [...path],
115
+ program: input.program,
116
+ storedAt: Date.now(),
117
+ ...(input.name !== undefined && { name: input.name }),
118
+ ...(input.description !== undefined && { description: input.description }),
119
+ });
120
+ const store = await storeOf(ctx, input.partition);
121
+ await store.put(record, writeOptionsOf(input.expectedVersion));
122
+ // The store sets the version: the record of the store is the result
123
+ return (await store.get(record.key)) ?? record;
124
+ })
125
+ .build();
126
+ const get = createProcedure()
127
+ .path([...namespace, "get"])
128
+ .input(z.object({
129
+ path: pathField.optional(),
130
+ key: z.string().min(1).optional().describe('The dotted key of the program, for example "reports.weekly"'),
131
+ partition: partitionField,
132
+ }))
133
+ .output(typed())
134
+ .meta({
135
+ description: "Read a saved program of the caller's partition, with its version",
136
+ tags: ["programs", "storage"],
137
+ effects: { reads: [PROGRAMS], writes: [], idempotent: true },
138
+ })
139
+ .handler(async (input, ctx) => {
140
+ if ((input.path === undefined) === (input.key === undefined)) {
141
+ throw new InvocationError("VALIDATION_ERROR", `${what}.get needs exactly one of \`path\` or \`key\``, ctx.path);
142
+ }
143
+ const key = input.key ?? pathToKey(toPath(input.path));
144
+ const store = await storeOf(ctx, input.partition);
145
+ const program = await store.get(key);
146
+ if (!program)
147
+ throw notFound(ctx, key);
148
+ return program;
149
+ })
150
+ .build();
151
+ const list = createProcedure()
152
+ .path([...namespace, "list"])
153
+ .input(z.object({
154
+ prefix: pathField.optional().describe("Only the programs of this path and under it"),
155
+ partition: partitionField,
156
+ }))
157
+ .output(typed())
158
+ .meta({
159
+ description: "List the saved programs of the caller's partition, sorted by key",
160
+ tags: ["programs", "storage"],
161
+ effects: { reads: [PROGRAMS], writes: [], idempotent: true },
162
+ })
163
+ .handler(async (input, ctx) => {
164
+ const store = await storeOf(ctx, input.partition);
165
+ return store.list(input.prefix === undefined ? undefined : pathToKey(toPath(input.prefix)));
166
+ })
167
+ .build();
168
+ const remove = createProcedure()
169
+ .path([...namespace, "remove"])
170
+ .input(z.object({
171
+ path: pathField,
172
+ expectedVersion: expectedVersionField,
173
+ partition: partitionField,
174
+ }))
175
+ .output(z.object({
176
+ removed: z.boolean().describe("True when the store had the program"),
177
+ key: z.string().describe("The key of the program"),
178
+ }))
179
+ .meta({
180
+ description: "Remove a saved program of the caller's partition",
181
+ tags: ["programs", "storage"],
182
+ effects: { reads: [PROGRAMS], writes: [PROGRAMS], destructive: true, idempotent: true },
183
+ args: ["path"],
184
+ })
185
+ .handler(async (input, ctx) => {
186
+ const key = pathToKey(toPath(input.path));
187
+ const store = await storeOf(ctx, input.partition);
188
+ return { removed: await store.delete(key, writeOptionsOf(input.expectedVersion)), key };
189
+ })
190
+ .build();
191
+ return [save, get, list, remove];
192
+ }
193
+ /**
194
+ * This function gives the procedures of `createProgramProcedures` as a module, for
195
+ * `createRegistry()` or `registerModules()`. The name of the module has the namespace, so two
196
+ * namespaces give two modules. The function registers nothing.
197
+ */
198
+ export function createProgramModule(options) {
199
+ const namespace = options.namespace ?? [PROGRAMS];
200
+ return defineModule(`@procedures/store/programs:${pathToKey(namespace)}`, createProgramProcedures(options));
201
+ }
202
+ //# sourceMappingURL=programs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"programs.js","sourceRoot":"","sources":["../../src/program-store/programs.ts"],"names":[],"mappings":"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"}
@@ -19,10 +19,32 @@ export interface StoredProgram {
19
19
  metadata?: Record<string, unknown> | undefined;
20
20
  /** When the store got this version, in milliseconds since 1970. */
21
21
  storedAt: number;
22
+ /** The name of the program, for a view or a tool that lists the programs. */
23
+ name?: string | undefined;
24
+ /** The description of the program, in words. */
25
+ description?: string | undefined;
26
+ /**
27
+ * The version of the record. The store sets it on each put, and ignores the version of the
28
+ * input. The value is opaque: a caller compares it, and gives it back as `expectedVersion`.
29
+ */
30
+ version?: string | number | undefined;
31
+ }
32
+ /** The options of a write of a program store (decision D11). */
33
+ export interface ProgramWriteOptions {
34
+ /**
35
+ * The version that the write expects for the current record. `null` expects no record. When the
36
+ * current record has another version, the write changes nothing and rejects with
37
+ * `VersionConflictError`. Absent: no precondition, and the last write wins.
38
+ */
39
+ readonly expectedVersion?: string | number | null | undefined;
22
40
  }
23
41
  /**
24
42
  * A store of programs. Each method gives a Promise: a caller cannot tell a local store from a
25
43
  * remote one.
44
+ *
45
+ * The four backends of this package set the `version` of each record and test `expectedVersion`.
46
+ * A store of another package that ignores the options of `put` and `delete` keeps working, but it
47
+ * gives no conflict check: its writes always win.
26
48
  */
27
49
  export interface ProgramStore {
28
50
  /** The kind of the backend: "memory", "file", "collection" or another name. */
@@ -31,13 +53,40 @@ export interface ProgramStore {
31
53
  get(key: string): Promise<StoredProgram | undefined>;
32
54
  /** The programs, sorted by key. With a prefix, only the key and the keys under it (`prefix.x`). */
33
55
  list(prefix?: string): Promise<StoredProgram[]>;
34
- /** Write a program. A program of the same key is replaced. */
35
- put(program: StoredProgram): Promise<void>;
36
- /** Delete the program of a key. True when it existed. */
37
- delete(key: string): Promise<boolean>;
56
+ /**
57
+ * Write a program. A program of the same key is replaced. The store sets a new `version`. With
58
+ * `expectedVersion`, a conflict rejects with `VersionConflictError` and changes nothing.
59
+ */
60
+ put(program: StoredProgram, options?: ProgramWriteOptions): Promise<void>;
61
+ /**
62
+ * Delete the program of a key. True when it existed. With `expectedVersion`, a conflict rejects
63
+ * with `VersionConflictError` and changes nothing.
64
+ */
65
+ delete(key: string, options?: ProgramWriteOptions): Promise<boolean>;
38
66
  /** Release the resources of the store. */
39
67
  close?(): Promise<void>;
40
68
  }
69
+ /**
70
+ * This function gives the version of a record as a string, or undefined for a record without a
71
+ * version. Give it as the `versionOf` of the collection storage of a `CollectionProgramStore`.
72
+ */
73
+ export declare function storedProgramVersion(program: StoredProgram): string | undefined;
74
+ /**
75
+ * This function gives an expected version in the form of the collection storages: a string, or
76
+ * `null` for no record. A number becomes its string, so `3` and `"3"` are the same version.
77
+ */
78
+ export declare function expectedVersionOf(options: ProgramWriteOptions | undefined): string | null | undefined;
79
+ /**
80
+ * This function tests the precondition of a write against the current record. It throws
81
+ * `VersionConflictError` with a copy of the current record when the version is not the expected
82
+ * version. Without `expectedVersion`, it does nothing.
83
+ */
84
+ export declare function checkProgramVersion(key: string, current: StoredProgram | undefined, options: ProgramWriteOptions | undefined): void;
85
+ /**
86
+ * This function gives the next version of a counter: one more than the counter and than each
87
+ * numeric version of the records. A record of an older release has no version: it counts as 0.
88
+ */
89
+ export declare function nextCounterVersion(counter: number, programs: Iterable<StoredProgram>): number;
41
90
  /** True when a key is the prefix or under it (`a.b` for the prefix `a`). */
42
91
  export declare function keyMatches(key: string, prefix: string | undefined): boolean;
43
92
  /** Programs sorted by key, so a listing is the same for each backend. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/program-store/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE/E,0BAA0B;AAC1B,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,iCAAiC;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,0DAA0D;IAC1D,OAAO,EAAE,qBAAqB,CAAC;IAC/B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC/C,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IACrD,mGAAmG;IACnG,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAChD,8DAA8D;IAC9D,GAAG,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,yDAAyD;IACzD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,0CAA0C;IAC1C,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED,yEAAyE;AACzE,wBAAgB,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAEhE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAoBhE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/program-store/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG/E,0BAA0B;AAC1B,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,iCAAiC;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,0DAA0D;IAC1D,OAAO,EAAE,qBAAqB,CAAC;IAC/B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC/C,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC/D;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IACrD,mGAAmG;IACnG,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAChD;;;OAGG;IACH,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,0CAA0C;IAC1C,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAE/E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAGrG;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,EAAE,OAAO,EAAE,mBAAmB,GAAG,SAAS,GAAG,IAAI,CAMnI;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,MAAM,CAM7F;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED,yEAAyE;AACzE,wBAAgB,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAEhE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CA6BhE"}
@@ -6,6 +6,48 @@
6
6
  * them again, so a stored program is a runtime-defined procedure again: a data-driven one, which
7
7
  * a server with an expose rule lets call only the exposed procedures.
8
8
  */
9
+ import { versionConflict, VersionConflictError } from "@procedures/client/query";
10
+ /**
11
+ * This function gives the version of a record as a string, or undefined for a record without a
12
+ * version. Give it as the `versionOf` of the collection storage of a `CollectionProgramStore`.
13
+ */
14
+ export function storedProgramVersion(program) {
15
+ return program.version === undefined ? undefined : String(program.version);
16
+ }
17
+ /**
18
+ * This function gives an expected version in the form of the collection storages: a string, or
19
+ * `null` for no record. A number becomes its string, so `3` and `"3"` are the same version.
20
+ */
21
+ export function expectedVersionOf(options) {
22
+ const expected = options?.expectedVersion;
23
+ return expected === undefined || expected === null ? expected : String(expected);
24
+ }
25
+ /**
26
+ * This function tests the precondition of a write against the current record. It throws
27
+ * `VersionConflictError` with a copy of the current record when the version is not the expected
28
+ * version. Without `expectedVersion`, it does nothing.
29
+ */
30
+ export function checkProgramVersion(key, current, options) {
31
+ const expected = expectedVersionOf(options);
32
+ if (expected === undefined)
33
+ return;
34
+ const state = current === undefined ? { found: false } : { found: true, value: structuredClone(current) };
35
+ const conflict = versionConflict(key, expected, state, storedProgramVersion);
36
+ if (conflict)
37
+ throw new VersionConflictError([conflict]);
38
+ }
39
+ /**
40
+ * This function gives the next version of a counter: one more than the counter and than each
41
+ * numeric version of the records. A record of an older release has no version: it counts as 0.
42
+ */
43
+ export function nextCounterVersion(counter, programs) {
44
+ let highest = Number.isSafeInteger(counter) && counter > 0 ? counter : 0;
45
+ for (const program of programs) {
46
+ if (typeof program.version === "number" && Number.isSafeInteger(program.version) && program.version > highest)
47
+ highest = program.version;
48
+ }
49
+ return highest + 1;
50
+ }
9
51
  /** True when a key is the prefix or under it (`a.b` for the prefix `a`). */
10
52
  export function keyMatches(key, prefix) {
11
53
  return prefix === undefined || prefix === "" || key === prefix || key.startsWith(`${prefix}.`);
@@ -37,6 +79,15 @@ export function checkStoredProgram(value) {
37
79
  if (typeof record.storedAt !== "number" || !Number.isFinite(record.storedAt)) {
38
80
  throw new TypeError(`The program of ${record.key} needs storedAt, a time in milliseconds`);
39
81
  }
82
+ for (const field of ["name", "description"]) {
83
+ if (record[field] !== undefined && typeof record[field] !== "string") {
84
+ throw new TypeError(`The ${field} of the program ${record.key} must be a string`);
85
+ }
86
+ }
87
+ const version = record.version;
88
+ if (version !== undefined && typeof version !== "string" && !(typeof version === "number" && Number.isFinite(version))) {
89
+ throw new TypeError(`The version of the program ${record.key} must be a string or a finite number`);
90
+ }
40
91
  return record;
41
92
  }
42
93
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/program-store/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqCH,4EAA4E;AAC5E,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,MAA0B;IAChE,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;AACjG,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,KAAK,CAAC,QAAyB;IAC7C,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,MAAM,GAAG,KAA+B,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;QAC5H,MAAM,IAAI,SAAS,CAAC,4DAA4D,CAAC,CAAC;IACpF,CAAC;IACD,+IAA+I;IAC/I,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,SAAS,CAAC,2DAA2D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1G,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAA0C,CAAC;IAClE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,SAAS,CAAC,kBAAkB,MAAM,CAAC,GAAG,4DAA4D,CAAC,CAAC;IAChH,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,SAAS,CAAC,kBAAkB,MAAM,CAAC,GAAG,yCAAyC,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,MAAuB,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/program-store/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "@procedures/store",
4
- "version": "0.44.0",
4
+ "version": "0.46.0",
5
5
  "description": "A program store for procedure-as-data: save the programs that procedure.define makes, load them back after a restart, in memory, a JSON file, IndexedDB or a remote collection storage.",
6
6
  "keywords": [
7
7
  "program-store",
@@ -78,12 +78,12 @@
78
78
  },
79
79
  "dependencies": {
80
80
  "@mark1russell7/service": "^0.6.0",
81
- "@procedures/client": "0.44.0",
82
- "@procedures/collections": "0.44.0",
81
+ "@procedures/client": "0.46.0",
82
+ "@procedures/collections": "0.46.0",
83
83
  "zod": "^4.6.5"
84
84
  },
85
85
  "devDependencies": {
86
- "@procedures/fs": "0.44.0",
86
+ "@procedures/fs": "0.46.0",
87
87
  "@mark1russell7/cue": "^1.0.0",
88
88
  "@types/node": "^22.0.0",
89
89
  "fake-indexeddb": "^6.2.5",
@@ -293,9 +293,10 @@ export class IdbStoreConnection {
293
293
  * This method runs work in one transaction. The work makes the requests, and it gives a function that reads
294
294
  * their results. The promise resolves after the transaction commits, so a write is durable when
295
295
  * the promise resolves. An error of a request aborts the transaction: each request is undone.
296
+ * The work gets `fail` too: a call of it aborts the transaction with its error.
296
297
  */
297
- run<R>(mode: "readonly" | "readwrite", work: (store: IdbObjectStoreLike) => () => R): Promise<R> {
298
- return this.connection.transaction(mode, [this.store], (transaction) => work(transaction.objectStore(this.store)));
298
+ run<R>(mode: "readonly" | "readwrite", work: (store: IdbObjectStoreLike, fail: (error: unknown) => void) => () => R): Promise<R> {
299
+ return this.connection.transaction(mode, [this.store], (transaction, fail) => work(transaction.objectStore(this.store), fail));
299
300
  }
300
301
 
301
302
  /** This method closes the connection. A later operation throws. */