@graview/core 0.1.52 → 0.1.54

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 (73) hide show
  1. package/dist/archived-seen.d.ts +51 -15
  2. package/dist/archived-seen.d.ts.map +1 -1
  3. package/dist/archived-seen.js +123 -28
  4. package/dist/archived-seen.js.map +1 -1
  5. package/dist/capabilities.js +1 -1
  6. package/dist/capabilities.js.map +1 -1
  7. package/dist/document/brand-check.d.ts +3 -0
  8. package/dist/document/brand-check.d.ts.map +1 -1
  9. package/dist/document/brand-check.js +21 -2
  10. package/dist/document/brand-check.js.map +1 -1
  11. package/dist/document/brand.d.ts.map +1 -1
  12. package/dist/document/brand.js +10 -2
  13. package/dist/document/brand.js.map +1 -1
  14. package/dist/document/compile-checked.js +2 -2
  15. package/dist/document/compile-checked.js.map +1 -1
  16. package/dist/document/diff.js +1 -1
  17. package/dist/document/diff.js.map +1 -1
  18. package/dist/document/edit.d.ts.map +1 -1
  19. package/dist/document/edit.js +24 -2
  20. package/dist/document/edit.js.map +1 -1
  21. package/dist/document/schema.d.ts +8 -0
  22. package/dist/document/schema.d.ts.map +1 -1
  23. package/dist/document/schema.js +14 -0
  24. package/dist/document/schema.js.map +1 -1
  25. package/dist/document.schema.json +24 -2
  26. package/dist/graph/graph.d.ts.map +1 -1
  27. package/dist/graph/graph.js +20 -0
  28. package/dist/graph/graph.js.map +1 -1
  29. package/dist/history.d.ts +32 -0
  30. package/dist/history.d.ts.map +1 -1
  31. package/dist/history.js.map +1 -1
  32. package/dist/import/rows.d.ts.map +1 -1
  33. package/dist/import/rows.js +143 -54
  34. package/dist/import/rows.js.map +1 -1
  35. package/dist/index.d.ts +6 -2
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +3 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/past.d.ts +37 -2
  40. package/dist/past.d.ts.map +1 -1
  41. package/dist/past.js +73 -13
  42. package/dist/past.js.map +1 -1
  43. package/dist/seat.d.ts +3 -2
  44. package/dist/seat.d.ts.map +1 -1
  45. package/dist/seat.js +3 -2
  46. package/dist/seat.js.map +1 -1
  47. package/dist/store.d.ts +11 -0
  48. package/dist/store.d.ts.map +1 -1
  49. package/dist/store.js +19 -1
  50. package/dist/store.js.map +1 -1
  51. package/dist/subscriptions.d.ts +5 -0
  52. package/dist/subscriptions.d.ts.map +1 -1
  53. package/dist/subscriptions.js +46 -1
  54. package/dist/subscriptions.js.map +1 -1
  55. package/dist/theme/accent.d.ts +8 -6
  56. package/dist/theme/accent.d.ts.map +1 -1
  57. package/dist/theme/accent.js +29 -23
  58. package/dist/theme/accent.js.map +1 -1
  59. package/dist/theme/ground-check.d.ts +27 -0
  60. package/dist/theme/ground-check.d.ts.map +1 -0
  61. package/dist/theme/ground-check.js +81 -0
  62. package/dist/theme/ground-check.js.map +1 -0
  63. package/dist/theme/ground.d.ts +42 -0
  64. package/dist/theme/ground.d.ts.map +1 -0
  65. package/dist/theme/ground.js +101 -0
  66. package/dist/theme/ground.js.map +1 -0
  67. package/dist/version.d.ts +1 -1
  68. package/dist/version.js +1 -1
  69. package/dist/views/types.d.ts +14 -1
  70. package/dist/views/types.d.ts.map +1 -1
  71. package/dist/views/types.js +5 -4
  72. package/dist/views/types.js.map +1 -1
  73. package/package.json +4 -2
@@ -6,23 +6,29 @@
6
6
  * the records the seat may see, the fields its sight shows of them, the
7
7
  * links between them, and who made only those.
8
8
  *
9
- * WHY THE WHOLE HISTORY. A compacted store's seat view judges from the
10
- * checkpoint and the tail: the checkpoint keeps what kind each record
11
- * removed behind the horizon was (FR-199), which is enough for the graph
12
- * and the tail, but an archived op is judged at its own moment — who it
13
- * touched, linked and named then, and who had written each field — which
14
- * only the ops before it say. So the seat is judged here
15
- * over a store of everything: the archive's ops from seq 0, the store's
16
- * tail after them, every epoch, and the graph as it stands now — the same
17
- * judgment the seat's live log is served by, so the past it folds from
18
- * these epochs and ops meets the present it is served.
9
+ * WHY FROM WHERE THE ARCHIVE BEGINS. A compacted store's seat view judges
10
+ * from the checkpoint and the tail: the checkpoint keeps what kind each
11
+ * record removed behind the horizon was (FR-199), which is enough for the
12
+ * graph and the tail, but an archived op is judged at its own moment — who
13
+ * it touched, linked and named then, and who had written each field —
14
+ * which only the ops before it say. So the seat is judged here over a
15
+ * store of everything the archive holds: its ops from where it begins, the
16
+ * store's tail after them, every epoch, and the graph as it stands now —
17
+ * the same judgment the seat's live log is served by, so the past it folds
18
+ * from these epochs and ops meets the present it is served.
19
+ *
20
+ * An archive begins at seq 0, or AT AN EPOCH (FR-214) that keeps what was
21
+ * removed behind it and who wrote what (`removed`, `writers`): a host that
22
+ * keeps a plan's window of history makes one where the window begins
23
+ * (`archiveFrom`), deletes what lies behind it and keeps the one epoch, and
24
+ * the ops after it are judged as a compacted store judges its tail.
19
25
  *
