@adminiumjs/manifest 0.3.0 → 0.3.1

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 (51) hide show
  1. package/dist/add-ons.d.ts +63 -0
  2. package/dist/add-ons.d.ts.map +1 -0
  3. package/dist/add-ons.js +100 -0
  4. package/dist/add-ons.js.map +1 -0
  5. package/dist/documents.d.ts +100 -0
  6. package/dist/documents.d.ts.map +1 -0
  7. package/dist/documents.js +148 -0
  8. package/dist/documents.js.map +1 -0
  9. package/dist/formula.d.ts +124 -0
  10. package/dist/formula.d.ts.map +1 -0
  11. package/dist/formula.js +428 -0
  12. package/dist/formula.js.map +1 -0
  13. package/dist/index.d.ts +10 -4
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +10 -4
  16. package/dist/index.js.map +1 -1
  17. package/dist/outbox.d.ts +354 -9
  18. package/dist/outbox.d.ts.map +1 -1
  19. package/dist/outbox.js +212 -8
  20. package/dist/outbox.js.map +1 -1
  21. package/dist/plan-model.d.ts +1 -1
  22. package/dist/plan-model.d.ts.map +1 -1
  23. package/dist/public-access.d.ts +48 -7
  24. package/dist/public-access.d.ts.map +1 -1
  25. package/dist/public-access.js +234 -28
  26. package/dist/public-access.js.map +1 -1
  27. package/dist/refs.d.ts +17 -0
  28. package/dist/refs.d.ts.map +1 -1
  29. package/dist/refs.js +12 -0
  30. package/dist/refs.js.map +1 -1
  31. package/dist/sample.d.ts +49 -1
  32. package/dist/sample.d.ts.map +1 -1
  33. package/dist/sample.js +39 -2
  34. package/dist/sample.js.map +1 -1
  35. package/dist/schema.d.ts +2461 -136
  36. package/dist/schema.d.ts.map +1 -1
  37. package/dist/schema.js +518 -26
  38. package/dist/schema.js.map +1 -1
  39. package/dist/shapes.d.ts +97 -0
  40. package/dist/shapes.d.ts.map +1 -0
  41. package/dist/shapes.js +190 -0
  42. package/dist/shapes.js.map +1 -0
  43. package/dist/states.d.ts +134 -0
  44. package/dist/states.d.ts.map +1 -0
  45. package/dist/states.js +244 -0
  46. package/dist/states.js.map +1 -0
  47. package/dist/validate.d.ts +14 -0
  48. package/dist/validate.d.ts.map +1 -1
  49. package/dist/validate.js +29 -2
  50. package/dist/validate.js.map +1 -1
  51. package/package.json +2 -2
