@adminiumjs/manifest 0.3.0-rc.2 → 0.3.0-rc.4
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/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/plan-context.d.ts +51 -0
- package/dist/plan-context.d.ts.map +1 -0
- package/dist/plan-context.js +356 -0
- package/dist/plan-context.js.map +1 -0
- package/dist/plan-model.d.ts +197 -0
- package/dist/plan-model.d.ts.map +1 -0
- package/dist/plan-model.js +11 -0
- package/dist/plan-model.js.map +1 -0
- package/dist/plan-types.d.ts +12 -0
- package/dist/plan-types.d.ts.map +1 -0
- package/dist/plan-types.js +71 -0
- package/dist/plan-types.js.map +1 -0
- package/dist/plan.d.ts +9 -79
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +85 -1
- package/dist/plan.js.map +1 -1
- package/dist/sample.d.ts +100 -0
- package/dist/sample.d.ts.map +1 -0
- package/dist/sample.js +147 -0
- package/dist/sample.js.map +1 -0
- package/dist/schema.d.ts +992 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +498 -3
- package/dist/schema.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sample.d.ts","sourceRoot":"","sources":["../src/sample.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,eAAO,MAAM,aAAa,sBAAsB,CAAC;AAsBjD,gGAAgG;AAChG,eAAO,MAAM,iBAAiB;;;;;;;;;;;wFAAuF,CAAC;AAEtH,eAAO,MAAM,eAAe;;;;;;;;;;;yFAA0C,CAAC;AAEvE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;kBAWpB,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,2CAA2C;AAC3C,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAC1C;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC,IAAI,CAaP;AAED,4CAA4C;AAC5C,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUtD;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,GAAG,WAAW,EAAE,CA0D1F"}
|
package/dist/sample.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
/**
|
|
3
|
+
* `adminium.sample/1` — an app's sample data, shipped in its package and named
|
|
4
|
+
* by the manifest's `sampleData.file`.
|
|
5
|
+
*
|
|
6
|
+
* Rows are written in the order the tables are listed, parents first, and
|
|
7
|
+
* removed in reverse. A value is a plain JSON value or one of five directives:
|
|
8
|
+
*
|
|
9
|
+
* `{"@ref": "<label>"}` the key of an earlier row with that `@label`
|
|
10
|
+
* `{"@ago": "PT19M"}` an ISO-8601 duration before now
|
|
11
|
+
* `{"@day": -1, "@time": "09:30"}` a wall time in the venue's own zone,
|
|
12
|
+
* days from today
|
|
13
|
+
* `{"@t": {"en-US": "…"}}` the adding person's language
|
|
14
|
+
* `{"@asset": "<label>"}` a file from `assets`, added to the Files library
|
|
15
|
+
*
|
|
16
|
+
* Pure: a format and its checks, no I/O. The server resolves the directives.
|
|
17
|
+
*/
|
|
18
|
+
import { z } from 'zod';
|
|
19
|
+
export const SAMPLE_FORMAT = 'adminium.sample/1';
|
|
20
|
+
const label = z.string().regex(/^[A-Za-z0-9][A-Za-z0-9:._-]{0,95}$/, 'a label of letters, digits and : . _ -');
|
|
21
|
+
/** `P[nW][nD][T[nH][nM][nS]]`, with at least one part. */
|
|
22
|
+
const ISO_DURATION = /^P(?!$)(\d+W)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+(\.\d+)?S)?)?$/;
|
|
23
|
+
const directive = z.union([
|
|
24
|
+
z.object({ '@ref': label }).strict(),
|
|
25
|
+
z.object({ '@ago': z.string().regex(ISO_DURATION, 'an ISO-8601 duration such as PT19M') }).strict(),
|
|
26
|
+
z
|
|
27
|
+
.object({
|
|
28
|
+
'@day': z.number().int().min(-366).max(366),
|
|
29
|
+
'@time': z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/, 'a time such as 09:30'),
|
|
30
|
+
})
|
|
31
|
+
.strict(),
|
|
32
|
+
z.object({ '@t': z.record(z.string().regex(/^[a-z]{2}(-[A-Z]{2})?$/), z.string()).refine((m) => Object.keys(m).length > 0) }).strict(),
|
|
33
|
+
z.object({ '@asset': label }).strict(),
|
|
34
|
+
]);
|
|
35
|
+
const plain = z.union([z.string(), z.number(), z.boolean(), z.null()]);
|
|
36
|
+
/** A column's value: a plain value, a directive, or (for a json column) any object or array. */
|
|
37
|
+
export const sampleValueSchema = z.union([plain, directive, z.array(z.unknown()), z.record(z.string(), z.unknown())]);
|
|
38
|
+
export const sampleRowSchema = z.record(z.string(), sampleValueSchema);
|
|
39
|
+
export const sampleBundleSchema = z
|
|
40
|
+
.object({
|
|
41
|
+
format: z.literal(SAMPLE_FORMAT),
|
|
42
|
+
app: z.string().min(1),
|
|
43
|
+
assets: z
|
|
44
|
+
.record(label, z.object({ file: z.string().regex(/^seeds\/[a-z0-9][a-z0-9._/-]*$/), sha256: z.string().regex(/^[a-f0-9]{64}$/) }).strict())
|
|
45
|
+
.default({}),
|
|
46
|
+
tables: z
|
|
47
|
+
.array(z.object({ ref: z.string().min(1), rows: z.array(sampleRowSchema).min(1).max(5000) }).strict())
|
|
48
|
+
.min(1),
|
|
49
|
+
})
|
|
50
|
+
.strict();
|
|
51
|
+
/** A value's directive, when it is one. */
|
|
52
|
+
export function sampleDirective(value) {
|
|
53
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
54
|
+
return null;
|
|
55
|
+
const record = value;
|
|
56
|
+
if (typeof record['@ref'] === 'string')
|
|
57
|
+
return { kind: 'ref', label: record['@ref'] };
|
|
58
|
+
if (typeof record['@ago'] === 'string')
|
|
59
|
+
return { kind: 'ago', duration: record['@ago'] };
|
|
60
|
+
if (typeof record['@day'] === 'number' && typeof record['@time'] === 'string') {
|
|
61
|
+
return { kind: 'wall', day: record['@day'], time: record['@time'] };
|
|
62
|
+
}
|
|
63
|
+
if (typeof record['@t'] === 'object' && record['@t'] !== null) {
|
|
64
|
+
return { kind: 't', texts: record['@t'] };
|
|
65
|
+
}
|
|
66
|
+
if (typeof record['@asset'] === 'string')
|
|
67
|
+
return { kind: 'asset', label: record['@asset'] };
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
/** An ISO-8601 duration in milliseconds. */
|
|
71
|
+
export function isoDurationMs(duration) {
|
|
72
|
+
const match = ISO_DURATION.exec(duration);
|
|
73
|
+
if (match === null)
|
|
74
|
+
throw new Error(`"${duration}" is not an ISO-8601 duration`);
|
|
75
|
+
const n = (part) => (part === undefined ? 0 : Number.parseFloat(part));
|
|
76
|
+
const weeks = n(match[1]);
|
|
77
|
+
const days = n(match[2]);
|
|
78
|
+
const hours = n(match[4]);
|
|
79
|
+
const minutes = n(match[5]);
|
|
80
|
+
const seconds = n(match[6]);
|
|
81
|
+
return ((((weeks * 7 + days) * 24 + hours) * 60 + minutes) * 60 + seconds) * 1000;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Everything wrong with a bundle for this manifest: a table it does not
|
|
85
|
+
* declare, a column the table does not have, a label used twice, a `@ref` to
|
|
86
|
+
* a row that comes later or not at all, an `@asset` it does not list.
|
|
87
|
+
*/
|
|
88
|
+
export function sampleBundleIssues(bundle, manifest) {
|
|
89
|
+
const issues = [];
|
|
90
|
+
if (bundle.app !== manifest.key) {
|
|
91
|
+
issues.push({ path: 'app', message: `The bundle is for "${bundle.app}", not "${manifest.key}".` });
|
|
92
|
+
}
|
|
93
|
+
const declared = new Map((manifest.requiredSchema?.tables ?? []).map((table) => [table.ref, table]));
|
|
94
|
+
const seen = new Set();
|
|
95
|
+
for (const [t, table] of bundle.tables.entries()) {
|
|
96
|
+
const shape = declared.get(table.ref);
|
|
97
|
+
if (shape === undefined) {
|
|
98
|
+
issues.push({ path: `tables.${String(t)}.ref`, message: `"${table.ref}" is not a table this app declares.` });
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
const columns = new Set(shape.columns.map((column) => column.ref));
|
|
102
|
+
for (const [r, row] of table.rows.entries()) {
|
|
103
|
+
const at = `tables.${String(t)}.rows.${String(r)}`;
|
|
104
|
+
for (const [column, value] of Object.entries(row)) {
|
|
105
|
+
if (column === '@label') {
|
|
106
|
+
if (typeof value !== 'string' || !label.safeParse(value).success) {
|
|
107
|
+
issues.push({ path: `${at}.@label`, message: 'A label is letters, digits and : . _ -.' });
|
|
108
|
+
}
|
|
109
|
+
else if (seen.has(value)) {
|
|
110
|
+
issues.push({ path: `${at}.@label`, message: `The label "${value}" is used twice.` });
|
|
111
|
+
}
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (!columns.has(column)) {
|
|
115
|
+
issues.push({ path: `${at}.${column}`, message: `"${table.ref}" has no column "${column}".` });
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
// An object that looks like a directive must BE one: a malformed
|
|
119
|
+
// `@ago` would otherwise be written into the column as JSON.
|
|
120
|
+
if (typeof value === 'object' &&
|
|
121
|
+
value !== null &&
|
|
122
|
+
!Array.isArray(value) &&
|
|
123
|
+
Object.keys(value).some((key) => key.startsWith('@')) &&
|
|
124
|
+
!directive.safeParse(value).success) {
|
|
125
|
+
issues.push({ path: `${at}.${column}`, message: `"${column}" holds a directive that is not well formed.` });
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
const found = sampleDirective(value);
|
|
129
|
+
if (found?.kind === 'ref' && !seen.has(found.label)) {
|
|
130
|
+
issues.push({
|
|
131
|
+
path: `${at}.${column}`,
|
|
132
|
+
message: `"${found.label}" is not an earlier row: a referenced row must come first.`,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
if (found?.kind === 'asset' && bundle.assets[found.label] === undefined) {
|
|
136
|
+
issues.push({ path: `${at}.${column}`, message: `"${found.label}" is not one of the bundle’s assets.` });
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Labelled AFTER its own values are checked: a row cannot refer to itself.
|
|
140
|
+
const own = row['@label'];
|
|
141
|
+
if (typeof own === 'string')
|
|
142
|
+
seen.add(own);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return issues;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=sample.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sample.js","sourceRoot":"","sources":["../src/sample.ts"],"names":[],"mappings":"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"}
|