20
26
  * Apart from the store and the page: a host's server reads it, so it is on
21
27
  * `@graview/core/seat`, and imports nothing of the store's or the seat
22
28
  * view's modules — it makes the whole store with the store's own class.
23
29
  */
24
30
  import type { ArchivedOps } from "./history.js";
25
- import type { Epoch } from "./ops/log.js";
31
+ import type { Epoch, LogArchive } from "./ops/log.js";
26
32
  import type { Operation } from "./ops/types.js";
27
33
  import type { Principal } from "./permissions/types.js";
28
34
  import type { AnySchema } from "./schema/schema.js";
@@ -33,13 +39,21 @@ export interface ArchivedSeen {
33
39
  readonly ops: readonly Operation[];
34
40
  /** The epochs whose seq is in the range, each with its graph as the seat is served it. */
35
41
  readonly epochs: readonly Epoch[];
42
+ /**
43
+ * WHERE THE ARCHIVE BEGINS, when the range reaches behind it (FR-214):
44
+ * the seq of the epoch it begins at, before which it holds no op — the
45
+ * answer's `ArchivedOps.keptFrom`, so playback steps the past behind it
46
+ * by the epochs it kept rather than say it was refused.
47
+ */
48
+ readonly keptFrom?: number;
36
49
  }
37
50
  /**
38
51
  * THE ARCHIVE OF A RANGE AS ONE SEAT MAY SEE IT (FR-198): for seqs `from`
39
52
  * up to but not including `to`, the ops and the epochs `archive` holds —
40
53
  * what `store.compact` returned, every compaction's together, with its ops
41
- * from seq 0 to the store's horizon — judged for `principal` under the
42
- * store's policy and modules as its view of the whole history judges:
54
+ * from seq 0 (or from the epoch it begins at, FR-214) to the store's
55
+ * horizon — judged for `principal` under the store's policy and modules as
56
+ * its view of the whole history judges:
43
57
  *
44
58
  * - every op of the range at its seq, one that touched what the seat may
45
59
  * not see withheld and none naming such a record anywhere (FR-16,
@@ -54,11 +68,33 @@ export interface ArchivedSeen {
54
68
  * The answer is a `HistoryHost.archived` answer, and a seat's playback
55
69
  * folding from its epochs draws only what the seat may see. `store` is the
56
70
  * app as it stands, compacted or not (a seat's view is read as the store
57
- * behind it). An archive with a gap behind the horizon is refused, since
58
- * what the gap held could not be judged.
71
+ * behind it). A range that reaches behind the epoch an archive begins at
72
+ * is answered with no op there and `keptFrom`, the epoch's seq, with the
73
+ * epochs before it that keep what was removed behind them, each judged on
74
+ * its own. An archive with a gap and no such epoch after it is refused,
75
+ * since what the gap held could not be judged.
59
76
  */
60
77
  export declare function archivedSeenBy<S extends AnySchema>(store: Store<S>, archive: ArchivedOps, principal: Principal, range: {
61
78
  readonly from: number;
62
79
  readonly to: number;
63
80
  }): ArchivedSeen;
81
+ /**
82
+ * THE ARCHIVE FROM AN EPOCH AT `seq` (FR-214): what a host keeps when it
83
+ * keeps a plan's window of history — the epoch the app stood at there,
84
+ * keeping who made each record behind it, what each record removed behind
85
+ * it was and who wrote each field naming a record (`creators`, `removed`,
86
+ * `writers`, FR-199), then the ops and the epochs `archive` holds from it
87
+ * to the store's horizon. Everything behind it can be deleted: an archive
88
+ * that begins at the epoch serves a seat every range after it as the whole
89
+ * one did (`archivedSeenBy`), and makes the same epoch again later.
90
+ *
91
+ * `seq` is any seq from where `archive` begins to the store's horizon,
92
+ * moved back to the start of the gesture it would split, as a checkpoint
93
+ * is (`store.checkpoint`); the epoch says where it landed. At the horizon
94
+ * it is the store's own checkpoint made again from the archive — how a
95
+ * host mends a checkpoint written before it kept `removed` and `writers`.
96
+ * Before the epoch an archive begins at, what made the records is gone,
97
+ * and it is refused.
98
+ */
99
+ export declare function archiveFrom<S extends AnySchema>(store: Store<S>, archive: ArchivedOps, seq: number): LogArchive;
64
100
  //# sourceMappingURL=archived-seen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"archived-seen.d.ts","sourceRoot":"","sources":["../src/archived-seen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAU,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,YAAY,CAAC;AAEtD,0JAA0J;AAC1J,MAAM,WAAW,YAAY;IAC3B,+HAA+H;IAC/H,QAAQ,CAAC,GAAG,EAAE,SAAS,SAAS,EAAE,CAAC;IACnC,0FAA0F;IAC1F,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;CACnC;AA+ED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAWpL"}