@@ -0,0 +1,134 @@
1
+ /**
2
+ * `table.states` — the life of a document, kept by Adminium for every writer.
3
+ *
4
+ * ```json
5
+ * "states": {
6
+ * "column": "status", "initial": "draft",
7
+ * "moves": {
8
+ * "draft": [{ "to": "sent", "requires": { "children": { "invoice_lines": 1 }, "where": [{ "column": "total", "gt": 0 }] } }, "void"],
9
+ * "sent": [{ "to": "void", "requires": { "where": [{ "column": "paid", "eq": 0 }] }, "roles": ["studio-manager"] }]
10
+ * },
11
+ * "lock": { "when": ["sent", "void"], "except": ["due_on", "ladder"] },
12
+ * "children": {
13
+ * "invoice_lines": { "via": "document_id", "lock": true },
14
+ * "payments": { "via": "document_id", "parentIn": ["sent"], "clearOnCreate": ["client_paid_at"] }
15
+ * },
16
+ * "noDelete": { "when": "numbered" },
17
+ * "onlyLater": ["valid_until"]
18
+ * }
19
+ * ```
20
+ *
21
+ * - `moves`: from each state, the states a write may move a row to. A move
22
+ * may ask for something first — child rows, a column's value — and may be
23
+ * kept for some of the app's roles. A move not listed is refused.
24
+ * - `lock`: while a row is in one of `when`, only `except` (and the state
25
+ * itself, through a move) may change. Adminium's own columns (totals,
26
+ * stamps) keep being written by Adminium.
27
+ * - `children`: child tables tied to this row's state. `lock` refuses their
28
+ * writes while the row is locked; `parentIn` allows them only while the row
29
+ * is in those states (payments on a sent invoice); `clearOnCreate` empties
30
+ * columns of this row when one of them is created (a recorded payment
31
+ * clears the client's "I've sent it").
32
+ * - `lockedWhenReferencedBy`: this row locks once a row of another table in
33
+ * one of the states points at it (a terms version once a proposal naming it
34
+ * is sent).
35
+ * - `noDelete`: rows in these states, or any row with a number
36
+ * (`"numbered"`), are never deleted — voided instead.
37
+ * - `onlyLater`: date columns that may move later and never earlier.
38
+ *
39
+ * Adding sample data and importing past records are history: they write any
40
+ * state their rows were in.
41
+ */
42
+ import { z } from 'zod';
43
+ import { type ColumnShape, type ReferenceIssue, type TableIndex } from './refs.js';
44
+ /** A condition on the row itself, checked in the same statement that changes it. */
45
+ export declare const stateConditionSchema: z.ZodObject<{
46
+ column: z.ZodString;
47
+ eq: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
48
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
49
+ isNull: z.ZodOptional<z.ZodBoolean>;
50
+ gt: z.ZodOptional<z.ZodNumber>;
51
+ gte: z.ZodOptional<z.ZodNumber>;
52
+ lt: z.ZodOptional<z.ZodNumber>;
53
+ lte: z.ZodOptional<z.ZodNumber>;
54
+ }, z.core.$strict>;
55
+ export type StateCondition = z.infer<typeof stateConditionSchema>;
56
+ export declare const stateMoveSchema: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
57
+ to: z.ZodString;
58
+ requires: z.ZodOptional<z.ZodObject<{
59
+ children: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
60
+ where: z.ZodOptional<z.ZodArray<z.ZodObject<{
61
+ column: z.ZodString;
62
+ eq: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
63
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
64
+ isNull: z.ZodOptional<z.ZodBoolean>;
65
+ gt: z.ZodOptional<z.ZodNumber>;
66
+ gte: z.ZodOptional<z.ZodNumber>;
67
+ lt: z.ZodOptional<z.ZodNumber>;
68
+ lte: z.ZodOptional<z.ZodNumber>;
69
+ }, z.core.$strict>>>;
70
+ }, z.core.$strict>>;
71
+ roles: z.ZodOptional<z.ZodArray<z.ZodString>>;
72
+ }, z.core.$strict>]>;
73
+ export type StateMove = z.infer<typeof stateMoveSchema>;
74
+ export declare const stateChildSchema: z.ZodObject<{
75
+ via: z.ZodString;
76
+ lock: z.ZodOptional<z.ZodLiteral<true>>;
77
+ parentIn: z.ZodOptional<z.ZodArray<z.ZodString>>;
78
+ clearOnCreate: z.ZodOptional<z.ZodArray<z.ZodString>>;
79
+ }, z.core.$strict>;
80
+ export type StateChild = z.infer<typeof stateChildSchema>;
81
+ export declare const statesSchema: z.ZodObject<{
82
+ column: z.ZodString;
83
+ initial: z.ZodString;
84
+ moves: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
85
+ to: z.ZodString;
86
+ requires: z.ZodOptional<z.ZodObject<{
87
+ children: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
88
+ where: z.ZodOptional<z.ZodArray<z.ZodObject<{
89
+ column: z.ZodString;
90
+ eq: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
91
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
92
+ isNull: z.ZodOptional<z.ZodBoolean>;
93
+ gt: z.ZodOptional<z.ZodNumber>;
94
+ gte: z.ZodOptional<z.ZodNumber>;
95
+ lt: z.ZodOptional<z.ZodNumber>;
96
+ lte: z.ZodOptional<z.ZodNumber>;
97
+ }, z.core.$strict>>>;
98
+ }, z.core.$strict>>;
99
+ roles: z.ZodOptional<z.ZodArray<z.ZodString>>;
100
+ }, z.core.$strict>]>>>;
101
+ lock: z.ZodOptional<z.ZodObject<{
102
+ when: z.ZodArray<z.ZodString>;
103
+ except: z.ZodOptional<z.ZodArray<z.ZodString>>;
104
+ }, z.core.$strict>>;
105
+ children: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
106
+ via: z.ZodString;
107
+ lock: z.ZodOptional<z.ZodLiteral<true>>;
108
+ parentIn: z.ZodOptional<z.ZodArray<z.ZodString>>;
109
+ clearOnCreate: z.ZodOptional<z.ZodArray<z.ZodString>>;
110
+ }, z.core.$strict>>>;
111
+ lockedWhenReferencedBy: z.ZodOptional<z.ZodArray<z.ZodObject<{
112
+ table: z.ZodString;
113
+ via: z.ZodString;
114
+ in: z.ZodArray<z.ZodString>;
115
+ }, z.core.$strict>>>;
116
+ noDelete: z.ZodOptional<z.ZodObject<{
117
+ when: z.ZodUnion<readonly [z.ZodLiteral<"numbered">, z.ZodArray<z.ZodString>]>;
118
+ }, z.core.$strict>>;
119
+ onlyLater: z.ZodOptional<z.ZodArray<z.ZodString>>;
120
+ }, z.core.$strict>;
121
+ export type States = z.infer<typeof statesSchema>;
122
+ /** A move written as a bare state is a move with nothing asked first. */
123
+ export declare function moveTarget(move: StateMove): string;
124
+ interface StatesContext<C extends ColumnShape> {
125
+ index: TableIndex<C>;
126
+ /** The app's role keys, when the manifest declares roles (an add-on's shape has none to name). */
127
+ roles?: readonly string[] | undefined;
128
+ /** A column of this table decides "numbered": a gapless running number. */
129
+ numbered: boolean;
130
+ }
131
+ /** Everything wrong with one table's `states` against the manifest's tables. */
132
+ export declare function statesIssues<C extends ColumnShape>(table: string, states: States, ctx: StatesContext<C>, at: (...rest: (string | number)[]) => (string | number)[]): ReferenceIssue[];
133
+ export {};
134
+ //# sourceMappingURL=states.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../src/states.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAsC,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAKvH,oFAAoF;AACpF,eAAO,MAAM,oBAAoB;;;;;;;;;kBAc7B,CAAC;AACL,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;oBAiB1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,gBAAgB;;;;;kBAWzB,CAAC;AACL,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAqBd,CAAC;AACZ,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAElD;AAED,UAAU,aAAa,CAAC,CAAC,SAAS,WAAW;IAC3C,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACrB,kGAAkG;IAClG,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACtC,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,EAChD,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,EACrB,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GACxD,cAAc,EAAE,CAyFlB"}
package/dist/states.js ADDED
@@ -0,0 +1,244 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ /**
3
+ * `table.states` — the life of a document, kept by Adminium for every writer.
4
+ *
5
+ * ```json
6
+ * "states": {
7
+ * "column": "status", "initial": "draft",
8
+ * "moves": {
9
+ * "draft": [{ "to": "sent", "requires": { "children": { "invoice_lines": 1 }, "where": [{ "column": "total", "gt": 0 }] } }, "void"],
10
+ * "sent": [{ "to": "void", "requires": { "where": [{ "column": "paid", "eq": 0 }] }, "roles": ["studio-manager"] }]
11
+ * },
12
+ * "lock": { "when": ["sent", "void"], "except": ["due_on", "ladder"] },
13
+ * "children": {
14
+ * "invoice_lines": { "via": "document_id", "lock": true },
15
+ * "payments": { "via": "document_id", "parentIn": ["sent"], "clearOnCreate": ["client_paid_at"] }
16
+ * },
17
+ * "noDelete": { "when": "numbered" },
18
+ * "onlyLater": ["valid_until"]
19
+ * }
20
+ * ```
21
+ *
22
+ * - `moves`: from each state, the states a write may move a row to. A move
23
+ * may ask for something first — child rows, a column's value — and may be
24
+ * kept for some of the app's roles. A move not listed is refused.
25
+ * - `lock`: while a row is in one of `when`, only `except` (and the state
26
+ * itself, through a move) may change. Adminium's own columns (totals,
27
+ * stamps) keep being written by Adminium.
28
+ * - `children`: child tables tied to this row's state. `lock` refuses their
29
+ * writes while the row is locked; `parentIn` allows them only while the row
30
+ * is in those states (payments on a sent invoice); `clearOnCreate` empties
31
+ * columns of this row when one of them is created (a recorded payment
32
+ * clears the client's "I've sent it").
33
+ * - `lockedWhenReferencedBy`: this row locks once a row of another table in
34
+ * one of the states points at it (a terms version once a proposal naming it
35
+ * is sent).
36
+ * - `noDelete`: rows in these states, or any row with a number
37
+ * (`"numbered"`), are never deleted — voided instead.
38
+ * - `onlyLater`: date columns that may move later and never earlier.
39
+ *
40
+ * Adding sample data and importing past records are history: they write any
41
+ * state their rows were in.
42
+ */
43
+ import { z } from 'zod';
44
+ import { refSchema, scalarSchema, valueFits } from './refs.js';
45
+ const stateName = z.string().min(1).max(64);
46
+ const roleKey = z.string().regex(/^[a-z][a-z0-9-]*$/, 'a role key');
47
+ /** A condition on the row itself, checked in the same statement that changes it. */
48
+ export const stateConditionSchema = z
49
+ .object({
50
+ column: refSchema,
51
+ eq: scalarSchema.optional(),
52
+ in: z.array(scalarSchema).min(1).max(32).optional(),
53
+ isNull: z.boolean().optional(),
54
+ gt: z.number().finite().optional(),
55
+ gte: z.number().finite().optional(),
56
+ lt: z.number().finite().optional(),
57
+ lte: z.number().finite().optional(),
58
+ })
59
+ .strict()
60
+ .refine((c) => [c.eq, c.in, c.isNull, c.gt, c.gte, c.lt, c.lte].filter((part) => part !== undefined).length === 1, {
61
+ message: 'a condition says one of eq, in, isNull, gt, gte, lt or lte',
62
+ });
63
+ export const stateMoveSchema = z.union([
64
+ stateName,
65
+ z
66
+ .object({
67
+ to: stateName,
68
+ /** What must be true first: at least n child rows of a table, and conditions on the row. */
69
+ requires: z
70
+ .object({
71
+ children: z.record(refSchema, z.number().int().min(1).max(1000)).optional(),
72
+ where: z.array(stateConditionSchema).min(1).max(8).optional(),
73
+ })
74
+ .strict()
75
+ .optional(),
76
+ /** Only people holding one of these app roles may make this move. */
77
+ roles: z.array(roleKey).min(1).max(8).optional(),
78
+ })
79
+ .strict(),
80
+ ]);
81
+ export const stateChildSchema = z
82
+ .object({
83
+ /** The child's foreign key to this row. */
84
+ via: refSchema,
85
+ lock: z.literal(true).optional(),
86
+ parentIn: z.array(stateName).min(1).max(16).optional(),
87
+ clearOnCreate: z.array(refSchema).min(1).max(8).optional(),
88
+ })
89
+ .strict()
90
+ .refine((c) => c.lock === undefined || c.parentIn === undefined, {
91
+ message: 'a child is locked with its parent, or writable only in some of its states — not both',
92
+ });
93
+ export const statesSchema = z
94
+ .object({
95
+ column: refSchema,
96
+ initial: stateName,
97
+ moves: z.record(stateName, z.array(stateMoveSchema).max(16)),
98
+ lock: z
99
+ .object({
100
+ when: z.array(stateName).min(1).max(16),
101
+ except: z.array(refSchema).max(32).optional(),
102
+ })
103
+ .strict()
104
+ .optional(),
105
+ children: z.record(refSchema, stateChildSchema).optional(),
106
+ lockedWhenReferencedBy: z
107
+ .array(z.object({ table: refSchema, via: refSchema, in: z.array(stateName).min(1).max(16) }).strict())
108
+ .min(1)
109
+ .max(4)
110
+ .optional(),
111
+ noDelete: z.object({ when: z.union([z.literal('numbered'), z.array(stateName).min(1).max(16)]) }).strict().optional(),
112
+ onlyLater: z.array(refSchema).min(1).max(8).optional(),
113
+ })
114
+ .strict();
115
+ /** A move written as a bare state is a move with nothing asked first. */
116
+ export function moveTarget(move) {
117
+ return typeof move === 'string' ? move : move.to;
118
+ }
119
+ /** Everything wrong with one table's `states` against the manifest's tables. */
120
+ export function statesIssues(table, states, ctx, at) {
121
+ const out = [];
122
+ const { index } = ctx;
123
+ const column = index.column(table, states.column);
124
+ let values = [];
125
+ if (column === undefined) {
126
+ out.push({ path: at('column'), message: `"${table}" has no column "${states.column}"` });
127
+ }
128
+ else if (column.type !== 'enum') {
129
+ out.push({ path: at('column'), message: `"${table}.${states.column}" is not an enum, so it cannot hold a state` });
130
+ }
131
+ else {
132
+ values = column.enum ?? [];
133
+ }
134
+ const isState = (value) => values.length === 0 || values.includes(value);
135
+ const known = (value, path) => {
136
+ if (!isState(value))
137
+ out.push({ path, message: `"${value}" is not a value of "${table}.${states.column}"` });
138
+ };
139
+ known(states.initial, at('initial'));
140
+ for (const [from, moves] of Object.entries(states.moves)) {
141
+ known(from, at('moves', from));
142
+ moves.forEach((move, m) => {
143
+ const to = moveTarget(move);
144
+ known(to, at('moves', from, m));
145
+ if (to === from)
146
+ out.push({ path: at('moves', from, m), message: 'a move goes to another state' });
147
+ if (typeof move === 'string')
148
+ return;
149
+ for (const child of Object.keys(move.requires?.children ?? {})) {
150
+ if (states.children?.[child] === undefined) {
151
+ out.push({ path: at('moves', from, m, 'requires', 'children', child), message: `"${child}" is not one of this table's children` });
152
+ }
153
+ }
154
+ (move.requires?.where ?? []).forEach((condition, w) => {
155
+ out.push(...conditionIssues(table, condition, index, at('moves', from, m, 'requires', 'where', w)));
156
+ });
157
+ for (const role of move.roles ?? []) {
158
+ if (ctx.roles !== undefined && !ctx.roles.includes(role)) {
159
+ out.push({ path: at('moves', from, m, 'roles'), message: `"${role}" is not one of the app's roles` });
160
+ }
161
+ }
162
+ });
163
+ }
164
+ if (states.lock !== undefined) {
165
+ states.lock.when.forEach((value, i) => known(value, at('lock', 'when', i)));
166
+ for (const ref of states.lock.except ?? []) {
167
+ if (index.column(table, ref) === undefined)
168
+ out.push({ path: at('lock', 'except'), message: `"${table}" has no column "${ref}"` });
169
+ if (ref === states.column)
170
+ out.push({ path: at('lock', 'except'), message: 'the state moves by its moves, never by the lock' });
171
+ }
172
+ }
173
+ for (const [child, rule] of Object.entries(states.children ?? {})) {
174
+ const here = (...rest) => at('children', child, ...rest);
175
+ if (index.table(child) === undefined) {
176
+ out.push({ path: here(), message: `"${child}" is not a table of this manifest` });
177
+ continue;
178
+ }
179
+ const via = index.column(child, rule.via);
180
+ if (via === undefined)
181
+ out.push({ path: here('via'), message: `"${child}" has no column "${rule.via}"` });
182
+ else if (via.type !== 'fk' || via.references !== table)
183
+ out.push({ path: here('via'), message: `"${child}.${rule.via}" does not point at "${table}"` });
184
+ if (rule.lock === true && states.lock === undefined)
185
+ out.push({ path: here('lock'), message: 'a child is locked with its parent, and the parent has no lock' });
186
+ (rule.parentIn ?? []).forEach((value, i) => known(value, here('parentIn', i)));
187
+ for (const ref of rule.clearOnCreate ?? []) {
188
+ const found = index.column(table, ref);
189
+ if (found === undefined)
190
+ out.push({ path: here('clearOnCreate'), message: `"${table}" has no column "${ref}"` });
191
+ else if (found.nullable !== true)
192
+ out.push({ path: here('clearOnCreate'), message: `"${table}.${ref}" is not nullable, so it cannot be emptied` });
193
+ }
194
+ if (rule.lock === undefined && rule.parentIn === undefined && rule.clearOnCreate === undefined) {
195
+ out.push({ path: here(), message: 'a child says lock, parentIn or clearOnCreate' });
196
+ }
197
+ }
198
+ (states.lockedWhenReferencedBy ?? []).forEach((ref, r) => {
199
+ const here = (...rest) => at('lockedWhenReferencedBy', r, ...rest);
200
+ if (index.table(ref.table) === undefined) {
201
+ out.push({ path: here('table'), message: `"${ref.table}" is not a table of this manifest` });
202
+ return;
203
+ }
204
+ const via = index.column(ref.table, ref.via);
205
+ if (via?.type !== 'fk' || via.references !== table)
206
+ out.push({ path: here('via'), message: `"${ref.table}.${ref.via}" does not point at "${table}"` });
207
+ if (states.lock === undefined)
208
+ out.push({ path: here(), message: 'a row locked by a reference needs a lock to say what stays open' });
209
+ });
210
+ if (states.noDelete !== undefined) {
211
+ if (states.noDelete.when === 'numbered') {
212
+ if (!ctx.numbered)
213
+ out.push({ path: at('noDelete', 'when'), message: '"numbered" needs a column numbered without gaps (sequence.gapless)' });
214
+ }
215
+ else {
216
+ states.noDelete.when.forEach((value, i) => known(value, at('noDelete', 'when', i)));
217
+ }
218
+ }
219
+ for (const ref of states.onlyLater ?? []) {
220
+ const found = index.column(table, ref);
221
+ if (found === undefined)
222
+ out.push({ path: at('onlyLater'), message: `"${table}" has no column "${ref}"` });
223
+ else if (found.type !== 'date' && found.type !== 'timestamptz')
224
+ out.push({ path: at('onlyLater'), message: `"${table}.${ref}" is not a date` });
225
+ }
226
+ return out;
227
+ }
228
+ function conditionIssues(table, condition, index, path) {
229
+ const found = index.column(table, condition.column);
230
+ if (found === undefined)
231
+ return [{ path, message: `"${table}" has no column "${condition.column}"` }];
232
+ const out = [];
233
+ const values = condition.eq !== undefined ? [condition.eq] : (condition.in ?? []);
234
+ for (const value of values) {
235
+ if (!valueFits(found, value))
236
+ out.push({ path, message: `${JSON.stringify(value)} is not a value of "${table}.${condition.column}"` });
237
+ }
238
+ const ordered = [condition.gt, condition.gte, condition.lt, condition.lte].some((part) => part !== undefined);
239
+ if (ordered && !['int', 'bigint', 'decimal', 'money', 'float'].includes(found.type)) {
240
+ out.push({ path, message: `"${table}.${condition.column}" is not a number, so it cannot be compared` });
241
+ }
242
+ return out;
243
+ }
244
+ //# sourceMappingURL=states.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"states.js","sourceRoot":"","sources":["../src/states.ts"],"names":[],"mappings":"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"}
@@ -28,13 +28,27 @@ export interface ValidateManifestOptions {
28
28
  /** The host app's table refs, so an add-on's `scopes` can be bounded. */
29
29
  hostTables?: readonly string[];
30
30
  }
