@graview/core 0.1.61 → 0.1.63
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/README.md +13 -1
- package/dist/app-places.d.ts.map +1 -1
- package/dist/app-places.js +2 -2
- package/dist/app-places.js.map +1 -1
- package/dist/app.d.ts +22 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js.map +1 -1
- package/dist/arranging.js +2 -2
- package/dist/arranging.js.map +1 -1
- package/dist/capabilities.js +1 -1
- package/dist/capabilities.js.map +1 -1
- package/dist/cli/check/hidden-reads.d.ts.map +1 -1
- package/dist/cli/check/hidden-reads.js +26 -0
- package/dist/cli/check/hidden-reads.js.map +1 -1
- package/dist/cli/check/index.d.ts +2 -0
- package/dist/cli/check/index.d.ts.map +1 -1
- package/dist/cli/check/index.js +2 -0
- package/dist/cli/check/index.js.map +1 -1
- package/dist/cli/check/tidying.d.ts +14 -0
- package/dist/cli/check/tidying.d.ts.map +1 -0
- package/dist/cli/check/tidying.js +24 -0
- package/dist/cli/check/tidying.js.map +1 -0
- package/dist/cli/check/workflows.d.ts +11 -0
- package/dist/cli/check/workflows.d.ts.map +1 -0
- package/dist/cli/check/workflows.js +20 -0
- package/dist/cli/check/workflows.js.map +1 -0
- package/dist/cli/check.d.ts.map +1 -1
- package/dist/cli/check.js +3 -1
- package/dist/cli/check.js.map +1 -1
- package/dist/cli/describe.d.ts.map +1 -1
- package/dist/cli/describe.js +45 -2
- package/dist/cli/describe.js.map +1 -1
- package/dist/cli/document-schema.d.ts.map +1 -1
- package/dist/cli/document-schema.js +15 -2
- package/dist/cli/document-schema.js.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/compose.d.ts +11 -3
- package/dist/compose.d.ts.map +1 -1
- package/dist/compose.js +12 -2
- package/dist/compose.js.map +1 -1
- package/dist/css/sanitize.d.ts +125 -0
- package/dist/css/sanitize.d.ts.map +1 -0
- package/dist/css/sanitize.js +989 -0
- package/dist/css/sanitize.js.map +1 -0
- package/dist/css/tables.d.ts +55 -0
- package/dist/css/tables.d.ts.map +1 -0
- package/dist/css/tables.js +137 -0
- package/dist/css/tables.js.map +1 -0
- package/dist/css.d.ts +20 -0
- package/dist/css.d.ts.map +1 -0
- package/dist/css.js +19 -0
- package/dist/css.js.map +1 -0
- package/dist/days.d.ts +15 -0
- package/dist/days.d.ts.map +1 -1
- package/dist/days.js +21 -0
- package/dist/days.js.map +1 -1
- package/dist/describe.d.ts +1 -1
- package/dist/describe.d.ts.map +1 -1
- package/dist/document/act-findings.d.ts.map +1 -1
- package/dist/document/act-findings.js +80 -1
- package/dist/document/act-findings.js.map +1 -1
- package/dist/document/amount.d.ts +1 -1
- package/dist/document/amount.d.ts.map +1 -1
- package/dist/document/amount.js +2 -2
- package/dist/document/amount.js.map +1 -1
- package/dist/document/blocks.d.ts.map +1 -1
- package/dist/document/blocks.js +17 -1
- package/dist/document/blocks.js.map +1 -1
- package/dist/document/brand-check.d.ts +15 -1
- package/dist/document/brand-check.d.ts.map +1 -1
- package/dist/document/brand-check.js +80 -0
- package/dist/document/brand-check.js.map +1 -1
- package/dist/document/brand.d.ts.map +1 -1
- package/dist/document/brand.js +2 -0
- package/dist/document/brand.js.map +1 -1
- package/dist/document/compile-checked.d.ts.map +1 -1
- package/dist/document/compile-checked.js +5 -2
- package/dist/document/compile-checked.js.map +1 -1
- package/dist/document/compile.d.ts.map +1 -1
- package/dist/document/compile.js +96 -16
- package/dist/document/compile.js.map +1 -1
- package/dist/document/compiled.d.ts +32 -3
- package/dist/document/compiled.d.ts.map +1 -1
- package/dist/document/compiled.js +123 -12
- package/dist/document/compiled.js.map +1 -1
- package/dist/document/connection-findings.js +165 -22
- package/dist/document/connection-findings.js.map +1 -1
- package/dist/document/connection-spec.d.ts +38 -1
- package/dist/document/connection-spec.d.ts.map +1 -1
- package/dist/document/connection-spec.js +71 -7
- package/dist/document/connection-spec.js.map +1 -1
- package/dist/document/covers.d.ts +48 -0
- package/dist/document/covers.d.ts.map +1 -0
- package/dist/document/covers.js +90 -0
- package/dist/document/covers.js.map +1 -0
- package/dist/document/derives-findings.d.ts +4 -0
- package/dist/document/derives-findings.d.ts.map +1 -0
- package/dist/document/derives-findings.js +68 -0
- package/dist/document/derives-findings.js.map +1 -0
- package/dist/document/describe-forms.js +2 -2
- package/dist/document/describe-forms.js.map +1 -1
- package/dist/document/describe-place.d.ts +3 -0
- package/dist/document/describe-place.d.ts.map +1 -1
- package/dist/document/describe-place.js +11 -0
- package/dist/document/describe-place.js.map +1 -1
- package/dist/document/described.d.ts +28 -0
- package/dist/document/described.d.ts.map +1 -1
- package/dist/document/diff.d.ts +6 -0
- package/dist/document/diff.d.ts.map +1 -1
- package/dist/document/diff.js +53 -2
- package/dist/document/diff.js.map +1 -1
- package/dist/document/edit.d.ts +1 -1
- package/dist/document/edit.d.ts.map +1 -1
- package/dist/document/edit.js +366 -29
- package/dist/document/edit.js.map +1 -1
- package/dist/document/expr/evaluate.d.ts +17 -1
- package/dist/document/expr/evaluate.d.ts.map +1 -1
- package/dist/document/expr/evaluate.js +110 -2
- package/dist/document/expr/evaluate.js.map +1 -1
- package/dist/document/expr/index.d.ts +1 -0
- package/dist/document/expr/index.d.ts.map +1 -1
- package/dist/document/expr/index.js +2 -0
- package/dist/document/expr/index.js.map +1 -1
- package/dist/document/expr/typing.d.ts +24 -0
- package/dist/document/expr/typing.d.ts.map +1 -0
- package/dist/document/expr/typing.js +219 -0
- package/dist/document/expr/typing.js.map +1 -0
- package/dist/document/expr/when.d.ts +52 -0
- package/dist/document/expr/when.d.ts.map +1 -0
- package/dist/document/expr/when.js +215 -0
- package/dist/document/expr/when.js.map +1 -0
- package/dist/document/expr-type-findings.d.ts +5 -0
- package/dist/document/expr-type-findings.d.ts.map +1 -0
- package/dist/document/expr-type-findings.js +90 -0
- package/dist/document/expr-type-findings.js.map +1 -0
- package/dist/document/format-words.d.ts +1 -0
- package/dist/document/format-words.d.ts.map +1 -1
- package/dist/document/format-words.js +2 -2
- package/dist/document/format-words.js.map +1 -1
- package/dist/document/index.d.ts +6 -3
- package/dist/document/index.d.ts.map +1 -1
- package/dist/document/index.js +5 -2
- package/dist/document/index.js.map +1 -1
- package/dist/document/kept-in-step-with.d.ts +20 -0
- package/dist/document/kept-in-step-with.d.ts.map +1 -0
- package/dist/document/kept-in-step-with.js +38 -0
- package/dist/document/kept-in-step-with.js.map +1 -0
- package/dist/document/kept-in-step.d.ts.map +1 -1
- package/dist/document/kept-in-step.js +3 -1
- package/dist/document/kept-in-step.js.map +1 -1
- package/dist/document/linked-findings.js +1 -1
- package/dist/document/linked-findings.js.map +1 -1
- package/dist/document/money.d.ts +10 -2
- package/dist/document/money.d.ts.map +1 -1
- package/dist/document/money.js +14 -5
- package/dist/document/money.js.map +1 -1
- package/dist/document/policy-words.d.ts +2 -0
- package/dist/document/policy-words.d.ts.map +1 -1
- package/dist/document/policy-words.js +11 -1
- package/dist/document/policy-words.js.map +1 -1
- package/dist/document/rule-line.d.ts +7 -3
- package/dist/document/rule-line.d.ts.map +1 -1
- package/dist/document/rule-line.js +17 -2
- package/dist/document/rule-line.js.map +1 -1
- package/dist/document/rule-reads.d.ts.map +1 -1
- package/dist/document/rule-reads.js +3 -1
- package/dist/document/rule-reads.js.map +1 -1
- package/dist/document/rules.d.ts +30 -0
- package/dist/document/rules.d.ts.map +1 -1
- package/dist/document/rules.js +74 -0
- package/dist/document/rules.js.map +1 -1
- package/dist/document/schema.d.ts +110 -2
- package/dist/document/schema.d.ts.map +1 -1
- package/dist/document/schema.js +125 -10
- package/dist/document/schema.js.map +1 -1
- package/dist/document/template-parse.d.ts.map +1 -1
- package/dist/document/template-parse.js +7 -1
- package/dist/document/template-parse.js.map +1 -1
- package/dist/document/template.d.ts +2 -0
- package/dist/document/template.d.ts.map +1 -1
- package/dist/document/template.js +10 -1
- package/dist/document/template.js.map +1 -1
- package/dist/document/to-document.d.ts.map +1 -1
- package/dist/document/to-document.js +5 -3
- package/dist/document/to-document.js.map +1 -1
- package/dist/document/workflow-spec.d.ts +72 -0
- package/dist/document/workflow-spec.d.ts.map +1 -0
- package/dist/document/workflow-spec.js +45 -0
- package/dist/document/workflow-spec.js.map +1 -0
- package/dist/document.schema.json +1143 -50
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +2 -0
- package/dist/history.js.map +1 -1
- package/dist/index.d.ts +11 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/installation.d.ts +1 -1
- package/dist/invariants/types.d.ts +7 -2
- package/dist/invariants/types.d.ts.map +1 -1
- package/dist/job-findings.d.ts +5 -0
- package/dist/job-findings.d.ts.map +1 -1
- package/dist/job-findings.js +9 -3
- package/dist/job-findings.js.map +1 -1
- package/dist/keep-linked.d.ts +45 -0
- package/dist/keep-linked.d.ts.map +1 -0
- package/dist/keep-linked.js +188 -0
- package/dist/keep-linked.js.map +1 -0
- package/dist/lines.d.ts.map +1 -1
- package/dist/lines.js +6 -2
- package/dist/lines.js.map +1 -1
- package/dist/mutations/derive-edits.js +2 -2
- package/dist/mutations/propose-changes.d.ts +24 -0
- package/dist/mutations/propose-changes.d.ts.map +1 -0
- package/dist/mutations/propose-changes.js +30 -0
- package/dist/mutations/propose-changes.js.map +1 -0
- package/dist/mutations/types.d.ts +9 -0
- package/dist/mutations/types.d.ts.map +1 -1
- package/dist/mutations/vote-suggestion.d.ts +97 -0
- package/dist/mutations/vote-suggestion.d.ts.map +1 -0
- package/dist/mutations/vote-suggestion.js +59 -0
- package/dist/mutations/vote-suggestion.js.map +1 -0
- package/dist/mutations/words.js +3 -3
- package/dist/navigate.d.ts +7 -3
- package/dist/navigate.d.ts.map +1 -1
- package/dist/navigate.js +7 -3
- package/dist/navigate.js.map +1 -1
- package/dist/ops/digest.d.ts +3 -1
- package/dist/ops/digest.d.ts.map +1 -1
- package/dist/ops/digest.js +7 -2
- package/dist/ops/digest.js.map +1 -1
- package/dist/ops/lineage.d.ts +29 -2
- package/dist/ops/lineage.d.ts.map +1 -1
- package/dist/ops/lineage.js +12 -4
- package/dist/ops/lineage.js.map +1 -1
- package/dist/ops/log.d.ts.map +1 -1
- package/dist/ops/log.js +13 -2
- package/dist/ops/log.js.map +1 -1
- package/dist/ops/suggestions.d.ts +75 -1
- package/dist/ops/suggestions.d.ts.map +1 -1
- package/dist/ops/suggestions.js +123 -6
- package/dist/ops/suggestions.js.map +1 -1
- package/dist/ops/tidying.d.ts.map +1 -1
- package/dist/ops/tidying.js +6 -1
- package/dist/ops/tidying.js.map +1 -1
- package/dist/ops/types.d.ts +41 -0
- package/dist/ops/types.d.ts.map +1 -1
- package/dist/ops/types.js.map +1 -1
- package/dist/ops/undo.d.ts.map +1 -1
- package/dist/ops/undo.js +17 -0
- package/dist/ops/undo.js.map +1 -1
- package/dist/permissions/policy.d.ts +7 -0
- package/dist/permissions/policy.d.ts.map +1 -1
- package/dist/permissions/policy.js +12 -0
- package/dist/permissions/policy.js.map +1 -1
- package/dist/permissions/types.d.ts +27 -0
- package/dist/permissions/types.d.ts.map +1 -1
- package/dist/permissions/types.js.map +1 -1
- package/dist/place-names.d.ts +42 -0
- package/dist/place-names.d.ts.map +1 -0
- package/dist/place-names.js +43 -0
- package/dist/place-names.js.map +1 -0
- package/dist/places.d.ts +12 -0
- package/dist/places.d.ts.map +1 -1
- package/dist/places.js +37 -1
- package/dist/places.js.map +1 -1
- package/dist/scene.d.ts +2 -0
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +2 -0
- package/dist/scene.js.map +1 -1
- package/dist/schema/amount-mark.d.ts +2 -0
- package/dist/schema/amount-mark.d.ts.map +1 -1
- package/dist/schema/amount-mark.js.map +1 -1
- package/dist/schema/amount-words.js +2 -2
- package/dist/schema/amount-words.js.map +1 -1
- package/dist/schema/choice-words.js +2 -2
- package/dist/schema/define-node.d.ts +8 -2
- package/dist/schema/define-node.d.ts.map +1 -1
- package/dist/schema/define-node.js +2 -2
- package/dist/schema/define-node.js.map +1 -1
- package/dist/schema/humanize.d.ts +17 -0
- package/dist/schema/humanize.d.ts.map +1 -1
- package/dist/schema/humanize.js +28 -1
- package/dist/schema/humanize.js.map +1 -1
- package/dist/schema/reading.d.ts +8 -0
- package/dist/schema/reading.d.ts.map +1 -1
- package/dist/schema/reading.js +16 -2
- package/dist/schema/reading.js.map +1 -1
- package/dist/schema/types.d.ts +8 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/value-words.js +2 -2
- package/dist/schema/value-words.js.map +1 -1
- package/dist/starting-document.d.ts +47 -2
- package/dist/starting-document.d.ts.map +1 -1
- package/dist/starting-document.js +66 -8
- package/dist/starting-document.js.map +1 -1
- package/dist/store.d.ts +75 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +305 -29
- package/dist/store.js.map +1 -1
- package/dist/sync/connection.d.ts +35 -6
- package/dist/sync/connection.d.ts.map +1 -1
- package/dist/sync/connection.js +252 -47
- package/dist/sync/connection.js.map +1 -1
- package/dist/sync/engine.d.ts +83 -0
- package/dist/sync/engine.d.ts.map +1 -1
- package/dist/sync/engine.js +157 -4
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync/google-calendar.d.ts +8 -0
- package/dist/sync/google-calendar.d.ts.map +1 -1
- package/dist/sync/google-calendar.js +30 -3
- package/dist/sync/google-calendar.js.map +1 -1
- package/dist/sync/guest-words.d.ts +9 -0
- package/dist/sync/guest-words.d.ts.map +1 -0
- package/dist/sync/guest-words.js +41 -0
- package/dist/sync/guest-words.js.map +1 -0
- package/dist/sync/guests.d.ts +44 -0
- package/dist/sync/guests.d.ts.map +1 -0
- package/dist/sync/guests.js +57 -0
- package/dist/sync/guests.js.map +1 -0
- package/dist/sync/index.d.ts +8 -5
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +2 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/notion-stub.d.ts +4 -1
- package/dist/sync/notion-stub.d.ts.map +1 -1
- package/dist/sync/notion-stub.js +40 -0
- package/dist/sync/notion-stub.js.map +1 -1
- package/dist/sync/notion.d.ts +43 -2
- package/dist/sync/notion.d.ts.map +1 -1
- package/dist/sync/notion.js +274 -140
- package/dist/sync/notion.js.map +1 -1
- package/dist/sync/status.d.ts +43 -0
- package/dist/sync/status.d.ts.map +1 -0
- package/dist/sync/status.js +45 -0
- package/dist/sync/status.js.map +1 -0
- package/dist/sync/types.d.ts +64 -0
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/sync/types.js.map +1 -1
- package/dist/testing.js +1 -1
- package/dist/testing.js.map +1 -1
- package/dist/theme/contrast.d.ts +2 -0
- package/dist/theme/contrast.d.ts.map +1 -1
- package/dist/theme/contrast.js +4 -0
- package/dist/theme/contrast.js.map +1 -1
- package/dist/theme/ground.d.ts +1 -2
- package/dist/theme/ground.d.ts.map +1 -1
- package/dist/theme/ground.js +2 -5
- package/dist/theme/ground.js.map +1 -1
- package/dist/theme/marks.d.ts +14 -2
- package/dist/theme/marks.d.ts.map +1 -1
- package/dist/theme/marks.js +20 -3
- package/dist/theme/marks.js.map +1 -1
- package/dist/theme/types.d.ts +22 -0
- package/dist/theme/types.d.ts.map +1 -1
- package/dist/theme/types.js.map +1 -1
- package/dist/tidying.d.ts +79 -4
- package/dist/tidying.d.ts.map +1 -1
- package/dist/tidying.js +216 -9
- package/dist/tidying.js.map +1 -1
- package/dist/trait-vocabulary.d.ts +17 -0
- package/dist/trait-vocabulary.d.ts.map +1 -0
- package/dist/trait-vocabulary.js +16 -0
- package/dist/trait-vocabulary.js.map +1 -0
- package/dist/traits.d.ts +14 -7
- package/dist/traits.d.ts.map +1 -1
- package/dist/traits.js +33 -12
- package/dist/traits.js.map +1 -1
- package/dist/validate-graph.d.ts +2 -1
- package/dist/validate-graph.d.ts.map +1 -1
- package/dist/validate-graph.js +32 -1
- package/dist/validate-graph.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/words.d.ts +4 -1
- package/dist/words.d.ts.map +1 -1
- package/dist/words.js +4 -1
- package/dist/words.js.map +1 -1
- package/dist/workflow-shape.d.ts +217 -0
- package/dist/workflow-shape.d.ts.map +1 -0
- package/dist/workflow-shape.js +31 -0
- package/dist/workflow-shape.js.map +1 -0
- package/dist/workflows/findings.d.ts +13 -0
- package/dist/workflows/findings.d.ts.map +1 -0
- package/dist/workflows/findings.js +157 -0
- package/dist/workflows/findings.js.map +1 -0
- package/dist/workflows/generate-words.d.ts +12 -0
- package/dist/workflows/generate-words.d.ts.map +1 -0
- package/dist/workflows/generate-words.js +25 -0
- package/dist/workflows/generate-words.js.map +1 -0
- package/dist/workflows/generate.d.ts +59 -0
- package/dist/workflows/generate.d.ts.map +1 -0
- package/dist/workflows/generate.js +165 -0
- package/dist/workflows/generate.js.map +1 -0
- package/dist/workflows/judging.d.ts +17 -0
- package/dist/workflows/judging.d.ts.map +1 -0
- package/dist/workflows/judging.js +11 -0
- package/dist/workflows/judging.js.map +1 -0
- package/dist/workflows/next.d.ts +18 -0
- package/dist/workflows/next.d.ts.map +1 -0
- package/dist/workflows/next.js +75 -0
- package/dist/workflows/next.js.map +1 -0
- package/dist/workflows/on-the-map.d.ts +70 -0
- package/dist/workflows/on-the-map.d.ts.map +1 -0
- package/dist/workflows/on-the-map.js +94 -0
- package/dist/workflows/on-the-map.js.map +1 -0
- package/dist/workflows/policies.d.ts +39 -0
- package/dist/workflows/policies.d.ts.map +1 -0
- package/dist/workflows/policies.js +95 -0
- package/dist/workflows/policies.js.map +1 -0
- package/dist/workflows/resolve.d.ts +55 -0
- package/dist/workflows/resolve.d.ts.map +1 -0
- package/dist/workflows/resolve.js +57 -0
- package/dist/workflows/resolve.js.map +1 -0
- package/dist/workflows/schedule.d.ts +28 -0
- package/dist/workflows/schedule.d.ts.map +1 -0
- package/dist/workflows/schedule.js +160 -0
- package/dist/workflows/schedule.js.map +1 -0
- package/dist/workflows/step-act.d.ts +6 -0
- package/dist/workflows/step-act.d.ts.map +1 -0
- package/dist/workflows/step-act.js +79 -0
- package/dist/workflows/step-act.js.map +1 -0
- package/dist/workflows/step-agent.d.ts +4 -0
- package/dist/workflows/step-agent.d.ts.map +1 -0
- package/dist/workflows/step-agent.js +55 -0
- package/dist/workflows/step-agent.js.map +1 -0
- package/dist/workflows/step-archive.d.ts +8 -0
- package/dist/workflows/step-archive.d.ts.map +1 -0
- package/dist/workflows/step-archive.js +74 -0
- package/dist/workflows/step-archive.js.map +1 -0
- package/dist/workflows/step-classify.d.ts +23 -0
- package/dist/workflows/step-classify.d.ts.map +1 -0
- package/dist/workflows/step-classify.js +143 -0
- package/dist/workflows/step-classify.js.map +1 -0
- package/dist/workflows/step-generate.d.ts +7 -0
- package/dist/workflows/step-generate.d.ts.map +1 -0
- package/dist/workflows/step-generate.js +185 -0
- package/dist/workflows/step-generate.js.map +1 -0
- package/dist/workflows/steps.d.ts +75 -0
- package/dist/workflows/steps.d.ts.map +1 -0
- package/dist/workflows/steps.js +40 -0
- package/dist/workflows/steps.js.map +1 -0
- package/dist/workflows/triggered.d.ts +22 -0
- package/dist/workflows/triggered.d.ts.map +1 -0
- package/dist/workflows/triggered.js +52 -0
- package/dist/workflows/triggered.js.map +1 -0
- package/dist/workflows/values.d.ts +28 -0
- package/dist/workflows/values.d.ts.map +1 -0
- package/dist/workflows/values.js +75 -0
- package/dist/workflows/values.js.map +1 -0
- package/dist/workflows/words.d.ts +10 -0
- package/dist/workflows/words.d.ts.map +1 -0
- package/dist/workflows/words.js +30 -0
- package/dist/workflows/words.js.map +1 -0
- package/dist/workflows/world.d.ts +23 -0
- package/dist/workflows/world.d.ts.map +1 -0
- package/dist/workflows/world.js +50 -0
- package/dist/workflows/world.js.map +1 -0
- package/dist/workflows.d.ts +35 -0
- package/dist/workflows.d.ts.map +1 -0
- package/dist/workflows.js +20 -0
- package/dist/workflows.js.map +1 -0
- package/package.json +18 -2
|
@@ -13,6 +13,7 @@ function build() {
|
|
|
13
13
|
const sentence = str(1, 500);
|
|
14
14
|
const kindName = z.string().check(z.regex(NAME, 'kind names are kebab-case, lower-case words joined by hyphens like "tool-note"'));
|
|
15
15
|
const fieldName = z.string().check(z.regex(FIELD_NAME, 'field names are one word or camelCase, like "dueDate"'));
|
|
16
|
+
const edgeName = z.string().check(z.regex(EDGE_NAME, 'a relation\'s name is one word or camelCase, like "who"'));
|
|
16
17
|
const envName = z.string().check(z.regex(/^[A-Z][A-Z0-9_]*$/, 'an environment variable is upper-case words joined by underscores, like "GOOGLE"'));
|
|
17
18
|
/* Where the credentials are read from: environment variables under `env`, failing that the KEY=value file `file` names. */
|
|
18
19
|
const auth = z.optional(z.strictObject({ env: envName, file: z.optional(str(1, 500)) }));
|
|
@@ -42,8 +43,28 @@ function build() {
|
|
|
42
43
|
* recurring event with its rule (FR-230). With `days` — a weekday, or a
|
|
43
44
|
* list of them — the record is weekly, and `start` and `end` are its
|
|
44
45
|
* times of day ("09:00"), in the app's time zone.
|
|
46
|
+
*
|
|
47
|
+
* THE EVENT'S GUESTS (Roadmap f-calendar-guests-mapping) are `guests`:
|
|
48
|
+
* a field of the kind holding their addresses (a list, or one email),
|
|
49
|
+
* or `{ via }`, a relation of the kind to the people it is about —
|
|
50
|
+
* each reached person's `emails` (a list of them, or one email field)
|
|
51
|
+
* is invited while their `invite` toggle is on (`inviteMe`; `false`
|
|
52
|
+
* says the app has no toggle and every address is invited). Google's
|
|
53
|
+
* invitation emails go out only with `notify: true`; the default is
|
|
54
|
+
* quiet. `max` is the most guests one event invites (Roadmap
|
|
55
|
+
* f-sync-guest-changes-in-history): an event that would invite somebody
|
|
56
|
+
* past it is held unsent, and said; `graview check` refuses one that
|
|
57
|
+
* is not a whole number above 0.
|
|
45
58
|
*/
|
|
46
|
-
fields: z.strictObject({
|
|
59
|
+
fields: z.strictObject({
|
|
60
|
+
summary: fieldName,
|
|
61
|
+
start: fieldName,
|
|
62
|
+
end: fieldName,
|
|
63
|
+
days: z.optional(fieldName),
|
|
64
|
+
location: z.optional(fieldName),
|
|
65
|
+
description: z.optional(fieldName),
|
|
66
|
+
guests: z.optional(z.union([fieldName, z.strictObject({ via: edgeName, emails: z.optional(fieldName), invite: z.optional(z.union([fieldName, z.literal(false)])), notify: z.optional(z.boolean()), max: z.optional(z.number()) })], 'guests names a field holding the addresses, or { "via": "<relation>", "emails"?, "invite"?, "notify"?, "max"? } to invite the people a relation reaches')),
|
|
67
|
+
}),
|
|
47
68
|
/* Absent: the whole calendar. `{ color }`: the events of one of Google's colors, by name. `{ tag }`: those whose title carries a word like "#graview", kept in the title here or not (`keep`). */
|
|
48
69
|
filter: z.optional(z.strictObject({ color: z.optional(str(1, 40)), tag: z.optional(str(1, 40)), keep: z.optional(z.boolean()) })),
|
|
49
70
|
direction,
|
|
@@ -65,13 +86,35 @@ function build() {
|
|
|
65
86
|
* A key of `properties` may name one of the kind's RELATIONS (edges) in
|
|
66
87
|
* place of a field, held by a Notion relation property: its links are the
|
|
67
88
|
* pages the property reaches, each a record another Notion connection of
|
|
68
|
-
* the app keeps (`"reindeer": "Reindeer
|
|
69
|
-
* `"type": "relation"`). Matched by name, a relation
|
|
70
|
-
* relation property has is kept too.
|
|
89
|
+
* the app keeps, or another source of this one (`"reindeer": "Reindeer
|
|
90
|
+
* Fleet"`, or with `"type": "relation"`). Matched by name, a relation
|
|
91
|
+
* whose name a relation property has is kept too.
|
|
92
|
+
*
|
|
93
|
+
* SEVERAL DATA SOURCES OF ONE DATABASE, EACH ITS OWN KIND (`sources`, in
|
|
94
|
+
* place of `source`, `kind` and `properties`): each names its data source
|
|
95
|
+
* by name or id, the kind its pages are, and its own `properties`. A
|
|
96
|
+
* relation between two of them is a Notion relation property, as it is
|
|
97
|
+
* between two connections.
|
|
98
|
+
*
|
|
99
|
+
* THE PROPERTIES IT NEEDS ARE MADE: a field mapped to a property the data
|
|
100
|
+
* source lacks is given one, of the type the field is held in, on the
|
|
101
|
+
* first pass and whenever one goes missing — never renamed, never
|
|
102
|
+
* deleted, and one there of another type is said and left. `create:
|
|
103
|
+
* false` turns that off; a connection that only reads makes none.
|
|
71
104
|
*/
|
|
72
105
|
const notionTypes = [...Object.keys(NOTION_FITS), "relation"];
|
|
73
106
|
const keptName = z.string().check(z.regex(EDGE_NAME, 'a key of properties is one of the kind\'s fields or relations, like "dueDate" or "reindeer"'));
|
|
74
107
|
const notionType = z.enum(notionTypes, `a property's type is one a connection keeps in step: ${notionTypes.join(", ")}`);
|
|
108
|
+
/* This kind's field or relation → the data source's property, by its name in Notion, or `{ name, type }` with its type. */
|
|
109
|
+
const properties = z.optional(z.record(keptName, z.union([str(1, 100), z.strictObject({ name: str(1, 100), type: notionType })])));
|
|
110
|
+
/* One data source of the database and the kind its pages are. */
|
|
111
|
+
const NotionSource = z.strictObject({
|
|
112
|
+
/* The data source, by its name in Notion or its id. */
|
|
113
|
+
source: str(1, 200),
|
|
114
|
+
kind: kindName,
|
|
115
|
+
description: z.optional(sentence),
|
|
116
|
+
properties,
|
|
117
|
+
});
|
|
75
118
|
const Notion = z.strictObject({
|
|
76
119
|
system: z.literal("notion"),
|
|
77
120
|
description: z.optional(sentence),
|
|
@@ -80,9 +123,13 @@ function build() {
|
|
|
80
123
|
/* The data source, by its name in Notion or its id, when the database holds several. */
|
|
81
124
|
source: z.optional(str(1, 200)),
|
|
82
125
|
auth,
|
|
83
|
-
kind
|
|
84
|
-
|
|
85
|
-
properties
|
|
126
|
+
/* The kind its pages are; absent when `sources` names a kind for each. */
|
|
127
|
+
kind: z.optional(kindName),
|
|
128
|
+
properties,
|
|
129
|
+
/* Several data sources of the database, each kept in step with its own kind (in place of source, kind and properties). */
|
|
130
|
+
sources: z.optional(z.array(NotionSource).check(z.minLength(1), z.maxLength(20))),
|
|
131
|
+
/* Whether a property a mapped field lacks is made in Notion (true unless said). */
|
|
132
|
+
create: z.optional(z.boolean()),
|
|
86
133
|
direction,
|
|
87
134
|
conflicts,
|
|
88
135
|
every,
|
|
@@ -97,4 +144,21 @@ let built;
|
|
|
97
144
|
* database. It never holds a secret.
|
|
98
145
|
*/
|
|
99
146
|
export const ConnectionSpec = z.lazy(() => (built ??= build()));
|
|
147
|
+
/**
|
|
148
|
+
* A NOTION CONNECTION'S DATA SOURCES, each with its kind: its `sources`, or
|
|
149
|
+
* the one its top names (`source`, `kind`, `properties`). Read loosely, so
|
|
150
|
+
* the checker can ask it of a connection it is still judging.
|
|
151
|
+
*/
|
|
152
|
+
export function notionSourcesOf(connection) {
|
|
153
|
+
if (connection.sources && connection.sources.length > 0) {
|
|
154
|
+
return connection.sources.map((one) => ({ source: one.source, kind: one.kind, ...(one.properties ? { properties: one.properties } : {}), ...(one.description ? { description: one.description } : {}), resource: `pages:${one.kind}` }));
|
|
155
|
+
}
|
|
156
|
+
if (connection.kind === undefined)
|
|
157
|
+
return [];
|
|
158
|
+
return [{ ...(connection.source ? { source: connection.source } : {}), kind: connection.kind, ...(connection.properties ? { properties: connection.properties } : {}), resource: "pages" }];
|
|
159
|
+
}
|
|
160
|
+
/** The kinds a connection keeps: a calendar's one, or each of a Notion connection's sources'. */
|
|
161
|
+
export function connectionKinds(connection) {
|
|
162
|
+
return connection.system === "notion" ? notionSourcesOf(connection).map((one) => one.kind) : [connection.kind];
|
|
163
|
+
}
|
|
100
164
|
//# sourceMappingURL=connection-spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-spec.js","sourceRoot":"","sources":["../../src/document/connection-spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE1D;;;;;GAKG;AAEH,kHAAkH;AAClH,SAAS,KAAK;IACZ,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,gFAAgF,CAAC,CAAC,CAAC;IACnI,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,uDAAuD,CAAC,CAAC,CAAC;IACjH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,EAAE,kFAAkF,CAAC,CAAC,CAAC;IACnJ,2HAA2H;IAC3H,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzF,iIAAiI;IACjI,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,qFAAqF,CAAC,CAAC;IAClI,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,iHAAiH,CAAC,CAAC,CAAC;IACtL,mEAAmE;IACnE,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAErF;;;;;;;OAOG;IACH,MAAM,cAAc,GAAG,CAAC,CAAC,YAAY,CAAC;QACpC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;QACpC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACjC,iHAAiH;QACjH,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI;QACJ,IAAI,EAAE,QAAQ;QACd
|
|
1
|
+
{"version":3,"file":"connection-spec.js","sourceRoot":"","sources":["../../src/document/connection-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { AnyGraphNode, GraphReader } from "../graph/types.js";
|
|
2
|
+
/** As a rule declares it: the kind it must reach, the relation it walks from its subject, and the relation from there when the first stops short. */
|
|
3
|
+
export interface CoverSpec {
|
|
4
|
+
readonly every: string;
|
|
5
|
+
readonly through: string;
|
|
6
|
+
readonly via?: string | undefined;
|
|
7
|
+
}
|
|
8
|
+
/** One step of the walk: a relation, walked out from the declaring kind or in from the far one. */
|
|
9
|
+
export interface CoverStep {
|
|
10
|
+
readonly relation: string;
|
|
11
|
+
/** `true`: the relation is declared on the kind the step leaves (`out`); `false`: on the kind it reaches (`in`). */
|
|
12
|
+
readonly out: boolean;
|
|
13
|
+
}
|
|
14
|
+
/** A coverage rule resolved against the declaration: each step knows its direction, so judging it reads nothing but links. */
|
|
15
|
+
export interface CoverPlan {
|
|
16
|
+
readonly every: string;
|
|
17
|
+
readonly through: CoverStep;
|
|
18
|
+
readonly via?: CoverStep;
|
|
19
|
+
}
|
|
20
|
+
/** What a relation is declared as, wherever a declaration is read: the kinds it leaves and the kinds it reaches. */
|
|
21
|
+
export interface RelationEnds {
|
|
22
|
+
readonly from: readonly string[];
|
|
23
|
+
readonly to: readonly string[] | "*";
|
|
24
|
+
}
|
|
25
|
+
/** Why a coverage rule could not be resolved: which key, and the sentence, in the person's voice. */
|
|
26
|
+
export interface CoverProblem {
|
|
27
|
+
readonly key: "through" | "via" | "every";
|
|
28
|
+
readonly message: string;
|
|
29
|
+
readonly fix?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Resolve a coverage rule against the declaration's relations, or say why
|
|
33
|
+
* it cannot be: `through` must leave the rule's kind (or point at it), and
|
|
34
|
+
* the walk must end on `every`'s kind — through `via` when it is given.
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolveCovers(over: string, spec: CoverSpec, relationOf: (name: string) => RelationEnds | undefined, isKind: (name: string) => boolean): {
|
|
37
|
+
readonly plan: CoverPlan;
|
|
38
|
+
} | {
|
|
39
|
+
readonly problem: CoverProblem;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* THE RECORDS A SUBJECT DOES NOT REACH, in one pass: every record the
|
|
43
|
+
* subject's links lead to through the plan, as a set, held against the
|
|
44
|
+
* live records of the covered kind (an archived one counts in no rule
|
|
45
|
+
* that does not ask, as `all()` holds). Linear in the subject's links.
|
|
46
|
+
*/
|
|
47
|
+
export declare function uncovered(graph: GraphReader, subject: AnyGraphNode, plan: CoverPlan): AnyGraphNode[];
|
|
48
|
+
//# sourceMappingURL=covers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"covers.d.ts","sourceRoot":"","sources":["../../src/document/covers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiBnE,qJAAqJ;AACrJ,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,mGAAmG;AACnG,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oHAAoH;IACpH,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CACvB;AAED,8HAA8H;AAC9H,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,oHAAoH;AACpH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC;CACtC;AAED,qGAAqG;AACrG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAiBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CA6CzN;AAID;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,YAAY,EAAE,CAUpG"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
const reaches = (ends, kind) => ends.to === "*" || ends.to.includes(kind);
|
|
2
|
+
/**
|
|
3
|
+
* Which way a step walks: from `near`, out along a relation `near`
|
|
4
|
+
* declares, or in along one declared toward it. The kinds it lands on
|
|
5
|
+
* come back with it, so the next step can be resolved from them.
|
|
6
|
+
*/
|
|
7
|
+
function resolveStep(relation, near, relationOf) {
|
|
8
|
+
const ends = relationOf(relation);
|
|
9
|
+
if (!ends)
|
|
10
|
+
return undefined;
|
|
11
|
+
if (near.some((kind) => ends.from.includes(kind)))
|
|
12
|
+
return { step: { relation, out: true }, far: ends.to };
|
|
13
|
+
if (near.some((kind) => reaches(ends, kind)))
|
|
14
|
+
return { step: { relation, out: false }, far: ends.from };
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Resolve a coverage rule against the declaration's relations, or say why
|
|
19
|
+
* it cannot be: `through` must leave the rule's kind (or point at it), and
|
|
20
|
+
* the walk must end on `every`'s kind — through `via` when it is given.
|
|
21
|
+
*/
|
|
22
|
+
export function resolveCovers(over, spec, relationOf, isKind) {
|
|
23
|
+
if (!isKind(spec.every))
|
|
24
|
+
return { problem: { key: "every", message: `"${spec.every}" is not a kind this document declares` } };
|
|
25
|
+
const through = resolveStep(spec.through, [over], relationOf);
|
|
26
|
+
if (!through) {
|
|
27
|
+
const ends = relationOf(spec.through);
|
|
28
|
+
return {
|
|
29
|
+
problem: {
|
|
30
|
+
key: "through",
|
|
31
|
+
message: ends ? `"${spec.through}" is a relation of ${ends.from.join(", ")}, not of ${over}, so a ${over} cannot be followed through it` : `"${spec.through}" is not a relation any kind declares`,
|
|
32
|
+
fix: ends ? `name a relation ${over} declares, or one that points at ${over}` : undefined,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const landed = through.far === "*" ? "*" : through.far;
|
|
37
|
+
if (!spec.via) {
|
|
38
|
+
if (landed === "*" || landed.includes(spec.every))
|
|
39
|
+
return { plan: { every: spec.every, through: through.step } };
|
|
40
|
+
return {
|
|
41
|
+
problem: {
|
|
42
|
+
key: "through",
|
|
43
|
+
message: `"${spec.through}" reaches ${landed.join(", ")}, not ${spec.every}`,
|
|
44
|
+
fix: `add "via": the relation from ${landed.join(" or ")} to ${spec.every}, or name a relation that reaches ${spec.every}`,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/*
|
|
49
|
+
* `via` leaves the kinds `through` landed on and reaches `every`. Where
|
|
50
|
+
* `through` reaches any kind at all ("*"), it is read from the other end:
|
|
51
|
+
* the relation `every` declares or is pointed at by, which from the
|
|
52
|
+
* middle is walked the other way.
|
|
53
|
+
*/
|
|
54
|
+
const nearVia = landed === "*" ? [spec.every] : landed;
|
|
55
|
+
const via = resolveStep(spec.via, nearVia, relationOf);
|
|
56
|
+
if (!via) {
|
|
57
|
+
const ends = relationOf(spec.via);
|
|
58
|
+
return {
|
|
59
|
+
problem: {
|
|
60
|
+
key: "via",
|
|
61
|
+
message: ends ? `"${spec.via}" is a relation of ${ends.from.join(", ")}, which "${spec.through}" does not reach` : `"${spec.via}" is not a relation any kind declares`,
|
|
62
|
+
fix: ends ? `name a relation of ${nearVia.join(" or ")}, or one that points at it` : undefined,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const end = landed === "*" ? [spec.every] : via.far;
|
|
67
|
+
if (end === "*" || end.includes(spec.every))
|
|
68
|
+
return { plan: { every: spec.every, through: through.step, via: landed === "*" ? { relation: via.step.relation, out: !via.step.out } : via.step } };
|
|
69
|
+
return { problem: { key: "via", message: `"${spec.via}" reaches ${end.join(", ")}, not ${spec.every}`, fix: `name a relation that reaches ${spec.every}` } };
|
|
70
|
+
}
|
|
71
|
+
const walk = (graph, id, step) => (step.out ? graph.out(id, step.relation) : graph.in(id, step.relation));
|
|
72
|
+
/**
|
|
73
|
+
* THE RECORDS A SUBJECT DOES NOT REACH, in one pass: every record the
|
|
74
|
+
* subject's links lead to through the plan, as a set, held against the
|
|
75
|
+
* live records of the covered kind (an archived one counts in no rule
|
|
76
|
+
* that does not ask, as `all()` holds). Linear in the subject's links.
|
|
77
|
+
*/
|
|
78
|
+
export function uncovered(graph, subject, plan) {
|
|
79
|
+
const reached = new Set();
|
|
80
|
+
for (const mid of walk(graph, subject.id, plan.through)) {
|
|
81
|
+
if (!plan.via) {
|
|
82
|
+
reached.add(mid.id);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
for (const far of walk(graph, mid.id, plan.via))
|
|
86
|
+
reached.add(far.id);
|
|
87
|
+
}
|
|
88
|
+
return graph.nodesOfKind(plan.every).filter((node) => !reached.has(node.id));
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=covers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"covers.js","sourceRoot":"","sources":["../../src/document/covers.ts"],"names":[],"mappings":"AAmDA,MAAM,OAAO,GAAG,CAAC,IAAkB,EAAE,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAEzG;;;;GAIG;AACH,SAAS,WAAW,CAAC,QAAgB,EAAE,IAAuB,EAAE,UAAsD;IACpH,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;IAC1G,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACxG,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,IAAe,EAAE,UAAsD,EAAE,MAAiC;IACpJ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,wCAAwC,EAAE,EAAE,CAAC;IAC/H,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO;YACL,OAAO,EAAE;gBACP,GAAG,EAAE,SAAS;gBACd,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,sBAAsB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,UAAU,IAAI,gCAAgC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,uCAAuC;gBAClM,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,mBAAmB,IAAI,oCAAoC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;aAC1F;SACF,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACvD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACjH,OAAO;YACL,OAAO,EAAE;gBACP,GAAG,EAAE,SAAS;gBACd,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,aAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE;gBAC5E,GAAG,EAAE,gCAAgC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,qCAAqC,IAAI,CAAC,KAAK,EAAE;aAC3H;SACF,CAAC;IACJ,CAAC;IACD;;;;;OAKG;IACH,MAAM,OAAO,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACvD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACvD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO;YACL,OAAO,EAAE;gBACP,GAAG,EAAE,KAAK;gBACV,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,sBAAsB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,uCAAuC;gBACtK,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,sBAAsB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC,SAAS;aAC/F;SACF,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACpD,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;IACjM,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,aAAa,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,gCAAgC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;AAC/J,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,KAAkB,EAAE,EAAU,EAAE,IAAe,EAA2B,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEnK;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,KAAkB,EAAE,OAAqB,EAAE,IAAe;IAClF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derives-findings.d.ts","sourceRoot":"","sources":["../../src/document/derives-findings.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAYnD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,EAAE,CAqDpE"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { nounOf } from "../schema/define-node.js";
|
|
2
|
+
import { analyzeExpr } from "./expr/analyze.js";
|
|
3
|
+
import { parseExpr } from "./expr/parse.js";
|
|
4
|
+
import { error } from "./findings.js";
|
|
5
|
+
import { isRecord } from "./respell.js";
|
|
6
|
+
/*
|
|
7
|
+
* WHAT A KIND FOLLOWS (Roadmap f-keep-linked), judged with the checker: a
|
|
8
|
+
* kind it follows that the app has and that is not itself; a relation
|
|
9
|
+
* joining the two, from either end; fields of its own it sets, never one
|
|
10
|
+
* worked out; values worked out from the source (`{ "expr": … }`) or
|
|
11
|
+
* written as they are, never an argument, since no act is asked; and
|
|
12
|
+
* expressions that read what the source has. An expression that does not
|
|
13
|
+
* parse is the compile's to say (`expression`).
|
|
14
|
+
*/
|
|
15
|
+
export function derivesFindings(document) {
|
|
16
|
+
const out = [];
|
|
17
|
+
const said = (kind) => nounOf(document.kinds[kind], kind);
|
|
18
|
+
for (const [kind, spec] of Object.entries(document.kinds)) {
|
|
19
|
+
const derives = spec.derives;
|
|
20
|
+
if (!derives)
|
|
21
|
+
continue;
|
|
22
|
+
const at = `kinds.${kind}.derives`;
|
|
23
|
+
const source = document.kinds[derives.from];
|
|
24
|
+
if (!source || derives.from === kind) {
|
|
25
|
+
const others = Object.keys(document.kinds).filter((k) => k !== kind);
|
|
26
|
+
out.push(error("derives-kind", `${at}.from`, derives.from === kind ? `${said(kind)} cannot follow itself` : `"${derives.from}" is not a kind this app has, for ${said(kind)} to follow`, others.length > 0 ? `name one of ${others.join(", ")}` : "add the kind it follows first"));
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const pointsAt = (edge, target) => edge !== undefined && (edge.to === "*" || edge.to.includes(target));
|
|
30
|
+
if (!pointsAt(spec.edges?.[derives.via], derives.from) && !pointsAt(source.edges?.[derives.via], kind)) {
|
|
31
|
+
const joining = [
|
|
32
|
+
...Object.entries(spec.edges ?? {}).filter(([, e]) => pointsAt(e, derives.from)).map(([name]) => name),
|
|
33
|
+
...Object.entries(source.edges ?? {}).filter(([, e]) => pointsAt(e, kind)).map(([name]) => name),
|
|
34
|
+
];
|
|
35
|
+
out.push(error("derives-relation", `${at}.via`, `"${derives.via}" does not join ${said(kind)} to ${said(derives.from)}, so no ${said(kind)} has ${said(derives.from)} to follow`, joining.length > 0 ? `name ${joining.length === 1 ? "the relation that does" : "one of the relations that do"}: ${joining.join(", ")}` : `declare a relation of ${kind} to ${derives.from} (or of ${derives.from} to ${kind}) first`));
|
|
36
|
+
}
|
|
37
|
+
for (const [field, value] of Object.entries(derives.set)) {
|
|
38
|
+
const here = `${at}.set.${field}`;
|
|
39
|
+
if (!spec.fields[field]) {
|
|
40
|
+
if (spec.computed?.[field] !== undefined)
|
|
41
|
+
out.push(error("computed-written", here, `${kind}'s ${field} is worked out, not written: it cannot follow ${said(derives.from)}`, "set the stored fields it is worked out from"));
|
|
42
|
+
else
|
|
43
|
+
out.push(error("derives-field", here, `${said(kind)} has no field "${field}" to take from ${said(derives.from)}`, `set one of ${Object.keys(spec.fields).join(", ")}`));
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (typeof value === "string" && /^\$[A-Za-z]/.test(value)) {
|
|
47
|
+
out.push(error("derives-value", here, `"${value}" names an argument, and no act asks for one when ${said(kind)} follows ${said(derives.from)}`, `work it out from ${said(derives.from)} with { "expr": "…" }, or write the value as it is`));
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (!isRecord(value) || typeof value.expr !== "string")
|
|
51
|
+
continue;
|
|
52
|
+
let names;
|
|
53
|
+
try {
|
|
54
|
+
names = analyzeExpr(parseExpr(value.expr)).names;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
for (const name of names) {
|
|
60
|
+
if (name === "to" || source.fields[name] || source.edges?.[name] || source.computed?.[name] !== undefined)
|
|
61
|
+
continue;
|
|
62
|
+
out.push(error("derives-name", here, `${said(derives.from)} has no field or relation called "${name}" for ${kind}'s ${field} to be worked out from`, `read one of ${[...Object.keys(source.fields), ...Object.keys(source.computed ?? {})].join(", ")}; "to" is the ${said(kind)} itself`));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=derives-findings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derives-findings.js","sourceRoot":"","sources":["../../src/document/derives-findings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { askedFormFields } from "../mutations/form.js";
|
|
2
2
|
import { keptArguments } from "../mutations/kept-arguments.js";
|
|
3
3
|
import { argumentWords } from "../mutations/words.js";
|
|
4
|
-
import { actTitle, humanizeField, nounOf } from "../schema/define-node.js";
|
|
4
|
+
import { actTitle, humanizeField, humanizeValue, nounOf } from "../schema/define-node.js";
|
|
5
5
|
function described(schema, field, words) {
|
|
6
6
|
// A box is always answered — unticked is a no — so it is never one that must be, as the form draws it.
|
|
7
7
|
const required = !(field.optional || field.control === "boolean");
|
|
@@ -32,7 +32,7 @@ function described(schema, field, words) {
|
|
|
32
32
|
case "group":
|
|
33
33
|
return { ...base, input: "group", fields: field.fields.map((one) => described(schema, one, words)) };
|
|
34
34
|
case "variant":
|
|
35
|
-
return { ...base, input: "one of", choices: field.options.map((option) =>
|
|
35
|
+
return { ...base, input: "one of", choices: field.options.map((option) => humanizeValue(option.value)) };
|
|
36
36
|
default:
|
|
37
37
|
return { ...base, input: "answer" };
|
|
38
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"describe-forms.js","sourceRoot":"","sources":["../../src/document/describe-forms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkB,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"describe-forms.js","sourceRoot":"","sources":["../../src/document/describe-forms.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import type { Store } from "../store.js";
|
|
|
4
4
|
import { type AppPlace } from "../app-places.js";
|
|
5
5
|
import type { AnySchema } from "../schema/schema.js";
|
|
6
6
|
import type { DescribedHostView, DescribedProblem, DescribePlaceResult, PlaceDescription } from "./described.js";
|
|
7
|
+
import type { DescribedVideo } from "./described.js";
|
|
7
8
|
export interface DescribePlaceOptions<S extends AnySchema> {
|
|
8
9
|
/** The app whose place this is: its home, lenses, views and arrangement. */
|
|
9
10
|
readonly app: GraviewApp<S>;
|
|
@@ -37,4 +38,6 @@ export declare function shadowedPageSlots(app: Pick<GraviewApp<AnySchema>, "view
|
|
|
37
38
|
export declare function describePlace<S extends AnySchema>(store: Store<S>, principal: Principal, place: string | AppPlace, options: DescribePlaceOptions<S>): DescribePlaceResult;
|
|
38
39
|
/** A description as plain text: a heading as `#`s, a list's records as bullets under their group's heading, indented by depth. */
|
|
39
40
|
export declare function placeText(description: Omit<PlaceDescription, "text">): string;
|
|
41
|
+
/** A placed video in one line: what it shows, where it is, what the browser is handed, how it plays, and whether it will. */
|
|
42
|
+
export declare function videoLine(video: DescribedVideo): string;
|
|
40
43
|
//# sourceMappingURL=describe-place.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"describe-place.d.ts","sourceRoot":"","sources":["../../src/document/describe-place.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOrD,OAAO,KAAK,EAAiB,iBAAiB,EAAmD,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"describe-place.d.ts","sourceRoot":"","sources":["../../src/document/describe-place.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOrD,OAAO,KAAK,EAAiB,iBAAiB,EAAmD,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAUjL,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAyBpE,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,SAAS;IACvD,4EAA4E;IAC5E,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,mEAAmE;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC/C;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,gBAAgB,EAAE,CAQ5J;AAeD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAqPzK;AAwCD,kIAAkI;AAClI,wBAAgB,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,MAAM,CA8D7E;AAED,6HAA6H;AAC7H,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAGvD"}
|
|
@@ -412,6 +412,12 @@ export function placeText(description) {
|
|
|
412
412
|
for (const fact of description.facts)
|
|
413
413
|
lines.push(`- ${fact.label} (${fact.name}): ${fact.value ?? `not worked out — ${fact.refused}`}`);
|
|
414
414
|
}
|
|
415
|
+
/* Each video a view places, and whether it plays: what an agent reads to confirm a hero (f-video-hero). */
|
|
416
|
+
if (description.videos && description.videos.length > 0) {
|
|
417
|
+
lines.push("Videos:");
|
|
418
|
+
for (const video of description.videos)
|
|
419
|
+
lines.push(`- ${videoLine(video)}`);
|
|
420
|
+
}
|
|
415
421
|
if (description.problems.length > 0) {
|
|
416
422
|
lines.push("Problems:");
|
|
417
423
|
for (const problem of description.problems)
|
|
@@ -419,6 +425,11 @@ export function placeText(description) {
|
|
|
419
425
|
}
|
|
420
426
|
return lines.join("\n");
|
|
421
427
|
}
|
|
428
|
+
/** A placed video in one line: what it shows, where it is, what the browser is handed, how it plays, and whether it will. */
|
|
429
|
+
export function videoLine(video) {
|
|
430
|
+
const how = video.autoplay ? "plays as a background, muted and looping, with no controls" : "plays with the browser's controls";
|
|
431
|
+
return `${video.text} (${video.field} of ${video.record}): ${video.source}${video.duration !== undefined ? `, ${Math.round(video.duration)} s` : ""}, ${video.poster ? "with a poster" : "no poster"}; ${how}${video.cover ? ", filling its box" : ""}; ${video.playable ? "playable" : `not playable: ${video.why ?? "it is not a video a browser plays"}`}.`;
|
|
432
|
+
}
|
|
422
433
|
/** A line of facts as its face draws it: a chip a space from what is beside it, two runs of words a dot apart. */
|
|
423
434
|
function runsSaid(runs) {
|
|
424
435
|
return runs.map((run, at) => (at === 0 ? "" : run.field === undefined && runs[at - 1].field === undefined ? " · " : " ") + run.text).join("");
|