1
+ {"version":3,"file":"archived-seen.d.ts","sourceRoot":"","sources":["../src/archived-seen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAU,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,YAAY,CAAC;AAEtD,0JAA0J;AAC1J,MAAM,WAAW,YAAY;IAC3B,+HAA+H;IAC/H,QAAQ,CAAC,GAAG,EAAE,SAAS,SAAS,EAAE,CAAC;IACnC,0FAA0F;IAC1F,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AA8HD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAgBpL;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAmB/G"}
@@ -9,12 +9,39 @@ const unmarked = (epoch) => {
9
9
  return rest;
10
10
  };
11
11
  /**
12
- * THE STORE OF EVERYTHING: the archive's ops behind the horizon, which must
13
- * reach back to seq 0 without a gap — a record made and removed in a gap
14
- * would be judged by nothing — then the store's tail, every epoch, and the
15
- * graph the store holds now.
12
+ * WHERE AN ARCHIVE BEGINS (FR-214): seq 0 when its ops reach back there
13
+ * without a gap; else the earliest epoch it holds that keeps what was
14
+ * removed behind it (`removed`, FR-199) and from which its ops reach the
15
+ * horizon without one. An archive with neither is refused, naming the
16
+ * newest change missing: a record made and removed there would be judged
17
+ * by nothing.
16
18
  */
17
- function wholeOf(store, archive) {
19
+ function beginningOf(archive, horizon) {
20
+ const behind = new Map();
21
+ for (const op of archive.ops)
22
+ if (Number.isInteger(op?.seq) && op.seq >= 0 && op.seq < horizon && !behind.has(op.seq))
23
+ behind.set(op.seq, op);
24
+ let reached = horizon;
25
+ while (reached > 0 && behind.has(reached - 1))
26
+ reached--;
27
+ if (reached === 0)
28
+ return { seq: 0, epoch: undefined, behind };
29
+ const epoch = (archive.epochs ?? [])
30
+ .filter((one) => Number.isInteger(one?.seq) && one.seq >= reached && one.seq <= horizon && one.base && one.removed !== undefined)
31
+ .sort((a, b) => a.seq - b.seq)[0];
32
+ if (!epoch) {
33
+ throw new RangeError(`The archive is missing the change at seq ${reached - 1}, and no epoch after it keeps what was removed behind it: a seat's view of the archive is judged from where it begins, and without it a record made and removed there could be named to a seat that may not see it`);
34
+ }
35
+ return { seq: epoch.seq, epoch, behind };
36
+ }
37
+ /**
38
+ * THE STORE OF EVERYTHING THE ARCHIVE HOLDS: its ops from where it begins
39
+ * — seq 0, or the epoch that keeps what lay behind it, which the store
40
+ * begins at as a compacted store begins at its checkpoint — then the
41
+ * store's tail, every epoch after the beginning, and the graph the store
42
+ * holds now.
43
+ */
44
+ function wholeOf(store, archive, validate = false) {
18
45
  const log = store.log;
19
46
  const horizon = log.horizon;
20
47
  const tail = log.all();
@@ -22,27 +49,23 @@ function wholeOf(store, archive) {
22
49
  if (!kept)
23
50
  WHOLE.set(archive, (kept = new WeakMap()));
24
51
  const held = kept.get(store);
25
- if (held && held.length === log.length && held.horizon === horizon && held.last === tail.at(-1))
52
+ if (held && held.length === log.length && held.horizon === horizon && held.last === tail.at(-1) && held.validate === validate)
26
53
  return held.store;
27
- const behind = new Map();
28
- for (const op of archive.ops)
29
- if (Number.isInteger(op?.seq) && op.seq >= 0 && op.seq < horizon && !behind.has(op.seq))
30
- behind.set(op.seq, op);
54
+ const begins = beginningOf(archive, horizon);
31
55
  const ops = [];
32
- for (let seq = 0; seq < horizon; seq++) {
33
- const op = behind.get(seq);
34
- if (!op) {
35
- throw new RangeError(`The archive is missing the change at seq ${seq}: a seat's view of the archive is judged from the whole history, and without it a record made and removed there could be named to a seat that may not see it`);
36
- }
37
- ops.push(op);
38
- }
56
+ for (let seq = begins.seq; seq < horizon; seq++)
57
+ ops.push(begins.behind.get(seq));
39
58
  ops.push(...tail);
40
59
  const epochs = new Map();
60
+ // The epoch it begins at is its checkpoint, as a compacted store's is: what was removed and written behind it is judged by.
61
+ if (begins.epoch)
62
+ epochs.set(begins.seq, { ...begins.epoch, horizon: true });
41
63
  for (const epoch of archive.epochs ?? [])
42
- if (Number.isInteger(epoch?.seq) && epoch.seq < horizon && epoch.base && !epochs.has(epoch.seq))
64
+ if (Number.isInteger(epoch?.seq) && epoch.seq >= begins.seq && epoch.seq < horizon && epoch.base && !epochs.has(epoch.seq))
43
65
  epochs.set(epoch.seq, unmarked(epoch));
44
66
  for (const epoch of log.epochs())
45
- epochs.set(epoch.seq, unmarked(epoch));
67
+ if (!begins.epoch || epoch.seq > begins.seq)
68
+ epochs.set(epoch.seq, unmarked(epoch));
46
69
  const inside = store;
47
70
  // The store's own class, so this module imports none of it (`seat-of.ts` says why).
48
71
  const Made = store.constructor;
@@ -58,18 +81,39 @@ function wholeOf(store, archive) {
58
81
  log: ops,
59
82
  epochs: [...epochs.values()].sort((a, b) => a.seq - b.seq),
60
83
  snapshot: store.graph.snapshot(),
61
- validate: false,
84
+ validate,
62
85
  now: inside.now,
63
86
  });
64
- kept.set(store, { length: log.length, horizon, last: tail.at(-1), store: whole });
87
+ kept.set(store, { length: log.length, horizon, last: tail.at(-1), validate, store: whole });
65
88
  return whole;
66
89
  }
90
+ /** An epoch behind where the archive begins, as the seat is served it: judged on its own, as a store opened on it alone judges it. One that keeps no `removed` cannot be, and is left out. */
91
+ function servedAlone(store, epoch, principal) {
92
+ if (epoch.removed === undefined)
93
+ return undefined;
94
+ const inside = store;
95
+ const Made = store.constructor;
96
+ const alone = new Made({
97
+ schema: store.schema,
98
+ ...given("policy", store.policy),
99
+ ...given("modules", inside.declaredModules),
100
+ ...given("enabledModules", inside.startingModules),
101
+ principal: inside.by,
102
+ log: [],
103
+ epochs: [{ ...epoch, horizon: true }],
104
+ snapshot: epoch.base,
105
+ validate: false,
106
+ now: inside.now,
107
+ });
108
+ return unmarked(alone.seenBy(principal).log.epochs()[0]);
109
+ }
67
110
  /**
68
111
  * THE ARCHIVE OF A RANGE AS ONE SEAT MAY SEE IT (FR-198): for seqs `from`
69
112
  * up to but not including `to`, the ops and the epochs `archive` holds —
70
113
  * what `store.compact` returned, every compaction's together, with its ops
71
- * from seq 0 to the store's horizon — judged for `principal` under the
72
- * store's policy and modules as its view of the whole history judges:
114
+ * from seq 0 (or from the epoch it begins at, FR-214) to the store's
115
+ * horizon — judged for `principal` under the store's policy and modules as
116
+ * its view of the whole history judges:
73
117
  *
74
118
  * - every op of the range at its seq, one that touched what the seat may
75
119
  * not see withheld and none naming such a record anywhere (FR-16,
@@ -84,8 +128,11 @@ function wholeOf(store, archive) {
84
128
  * The answer is a `HistoryHost.archived` answer, and a seat's playback
85
129
  * folding from its epochs draws only what the seat may see. `store` is the
86
130
  * app as it stands, compacted or not (a seat's view is read as the store
87
- * behind it). An archive with a gap behind the horizon is refused, since
88
- * what the gap held could not be judged.
131
+ * behind it). A range that reaches behind the epoch an archive begins at
132
+ * is answered with no op there and `keptFrom`, the epoch's seq, with the
133
+ * epochs before it that keep what was removed behind them, each judged on
134
+ * its own. An archive with a gap and no such epoch after it is refused,
135
+ * since what the gap held could not be judged.
89
136
  */
90
137
  export function archivedSeenBy(store, archive, principal, range) {
91
138
  const seat = seatOf(store);
@@ -95,10 +142,58 @@ export function archivedSeenBy(store, archive, principal, range) {
95
142
  if (!Number.isInteger(from) || !Number.isInteger(to) || from < 0 || to < from)
96
143
  throw new RangeError(`No range from seq ${from} to seq ${to}`);
97
144
  const view = wholeOf(store, archive).seenBy(principal);
145
+ const begins = view.log.horizon;
98
146
  const ops = view.log.all();
99
- return {
100
- ops: ops.slice(Math.min(from, ops.length), Math.min(to, ops.length)),
101
- epochs: view.log.epochs().filter((epoch) => epoch.seq >= from && epoch.seq < to),
147
+ const at = (seq) => Math.min(Math.max(seq - begins, 0), ops.length);
148
+ const epochs = view.log.epochs().filter((epoch) => epoch.seq >= from && epoch.seq < to);
149
+ if (from >= begins)
150
+ return { ops: ops.slice(at(from), at(to)), epochs };
151
+ const earlier = (archive.epochs ?? [])
152
+ .filter((epoch) => Number.isInteger(epoch?.seq) && epoch.seq >= from && epoch.seq < Math.min(to, begins) && epoch.base)
153
+ .sort((a, b) => a.seq - b.seq)
154
+ .flatMap((epoch) => servedAlone(store, epoch, principal) ?? []);
155
+ return { ops: ops.slice(at(from), at(to)), epochs: [...earlier, ...epochs], keptFrom: begins };
156
+ }
157
+ /**
158
+ * THE ARCHIVE FROM AN EPOCH AT `seq` (FR-214): what a host keeps when it
159
+ * keeps a plan's window of history — the epoch the app stood at there,
160
+ * keeping who made each record behind it, what each record removed behind
161
+ * it was and who wrote each field naming a record (`creators`, `removed`,
162
+ * `writers`, FR-199), then the ops and the epochs `archive` holds from it
163
+ * to the store's horizon. Everything behind it can be deleted: an archive
164
+ * that begins at the epoch serves a seat every range after it as the whole
165
+ * one did (`archivedSeenBy`), and makes the same epoch again later.
166
+ *
167
+ * `seq` is any seq from where `archive` begins to the store's horizon,
168
+ * moved back to the start of the gesture it would split, as a checkpoint
169
+ * is (`store.checkpoint`); the epoch says where it landed. At the horizon
170
+ * it is the store's own checkpoint made again from the archive — how a
171
+ * host mends a checkpoint written before it kept `removed` and `writers`.
172
+ * Before the epoch an archive begins at, what made the records is gone,
173
+ * and it is refused.
174
+ */
175
+ export function archiveFrom(store, archive, seq) {
176
+ const seat = seatOf(store);
177
+ if (seat)
178
+ return archiveFrom(seat.store, archive, seq);
179
+ const horizon = store.log.horizon;
180
+ if (!Number.isInteger(seq) || seq < 0 || seq > horizon)
181
+ throw new RangeError(`No epoch at seq ${seq}: an archive holds the seqs before the horizon at seq ${horizon}`);
182
+ // Folded as the store folds a checkpoint it makes, so a default filled in on the way in is in the epoch.
183
+ const whole = wholeOf(store, archive, store.validate);
184
+ const begins = whole.log.horizon;
185
+ if (seq < begins)
186
+ throw new RangeError(`The archive begins at seq ${begins}: no epoch before it can be made, since what made the records there is gone`);
187
+ // Where the archive begins is its own beginning: the epoch that keeps all it must, or the app before anything was made.
188
+ const beginning = () => {
189
+ if (begins > 0)
190
+ return whole.log.epochs()[0];
191
+ const { creators: _creators, removed: _removed, writers: _writers, ...start } = whole.log.checkpointAt(whole.schema, 0, { validate: store.validate });
192
+ return { ...start, removed: {} };
102
193
  };
194
+ const epoch = (seq > begins ? whole.checkpoint({ seq }) : undefined) ?? beginning();
195
+ const ops = [...beginningOf(archive, horizon).behind.values()].filter((op) => op.seq >= epoch.seq).sort((a, b) => a.seq - b.seq);
196
+ const epochs = (archive.epochs ?? []).filter((one) => Number.isInteger(one?.seq) && one.seq > epoch.seq && one.seq < horizon && one.base).sort((a, b) => a.seq - b.seq);
197
+ return { ops, epochs: [epoch, ...epochs] };
103
198
  }
104
199
  //# sourceMappingURL=archived-seen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"archived-seen.js","sourceRoot":"","sources":["../src/archived-seen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archived-seen.js","sourceRoot":"","sources":["../src/archived-seen.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ export const WIRE_PROTOCOL = 1;
17
17
  * id is named in the changeset that shipped it; `capabilities.test.ts`
18
18
  * holds the two lists to each other.
19
19
  */
20
- const SHIPPED = ["FR-01", "FR-02", "FR-03", "FR-04", "FR-05", "FR-06", "FR-07", "FR-08", "FR-09", "FR-10", "FR-11", "FR-12", "FR-13", "FR-15", "FR-16", "FR-17", "FR-18", "FR-19", "FR-20", "FR-21", "FR-22", "FR-23", "FR-24", "FR-25", "FR-26", "FR-27", "FR-28", "FR-29", "FR-30", "FR-31", "FR-32", "FR-33", "FR-34", "FR-35", "FR-36", "FR-37", "FR-38", "FR-39", "FR-40", "FR-41", "FR-42", "FR-43", "FR-44", "FR-45", "FR-46", "FR-47", "FR-49", "FR-50", "FR-51", "FR-52", "FR-53", "FR-54", "FR-55", "FR-56", "FR-57", "FR-58", "FR-59", "FR-60", "FR-61", "FR-62", "FR-63", "FR-64", "FR-65", "FR-66", "FR-67", "FR-68", "FR-69", "FR-70", "FR-71", "FR-72", "FR-73", "FR-74", "FR-75", "FR-76", "FR-77", "FR-78", "FR-79", "FR-80", "FR-81", "FR-82", "FR-83", "FR-84", "FR-85", "FR-86", "FR-87", "FR-88", "FR-89", "FR-90", "FR-91", "FR-92", "FR-93", "FR-94", "FR-95", "FR-96", "FR-97", "FR-99", "FR-100", "FR-101", "FR-102", "FR-103", "FR-104", "FR-105", "FR-106", "FR-107", "FR-108", "FR-109", "FR-110", "FR-111", "FR-112", "FR-113", "FR-114", "FR-115", "FR-116", "FR-117", "FR-118", "FR-119", "FR-120", "FR-121", "FR-122", "FR-123", "FR-124", "FR-125", "FR-126", "FR-127", "FR-128", "FR-129", "FR-130", "FR-131", "FR-132", "FR-133", "FR-134", "FR-136", "FR-137", "FR-138", "FR-139", "FR-140", "FR-141", "FR-142", "FR-143", "FR-144", "FR-145", "FR-146", "FR-147", "FR-148", "FR-149", "FR-150", "FR-151", "FR-152", "FR-153", "FR-154", "FR-155", "FR-156", "FR-157", "FR-158", "FR-159", "FR-160", "FR-161", "FR-162", "FR-163", "FR-164", "FR-165", "FR-166", "FR-167", "FR-168", "FR-169", "FR-170", "FR-171", "FR-172", "FR-173", "FR-174", "FR-175", "FR-176", "FR-177", "FR-178", "FR-179", "FR-180", "FR-181", "FR-182", "FR-183", "FR-184", "FR-185", "FR-186", "FR-187", "FR-188", "FR-189", "FR-190", "FR-191", "FR-192", "FR-193", "FR-194", "FR-195", "FR-196", "FR-197", "FR-198", "FR-199"];
20
+ const SHIPPED = ["FR-01", "FR-02", "FR-03", "FR-04", "FR-05", "FR-06", "FR-07", "FR-08", "FR-09", "FR-10", "FR-11", "FR-12", "FR-13", "FR-15", "FR-16", "FR-17", "FR-18", "FR-19", "FR-20", "FR-21", "FR-22", "FR-23", "FR-24", "FR-25", "FR-26", "FR-27", "FR-28", "FR-29", "FR-30", "FR-31", "FR-32", "FR-33", "FR-34", "FR-35", "FR-36", "FR-37", "FR-38", "FR-39", "FR-40", "FR-41", "FR-42", "FR-43", "FR-44", "FR-45", "FR-46", "FR-47", "FR-49", "FR-50", "FR-51", "FR-52", "FR-53", "FR-54", "FR-55", "FR-56", "FR-57", "FR-58", "FR-59", "FR-60", "FR-61", "FR-62", "FR-63", "FR-64", "FR-65", "FR-66", "FR-67", "FR-68", "FR-69", "FR-70", "FR-71", "FR-72", "FR-73", "FR-74", "FR-75", "FR-76", "FR-77", "FR-78", "FR-79", "FR-80", "FR-81", "FR-82", "FR-83", "FR-84", "FR-85", "FR-86", "FR-87", "FR-88", "FR-89", "FR-90", "FR-91", "FR-92", "FR-93", "FR-94", "FR-95", "FR-96", "FR-97", "FR-99", "FR-100", "FR-101", "FR-102", "FR-103", "FR-104", "FR-105", "FR-106", "FR-107", "FR-108", "FR-109", "FR-110", "FR-111", "FR-112", "FR-113", "FR-114", "FR-115", "FR-116", "FR-117", "FR-118", "FR-119", "FR-120", "FR-121", "FR-122", "FR-123", "FR-124", "FR-125", "FR-126", "FR-127", "FR-128", "FR-129", "FR-130", "FR-131", "FR-132", "FR-133", "FR-134", "FR-136", "FR-137", "FR-138", "FR-139", "FR-140", "FR-141", "FR-142", "FR-143", "FR-144", "FR-145", "FR-146", "FR-147", "FR-148", "FR-149", "FR-150", "FR-151", "FR-152", "FR-153", "FR-154", "FR-155", "FR-156", "FR-157", "FR-158", "FR-159", "FR-160", "FR-161", "FR-162", "FR-163", "FR-164", "FR-165", "FR-166", "FR-167", "FR-168", "FR-169", "FR-170", "FR-171", "FR-172", "FR-173", "FR-174", "FR-175", "FR-176", "FR-177", "FR-178", "FR-179", "FR-180", "FR-181", "FR-182", "FR-183", "FR-184", "FR-185", "FR-186", "FR-187", "FR-188", "FR-189", "FR-190", "FR-191", "FR-192", "FR-193", "FR-194", "FR-195", "FR-196", "FR-197", "FR-198", "FR-199", "FR-200", "FR-201", "FR-202", "FR-204", "FR-205", "FR-206", "FR-207", "FR-209", "FR-210", "FR-211", "FR-212", "FR-213", "FR-214"];
21
21
  /**
22
22
  * The declaration-document formats `@graview/core/document` parses, as
23
23
  * `<format>@<version>`. Said here rather than imported, so the main entry
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAE/B;;;;;;GAMG;AACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAEx1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,oBAAoB,CAAU,CAAC;AAqBhE,oGAAoG;AACpG,MAAM,UAAU,YAAY;IAC1B,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;AAClJ,CAAC"}
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { Ground } from "../theme/ground.js";
1
2
  import { type Finding } from "./findings.js";
2
3
  import type { BrandSpec } from "./schema.js";
3
4
  export interface BrandCheckOptions {
@@ -14,6 +15,8 @@ export declare function emojiSentence(emoji: unknown, problem: string): string;
14
15
  export declare function subtitleSentence(drawn: boolean): string;
15
16
  /** What setting an emoji icon does, said the same by an edit and by the preview of a change. */
16
17
  export declare function emojiIconSentence(emoji: string, hasLogo: boolean): string;
18
+ /** What setting a page background does, said the same by an edit and by the preview of a change. */
19
+ export declare function groundWords(ground: Ground): string;
17
20
  export declare const EMOJI_FIX = "say { \"favicon\": { \"emoji\": \"\uD83C\uDFE1\" } } with one standard emoji; a skin tone, a flag or a joined emoji like \uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDF3E counts as one";
18
21
  export declare function brandFindings(brand: Partial<BrandSpec> | undefined, options?: BrandCheckOptions): Finding[];
19
22
  //# sourceMappingURL=brand-check.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"brand-check.d.ts","sourceRoot":"","sources":["../../src/document/brand-check.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAW7C,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,wFAAwF,CAAC;AAE1H,4GAA4G;AAC5G,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAErE;AACD,qHAAqH;AACrH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEvD;AACD,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAEzE;AACD,eAAO,MAAM,SAAS,sLAAmI,CAAC;AAE1J,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,EAAE,CAkC/G"}
1
+ {"version":3,"file":"brand-check.d.ts","sourceRoot":"","sources":["../../src/document/brand-check.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAW7C,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,wFAAwF,CAAC;AAE1H,4GAA4G;AAC5G,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAErE;AACD,qHAAqH;AACrH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEvD;AACD,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAEzE;AACD,oGAAoG;AACpG,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIlD;AACD,eAAO,MAAM,SAAS,sLAAmI,CAAC;AAE1J,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,EAAE,CA6C/G"}
@@ -1,5 +1,6 @@
1
1
  import { TIME_ZONE_FIX, timeZoneProblem } from "../days.js";
2
2
  import { accentProblem, documentSchemes } from "../theme/accent.js";
3
+ import { groundProblem } from "../theme/ground-check.js";
3
4
  import { fontProblem } from "../theme/fonts.js";
4
5
  import { emojiProblem, markProblem } from "../theme/marks.js";
5
6
  import { error, warning } from "./findings.js";
@@ -18,6 +19,13 @@ export function subtitleSentence(drawn) {
18
19
  export function emojiIconSentence(emoji, hasLogo) {
19
20
  return hasLogo ? `The app's page icon becomes ${emoji}.` : `The app's page icon and mark become ${emoji}.`;
20
21
  }
22
+ /** What setting a page background does, said the same by an edit and by the preview of a change. */
23
+ export function groundWords(ground) {
24
+ const given = typeof ground === "string" ? { light: ground } : ground;
25
+ if (given.light && given.dark)
26
+ return `The app's page background becomes ${given.light}, and ${given.dark} in the dark.`;
27
+ return given.light ? `The app's page background becomes ${given.light}.` : `The app's page background in the dark becomes ${given.dark}.`;
28
+ }
21
29
  export const EMOJI_FIX = 'say { "favicon": { "emoji": "🏡" } } with one standard emoji; a skin tone, a flag or a joined emoji like 👩🏽‍🌾 counts as one';
22
30
  export function brandFindings(brand, options = {}) {
23
31
  const out = [];
@@ -51,10 +59,21 @@ export function brandFindings(brand, options = {}) {
51
59
  const unzoned = typeof brand.timeZone === "string" ? timeZoneProblem(brand.timeZone) : undefined;
52
60
  if (unzoned)
53
61
  out.push(error("brand-time-zone", `${at}.timeZone`, unzoned, TIME_ZONE_FIX));
62
+ /*
63
+ * A page background (Roadmap f-brand-ground) is judged as an accent is:
64
+ * the pair that would not read, its ratio, and a shade that would. A
65
+ * ground refused leaves the accent judged on Graview's.
66
+ */
67
+ const ground = brand.ground ? groundProblem(brand.ground, brand.accent) : null;
68
+ if (brand.ground && ground) {
69
+ const fix = ground.suggestion ? `say { "ground": ${typeof brand.ground === "string" ? `"${ground.suggestion}"` : JSON.stringify({ ...brand.ground, [ground.scheme]: ground.suggestion }).replace(/,/g, ", ").replace(/:/g, ": ")} }` : "pick another color";
70
+ out.push(warning("brand-ground", `${at}.ground`, `${ground.sentence} The app keeps Graview's page background.`, fix));
71
+ }
72
+ const on = brand.ground && !ground ? brand.ground : undefined;
54
73
  if (brand.accent) {
55
- const refused = accentProblem(brand.accent);
74
+ const refused = accentProblem(brand.accent, on);
56
75
  if (refused) {
57
- const drawn = documentSchemes(brand.accent).ok ? "The app draws a shade it moved to read, not the color given." : "The app keeps Graview's colors.";
76
+ const drawn = documentSchemes(brand.accent, on).ok ? "The app draws a shade it moved to read, not the color given." : "The app keeps Graview's colors.";
58
77
  out.push(warning("brand-accent", `${at}.accent`, `${refused.sentence} ${drawn}`, refused.suggestion ? `say { "accent": "${refused.suggestion}" }` : "pick another color"));
59
78
  }
60
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"brand-check.js","sourceRoot":"","sources":["../../src/document/brand-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brand-check.js","sourceRoot":"","sources":["../../src/document/brand-check.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/document/brand.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAYnD,wBAAgB,OAAO,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CA+B7E;AAED,qJAAqJ;AACrJ,wBAAgB,OAAO,CAAC,QAAQ,EAAE,eAAe,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAG5G"}
1
+ {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/document/brand.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAYnD,wBAAgB,OAAO,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAsC7E;AAED,qJAAqJ;AACrJ,wBAAgB,OAAO,CAAC,QAAQ,EAAE,eAAe,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAG5G"}
@@ -1,5 +1,6 @@
1
1
  import { SCHEMES } from "../theme/palettes.js";
2
2
  import { documentSchemes } from "../theme/accent.js";
3
+ import { groundFailure, groundSchemes } from "../theme/ground.js";
3
4
  import { stackOf } from "../theme/fonts.js";
4
5
  import { warning } from "./findings.js";
5
6
  import { logoParts } from "./logo.js";
@@ -15,7 +16,14 @@ import { logoParts } from "./logo.js";
15
16
  */
16
17
  export function brandOf(document, findings) {
17
18
  const spec = document.brand ?? {};
18
- const derived = spec.accent ? documentSchemes(spec.accent) : undefined;
19
+ // A page background words would not read on is left off, as an unreadable accent is (Roadmap f-brand-ground).
20
+ let ground = spec.ground;
21
+ let derived = spec.accent ? documentSchemes(spec.accent, ground) : undefined;
22
+ if (ground && groundFailure(derived?.ok ? derived.schemes : groundSchemes(ground), spec.accent)) {
23
+ findings.push(warning("brand", "brand.ground", "words would not read on that page background, so the app keeps Graview's", "pick a lighter ground for the light scheme, a darker one for the dark"));
24
+ ground = undefined;
25
+ derived = spec.accent ? documentSchemes(spec.accent) : undefined;
26
+ }
19
27
  // A color that cannot be read is not a reason to refuse an app: it wears the default colors and says why.
20
28
  // The checker says which pair, its ratio and a shade that would pass (brand-check.ts, FR-126); a page says only this.
21
29
  if (derived && !derived.ok)
@@ -30,7 +38,7 @@ export function brandOf(document, findings) {
30
38
  : undefined;
31
39
  return {
32
40
  name,
33
- schemes: derived?.ok ? derived.schemes : SCHEMES,
41
+ schemes: derived?.ok ? derived.schemes : ground ? groundSchemes(ground) : SCHEMES,
34
42
  ...(spec.currency ? { currency: spec.currency } : {}),
35
43
  ...(spec.locale ? { locale: spec.locale } : {}),
36
44
  ...(spec.timeZone ? { timeZone: spec.timeZone } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../src/document/brand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../src/document/brand.ts"],"names":[],"mappings":"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"}
@@ -40,8 +40,8 @@ export function compileDocument(raw, options = {}) {
40
40
  if (hasErrors(own))
41
41
  return { ok: false, findings: [...compiled.findings, ...own] };
42
42
  // Braces in a block's plain words (FR-99): asked here, with the checker, and not of a page that compiles without it.
43
- // The checker's sentence for an accent (FR-126) says what the compile's did, and more: once is enough.
44
- const said = own.some((f) => f.code === "brand-accent") ? compiled.findings.filter((f) => !(f.code === "brand" && f.path === "brand.accent")) : compiled.findings;
43
+ // The checker's sentence for an accent (FR-126) or a ground says what the compile's did, and more: once is enough.
44
+ const said = compiled.findings.filter((f) => !(f.code === "brand" && ((f.path === "brand.accent" && own.some((o) => o.code === "brand-accent")) || (f.path === "brand.ground" && own.some((o) => o.code === "brand-ground")))));
45
45
  const findings = [...said, ...own, ...viewBraces(document.views, "views", undefined, document.lenses)];
46
46
  const check = checkApp(app, options.views ? { views: options.views } : {});
47
47
  for (const f of check.findings) {
@@ -1 +1 @@
1
- {"version":3,"file":"compile-checked.js","sourceRoot":"","sources":["../../src/document/compile-checked.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compile-checked.js","sourceRoot":"","sources":["../../src/document/compile-checked.ts"],"names":[],"mappings":"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"}
@@ -180,7 +180,7 @@ export function diffDocuments(stored, proposed) {
180
180
  sentences.push(`The ${noun} "${b[n].title ?? n}" changes.`);
181
181
  }
182
182
  sentences.push(...policySentences(before, after));
183
- if (!same(before.brand?.accent, after.brand?.accent))
183
+ if (!same(before.brand?.accent, after.brand?.accent) || !same(before.brand?.ground, after.brand?.ground))
184
184
  sentences.push("The app's colors change.");
185
185
  sentences.push(...brandSentences(before.brand ?? {}, after.brand ?? {}, after.name));
186
186
  // The app's money (FR-100) and its locale (FR-178), said apart from its colors.