31
+ /**
32
+ * A warning is advice, never a refusal: a manifest with warnings validates.
33
+ * Kept apart from `issues` on purpose — every app repo compares its vendored
34
+ * validator's issues with Adminium's, and a warning reported as an issue
35
+ * would fail them all on their next push.
36
+ */
31
37
  export type ValidateManifestResult = {
32
38
  ok: true;
33
39
  manifest: Manifest;
40
+ warnings: ManifestIssue[];
34
41
  } | {
35
42
  ok: false;
36
43
  issues: ManifestIssue[];
44
+ warnings: ManifestIssue[];
37
45
  };
46
+ /**
47
+ * Advice about an app that validates: a column with no default that is not
48
+ * nullable is NOT NULL once installed, so every insert must give it a value —
49
+ * a draft saved half-filled is refused. Every app round has hit this once.
50
+ */
51
+ export declare function manifestWarnings(manifest: Manifest): ManifestIssue[];
38
52
  /**
39
53
  * Validate an untrusted manifest document. Returns the typed manifest on
40
54
  * success, or every issue found (schema + policy) on failure — never throws.
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;OAQG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,oEAAoE;IACpE,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,yEAAyE;IACzE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAChC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,IAAI,GAAE,uBAA4B,GACjC,sBAAsB,CAwCxB;AAED,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE,uBAA4B,GAAG,QAAQ,CAO1F"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;OAQG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,oEAAoE;IACpE,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,yEAAyE;IACzE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,GAC3D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC;AAKtE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa,EAAE,CAcpE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,IAAI,GAAE,uBAA4B,GACjC,sBAAsB,CA0CxB;AAED,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE,uBAA4B,GAAG,QAAQ,CAO1F"}
package/dist/validate.js CHANGED
@@ -6,6 +6,31 @@
6
6
  * in v1). Pure — safe in the browser storefront.
7
7
  */
