@adminiumjs/manifest 0.3.16 → 0.3.18-rc.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.
- package/dist/adjust.d.ts +322 -0
- package/dist/adjust.d.ts.map +1 -0
- package/dist/adjust.js +512 -0
- package/dist/adjust.js.map +1 -0
- package/dist/automations.d.ts +2309 -0
- package/dist/automations.d.ts.map +1 -0
- package/dist/automations.js +384 -0
- package/dist/automations.js.map +1 -0
- package/dist/compose.d.ts.map +1 -1
- package/dist/compose.js +1 -0
- package/dist/compose.js.map +1 -1
- package/dist/documents.d.ts +82 -1
- package/dist/documents.d.ts.map +1 -1
- package/dist/documents.js +36 -6
- package/dist/documents.js.map +1 -1
- package/dist/index.d.ts +15 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -6
- package/dist/index.js.map +1 -1
- package/dist/key-bytes.d.ts +27 -0
- package/dist/key-bytes.d.ts.map +1 -0
- package/dist/key-bytes.js +48 -0
- package/dist/key-bytes.js.map +1 -0
- package/dist/ledger-indexes.d.ts +19 -0
- package/dist/ledger-indexes.d.ts.map +1 -0
- package/dist/ledger-indexes.js +74 -0
- package/dist/ledger-indexes.js.map +1 -0
- package/dist/ledgers.d.ts +691 -0
- package/dist/ledgers.d.ts.map +1 -0
- package/dist/ledgers.js +778 -0
- package/dist/ledgers.js.map +1 -0
- package/dist/look-up.d.ts +73 -0
- package/dist/look-up.d.ts.map +1 -0
- package/dist/look-up.js +140 -0
- package/dist/look-up.js.map +1 -0
- package/dist/marketplace-wire.d.ts +2 -2
- package/dist/outbox.d.ts +29 -3
- package/dist/outbox.d.ts.map +1 -1
- package/dist/outbox.js +94 -15
- package/dist/outbox.js.map +1 -1
- package/dist/page-config.d.ts +99 -0
- package/dist/page-config.d.ts.map +1 -0
- package/dist/page-config.js +197 -0
- package/dist/page-config.js.map +1 -0
- package/dist/plan-context.d.ts +8 -18
- package/dist/plan-context.d.ts.map +1 -1
- package/dist/plan-context.js +53 -51
- package/dist/plan-context.js.map +1 -1
- package/dist/plan-model.d.ts +8 -1
- package/dist/plan-model.d.ts.map +1 -1
- package/dist/plan.d.ts +1 -1
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +6 -3
- package/dist/plan.js.map +1 -1
- package/dist/public-access.d.ts +33 -5
- package/dist/public-access.d.ts.map +1 -1
- package/dist/public-access.js +82 -4
- package/dist/public-access.js.map +1 -1
- package/dist/refs.d.ts +2 -0
- package/dist/refs.d.ts.map +1 -1
- package/dist/refs.js +5 -0
- package/dist/refs.js.map +1 -1
- package/dist/roles.d.ts +46 -0
- package/dist/roles.d.ts.map +1 -1
- package/dist/roles.js +50 -0
- package/dist/roles.js.map +1 -1
- package/dist/sample.d.ts +70 -1
- package/dist/sample.d.ts.map +1 -1
- package/dist/sample.js +208 -5
- package/dist/sample.js.map +1 -1
- package/dist/schema.d.ts +9657 -2440
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +751 -52
- package/dist/schema.js.map +1 -1
- package/dist/state-actions.d.ts +185 -0
- package/dist/state-actions.d.ts.map +1 -0
- package/dist/state-actions.js +223 -0
- package/dist/state-actions.js.map +1 -0
- package/dist/states.d.ts +66 -0
- package/dist/states.d.ts.map +1 -1
- package/dist/states.js +31 -0
- package/dist/states.js.map +1 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +22 -6
- package/dist/validate.js.map +1 -1
- package/dist/words.d.ts +33 -0
- package/dist/words.d.ts.map +1 -0
- package/dist/words.js +208 -0
- package/dist/words.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
/**
|
|
3
|
+
* THE KEY AND THE INDEXES ADMINIUM MAKES FOR A LEDGER.
|
|
4
|
+
*
|
|
5
|
+
* An add-on declares its receipt table's columns and nothing about how the
|
|
6
|
+
* table is keyed. Adminium derives that itself, from the ledger declaration,
|
|
7
|
+
* so no manifest can get it wrong — and so the one unique key that makes a
|
|
8
|
+
* posting happen once (source, line, posting, phase and round) is always
|
|
9
|
+
* there, on a new table and on one an install reuses:
|
|
10
|
+
*
|
|
11
|
+
* - the receipt table: unique on its six key columns; an index on
|
|
12
|
+
* (`line_table`, `source_line`), which a line's guard reads by; an index
|
|
13
|
+
* on `held_until`, which the timed job scans;
|
|
14
|
+
* - every ledger table an action inserts into: an index on `receipt_id`,
|
|
15
|
+
* which a reverse reads the round's rows by.
|
|
16
|
+
*
|
|
17
|
+
* One function, called by the path that creates the tables and by the
|
|
18
|
+
* planner that edits a reused one. Pure.
|
|
19
|
+
*/
|
|
20
|
+
import { RECEIPT_KEY } from './ledgers.js';
|
|
21
|
+
import { MYSQL_UNIQUE_KEY_BYTES, uniqueSetBytes } from './key-bytes.js';
|
|
22
|
+
import { ledgersOf } from './schema.js';
|
|
23
|
+
/** Every key and index a manifest's ledgers need, each table and column set once, in declaration order. */
|
|
24
|
+
export function ledgerIndexes(manifest) {
|
|
25
|
+
return indexesOf(ledgersOf(manifest));
|
|
26
|
+
}
|
|
27
|
+
function indexesOf(ledgers) {
|
|
28
|
+
const out = [];
|
|
29
|
+
const seen = new Set();
|
|
30
|
+
const add = (table, columns, unique) => {
|
|
31
|
+
const key = `${table}|${columns.join(',')}`;
|
|
32
|
+
if (seen.has(key))
|
|
33
|
+
return;
|
|
34
|
+
seen.add(key);
|
|
35
|
+
out.push({ table, columns: [...columns], unique });
|
|
36
|
+
};
|
|
37
|
+
for (const ledger of ledgers) {
|
|
38
|
+
add(ledger.receipts, RECEIPT_KEY, true);
|
|
39
|
+
add(ledger.receipts, ['line_table', 'source_line'], false);
|
|
40
|
+
add(ledger.receipts, ['held_until'], false);
|
|
41
|
+
for (const [table, scope] of Object.entries(ledger.writes)) {
|
|
42
|
+
if (scope.insert !== undefined)
|
|
43
|
+
add(table, ['receipt_id'], false);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* A receipt key too wide for MySQL to index (3,072 bytes, four a character of
|
|
50
|
+
* text): the widths of its text columns are the add-on's to choose, so the
|
|
51
|
+
* manifest is refused before any database is asked to make the key.
|
|
52
|
+
*/
|
|
53
|
+
export function ledgerIndexIssues(manifest) {
|
|
54
|
+
const out = [];
|
|
55
|
+
const tables = (manifest.requiredSchema?.tables ?? []);
|
|
56
|
+
for (const index of ledgerIndexes(manifest)) {
|
|
57
|
+
if (!index.unique)
|
|
58
|
+
continue;
|
|
59
|
+
const t = tables.findIndex((candidate) => candidate.ref === index.table);
|
|
60
|
+
const table = tables[t];
|
|
61
|
+
if (table === undefined)
|
|
62
|
+
continue;
|
|
63
|
+
const bytes = uniqueSetBytes(index.columns, table, tables);
|
|
64
|
+
if (bytes > MYSQL_UNIQUE_KEY_BYTES) {
|
|
65
|
+
const widths = index.columns.map((ref) => `${ref} ${String(table.columns.find((column) => column.ref === ref)?.maxLength ?? '')}`.trim()).join(', ');
|
|
66
|
+
out.push({
|
|
67
|
+
path: `requiredSchema.tables.${String(t)}.columns`,
|
|
68
|
+
message: `the key of the receipt table "${index.table}" (${widths}) takes ${String(bytes)} bytes, and MySQL indexes at most ${String(MYSQL_UNIQUE_KEY_BYTES)}: shorten its text columns (four bytes a character)`,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return out;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=ledger-indexes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-indexes.js","sourceRoot":"","sources":["../src/ledger-indexes.ts"],"names":[],"mappings":"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"}
|