@graview/core 0.1.63 → 0.1.65
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/catalog.d.ts +32 -2
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +1 -0
- package/dist/catalog.js.map +1 -1
- package/dist/compose.d.ts +25 -1
- package/dist/compose.d.ts.map +1 -1
- package/dist/compose.js +56 -0
- package/dist/compose.js.map +1 -1
- package/dist/conformance/index.d.ts +6 -0
- package/dist/conformance/index.d.ts.map +1 -1
- package/dist/conformance/index.js +3 -0
- package/dist/conformance/index.js.map +1 -1
- package/dist/conformance/plan-host.d.ts +73 -0
- package/dist/conformance/plan-host.d.ts.map +1 -0
- package/dist/conformance/plan-host.js +64 -0
- package/dist/conformance/plan-host.js.map +1 -0
- package/dist/conformance/told-host.d.ts +40 -0
- package/dist/conformance/told-host.d.ts.map +1 -0
- package/dist/conformance/told-host.js +57 -0
- package/dist/conformance/told-host.js.map +1 -0
- package/dist/conformance/view-revision-host.d.ts +36 -0
- package/dist/conformance/view-revision-host.d.ts.map +1 -0
- package/dist/conformance/view-revision-host.js +42 -0
- package/dist/conformance/view-revision-host.js.map +1 -0
- package/dist/document/brand-check.d.ts.map +1 -1
- package/dist/document/brand-check.js +8 -2
- package/dist/document/brand-check.js.map +1 -1
- package/dist/document/connection-findings.js +15 -8
- package/dist/document/connection-findings.js.map +1 -1
- package/dist/document/connection-spec.d.ts +22 -0
- package/dist/document/connection-spec.d.ts.map +1 -1
- package/dist/document/connection-spec.js +24 -2
- package/dist/document/connection-spec.js.map +1 -1
- package/dist/document/edit.js +1 -1
- package/dist/document/edit.js.map +1 -1
- package/dist/document/expr/evaluate.d.ts.map +1 -1
- package/dist/document/expr/evaluate.js +29 -2
- package/dist/document/expr/evaluate.js.map +1 -1
- package/dist/document/schema.d.ts +10 -0
- package/dist/document/schema.d.ts.map +1 -1
- package/dist/document/schema.js +4 -1
- package/dist/document/schema.js.map +1 -1
- package/dist/document.schema.json +45 -2
- package/dist/head.d.ts +81 -0
- package/dist/head.d.ts.map +1 -0
- package/dist/head.js +123 -0
- package/dist/head.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/intelligence-bridge.d.ts +2 -0
- package/dist/intelligence-bridge.d.ts.map +1 -1
- package/dist/plan-edits.d.ts +55 -0
- package/dist/plan-edits.d.ts.map +1 -0
- package/dist/plan-edits.js +84 -0
- package/dist/plan-edits.js.map +1 -0
- package/dist/presence.d.ts +10 -0
- package/dist/presence.d.ts.map +1 -1
- package/dist/presence.js.map +1 -1
- package/dist/revisions/beyond.d.ts +56 -0
- package/dist/revisions/beyond.d.ts.map +1 -0
- package/dist/revisions/beyond.js +112 -0
- package/dist/revisions/beyond.js.map +1 -0
- package/dist/revisions/pictured.d.ts +52 -0
- package/dist/revisions/pictured.d.ts.map +1 -0
- package/dist/revisions/pictured.js +85 -0
- package/dist/revisions/pictured.js.map +1 -0
- package/dist/revisions/problems.d.ts +57 -0
- package/dist/revisions/problems.d.ts.map +1 -0
- package/dist/revisions/problems.js +51 -0
- package/dist/revisions/problems.js.map +1 -0
- package/dist/revisions/sections.d.ts +18 -0
- package/dist/revisions/sections.d.ts.map +1 -0
- package/dist/revisions/sections.js +91 -0
- package/dist/revisions/sections.js.map +1 -0
- package/dist/revisions/view.d.ts +71 -0
- package/dist/revisions/view.d.ts.map +1 -0
- package/dist/revisions/view.js +338 -0
- package/dist/revisions/view.js.map +1 -0
- package/dist/revisions.d.ts +11 -0
- package/dist/revisions.d.ts.map +1 -0
- package/dist/revisions.js +20 -0
- package/dist/revisions.js.map +1 -0
- package/dist/scene.d.ts +2 -2
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +1 -1
- package/dist/scene.js.map +1 -1
- package/dist/sync/connection.d.ts.map +1 -1
- package/dist/sync/connection.js +12 -8
- package/dist/sync/connection.js.map +1 -1
- package/dist/sync/engine.d.ts +14 -0
- package/dist/sync/engine.d.ts.map +1 -1
- package/dist/sync/engine.js +8 -1
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync/index.d.ts +2 -2
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +1 -1
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/notion.d.ts +2 -1
- package/dist/sync/notion.d.ts.map +1 -1
- package/dist/sync/notion.js +28 -16
- package/dist/sync/notion.js.map +1 -1
- package/dist/sync/status.d.ts +1 -1
- package/dist/sync/status.d.ts.map +1 -1
- package/dist/sync/status.js +2 -1
- package/dist/sync/status.js.map +1 -1
- package/dist/sync/types.d.ts +5 -0
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/sync/types.js.map +1 -1
- package/dist/theme/marks.d.ts +12 -0
- package/dist/theme/marks.d.ts.map +1 -1
- package/dist/theme/marks.js +5 -0
- package/dist/theme/marks.js.map +1 -1
- package/dist/told.d.ts +306 -0
- package/dist/told.d.ts.map +1 -0
- package/dist/told.js +409 -0
- package/dist/told.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/views/kept.d.ts +44 -0
- package/dist/views/kept.d.ts.map +1 -1
- package/dist/views/kept.js +30 -0
- package/dist/views/kept.js.map +1 -1
- package/dist/workflow-shape.d.ts +12 -6
- package/dist/workflow-shape.d.ts.map +1 -1
- package/dist/workflow-shape.js.map +1 -1
- package/dist/workflows/on-the-map.d.ts +14 -5
- package/dist/workflows/on-the-map.d.ts.map +1 -1
- package/dist/workflows/on-the-map.js +6 -4
- package/dist/workflows/on-the-map.js.map +1 -1
- package/dist/workflows/step-classify.d.ts +2 -0
- package/dist/workflows/step-classify.d.ts.map +1 -1
- package/dist/workflows/step-classify.js +26 -9
- package/dist/workflows/step-classify.js.map +1 -1
- package/dist/workflows/triggered.d.ts +14 -1
- package/dist/workflows/triggered.d.ts.map +1 -1
- package/dist/workflows/triggered.js +19 -2
- package/dist/workflows/triggered.js.map +1 -1
- package/dist/workflows.d.ts +2 -2
- package/dist/workflows.d.ts.map +1 -1
- package/dist/workflows.js +2 -2
- package/dist/workflows.js.map +1 -1
- package/package.json +13 -1
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { MutationCall } from "../mutations/types.js";
|
|
2
|
+
import type { Principal } from "../permissions/types.js";
|
|
3
|
+
import type { GraviewDocument } from "../document/schema.js";
|
|
4
|
+
import type { AnySchema } from "../schema/schema.js";
|
|
5
|
+
import type { Store } from "../store.js";
|
|
6
|
+
/**
|
|
7
|
+
* A HOST THAT LANDS A PLAN, CHECKED AS GRAVIEW CHECKS ITS OWN (Roadmap
|
|
8
|
+
* f-menu-type-anything). The quick ask offers a missing capability as one
|
|
9
|
+
* plan — the least change to the app and the records that finish the ask —
|
|
10
|
+
* and a host lands it with two functions: `composeChange` (the edits applied
|
|
11
|
+
* to the app's document and judged by the checker: the changed document and
|
|
12
|
+
* its app, or a refusal) and `onProposeChange` (the change and its records
|
|
13
|
+
* applied as the person, as one change, said as the AI's, answered with its
|
|
14
|
+
* one way back, `{ applied: true, undo }`). Graview Cloud runs this against
|
|
15
|
+
* its own host, as the dev server's runs it in this repository: the
|
|
16
|
+
* assign-to-a-person plan, end to end — composed, landed as one change said
|
|
17
|
+
* `via` the AI, every record linked, and one undo taking it all back.
|
|
18
|
+
*/
|
|
19
|
+
/** The host's two functions, and the store it serves now (after a change, the new one). */
|
|
20
|
+
export interface PlanHost {
|
|
21
|
+
composeChange(change: {
|
|
22
|
+
readonly document: GraviewDocument;
|
|
23
|
+
readonly edits: readonly unknown[];
|
|
24
|
+
}): {
|
|
25
|
+
readonly ok: true;
|
|
26
|
+
readonly document: GraviewDocument;
|
|
27
|
+
readonly app: object;
|
|
28
|
+
readonly said: readonly string[];
|
|
29
|
+
} | {
|
|
30
|
+
readonly ok: false;
|
|
31
|
+
readonly refused: string;
|
|
32
|
+
};
|
|
33
|
+
onProposeChange(proposal: {
|
|
34
|
+
readonly said: string;
|
|
35
|
+
readonly add: readonly string[];
|
|
36
|
+
readonly drop: readonly string[];
|
|
37
|
+
readonly card: {
|
|
38
|
+
readonly said: string;
|
|
39
|
+
readonly adds: readonly never[];
|
|
40
|
+
readonly keeps: readonly never[];
|
|
41
|
+
readonly drops: readonly never[];
|
|
42
|
+
readonly breaking: readonly string[];
|
|
43
|
+
};
|
|
44
|
+
readonly edits: readonly unknown[];
|
|
45
|
+
readonly records: readonly MutationCall[];
|
|
46
|
+
readonly via: string;
|
|
47
|
+
}): unknown;
|
|
48
|
+
store(): Store<AnySchema>;
|
|
49
|
+
}
|
|
50
|
+
/** What the check found: each claim, and what failed in words. */
|
|
51
|
+
export interface PlanHostReport {
|
|
52
|
+
readonly ok: boolean;
|
|
53
|
+
readonly claims: {
|
|
54
|
+
readonly composes: boolean;
|
|
55
|
+
readonly appliedAsOneChange: boolean;
|
|
56
|
+
readonly saidAsTheAi: boolean;
|
|
57
|
+
readonly linksEveryRecord: boolean;
|
|
58
|
+
readonly undoTakesItAllBack: boolean;
|
|
59
|
+
};
|
|
60
|
+
readonly said: readonly string[];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Runs the assign-to-a-person plan against `host`: on `kind` of `document`
|
|
64
|
+
* (the app the host serves), each of `members` given to one person — found
|
|
65
|
+
* among the people the app has, else made.
|
|
66
|
+
*/
|
|
67
|
+
export declare function checkPlanHost(host: PlanHost, scenario: {
|
|
68
|
+
readonly document: GraviewDocument;
|
|
69
|
+
readonly kind: string;
|
|
70
|
+
readonly members: readonly string[];
|
|
71
|
+
readonly principal?: Principal;
|
|
72
|
+
}): Promise<PlanHostReport>;
|
|
73
|
+
//# sourceMappingURL=plan-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-host.d.ts","sourceRoot":"","sources":["../../src/conformance/plan-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;;;;;GAYG;AAEH,2FAA2F;AAC3F,MAAM,WAAW,QAAQ;IACvB,aAAa,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAA;KAAE,GAAG;QAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,GAAG;QAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACxQ,eAAe,CAAC,QAAQ,EAAE;QACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;QACjC,QAAQ,CAAC,IAAI,EAAE;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,KAAK,EAAE,CAAC;YAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE,CAAC;YAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE,CAAC;YAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;SAAE,CAAC;QACpL,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;QACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;QAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC;IACZ,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;CAC3B;AAED,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC3B,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;QACrC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;QAC9B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;QACnC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;KACtC,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CA+CzN"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { planEdits } from "../plan-edits.js";
|
|
2
|
+
/**
|
|
3
|
+
* Runs the assign-to-a-person plan against `host`: on `kind` of `document`
|
|
4
|
+
* (the app the host serves), each of `members` given to one person — found
|
|
5
|
+
* among the people the app has, else made.
|
|
6
|
+
*/
|
|
7
|
+
export async function checkPlanHost(host, scenario) {
|
|
8
|
+
const said = [];
|
|
9
|
+
const claims = { composes: false, appliedAsOneChange: false, saidAsTheAi: false, linksEveryRecord: false, undoTakesItAllBack: false };
|
|
10
|
+
const done = () => ({ ok: Object.values(claims).every(Boolean), claims, said });
|
|
11
|
+
const planned = planEdits(scenario.document, { link: { on: scenario.kind, called: "assigned to", to: "person" } });
|
|
12
|
+
if ("refused" in planned)
|
|
13
|
+
return (said.push(`No plan: ${planned.refused}`), done());
|
|
14
|
+
const composed = host.composeChange({ document: scenario.document, edits: planned.edits });
|
|
15
|
+
if (!composed.ok)
|
|
16
|
+
return (said.push(`composeChange refused it: ${composed.refused}`), done());
|
|
17
|
+
claims.composes = true;
|
|
18
|
+
const before = host.store();
|
|
19
|
+
let whom = planned.made ? `${planned.to}-conformance` : before.graph.allNodes().find((node) => node.kind === planned.to)?.id;
|
|
20
|
+
if (!whom)
|
|
21
|
+
return (said.push(`There is nobody of ${planned.to} to give them to.`), done());
|
|
22
|
+
const records = [
|
|
23
|
+
...(planned.made && planned.makes ? [{ name: planned.makes, args: { name: "Conformance person" }, mintedHint: whom }] : []),
|
|
24
|
+
...scenario.members.map((id) => ({ name: planned.act, args: { id, [planned.arg]: whom } })),
|
|
25
|
+
];
|
|
26
|
+
const via = "ai:conformance";
|
|
27
|
+
let answered;
|
|
28
|
+
try {
|
|
29
|
+
answered = await host.onProposeChange({ said: "assign these to the conformance person", add: [], drop: [], card: { said: "", adds: [], keeps: [], drops: [], breaking: [] }, edits: planned.edits, records, via });
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
return (said.push(`onProposeChange threw: ${error instanceof Error ? error.message : String(error)}`), done());
|
|
33
|
+
}
|
|
34
|
+
if (answered === "declined" || answered === undefined)
|
|
35
|
+
return (said.push("onProposeChange declined it."), done());
|
|
36
|
+
const after = host.store();
|
|
37
|
+
const ours = after.log.all().filter((op) => op.via === via);
|
|
38
|
+
claims.saidAsTheAi = ours.length > 0;
|
|
39
|
+
claims.appliedAsOneChange = ours.length > 0 && new Set(ours.map((op) => op.batch)).size === 1;
|
|
40
|
+
if (!claims.saidAsTheAi)
|
|
41
|
+
said.push(`No op of the change says via "${via}".`);
|
|
42
|
+
else if (!claims.appliedAsOneChange)
|
|
43
|
+
said.push("The records landed as more than one change.");
|
|
44
|
+
// The person the records name — made under the hint where the store took it, else under the id it minted.
|
|
45
|
+
const linked = scenario.members.map((id) => after.graph.out(id, planned.relation).map((node) => node.id));
|
|
46
|
+
claims.linksEveryRecord = linked.every((ids) => ids.length === 1 && ids[0] === linked[0][0] && (planned.made ? true : ids[0] === whom));
|
|
47
|
+
if (planned.made && linked[0]?.[0])
|
|
48
|
+
whom = linked[0][0];
|
|
49
|
+
if (!claims.linksEveryRecord)
|
|
50
|
+
said.push("Not every record was linked to the person.");
|
|
51
|
+
const undo = typeof answered === "object" && answered !== null && typeof answered.undo === "function" ? answered.undo : undefined;
|
|
52
|
+
if (!undo)
|
|
53
|
+
return (said.push("onProposeChange answered no way back ({ applied: true, undo })."), done());
|
|
54
|
+
await undo();
|
|
55
|
+
const back = host.store();
|
|
56
|
+
const unlinked = scenario.members.every((id) => back.graph.out(id, planned.relation).length === 0);
|
|
57
|
+
const unmade = !planned.made || back.graph.getNode(whom) === undefined;
|
|
58
|
+
const unchanged = !planned.made || !back.schema.kinds.includes(planned.to);
|
|
59
|
+
claims.undoTakesItAllBack = unlinked && unmade && unchanged;
|
|
60
|
+
if (!claims.undoTakesItAllBack)
|
|
61
|
+
said.push("One undo did not take the app and the records back.");
|
|
62
|
+
return done();
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=plan-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-host.js","sourceRoot":"","sources":["../../src/conformance/plan-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Principal } from "../permissions/types.js";
|
|
2
|
+
import type { ToldStore } from "../told.js";
|
|
3
|
+
/**
|
|
4
|
+
* A HOST THAT KEEPS WHAT PEOPLE TELL GRAVIEW, CHECKED AS GRAVIEW CHECKS ITS
|
|
5
|
+
* OWN (Roadmap f-menu-learns). A host keeps tellings its own way (Graview
|
|
6
|
+
* Cloud per app, `graview serve` in `told.json`) and hands each page a door
|
|
7
|
+
* as its seat (`HostAi.told`); what it must keep the same is who a telling
|
|
8
|
+
* is said to be by, who may change it, and who may read it. Run against the
|
|
9
|
+
* host's door for each seat (`as`): the session's author, never the body's;
|
|
10
|
+
* nothing of a visitor's; a rating only its teller's; another person's
|
|
11
|
+
* words read only once enough people agree; a telling about a record the
|
|
12
|
+
* reader cannot see never served to them; a deleted one gone.
|
|
13
|
+
*/
|
|
14
|
+
export interface ToldHost {
|
|
15
|
+
/** The host's door as this seat would reach it: `toldOver(url, { headers })` with that seat's session, or the host's own. */
|
|
16
|
+
as(seat: Principal): ToldStore;
|
|
17
|
+
}
|
|
18
|
+
export interface ToldHostReport {
|
|
19
|
+
readonly ok: boolean;
|
|
20
|
+
readonly claims: {
|
|
21
|
+
readonly keptAsTheSession: boolean;
|
|
22
|
+
readonly aVisitorsIsNeverKept: boolean;
|
|
23
|
+
readonly onlyItsTellerRatesIt: boolean;
|
|
24
|
+
readonly anotherPersonsWaitsForAgreement: boolean;
|
|
25
|
+
readonly unseenRecordsHideIt: boolean;
|
|
26
|
+
readonly deletedIsGone: boolean;
|
|
27
|
+
};
|
|
28
|
+
readonly said: readonly string[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Runs the claims with three people of the app (`people`: whose tellings
|
|
32
|
+
* are kept and read) — a record each of them sees (`seen`), and, where the
|
|
33
|
+
* app's sight keeps one from `people[0]`, its id (`hidden`).
|
|
34
|
+
*/
|
|
35
|
+
export declare function checkToldHost(host: ToldHost, scenario: {
|
|
36
|
+
readonly people: readonly [Principal, Principal, Principal];
|
|
37
|
+
readonly seen: string;
|
|
38
|
+
readonly hidden?: string;
|
|
39
|
+
}): Promise<ToldHostReport>;
|
|
40
|
+
//# sourceMappingURL=told-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"told-host.d.ts","sourceRoot":"","sources":["../../src/conformance/told-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C;;;;;;;;;;GAUG;AACH,MAAM,WAAW,QAAQ;IACvB,6HAA6H;IAC7H,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;QACnC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;QACvC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;QACvC,QAAQ,CAAC,+BAA+B,EAAE,OAAO,CAAC;QAClD,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;QACtC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;KACjC,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAkDvM"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { tellingOf } from "../told.js";
|
|
2
|
+
/**
|
|
3
|
+
* Runs the claims with three people of the app (`people`: whose tellings
|
|
4
|
+
* are kept and read) — a record each of them sees (`seen`), and, where the
|
|
5
|
+
* app's sight keeps one from `people[0]`, its id (`hidden`).
|
|
6
|
+
*/
|
|
7
|
+
export async function checkToldHost(host, scenario) {
|
|
8
|
+
const said = [];
|
|
9
|
+
const [ada, bo, cy] = scenario.people;
|
|
10
|
+
const stamp = `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 6)}`;
|
|
11
|
+
const draft = (id, extra = {}) => ({
|
|
12
|
+
id: `tl-conformance-${stamp}-${id}`,
|
|
13
|
+
words: "mark these done",
|
|
14
|
+
target: { on: "record", id: scenario.seen },
|
|
15
|
+
decided: { type: "act", act: "conformance", records: 1 },
|
|
16
|
+
outcome: "accepted",
|
|
17
|
+
...extra,
|
|
18
|
+
});
|
|
19
|
+
const listed = async (seat) => [...(await host.as(seat).list())];
|
|
20
|
+
/* Posted as the page would, its body claiming `claimedBy`; a visitor's posted as it stands, since no page makes one. */
|
|
21
|
+
const add = async (seat, one, claimedBy) => host.as(seat).add(tellingOf(one, claimedBy ?? seat) ?? { ...one, by: seat, at: new Date().toISOString(), conversation: one.id });
|
|
22
|
+
const claims = { keptAsTheSession: false, aVisitorsIsNeverKept: false, onlyItsTellerRatesIt: false, anotherPersonsWaitsForAgreement: false, unseenRecordsHideIt: scenario.hidden === undefined, deletedIsGone: false };
|
|
23
|
+
const mine = draft("mine");
|
|
24
|
+
await add(ada, mine, { kind: "human", id: "somebody-else" });
|
|
25
|
+
const kept = (await listed(ada)).find((one) => one.id === mine.id);
|
|
26
|
+
claims.keptAsTheSession = kept?.by.id === ada.id;
|
|
27
|
+
if (!claims.keptAsTheSession)
|
|
28
|
+
said.push(kept ? `A telling posted as ${ada.id} was kept as ${kept.by.id}: the author is the session's, never the body's.` : "A telling posted was not read back by its teller.");
|
|
29
|
+
const visitor = { kind: "visitor", id: `visitor-${stamp}` };
|
|
30
|
+
const theirs = draft("visitor");
|
|
31
|
+
await add(visitor, theirs).catch(() => undefined);
|
|
32
|
+
claims.aVisitorsIsNeverKept = !(await listed(ada)).some((one) => one.id === theirs.id) && !(await listed(bo)).some((one) => one.id === theirs.id);
|
|
33
|
+
if (!claims.aVisitorsIsNeverKept)
|
|
34
|
+
said.push("A visitor's telling was kept.");
|
|
35
|
+
await Promise.resolve(host.as(bo).change(mine.id, { rating: "down" })).catch(() => undefined);
|
|
36
|
+
await host.as(ada).change(mine.id, { rating: "up" });
|
|
37
|
+
claims.onlyItsTellerRatesIt = (await listed(ada)).find((one) => one.id === mine.id)?.rating === "up" && (await listed(ada)).find((one) => one.id === mine.id)?.rating !== "down";
|
|
38
|
+
if (!claims.onlyItsTellerRatesIt)
|
|
39
|
+
said.push("Somebody other than its teller rated a telling, or its teller could not.");
|
|
40
|
+
claims.anotherPersonsWaitsForAgreement = !(await listed(cy)).some((one) => one.id === mine.id);
|
|
41
|
+
if (!claims.anotherPersonsWaitsForAgreement)
|
|
42
|
+
said.push("One person's telling was read by another before anybody else told the app the same.");
|
|
43
|
+
if (scenario.hidden !== undefined) {
|
|
44
|
+
const about = draft("hidden", { target: { on: "record", id: scenario.hidden } });
|
|
45
|
+
await add(ada, about);
|
|
46
|
+
claims.unseenRecordsHideIt = !(await listed(ada)).some((one) => one.id === about.id);
|
|
47
|
+
if (!claims.unseenRecordsHideIt)
|
|
48
|
+
said.push("A telling about a record its reader cannot see was read back to them.");
|
|
49
|
+
await Promise.resolve(host.as(ada).remove(about.id)).catch(() => undefined);
|
|
50
|
+
}
|
|
51
|
+
await host.as(ada).remove(mine.id);
|
|
52
|
+
claims.deletedIsGone = !(await listed(ada)).some((one) => one.id === mine.id);
|
|
53
|
+
if (!claims.deletedIsGone)
|
|
54
|
+
said.push("A telling its teller deleted was still read back.");
|
|
55
|
+
return { ok: Object.values(claims).every(Boolean), claims, said };
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=told-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"told-host.js","sourceRoot":"","sources":["../../src/conformance/told-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { KeptViews } from "../views/kept.js";
|
|
2
|
+
/**
|
|
3
|
+
* A HOST THAT KEEPS A SECTION'S REVISION, CHECKED (Roadmap
|
|
4
|
+
* f-make-this-section-better). "Make this better" on a section of a worker
|
|
5
|
+
* view composes the view whole, judges it on the page, and hands Keep to
|
|
6
|
+
* the host's view door — `KeptViews.revise`, beside hide, show, remove and
|
|
7
|
+
* restore — which keeps it as it keeps a view a chat replaced (Graview
|
|
8
|
+
* Cloud: `propose_view` and `apply_view`), and answers its one way back.
|
|
9
|
+
* This runs a host's door through what the page asks of it: it offers
|
|
10
|
+
* revising only to whoever may change views, keeps the code it was handed,
|
|
11
|
+
* and one Undo — its own `undo`, else the code before handed back — puts
|
|
12
|
+
* the view as it was. A host reads back what it keeps with `read` (its
|
|
13
|
+
* store), else `KeptViews.revised`.
|
|
14
|
+
*/
|
|
15
|
+
export interface ViewRevisionHostReport {
|
|
16
|
+
readonly ok: boolean;
|
|
17
|
+
readonly claims: {
|
|
18
|
+
readonly offersRevising: boolean;
|
|
19
|
+
readonly keepsTheRevision: boolean;
|
|
20
|
+
readonly undoPutsItBack: boolean;
|
|
21
|
+
};
|
|
22
|
+
readonly said: readonly string[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Checks `keeper` with one revision of the view `name` from `before` to
|
|
26
|
+
* `after`, as a seat that may change views; `read` answers the code the
|
|
27
|
+
* host keeps for a view now.
|
|
28
|
+
*/
|
|
29
|
+
export declare function checkViewRevisionHost(keeper: KeptViews, scenario: {
|
|
30
|
+
readonly name: string;
|
|
31
|
+
readonly title?: string;
|
|
32
|
+
readonly before: string;
|
|
33
|
+
readonly after: string;
|
|
34
|
+
readonly read?: (name: string) => string | undefined | Promise<string | undefined>;
|
|
35
|
+
}): Promise<ViewRevisionHostReport>;
|
|
36
|
+
//# sourceMappingURL=view-revision-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-revision-host.d.ts","sourceRoot":"","sources":["../../src/conformance/view-revision-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAC;AAEpE;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;QACjC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;QACnC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;KAClC,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAAE,GAChM,OAAO,CAAC,sBAAsB,CAAC,CA2BjC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks `keeper` with one revision of the view `name` from `before` to
|
|
3
|
+
* `after`, as a seat that may change views; `read` answers the code the
|
|
4
|
+
* host keeps for a view now.
|
|
5
|
+
*/
|
|
6
|
+
export async function checkViewRevisionHost(keeper, scenario) {
|
|
7
|
+
const said = [];
|
|
8
|
+
const claims = { offersRevising: false, keepsTheRevision: false, undoPutsItBack: false };
|
|
9
|
+
const done = () => ({ ok: Object.values(claims).every(Boolean), claims, said });
|
|
10
|
+
const read = scenario.read ?? keeper.revised?.bind(keeper);
|
|
11
|
+
claims.offersRevising = typeof keeper.revise === "function" && keeper.current().may.views === true;
|
|
12
|
+
if (!claims.offersRevising)
|
|
13
|
+
return (said.push(typeof keeper.revise !== "function" ? "The host's views lend no revise: no section is offered for revising." : "current().may.views is not true for this seat: no section is offered for revising."), done());
|
|
14
|
+
if (!read)
|
|
15
|
+
return (said.push("Nothing reads back what the host keeps: pass `read`, or give the views `revised`."), done());
|
|
16
|
+
const base = { name: scenario.name, title: scenario.title ?? scenario.name, section: "Conformance", said: "Revised the section." };
|
|
17
|
+
let answer;
|
|
18
|
+
try {
|
|
19
|
+
answer = await keeper.revise({ ...base, source: scenario.after, before: scenario.before });
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
return (said.push(`revise refused it: ${error instanceof Error ? error.message : String(error)}`), done());
|
|
23
|
+
}
|
|
24
|
+
claims.keepsTheRevision = (await read(scenario.name)) === scenario.after;
|
|
25
|
+
if (!claims.keepsTheRevision)
|
|
26
|
+
said.push("After revise, the host does not keep the code it was handed.");
|
|
27
|
+
try {
|
|
28
|
+
if (answer && typeof answer.undo === "function")
|
|
29
|
+
await answer.undo();
|
|
30
|
+
else
|
|
31
|
+
await keeper.revise({ ...base, source: scenario.before, before: scenario.after, undoes: true });
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
return (said.push(`Undo failed: ${error instanceof Error ? error.message : String(error)}`), done());
|
|
35
|
+
}
|
|
36
|
+
const back = await read(scenario.name);
|
|
37
|
+
claims.undoPutsItBack = back === undefined || back === scenario.before;
|
|
38
|
+
if (!claims.undoPutsItBack)
|
|
39
|
+
said.push("One Undo did not put the view's code back as it was.");
|
|
40
|
+
return done();
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=view-revision-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-revision-host.js","sourceRoot":"","sources":["../../src/conformance/view-revision-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
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,EAAiC,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAG5E,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAUzE,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,8HAA8H;AAC9H,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,
|
|
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,EAAiC,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAG5E,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAUzE,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,8HAA8H;AAC9H,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAOtD;AACD,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,QAA6H,CAAC;AAE5J,eAAO,MAAM,SAAS,sLAAmI,CAAC;AAE1J,gKAAgK;AAChK,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEvD;AACD,qGAAqG;AACrG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAE/E;AACD,qJAAqJ;AACrJ,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAmB3D;AACD,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,CAItE;AACD,eAAO,MAAM,aAAa,4PAAuP,CAAC;AAElR,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,EAAE,CA6E/G"}
|
|
@@ -33,8 +33,10 @@ export function groundWords(ground) {
|
|
|
33
33
|
export function splashSentence(splash) {
|
|
34
34
|
if (!splash || typeof splash !== "object")
|
|
35
35
|
return "The app opens on Graview's own screen.";
|
|
36
|
-
const { style, shader } = splash;
|
|
37
|
-
const
|
|
36
|
+
const { style, shader, scheme } = splash;
|
|
37
|
+
const kind = style === "editorial" ? "editorial screen" : style === "shader" ? `shader screen${typeof shader === "string" ? ` (${shader})` : ""}` : style === "ascii" ? "ASCII screen" : "plain screen";
|
|
38
|
+
const drawn = scheme === "light" || scheme === "dark" ? `${scheme} ${kind}` : kind;
|
|
39
|
+
const how = `${/^[aeiouAEIOU]/.test(drawn) ? "an" : "a"} ${drawn}${scheme === "device" ? " in the reader's own scheme" : ""}`;
|
|
38
40
|
return `The app opens on ${how} while it loads.`;
|
|
39
41
|
}
|
|
40
42
|
/** How a splash's shader is refused, wherever it is judged. */
|
|
@@ -120,6 +122,10 @@ export function brandFindings(brand, options = {}) {
|
|
|
120
122
|
out.push(error("brand-splash-shader", `${at}.splash.shader`, `"${splash.shader}" is not a shader the opening screen ships; a document names one, it never carries one`, SPLASH_SHADER_FIX));
|
|
121
123
|
else if (typeof splash.shader === "string" && splash.style !== "shader")
|
|
122
124
|
out.push(warning("brand-splash-shader", `${at}.splash.shader`, `the shader "${splash.shader}" is never drawn, because the opening screen's style is "${splash.style}"`, 'say "style": "shader", or remove "shader"'));
|
|
125
|
+
// Its scheme where the brand pins none (Roadmap f-splash-follows-declared-scheme): one the brand overrides is said, not kept quiet.
|
|
126
|
+
const pinned = brand.scheme === "light" || brand.scheme === "dark" ? brand.scheme : undefined;
|
|
127
|
+
if (typeof splash.scheme === "string" && pinned && splash.scheme !== pinned)
|
|
128
|
+
out.push(warning("brand-splash-scheme", `${at}.splash.scheme`, `the opening screen is drawn ${pinned}, as the app is, so its own scheme "${splash.scheme}" is never used`, `remove "scheme" from the splash, or say the brand's "scheme": "auto"`));
|
|
123
129
|
}
|
|
124
130
|
/*
|
|
125
131
|
* THE STYLESHEET EVERY VIEW GETS (Roadmap f-app-wide-view-theme), held to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand-check.js","sourceRoot":"","sources":["../../src/document/brand-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAgB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAkB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAmB,MAAM,oBAAoB,CAAC;AAiBzE,qFAAqF;AACrF,MAAM,CAAC,MAAM,oBAAoB,GAAG,qFAAqF,CAAC;AAE1H,4GAA4G;AAC5G,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,OAAe;IAC3D,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,sCAAsC,OAAO,EAAE,CAAC;AAC7I,CAAC;AACD,qHAAqH;AACrH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,KAAK,CAAC,CAAC,CAAC,kEAAkE,CAAC,CAAC,CAAC,gGAAgG,CAAC;AACvL,CAAC;AACD,gGAAgG;AAChG,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,OAAgB;IAC/D,OAAO,OAAO,CAAC,CAAC,CAAC,+BAA+B,KAAK,GAAG,CAAC,CAAC,CAAC,uCAAuC,KAAK,GAAG,CAAC;AAC7G,CAAC;AACD,oGAAoG;AACpG,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACtE,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI;QAAE,OAAO,qCAAqC,KAAK,CAAC,KAAK,SAAS,KAAK,CAAC,IAAI,eAAe,CAAC;IACzH,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,qCAAqC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,iDAAiD,KAAK,CAAC,IAAI,GAAG,CAAC;AAC5I,CAAC;AACD,8HAA8H;AAC9H,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,wCAAwC,CAAC;IAC3F,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"brand-check.js","sourceRoot":"","sources":["../../src/document/brand-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import { NOTION_FITS, NOTION_INFERABLE, NOTION_READ_ONLY, NOTION_SECRET, notionF
|
|
|
8
8
|
import { startAndEndOf } from "../wall-time.js";
|
|
9
9
|
import { weekdayOf } from "../sync/recurrence.js";
|
|
10
10
|
import { error, warning } from "./findings.js";
|
|
11
|
-
import { ConnectionSpec, notionSourcesOf } from "./connection-spec.js";
|
|
11
|
+
import { ConnectionSpec, guestsInField, guestsViaRelation, notionSourcesOf } from "./connection-spec.js";
|
|
12
12
|
/*
|
|
13
13
|
* A DECLARED CONNECTION, JUDGED (`connections.<name>`): what its shape
|
|
14
14
|
* cannot say — that the kind and its fields are this document's and of the
|
|
@@ -95,10 +95,12 @@ function googleConnection(at, name, connection, document, app) {
|
|
|
95
95
|
return [noKind(at, document, connection.kind, "the calendar's events")];
|
|
96
96
|
const typeOf = (field) => kind.fields[field]?.type;
|
|
97
97
|
const weekly = connection.fields.days !== undefined;
|
|
98
|
-
|
|
98
|
+
// The guests in a field are judged where they are named: `"guests": "<field>"`, or `{ "field" }` (request:guests-field-form-takes-max).
|
|
99
|
+
const inField = guestsInField(connection.fields.guests);
|
|
100
|
+
const mapped = Object.entries(connection.fields).flatMap(([theirs, ours]) => (typeof ours === "string" ? [[theirs, ours]] : theirs === "guests" && inField ? [[theirs, inField.field]] : []));
|
|
99
101
|
const seen = new Map();
|
|
100
102
|
for (const [theirs, ours] of mapped) {
|
|
101
|
-
const path = `${at}.fields.${theirs}`;
|
|
103
|
+
const path = `${at}.fields.${theirs}${theirs === "guests" && typeof connection.fields.guests === "object" ? ".field" : ""}`;
|
|
102
104
|
// A computed field (Roadmap f-keep-linked) is worked out here, so it is sent and never read back: an event's words or times, never its guests or weekdays.
|
|
103
105
|
if (!kind.fields[ours] && kind.computed?.[ours] !== undefined && theirs !== "guests" && theirs !== "days") {
|
|
104
106
|
const problem = computedProblem(connection.kind, ours, theirs === "summary" ? "the event's title" : `the event's ${theirs}`, connection.direction);
|
|
@@ -150,8 +152,11 @@ function googleConnection(at, name, connection, document, app) {
|
|
|
150
152
|
if (!weekly && start && end && WHEN.has(start) && WHEN.has(end) && start !== end) {
|
|
151
153
|
findings.push(error("connection-when", `${at}.fields.end`, `${connection.fields.start} is a ${start} and ${connection.fields.end} a ${end}, and an event is all-day or timed at both ends`, "make both dates (all-day events) or both datetimes (timed events)"));
|
|
152
154
|
}
|
|
153
|
-
if (
|
|
154
|
-
findings.push(...
|
|
155
|
+
if (inField)
|
|
156
|
+
findings.push(...guestsCapped(`${at}.fields.guests`, inField.max));
|
|
157
|
+
const viaRelation = guestsViaRelation(connection.fields.guests);
|
|
158
|
+
if (viaRelation)
|
|
159
|
+
findings.push(...guestsVia(at, name, connection, viaRelation, kind, document, app));
|
|
155
160
|
const filter = connection.filter;
|
|
156
161
|
if (filter) {
|
|
157
162
|
if (filter.color && filter.tag)
|
|
@@ -290,6 +295,10 @@ function notionSource(at, connection, source, document, app) {
|
|
|
290
295
|
const holdsAddresses = (spec) => spec.type === "email" || (spec.type === "list" && (spec.of === undefined || spec.of === "string"));
|
|
291
296
|
/** The fix that adds a list of addresses to a kind, as an edit a host applies. */
|
|
292
297
|
const addressesField = (kind, field, label) => ({ label, edits: [{ op: "add-field", kind, field, type: "list", of: "string" }] });
|
|
298
|
+
/** The cap is a count of guests: a whole number above 0, or no cap at all (Roadmap f-sync-guest-changes-in-history) — in a field's form as in a relation's. */
|
|
299
|
+
function guestsCapped(path, max) {
|
|
300
|
+
return max !== undefined && !(Number.isInteger(max) && max > 0) ? [error("connection-guests-max", `${path}.max`, `max is the most guests one event invites, a whole number above 0, and it is ${max}`, "say a whole number above 0, or leave max out to invite everyone")] : [];
|
|
301
|
+
}
|
|
293
302
|
/**
|
|
294
303
|
* THE GUESTS THROUGH A RELATION, JUDGED (Roadmap f-calendar-guests-mapping):
|
|
295
304
|
* that `via` is one relation of the kind to one kind, that the kind it
|
|
@@ -313,9 +322,7 @@ function guestsVia(at, name, connection, guests, kind, document, app) {
|
|
|
313
322
|
}
|
|
314
323
|
const reached = edge.to[0];
|
|
315
324
|
const people = document.kinds[reached];
|
|
316
|
-
|
|
317
|
-
const max = guests.max;
|
|
318
|
-
const capped = max !== undefined && !(Number.isInteger(max) && max > 0) ? [error("connection-guests-max", `${path}.max`, `max is the most guests one event invites, a whole number above 0, and it is ${max}`, "say a whole number above 0, or leave max out to invite everyone")] : [];
|
|
325
|
+
const capped = guestsCapped(path, guests.max);
|
|
319
326
|
if (capped.length > 0 && !people)
|
|
320
327
|
return capped;
|
|
321
328
|
// A relation to a kind that is not there is the document's finding, said once where the relation is.
|