8
8
  import { FIRST_PARTY_PUBLISHER_ID, RESERVED_KEYS, addOnIssues, manifestSchema, } from './schema.js';
9
+ /** Rules that fill a column, so an insert may leave it out. */
10
+ const FILLING_RULES = ['copy', 'sequence', 'code', 'rollup', 'stamp', 'formula', 'format', 'default'];
11
+ /**
12
+ * Advice about an app that validates: a column with no default that is not
13
+ * nullable is NOT NULL once installed, so every insert must give it a value —
14
+ * a draft saved half-filled is refused. Every app round has hit this once.
15
+ */
16
+ export function manifestWarnings(manifest) {
17
+ if (manifest.kind !== 'app')
18
+ return [];
19
+ const out = [];
20
+ (manifest.requiredSchema?.tables ?? []).forEach((table, t) => {
21
+ table.columns.forEach((column, c) => {
22
+ if (column.nullable === true || column.default !== undefined || column.role !== undefined)
23
+ return;
24
+ if (FILLING_RULES.some((rule) => column.rules?.[rule] !== undefined))
25
+ return;
26
+ out.push({
27
+ path: `requiredSchema.tables.${String(t)}.columns.${String(c)}`,
28
+ message: `"${table.ref}.${column.ref}" has no default and is not nullable, so it will be required at install: every new row must give it a value`,
29
+ });
30
+ });
31
+ });
32
+ return out;
33
+ }
9
34
  /**
10
35
  * Validate an untrusted manifest document. Returns the typed manifest on
11
36
  * success, or every issue found (schema + policy) on failure — never throws.
@@ -19,6 +44,7 @@ export function validateManifest(input, opts = {}) {
19
44
  path: issue.path.map(String).join('.'),
20
45
  message: issue.message,
21
46
  })),
47
+ warnings: [],
22
48
  };
23
49
  }
24
50
  const manifest = parsed.data;
@@ -41,9 +67,10 @@ export function validateManifest(input, opts = {}) {
41
67
  ...(opts.knownAppKeys !== undefined ? { knownAppKeys: opts.knownAppKeys } : {}),
42
68
  ...(opts.hostTables !== undefined ? { hostTables: opts.hostTables } : {}),
43
69
  }));
70
+ const warnings = manifestWarnings(manifest);
44
71
  if (issues.length > 0)
45
- return { ok: false, issues };
46
- return { ok: true, manifest };
72
+ return { ok: false, issues, warnings };
73
+ return { ok: true, manifest, warnings };
47
74
  }
48
75
  /** Throwing variant for trusted callers (build tooling); use the safe form at runtime. */
