@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.
Files changed (90) hide show
  1. package/dist/adjust.d.ts +322 -0
  2. package/dist/adjust.d.ts.map +1 -0
  3. package/dist/adjust.js +512 -0
  4. package/dist/adjust.js.map +1 -0
  5. package/dist/automations.d.ts +2309 -0
  6. package/dist/automations.d.ts.map +1 -0
  7. package/dist/automations.js +384 -0
  8. package/dist/automations.js.map +1 -0
  9. package/dist/compose.d.ts.map +1 -1
  10. package/dist/compose.js +1 -0
  11. package/dist/compose.js.map +1 -1
  12. package/dist/documents.d.ts +82 -1
  13. package/dist/documents.d.ts.map +1 -1
  14. package/dist/documents.js +36 -6
  15. package/dist/documents.js.map +1 -1
  16. package/dist/index.d.ts +15 -6
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +15 -6
  19. package/dist/index.js.map +1 -1
  20. package/dist/key-bytes.d.ts +27 -0
  21. package/dist/key-bytes.d.ts.map +1 -0
  22. package/dist/key-bytes.js +48 -0
  23. package/dist/key-bytes.js.map +1 -0
  24. package/dist/ledger-indexes.d.ts +19 -0
  25. package/dist/ledger-indexes.d.ts.map +1 -0
  26. package/dist/ledger-indexes.js +74 -0
  27. package/dist/ledger-indexes.js.map +1 -0
  28. package/dist/ledgers.d.ts +691 -0
  29. package/dist/ledgers.d.ts.map +1 -0
  30. package/dist/ledgers.js +778 -0
  31. package/dist/ledgers.js.map +1 -0
  32. package/dist/look-up.d.ts +73 -0
  33. package/dist/look-up.d.ts.map +1 -0
  34. package/dist/look-up.js +140 -0
  35. package/dist/look-up.js.map +1 -0
  36. package/dist/marketplace-wire.d.ts +2 -2
  37. package/dist/outbox.d.ts +29 -3
  38. package/dist/outbox.d.ts.map +1 -1
  39. package/dist/outbox.js +94 -15
  40. package/dist/outbox.js.map +1 -1
  41. package/dist/page-config.d.ts +99 -0
  42. package/dist/page-config.d.ts.map +1 -0
  43. package/dist/page-config.js +197 -0
  44. package/dist/page-config.js.map +1 -0
  45. package/dist/plan-context.d.ts +8 -18
  46. package/dist/plan-context.d.ts.map +1 -1
  47. package/dist/plan-context.js +53 -51
  48. package/dist/plan-context.js.map +1 -1
  49. package/dist/plan-model.d.ts +8 -1
  50. package/dist/plan-model.d.ts.map +1 -1
  51. package/dist/plan.d.ts +1 -1
  52. package/dist/plan.d.ts.map +1 -1
  53. package/dist/plan.js +6 -3
  54. package/dist/plan.js.map +1 -1
  55. package/dist/public-access.d.ts +33 -5
  56. package/dist/public-access.d.ts.map +1 -1
  57. package/dist/public-access.js +82 -4
  58. package/dist/public-access.js.map +1 -1
  59. package/dist/refs.d.ts +2 -0
  60. package/dist/refs.d.ts.map +1 -1
  61. package/dist/refs.js +5 -0
  62. package/dist/refs.js.map +1 -1
  63. package/dist/roles.d.ts +46 -0
  64. package/dist/roles.d.ts.map +1 -1
  65. package/dist/roles.js +50 -0
  66. package/dist/roles.js.map +1 -1
  67. package/dist/sample.d.ts +70 -1
  68. package/dist/sample.d.ts.map +1 -1
  69. package/dist/sample.js +208 -5
  70. package/dist/sample.js.map +1 -1
  71. package/dist/schema.d.ts +9657 -2440
  72. package/dist/schema.d.ts.map +1 -1
  73. package/dist/schema.js +751 -52
  74. package/dist/schema.js.map +1 -1
  75. package/dist/state-actions.d.ts +185 -0
  76. package/dist/state-actions.d.ts.map +1 -0
  77. package/dist/state-actions.js +223 -0
  78. package/dist/state-actions.js.map +1 -0
  79. package/dist/states.d.ts +66 -0
  80. package/dist/states.d.ts.map +1 -1
  81. package/dist/states.js +31 -0
  82. package/dist/states.js.map +1 -1
  83. package/dist/validate.d.ts.map +1 -1
  84. package/dist/validate.js +22 -6
  85. package/dist/validate.js.map +1 -1
  86. package/dist/words.d.ts +33 -0
  87. package/dist/words.d.ts.map +1 -0
  88. package/dist/words.js +208 -0
  89. package/dist/words.js.map +1 -0
  90. 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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"}