@adminiumjs/manifest 0.3.0-rc.4 → 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.
- package/dist/add-ons.d.ts +63 -0
- package/dist/add-ons.d.ts.map +1 -0
- package/dist/add-ons.js +100 -0
- package/dist/add-ons.js.map +1 -0
- package/dist/booking.d.ts +100 -0
- package/dist/booking.d.ts.map +1 -0
- package/dist/booking.js +237 -0
- package/dist/booking.js.map +1 -0
- package/dist/documents.d.ts +100 -0
- package/dist/documents.d.ts.map +1 -0
- package/dist/documents.js +148 -0
- package/dist/documents.js.map +1 -0
- package/dist/formula.d.ts +124 -0
- package/dist/formula.d.ts.map +1 -0
- package/dist/formula.js +428 -0
- package/dist/formula.js.map +1 -0
- package/dist/index.d.ts +14 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/outbox.d.ts +543 -0
- package/dist/outbox.d.ts.map +1 -0
- package/dist/outbox.js +559 -0
- package/dist/outbox.js.map +1 -0
- package/dist/page-calendar.d.ts +42 -0
- package/dist/page-calendar.d.ts.map +1 -0
- package/dist/page-calendar.js +95 -0
- package/dist/page-calendar.js.map +1 -0
- package/dist/plan-model.d.ts +1 -1
- package/dist/plan-model.d.ts.map +1 -1
- package/dist/public-access.d.ts +208 -0
- package/dist/public-access.d.ts.map +1 -0
- package/dist/public-access.js +681 -0
- package/dist/public-access.js.map +1 -0
- package/dist/refs.d.ts +91 -0
- package/dist/refs.d.ts.map +1 -0
- package/dist/refs.js +82 -0
- package/dist/refs.js.map +1 -0
- package/dist/roles.d.ts +44 -0
- package/dist/roles.d.ts.map +1 -0
- package/dist/roles.js +75 -0
- package/dist/roles.js.map +1 -0
- package/dist/sample.d.ts +150 -2
- package/dist/sample.d.ts.map +1 -1
- package/dist/sample.js +101 -3
- package/dist/sample.js.map +1 -1
- package/dist/schema.d.ts +3464 -151
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +681 -143
- package/dist/schema.js.map +1 -1
- package/dist/semver.d.ts +28 -0
- package/dist/semver.d.ts.map +1 -0
- package/dist/semver.js +85 -0
- package/dist/semver.js.map +1 -0
- package/dist/shapes.d.ts +97 -0
- package/dist/shapes.d.ts.map +1 -0
- package/dist/shapes.js +190 -0
- package/dist/shapes.js.map +1 -0
- package/dist/states.d.ts +134 -0
- package/dist/states.d.ts.map +1 -0
- package/dist/states.js +244 -0
- package/dist/states.js.map +1 -0
- package/dist/validate.d.ts +14 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +29 -2
- package/dist/validate.js.map +1 -1
- package/package.json +2 -2
package/dist/formula.js
ADDED
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
/**
|
|
3
|
+
* `rules.formula` — a column Adminium works out from the other columns of the
|
|
4
|
+
* same row, on every write: a line's amount, a document's tax and total.
|
|
5
|
+
*
|
|
6
|
+
* ```json
|
|
7
|
+
* { "ref": "amount", "type": "decimal", "scale": "currency",
|
|
8
|
+
* "rules": { "formula": { "max": [0, { "sub": [{ "mul": ["qty", "rate"] }, { "coalesce": ["discount", 0] }] }] } } }
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* The grammar is small on purpose: numbers, the row's own columns, the four
|
|
12
|
+
* operations, `min`, `max`, `round`, `coalesce` and one `if`. Anything that
|
|
13
|
+
* reads another row is a `copy` or a `rollup`, which already know how to keep
|
|
14
|
+
* in step when that other row changes; a formula that could read across rows
|
|
15
|
+
* would need the same machinery again.
|
|
16
|
+
*
|
|
17
|
+
* THE ARITHMETIC IS EXACT. Every value becomes a fraction of two big
|
|
18
|
+
* integers, parsed from its decimal text (Postgres and MySQL hand a decimal
|
|
19
|
+
* back as `"12.5000"`, SQLite as the number `12.5`), and nothing goes through
|
|
20
|
+
* a float. Division stays exact; the result is rounded ONCE, half away from
|
|
21
|
+
* zero, to the column's scale. So `1 / 3 × 3` is exactly 1, and a total is the
|
|
22
|
+
* same on all three databases to the last minor unit.
|
|
23
|
+
*
|
|
24
|
+
* An empty column makes the result empty, unless `coalesce` says what to read
|
|
25
|
+
* instead: a draft line with no rate yet has no amount, not an amount of 0
|
|
26
|
+
* that looks like a price. Division by zero is empty too.
|
|
27
|
+
*
|
|
28
|
+
* Pure: a browser (an app's demo) evaluates the same formula the server does.
|
|
29
|
+
*/
|
|
30
|
+
import { z } from 'zod';
|
|
31
|
+
import { NUMERIC_TYPES } from './refs.js';
|
|
32
|
+
/** A snake_case column of the same row. */
|
|
33
|
+
const columnName = z.string().regex(/^[a-z][a-z0-9_]*$/, 'a column of the same row');
|
|
34
|
+
const literal = z.union([z.string().max(256), z.number().finite(), z.boolean()]);
|
|
35
|
+
export const formulaExprSchema = z.lazy(() => z.union([
|
|
36
|
+
z.number().finite(),
|
|
37
|
+
columnName,
|
|
38
|
+
z.object({ add: z.array(formulaExprSchema).min(2).max(8) }).strict(),
|
|
39
|
+
z.object({ sub: z.tuple([formulaExprSchema, formulaExprSchema]) }).strict(),
|
|
40
|
+
z.object({ mul: z.array(formulaExprSchema).min(2).max(8) }).strict(),
|
|
41
|
+
z.object({ div: z.tuple([formulaExprSchema, formulaExprSchema]) }).strict(),
|
|
42
|
+
z.object({ min: z.array(formulaExprSchema).min(2).max(8) }).strict(),
|
|
43
|
+
z.object({ max: z.array(formulaExprSchema).min(2).max(8) }).strict(),
|
|
44
|
+
z
|
|
45
|
+
.object({ round: z.union([formulaExprSchema, z.tuple([formulaExprSchema, z.number().int().min(0).max(4)])]) })
|
|
46
|
+
.strict(),
|
|
47
|
+
z.object({ coalesce: z.tuple([formulaExprSchema, formulaExprSchema]) }).strict(),
|
|
48
|
+
z.object({ if: z.tuple([formulaConditionSchema, formulaExprSchema, formulaExprSchema]) }).strict(),
|
|
49
|
+
]));
|
|
50
|
+
export const formulaConditionSchema = z.lazy(() => z.union([
|
|
51
|
+
z.object({ eq: z.tuple([columnName, literal]) }).strict(),
|
|
52
|
+
z.object({ neq: z.tuple([columnName, literal]) }).strict(),
|
|
53
|
+
z.object({ gt: z.tuple([formulaExprSchema, formulaExprSchema]) }).strict(),
|
|
54
|
+
z.object({ gte: z.tuple([formulaExprSchema, formulaExprSchema]) }).strict(),
|
|
55
|
+
z.object({ lt: z.tuple([formulaExprSchema, formulaExprSchema]) }).strict(),
|
|
56
|
+
z.object({ lte: z.tuple([formulaExprSchema, formulaExprSchema]) }).strict(),
|
|
57
|
+
z.object({ isNull: columnName }).strict(),
|
|
58
|
+
z.object({ and: z.array(formulaConditionSchema).min(2).max(8) }).strict(),
|
|
59
|
+
z.object({ or: z.array(formulaConditionSchema).min(2).max(8) }).strict(),
|
|
60
|
+
]));
|
|
61
|
+
/** How deep a formula may nest: deeper is a formula nobody can read back. */
|
|
62
|
+
export const FORMULA_MAX_DEPTH = 8;
|
|
63
|
+
/** Every column a formula reads, in the order it first names them. */
|
|
64
|
+
export function formulaColumns(expr) {
|
|
65
|
+
const out = [];
|
|
66
|
+
const walk = (node) => {
|
|
67
|
+
if (typeof node === 'string') {
|
|
68
|
+
if (!out.includes(node))
|
|
69
|
+
out.push(node);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (typeof node !== 'object' || node === null)
|
|
73
|
+
return;
|
|
74
|
+
const [op, args] = Object.entries(node)[0];
|
|
75
|
+
if (op === 'eq' || op === 'neq') {
|
|
76
|
+
walk(args[0]);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (op === 'isNull') {
|
|
80
|
+
walk(args);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (Array.isArray(args))
|
|
84
|
+
args.forEach(walk);
|
|
85
|
+
else
|
|
86
|
+
walk(args);
|
|
87
|
+
};
|
|
88
|
+
walk(expr);
|
|
89
|
+
return out;
|
|
90
|
+
}
|
|
91
|
+
function depthOf(node) {
|
|
92
|
+
if (typeof node !== 'object' || node === null)
|
|
93
|
+
return 0;
|
|
94
|
+
const args = Object.values(node)[0];
|
|
95
|
+
const children = Array.isArray(args) ? args : [args];
|
|
96
|
+
return 1 + Math.max(0, ...children.map(depthOf));
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* What is wrong with one column's formula against its table: a column it
|
|
100
|
+
* names that the table lacks, a column used in arithmetic that holds no
|
|
101
|
+
* number, a formula deeper than {@link FORMULA_MAX_DEPTH}, one that reads
|
|
102
|
+
* itself. Cycles across a table's formulas are {@link formulaCycle}'s.
|
|
103
|
+
*/
|
|
104
|
+
export function formulaIssues(expr, own, column) {
|
|
105
|
+
const out = [];
|
|
106
|
+
if (depthOf(expr) > FORMULA_MAX_DEPTH)
|
|
107
|
+
out.push(`a formula nests at most ${String(FORMULA_MAX_DEPTH)} deep`);
|
|
108
|
+
// A column compared with `eq` may be any type (an enum, a bool); one that
|
|
109
|
+
// takes part in arithmetic or an ordering must hold a number.
|
|
110
|
+
const arithmetic = arithmeticColumns(expr);
|
|
111
|
+
for (const name of formulaColumns(expr)) {
|
|
112
|
+
if (name === own) {
|
|
113
|
+
out.push(`a formula does not read its own column "${name}"`);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const found = column(name);
|
|
117
|
+
if (found === undefined) {
|
|
118
|
+
out.push(`the table has no column "${name}"`);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (arithmetic.has(name) && !NUMERIC_TYPES.includes(found.type)) {
|
|
122
|
+
out.push(`"${name}" is not a number, so a formula cannot count with it`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return out;
|
|
126
|
+
}
|
|
127
|
+
/** The columns a formula counts with (every name outside `eq`, `neq` and `isNull`). */
|
|
128
|
+
function arithmeticColumns(expr) {
|
|
129
|
+
const out = new Set();
|
|
130
|
+
const walk = (node) => {
|
|
131
|
+
if (typeof node === 'string') {
|
|
132
|
+
out.add(node);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (typeof node !== 'object' || node === null)
|
|
136
|
+
return;
|
|
137
|
+
const [op, args] = Object.entries(node)[0];
|
|
138
|
+
if (op === 'eq' || op === 'neq' || op === 'isNull')
|
|
139
|
+
return;
|
|
140
|
+
const children = Array.isArray(args) ? args : [args];
|
|
141
|
+
children.forEach(walk);
|
|
142
|
+
};
|
|
143
|
+
walk(expr);
|
|
144
|
+
return out;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* The first cycle among a table's formula columns (`total` reads `tax`, which
|
|
148
|
+
* reads `total`), as the columns in order, or `null`. A cycle has no value to
|
|
149
|
+
* settle on, so it is refused before it is ever stored.
|
|
150
|
+
*/
|
|
151
|
+
export function formulaCycle(formulas) {
|
|
152
|
+
const state = new Map();
|
|
153
|
+
const path = [];
|
|
154
|
+
const visit = (name) => {
|
|
155
|
+
const mark = state.get(name);
|
|
156
|
+
if (mark === 'done')
|
|
157
|
+
return null;
|
|
158
|
+
if (mark === 'visiting')
|
|
159
|
+
return [...path.slice(path.indexOf(name)), name];
|
|
160
|
+
state.set(name, 'visiting');
|
|
161
|
+
path.push(name);
|
|
162
|
+
for (const next of formulaColumns(formulas.get(name))) {
|
|
163
|
+
if (!formulas.has(next))
|
|
164
|
+
continue;
|
|
165
|
+
const found = visit(next);
|
|
166
|
+
if (found !== null)
|
|
167
|
+
return found;
|
|
168
|
+
}
|
|
169
|
+
path.pop();
|
|
170
|
+
state.set(name, 'done');
|
|
171
|
+
return null;
|
|
172
|
+
};
|
|
173
|
+
for (const name of formulas.keys()) {
|
|
174
|
+
const found = visit(name);
|
|
175
|
+
if (found !== null)
|
|
176
|
+
return found;
|
|
177
|
+
}
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* A table's formula columns in the order they can be worked out: each after
|
|
182
|
+
* every formula column it reads. Assumes no cycle (checked at validation).
|
|
183
|
+
*/
|
|
184
|
+
export function formulaOrder(formulas) {
|
|
185
|
+
const out = [];
|
|
186
|
+
const seen = new Set();
|
|
187
|
+
const visit = (name) => {
|
|
188
|
+
if (seen.has(name))
|
|
189
|
+
return;
|
|
190
|
+
seen.add(name);
|
|
191
|
+
for (const next of formulaColumns(formulas.get(name)))
|
|
192
|
+
if (formulas.has(next))
|
|
193
|
+
visit(next);
|
|
194
|
+
out.push(name);
|
|
195
|
+
};
|
|
196
|
+
for (const name of formulas.keys())
|
|
197
|
+
visit(name);
|
|
198
|
+
return out;
|
|
199
|
+
}
|
|
200
|
+
const DECIMAL_TEXT = /^([+-]?)(\d*)(?:\.(\d*))?(?:[eE]([+-]?\d+))?$/;
|
|
201
|
+
function gcd(a, b) {
|
|
202
|
+
let x = a < 0n ? -a : a;
|
|
203
|
+
let y = b < 0n ? -b : b;
|
|
204
|
+
while (y !== 0n)
|
|
205
|
+
[x, y] = [y, x % y];
|
|
206
|
+
return x === 0n ? 1n : x;
|
|
207
|
+
}
|
|
208
|
+
function ratio(n, d) {
|
|
209
|
+
if (d < 0n)
|
|
210
|
+
return ratio(-n, -d);
|
|
211
|
+
const g = gcd(n, d);
|
|
212
|
+
return { n: n / g, d: d / g };
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* A stored value as an exact fraction: the decimal text of a number (never a
|
|
216
|
+
* float product), a decimal string as a driver returns it, a bigint, or a
|
|
217
|
+
* boolean (1 / 0, as MySQL and SQLite store one). `null` for an empty value or
|
|
218
|
+
* text that is not a number.
|
|
219
|
+
*/
|
|
220
|
+
export function toRatio(value) {
|
|
221
|
+
if (value === null || value === undefined)
|
|
222
|
+
return null;
|
|
223
|
+
if (typeof value === 'bigint')
|
|
224
|
+
return { n: value, d: 1n };
|
|
225
|
+
if (typeof value === 'boolean')
|
|
226
|
+
return { n: value ? 1n : 0n, d: 1n };
|
|
227
|
+
let text;
|
|
228
|
+
if (typeof value === 'number') {
|
|
229
|
+
if (!Number.isFinite(value))
|
|
230
|
+
return null;
|
|
231
|
+
text = String(value);
|
|
232
|
+
}
|
|
233
|
+
else if (typeof value === 'string') {
|
|
234
|
+
text = value.trim();
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
const match = DECIMAL_TEXT.exec(text);
|
|
240
|
+
if (match === null)
|
|
241
|
+
return null;
|
|
242
|
+
const [, sign = '', whole = '', fraction = '', exponent = '0'] = match;
|
|
243
|
+
if (whole === '' && fraction === '')
|
|
244
|
+
return null;
|
|
245
|
+
let n = BigInt(`${whole}${fraction}` === '' ? '0' : `${whole}${fraction}`);
|
|
246
|
+
let d = 10n ** BigInt(fraction.length);
|
|
247
|
+
const e = Number.parseInt(exponent, 10);
|
|
248
|
+
if (e > 0)
|
|
249
|
+
n *= 10n ** BigInt(e);
|
|
250
|
+
else if (e < 0)
|
|
251
|
+
d *= 10n ** BigInt(-e);
|
|
252
|
+
return ratio(sign === '-' ? -n : n, d);
|
|
253
|
+
}
|
|
254
|
+
const add = (a, b) => ratio(a.n * b.d + b.n * a.d, a.d * b.d);
|
|
255
|
+
const sub = (a, b) => ratio(a.n * b.d - b.n * a.d, a.d * b.d);
|
|
256
|
+
const mul = (a, b) => ratio(a.n * b.n, a.d * b.d);
|
|
257
|
+
const cmp = (a, b) => {
|
|
258
|
+
const left = a.n * b.d;
|
|
259
|
+
const right = b.n * a.d;
|
|
260
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
261
|
+
};
|
|
262
|
+
/** Round half away from zero to `scale` places. */
|
|
263
|
+
function roundTo(value, scale) {
|
|
264
|
+
const factor = 10n ** BigInt(scale);
|
|
265
|
+
const scaled = value.n * factor;
|
|
266
|
+
const negative = scaled < 0n;
|
|
267
|
+
const magnitude = negative ? -scaled : scaled;
|
|
268
|
+
let q = magnitude / value.d;
|
|
269
|
+
const r = magnitude % value.d;
|
|
270
|
+
if (r * 2n >= value.d)
|
|
271
|
+
q += 1n;
|
|
272
|
+
return ratio(negative ? -q : q, factor);
|
|
273
|
+
}
|
|
274
|
+
/** A fraction as decimal text with exactly `scale` places (`12.50`, `-3`, `0.125`). */
|
|
275
|
+
export function ratioText(value, scale) {
|
|
276
|
+
const rounded = roundTo(value, scale);
|
|
277
|
+
const factor = 10n ** BigInt(scale);
|
|
278
|
+
const units = (rounded.n * factor) / rounded.d;
|
|
279
|
+
const negative = units < 0n;
|
|
280
|
+
const digits = (negative ? -units : units).toString().padStart(scale + 1, '0');
|
|
281
|
+
const whole = scale === 0 ? digits : digits.slice(0, -scale);
|
|
282
|
+
const fraction = scale === 0 ? '' : `.${digits.slice(-scale)}`;
|
|
283
|
+
return `${negative && units !== 0n ? '-' : ''}${whole}${fraction}`;
|
|
284
|
+
}
|
|
285
|
+
function sameValue(stored, literal) {
|
|
286
|
+
if (stored === null || stored === undefined)
|
|
287
|
+
return false;
|
|
288
|
+
if (typeof literal === 'boolean') {
|
|
289
|
+
return stored === literal || stored === (literal ? 1 : 0) || stored === (literal ? '1' : '0') || stored === String(literal);
|
|
290
|
+
}
|
|
291
|
+
if (typeof literal === 'number') {
|
|
292
|
+
const a = toRatio(stored);
|
|
293
|
+
const b = toRatio(literal);
|
|
294
|
+
return a !== null && b !== null && cmp(a, b) === 0;
|
|
295
|
+
}
|
|
296
|
+
return String(stored) === literal;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Work a formula out over a row, exactly: the result as decimal text at
|
|
300
|
+
* `scale` places, or `null` when an input it needs is empty or a divisor is
|
|
301
|
+
* zero. `row` holds the stored row with the new values over it.
|
|
302
|
+
*/
|
|
303
|
+
export function evaluateFormula(expr, row, scale) {
|
|
304
|
+
const value = evaluate(expr, row, scale);
|
|
305
|
+
return value === null ? null : ratioText(value, scale);
|
|
306
|
+
}
|
|
307
|
+
function evaluate(expr, row, scale) {
|
|
308
|
+
if (typeof expr === 'number')
|
|
309
|
+
return toRatio(expr);
|
|
310
|
+
if (typeof expr === 'string')
|
|
311
|
+
return toRatio(row[expr]);
|
|
312
|
+
const [op, args] = Object.entries(expr)[0];
|
|
313
|
+
const all = (list) => {
|
|
314
|
+
const out = [];
|
|
315
|
+
for (const item of list) {
|
|
316
|
+
const v = evaluate(item, row, scale);
|
|
317
|
+
if (v === null)
|
|
318
|
+
return null;
|
|
319
|
+
out.push(v);
|
|
320
|
+
}
|
|
321
|
+
return out;
|
|
322
|
+
};
|
|
323
|
+
switch (op) {
|
|
324
|
+
case 'add':
|
|
325
|
+
case 'mul':
|
|
326
|
+
case 'min':
|
|
327
|
+
case 'max': {
|
|
328
|
+
const values = all(args);
|
|
329
|
+
if (values === null)
|
|
330
|
+
return null;
|
|
331
|
+
return values.reduce((a, b) => op === 'add' ? add(a, b) : op === 'mul' ? mul(a, b) : op === 'min' ? (cmp(a, b) <= 0 ? a : b) : cmp(a, b) >= 0 ? a : b);
|
|
332
|
+
}
|
|
333
|
+
case 'sub': {
|
|
334
|
+
const values = all(args);
|
|
335
|
+
return values === null ? null : sub(values[0], values[1]);
|
|
336
|
+
}
|
|
337
|
+
case 'div': {
|
|
338
|
+
const values = all(args);
|
|
339
|
+
if (values === null || values[1].n === 0n)
|
|
340
|
+
return null;
|
|
341
|
+
return ratio(values[0].n * values[1].d, values[0].d * values[1].n);
|
|
342
|
+
}
|
|
343
|
+
case 'round': {
|
|
344
|
+
const [inner, places] = Array.isArray(args) ? args : [args, scale];
|
|
345
|
+
const v = evaluate(inner, row, scale);
|
|
346
|
+
return v === null ? null : roundTo(v, places);
|
|
347
|
+
}
|
|
348
|
+
case 'coalesce': {
|
|
349
|
+
const [first, second] = args;
|
|
350
|
+
return evaluate(first, row, scale) ?? evaluate(second, row, scale);
|
|
351
|
+
}
|
|
352
|
+
case 'if': {
|
|
353
|
+
const [condition, then, otherwise] = args;
|
|
354
|
+
return evaluate(holds(condition, row, scale) ? then : otherwise, row, scale);
|
|
355
|
+
}
|
|
356
|
+
default:
|
|
357
|
+
return null;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
/** Whether a condition holds for the row; a comparison with an empty side does not. */
|
|
361
|
+
export function holds(condition, row, scale) {
|
|
362
|
+
const [op, args] = Object.entries(condition)[0];
|
|
363
|
+
switch (op) {
|
|
364
|
+
case 'eq': {
|
|
365
|
+
const [column, value] = args;
|
|
366
|
+
return sameValue(row[column], value);
|
|
367
|
+
}
|
|
368
|
+
case 'neq': {
|
|
369
|
+
const [column, value] = args;
|
|
370
|
+
return row[column] !== null && row[column] !== undefined && !sameValue(row[column], value);
|
|
371
|
+
}
|
|
372
|
+
case 'isNull': {
|
|
373
|
+
const stored = row[args];
|
|
374
|
+
return stored === null || stored === undefined || stored === '';
|
|
375
|
+
}
|
|
376
|
+
case 'and':
|
|
377
|
+
return args.every((c) => holds(c, row, scale));
|
|
378
|
+
case 'or':
|
|
379
|
+
return args.some((c) => holds(c, row, scale));
|
|
380
|
+
default: {
|
|
381
|
+
const [left, right] = args.map((side) => evaluate(side, row, scale));
|
|
382
|
+
if (left === null || left === undefined || right === null || right === undefined)
|
|
383
|
+
return false;
|
|
384
|
+
const order = cmp(left, right);
|
|
385
|
+
return op === 'gt' ? order > 0 : op === 'gte' ? order >= 0 : op === 'lt' ? order < 0 : order <= 0;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
/** The decimals a currency is written with (ISO 4217): JPY 0, most 2, KWD 3. Unknown → 2. */
|
|
390
|
+
export function currencyScale(code) {
|
|
391
|
+
if (typeof code !== 'string' || !/^[A-Za-z]{3}$/.test(code))
|
|
392
|
+
return 2;
|
|
393
|
+
const upper = code.toUpperCase();
|
|
394
|
+
if (ZERO_DECIMAL.has(upper))
|
|
395
|
+
return 0;
|
|
396
|
+
if (THREE_DECIMAL.has(upper))
|
|
397
|
+
return 3;
|
|
398
|
+
return 2;
|
|
399
|
+
}
|
|
400
|
+
const ZERO_DECIMAL = new Set([
|
|
401
|
+
'BIF', 'CLP', 'DJF', 'GNF', 'ISK', 'JPY', 'KMF', 'KRW', 'PYG', 'RWF', 'UGX', 'UYI', 'VND', 'VUV', 'XAF', 'XOF', 'XPF',
|
|
402
|
+
]);
|
|
403
|
+
const THREE_DECIMAL = new Set(['BHD', 'IQD', 'JOD', 'KWD', 'LYD', 'OMR', 'TND']);
|
|
404
|
+
/** For the checks in `schema.ts`: every issue of a table's formulas, cycles included. */
|
|
405
|
+
export function tableFormulaIssues(columns, at) {
|
|
406
|
+
const out = [];
|
|
407
|
+
const byRef = new Map(columns.map((c) => [c.ref, c]));
|
|
408
|
+
const formulas = new Map();
|
|
409
|
+
columns.forEach((column, c) => {
|
|
410
|
+
const formula = column.rules?.formula;
|
|
411
|
+
if (formula === undefined)
|
|
412
|
+
return;
|
|
413
|
+
formulas.set(column.ref, formula);
|
|
414
|
+
if (!NUMERIC_TYPES.includes(column.type) || column.type === 'float') {
|
|
415
|
+
out.push({ path: at(c, 'rules', 'formula'), message: 'a formula fills a decimal, money or whole-number column' });
|
|
416
|
+
}
|
|
417
|
+
for (const message of formulaIssues(formula, column.ref, (ref) => byRef.get(ref))) {
|
|
418
|
+
out.push({ path: at(c, 'rules', 'formula'), message });
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
const cycle = formulaCycle(formulas);
|
|
422
|
+
if (cycle !== null) {
|
|
423
|
+
const first = columns.findIndex((c) => c.ref === cycle[0]);
|
|
424
|
+
out.push({ path: at(first, 'rules', 'formula'), message: `formulas read each other in a circle: ${cycle.join(' → ')}` });
|
|
425
|
+
}
|
|
426
|
+
return out;
|
|
427
|
+
}
|
|
428
|
+
//# sourceMappingURL=formula.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formula.js","sourceRoot":"","sources":["../src/formula.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,9 +8,20 @@
|
|
|
8
8
|
* this package does I/O.
|
|
9
9
|
*/
|
|
10
10
|
export declare const PACKAGE_NAME = "@adminium/manifest";
|
|
11
|
-
export { MANIFEST_VERSION, MANIFEST_KINDS, MANIFEST_CATEGORIES, MANIFEST_CAPABILITIES, RESERVED_KEYS, COLUMN_TYPES, COLUMN_SEMANTICS, COLUMN_ROLES, FRONTEND_KINDS, FIRST_PARTY_PUBLISHER_ID, manifestSchema, appManifestSchema, addOnManifestSchema, manifestKindSchema, addOnIssues, isAddOnManifest, identitySchema, compatibilitySchema, requiredSchemaSchema, requiredTableSchema, requiredColumnSchema, pageSchema, roleSchema, settingSchema, seedSchema, frontendSchema, capabilitySchema, categorySchema, publisherSchema, i18nMessageSchema, compareSemver, defaultIssue, MAX_TEXT_LENGTH, MAX_TABLE_NAME, prefixFor, appReferenceIssues, columnRulesSchema, capacitySchema, navGroupSchema, publicAccessSchema, sampleDataSchema, labelsSchema, type ColumnRules, type PublicAccess, type Manifest, type AppManifest, type AddOnManifest, type ManifestKind, type AddOnBlock, type Capability, type Publisher, type I18nMessage, type RequiredTable, type RequiredColumn, } from './schema.js';
|
|
12
|
-
export {
|
|
11
|
+
export { MANIFEST_VERSION, MANIFEST_KINDS, MANIFEST_CATEGORIES, MANIFEST_CAPABILITIES, RESERVED_KEYS, COLUMN_TYPES, COLUMN_SEMANTICS, COLUMN_ROLES, FRONTEND_KINDS, FIRST_PARTY_PUBLISHER_ID, manifestSchema, appManifestSchema, addOnManifestSchema, manifestKindSchema, addOnIssues, isAddOnManifest, identitySchema, compatibilitySchema, requiredSchemaSchema, requiredTableSchema, requiredColumnSchema, pageSchema, roleSchema, settingSchema, seedSchema, frontendSchema, capabilitySchema, categorySchema, publisherSchema, i18nMessageSchema, compareSemver, defaultIssue, MAX_TEXT_LENGTH, MAX_TABLE_NAME, prefixFor, appReferenceIssues, columnRulesSchema, stampSetSchema, stampTriggerSchema, shapeDefinitionSchema, shapePartSchema, shapeDefinitionIssues, capacitySchema, navGroupSchema, publicAccessSchema, publicKeysSchema, sampleDataSchema, labelsSchema, type ColumnRules, type PublicAccess, type Manifest, type AppManifest, type AddOnManifest, type ManifestKind, type AddOnBlock, type Capability, type Publisher, type I18nMessage, type RequiredTable, type RequiredColumn, type RequiredTableShape, type ShapeDefinition, } from './schema.js';
|
|
12
|
+
export { roleLimitSchema, roleLimitsSchema, type RoleLimit } from './roles.js';
|
|
13
|
+
export { validateManifest, parseManifest, manifestWarnings, type ValidateManifestResult, type ValidateManifestOptions, type ManifestIssue, } from './validate.js';
|
|
14
|
+
export { BOOKING_WEEKDAYS, bookingSchema, type BookingRule } from './booking.js';
|
|
15
|
+
export { OUTBOX_HELD, OUTBOX_SKIP_REASONS, OUTBOX_STATUSES, emailTemplateSchema, outboxProducerSchema, outboxSchema, type EmailTemplate, type Outbox, type OutboxProducer, } from './outbox.js';
|
|
16
|
+
export { CUSTOMER_KEY, claimKind, claimSchema, publicKeySchema, type Claim, type PublicKey } from './public-access.js';
|
|
17
|
+
export { FORMULA_MAX_DEPTH, currencyScale, evaluateFormula, formulaColumns, formulaConditionSchema, formulaCycle, formulaExprSchema, formulaOrder, holds as formulaHolds, ratioText, toRatio, type FormulaCondition, type FormulaExpr, } from './formula.js';
|
|
18
|
+
export { moveTarget, stateChildSchema, stateConditionSchema, stateMoveSchema, statesSchema, type StateChild, type StateCondition, type StateMove, type States, } from './states.js';
|
|
19
|
+
export { addOnsSchema, namedAddOns, requiresAddOn, type AddOnNeeds } from './add-ons.js';
|
|
20
|
+
export { appDocumentSchema, slotMappingSchema, type AppDocument, type SlotMapping } from './documents.js';
|
|
21
|
+
export { shapeConformanceIssues, shapeKey, type ShapeColumn, type ShapeDefinitionView, type ShapeIssue, type ShapePart, } from './shapes.js';
|
|
22
|
+
export { addOnSettingRefSchema, settingSourceSchema, type SettingSource } from './refs.js';
|
|
23
|
+
export { parseSemverRange, satisfiesSemverRange } from './semver.js';
|
|
13
24
|
export { planInstall, type InstallPlan, type PlannedTable, type PlannedColumn, type PlannedReference, type PlanProblem, type SchemaModelView, type ExistingColumnView, type TableAction, } from './plan.js';
|
|
14
25
|
export { IDENTIFIER_LIMIT, ROLE_SLUG_LIMIT, type PlanContext, type TableChoice, type TableClass, type TableOffer, type PlanEdit, type InstallTablePlan, type TableAction as ContextTableAction, } from './plan-context.js';
|
|
15
|
-
export { SAMPLE_FORMAT, isoDurationMs, sampleBundleIssues, sampleBundleSchema, sampleDirective, sampleRowSchema, sampleValueSchema, type SampleBundle, type SampleIssue, type SampleValue, } from './sample.js';
|
|
26
|
+
export { SAMPLE_FORMAT, ROW_DIRECTIVES, byClockSchema, isoDurationMs, sampleBundleIssues, sampleBundleSchema, sampleDirective, sampleRowSchema, sampleValueSchema, type ByClock, type SampleBundle, type SampleIssue, type SampleValue, } from './sample.js';
|
|
16
27
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,uBAAuB,CAAC;AAEjD,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -9,9 +9,20 @@
|
|
|
9
9
|
* this package does I/O.
|
|
10
10
|
*/
|
|
11
11
|
export const PACKAGE_NAME = '@adminium/manifest';
|
|
12
|
-
export { MANIFEST_VERSION, MANIFEST_KINDS, MANIFEST_CATEGORIES, MANIFEST_CAPABILITIES, RESERVED_KEYS, COLUMN_TYPES, COLUMN_SEMANTICS, COLUMN_ROLES, FRONTEND_KINDS, FIRST_PARTY_PUBLISHER_ID, manifestSchema, appManifestSchema, addOnManifestSchema, manifestKindSchema, addOnIssues, isAddOnManifest, identitySchema, compatibilitySchema, requiredSchemaSchema, requiredTableSchema, requiredColumnSchema, pageSchema, roleSchema, settingSchema, seedSchema, frontendSchema, capabilitySchema, categorySchema, publisherSchema, i18nMessageSchema, compareSemver, defaultIssue, MAX_TEXT_LENGTH, MAX_TABLE_NAME, prefixFor, appReferenceIssues, columnRulesSchema, capacitySchema, navGroupSchema, publicAccessSchema, sampleDataSchema, labelsSchema, } from './schema.js';
|
|
13
|
-
export {
|
|
12
|
+
export { MANIFEST_VERSION, MANIFEST_KINDS, MANIFEST_CATEGORIES, MANIFEST_CAPABILITIES, RESERVED_KEYS, COLUMN_TYPES, COLUMN_SEMANTICS, COLUMN_ROLES, FRONTEND_KINDS, FIRST_PARTY_PUBLISHER_ID, manifestSchema, appManifestSchema, addOnManifestSchema, manifestKindSchema, addOnIssues, isAddOnManifest, identitySchema, compatibilitySchema, requiredSchemaSchema, requiredTableSchema, requiredColumnSchema, pageSchema, roleSchema, settingSchema, seedSchema, frontendSchema, capabilitySchema, categorySchema, publisherSchema, i18nMessageSchema, compareSemver, defaultIssue, MAX_TEXT_LENGTH, MAX_TABLE_NAME, prefixFor, appReferenceIssues, columnRulesSchema, stampSetSchema, stampTriggerSchema, shapeDefinitionSchema, shapePartSchema, shapeDefinitionIssues, capacitySchema, navGroupSchema, publicAccessSchema, publicKeysSchema, sampleDataSchema, labelsSchema, } from './schema.js';
|
|
13
|
+
export { roleLimitSchema, roleLimitsSchema } from './roles.js';
|
|
14
|
+
export { validateManifest, parseManifest, manifestWarnings, } from './validate.js';
|
|
15
|
+
export { BOOKING_WEEKDAYS, bookingSchema } from './booking.js';
|
|
16
|
+
export { OUTBOX_HELD, OUTBOX_SKIP_REASONS, OUTBOX_STATUSES, emailTemplateSchema, outboxProducerSchema, outboxSchema, } from './outbox.js';
|
|
17
|
+
export { CUSTOMER_KEY, claimKind, claimSchema, publicKeySchema } from './public-access.js';
|
|
18
|
+
export { FORMULA_MAX_DEPTH, currencyScale, evaluateFormula, formulaColumns, formulaConditionSchema, formulaCycle, formulaExprSchema, formulaOrder, holds as formulaHolds, ratioText, toRatio, } from './formula.js';
|
|
19
|
+
export { moveTarget, stateChildSchema, stateConditionSchema, stateMoveSchema, statesSchema, } from './states.js';
|
|
20
|
+
export { addOnsSchema, namedAddOns, requiresAddOn } from './add-ons.js';
|
|
21
|
+
export { appDocumentSchema, slotMappingSchema } from './documents.js';
|
|
22
|
+
export { shapeConformanceIssues, shapeKey, } from './shapes.js';
|
|
23
|
+
export { addOnSettingRefSchema, settingSourceSchema } from './refs.js';
|
|
24
|
+
export { parseSemverRange, satisfiesSemverRange } from './semver.js';
|
|
14
25
|
export { planInstall, } from './plan.js';
|
|
15
26
|
export { IDENTIFIER_LIMIT, ROLE_SLUG_LIMIT, } from './plan-context.js';
|
|
16
|
-
export { SAMPLE_FORMAT, isoDurationMs, sampleBundleIssues, sampleBundleSchema, sampleDirective, sampleRowSchema, sampleValueSchema, } from './sample.js';
|
|
27
|
+
export { SAMPLE_FORMAT, ROW_DIRECTIVES, byClockSchema, isoDurationMs, sampleBundleIssues, sampleBundleSchema, sampleDirective, sampleRowSchema, sampleValueSchema, } from './sample.js';
|
|
17
28
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAEjD,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAEjD,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GAeb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAkB,MAAM,YAAY,CAAC;AAE/E,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GAIjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAoB,MAAM,cAAc,CAAC;AAEjF,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,GAIb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAA8B,MAAM,oBAAoB,CAAC;AAEvH,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,KAAK,IAAI,YAAY,EACrB,SAAS,EACT,OAAO,GAGR,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,YAAY,GAKb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAmB,MAAM,cAAc,CAAC;AAEzF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAsC,MAAM,gBAAgB,CAAC;AAE1G,OAAO,EACL,sBAAsB,EACtB,QAAQ,GAKT,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAsB,MAAM,WAAW,CAAC;AAE3F,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EACL,WAAW,GASZ,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,eAAe,GAQhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,iBAAiB,GAKlB,MAAM,aAAa,CAAC"}
|