49
76
  export function parseManifest(input, opts = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;GAKG;AAEH,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,WAAW,EACX,cAAc,GAEf,MAAM,aAAa,CAAC;AA+BrB;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAc,EACd,OAAgC,EAAE;IAElC,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC1C,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBACtC,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;IAC7B,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,IAAI,CAAC,CAAC,IAAI,CAAC,yBAAyB,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,wBAAwB,EAAE,CAAC;QACrG,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,4DAA4D,wBAAwB,IAAI;SAClG,CAAC,CAAC;IACL,CAAC;IAED,0EAA0E;IAC1E,mCAAmC;IACnC,IAAK,aAAmC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,IAAI,QAAQ,CAAC,GAAG,0DAA0D;SACpF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAI,CACT,GAAG,WAAW,CAAC,QAAQ,EAAE;QACvB,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC,CACH,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACpD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,OAAgC,EAAE;IAC9E,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/E,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adminiumjs/manifest",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "license": "AGPL-3.0-only",
5
5
  "repository": {
6
6
  "type": "git",
@@ -20,7 +20,7 @@
20
20
  }
21
21
  },
22
22
  "dependencies": {
23
- "@adminium/add-on-contracts": "npm:@adminiumjs/add-on-contracts@0.3.0",
23
+ "@adminium/add-on-contracts": "npm:@adminiumjs/add-on-contracts@0.3.1",
24
24
  "zod": "^4.4.3"
25
25
  },
26
26
  "files": [