@graview/core 0.1.28 → 0.1.29
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 +17 -0
- package/dist/amount-input.d.ts +21 -0
- package/dist/amount-input.d.ts.map +1 -0
- package/dist/amount-input.js +96 -0
- package/dist/amount-input.js.map +1 -0
- package/dist/answer-seen.d.ts +38 -0
- package/dist/answer-seen.d.ts.map +1 -0
- package/dist/answer-seen.js +122 -0
- package/dist/answer-seen.js.map +1 -0
- package/dist/app-places.d.ts +56 -0
- package/dist/app-places.d.ts.map +1 -0
- package/dist/app-places.js +153 -0
- package/dist/app-places.js.map +1 -0
- package/dist/arrange.d.ts +2 -2
- package/dist/arrange.d.ts.map +1 -1
- package/dist/arrange.js +2 -2
- package/dist/arrange.js.map +1 -1
- package/dist/arrangement-words.d.ts +3 -0
- package/dist/arrangement-words.d.ts.map +1 -0
- package/dist/arrangement-words.js +50 -0
- package/dist/arrangement-words.js.map +1 -0
- package/dist/arrangement.d.ts +25 -3
- package/dist/arrangement.d.ts.map +1 -1
- package/dist/arrangement.js +36 -32
- package/dist/arrangement.js.map +1 -1
- package/dist/arranging.d.ts.map +1 -1
- package/dist/arranging.js +19 -8
- package/dist/arranging.js.map +1 -1
- package/dist/bind.d.ts +3 -0
- package/dist/bind.d.ts.map +1 -1
- package/dist/bind.js.map +1 -1
- package/dist/capabilities.js +1 -1
- package/dist/capabilities.js.map +1 -1
- package/dist/check.d.ts +3 -0
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +3 -0
- package/dist/check.js.map +1 -1
- package/dist/city.d.ts +58 -50
- package/dist/city.d.ts.map +1 -1
- package/dist/city.js +160 -147
- package/dist/city.js.map +1 -1
- package/dist/cli/check/brand.js +1 -1
- package/dist/cli/check/brand.js.map +1 -1
- package/dist/cli/check/clock-rules.d.ts +4 -0
- package/dist/cli/check/clock-rules.d.ts.map +1 -0
- package/dist/cli/check/clock-rules.js +26 -0
- package/dist/cli/check/clock-rules.js.map +1 -0
- package/dist/cli/check/field-sight.d.ts +11 -0
- package/dist/cli/check/field-sight.d.ts.map +1 -0
- package/dist/cli/check/field-sight.js +113 -0
- package/dist/cli/check/field-sight.js.map +1 -0
- 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/lenses.d.ts +1 -1
- package/dist/cli/check/lenses.d.ts.map +1 -1
- package/dist/cli/check/lenses.js +43 -2
- package/dist/cli/check/lenses.js.map +1 -1
- package/dist/cli/check/relations.d.ts.map +1 -1
- package/dist/cli/check/relations.js +2 -1
- package/dist/cli/check/relations.js.map +1 -1
- package/dist/cli/check.d.ts.map +1 -1
- package/dist/cli/check.js +7 -4
- package/dist/cli/check.js.map +1 -1
- package/dist/cli/describe.d.ts.map +1 -1
- package/dist/cli/describe.js +44 -3
- package/dist/cli/describe.js.map +1 -1
- package/dist/cli/docs.d.ts.map +1 -1
- package/dist/cli/docs.js +4 -3
- package/dist/cli/docs.js.map +1 -1
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/types.js +10 -1
- package/dist/cli/types.js.map +1 -1
- package/dist/clock-readers.d.ts +18 -0
- package/dist/clock-readers.d.ts.map +1 -0
- package/dist/clock-readers.js +70 -0
- package/dist/clock-readers.js.map +1 -0
- package/dist/clock.d.ts +30 -0
- package/dist/clock.d.ts.map +1 -0
- package/dist/clock.js +41 -0
- package/dist/clock.js.map +1 -0
- package/dist/columns.d.ts.map +1 -1
- package/dist/columns.js +2 -1
- package/dist/columns.js.map +1 -1
- package/dist/conformance/fixtures.d.ts.map +1 -1
- package/dist/conformance/fixtures.js +326 -43
- package/dist/conformance/fixtures.js.map +1 -1
- package/dist/days.d.ts +53 -4
- package/dist/days.d.ts.map +1 -1
- package/dist/days.js +136 -16
- package/dist/days.js.map +1 -1
- package/dist/describe.d.ts +1 -0
- package/dist/describe.d.ts.map +1 -1
- package/dist/describe.js +1 -0
- package/dist/describe.js.map +1 -1
- package/dist/document/act-findings.d.ts.map +1 -1
- package/dist/document/act-findings.js +13 -3
- package/dist/document/act-findings.js.map +1 -1
- package/dist/document/amount.d.ts +4 -0
- package/dist/document/amount.d.ts.map +1 -0
- package/dist/document/amount.js +22 -0
- package/dist/document/amount.js.map +1 -0
- package/dist/document/block-context.d.ts.map +1 -1
- package/dist/document/block-context.js +1 -0
- package/dist/document/block-context.js.map +1 -1
- package/dist/document/blocks.d.ts +13 -3
- package/dist/document/blocks.d.ts.map +1 -1
- package/dist/document/blocks.js +56 -12
- package/dist/document/blocks.js.map +1 -1
- package/dist/document/compile-checked.d.ts.map +1 -1
- package/dist/document/compile-checked.js +3 -2
- package/dist/document/compile-checked.js.map +1 -1
- package/dist/document/compile.d.ts.map +1 -1
- package/dist/document/compile.js +30 -7
- package/dist/document/compile.js.map +1 -1
- package/dist/document/compiled.d.ts +4 -2
- package/dist/document/compiled.d.ts.map +1 -1
- package/dist/document/compiled.js +50 -19
- package/dist/document/compiled.js.map +1 -1
- package/dist/document/describe-coverage.d.ts.map +1 -1
- package/dist/document/describe-coverage.js +2 -1
- package/dist/document/describe-coverage.js.map +1 -1
- package/dist/document/describe-place.d.ts +6 -2
- package/dist/document/describe-place.d.ts.map +1 -1
- package/dist/document/describe-place.js +14 -8
- package/dist/document/describe-place.js.map +1 -1
- package/dist/document/diff.d.ts +2 -0
- package/dist/document/diff.d.ts.map +1 -1
- package/dist/document/diff.js +34 -6
- package/dist/document/diff.js.map +1 -1
- package/dist/document/durations.d.ts +8 -0
- package/dist/document/durations.d.ts.map +1 -0
- package/dist/document/durations.js +82 -0
- package/dist/document/durations.js.map +1 -0
- package/dist/document/edit.d.ts +1 -1
- package/dist/document/edit.d.ts.map +1 -1
- package/dist/document/edit.js +195 -22
- package/dist/document/edit.js.map +1 -1
- package/dist/document/expr/evaluate.d.ts +1 -1
- package/dist/document/expr/evaluate.d.ts.map +1 -1
- package/dist/document/expr/evaluate.js +17 -4
- package/dist/document/expr/evaluate.js.map +1 -1
- package/dist/document/field-spec.d.ts.map +1 -1
- package/dist/document/field-spec.js +15 -1
- package/dist/document/field-spec.js.map +1 -1
- package/dist/document/format-findings.d.ts +4 -0
- package/dist/document/format-findings.d.ts.map +1 -0
- package/dist/document/format-findings.js +39 -0
- package/dist/document/format-findings.js.map +1 -0
- package/dist/document/format-rules.d.ts +8 -0
- package/dist/document/format-rules.d.ts.map +1 -0
- package/dist/document/format-rules.js +19 -0
- package/dist/document/format-rules.js.map +1 -0
- package/dist/document/format-words.d.ts +9 -0
- package/dist/document/format-words.d.ts.map +1 -0
- package/dist/document/format-words.js +29 -0
- package/dist/document/format-words.js.map +1 -0
- package/dist/document/graview-template.d.ts +2 -2
- package/dist/document/migrate.d.ts +1 -0
- package/dist/document/migrate.d.ts.map +1 -1
- package/dist/document/migrate.js +45 -1
- package/dist/document/migrate.js.map +1 -1
- package/dist/document/money.d.ts +14 -0
- package/dist/document/money.d.ts.map +1 -0
- package/dist/document/money.js +14 -0
- package/dist/document/money.js.map +1 -0
- 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 +19 -4
- package/dist/document/policy-words.js.map +1 -1
- package/dist/document/rule-line.d.ts.map +1 -1
- package/dist/document/rule-line.js +16 -12
- package/dist/document/rule-line.js.map +1 -1
- package/dist/document/rules.d.ts.map +1 -1
- package/dist/document/rules.js +6 -5
- package/dist/document/rules.js.map +1 -1
- package/dist/document/schema.d.ts +62 -19
- package/dist/document/schema.d.ts.map +1 -1
- package/dist/document/schema.js +30 -4
- package/dist/document/schema.js.map +1 -1
- package/dist/document/template-parse.d.ts.map +1 -1
- package/dist/document/template-parse.js +9 -2
- package/dist/document/template-parse.js.map +1 -1
- package/dist/document/template.d.ts +3 -13
- package/dist/document/template.d.ts.map +1 -1
- package/dist/document/template.js +24 -22
- package/dist/document/template.js.map +1 -1
- package/dist/document/thumbnail.d.ts.map +1 -1
- package/dist/document/thumbnail.js +4 -3
- package/dist/document/thumbnail.js.map +1 -1
- package/dist/document/to-document.d.ts +0 -1
- package/dist/document/to-document.d.ts.map +1 -1
- package/dist/document/to-document.js +19 -2
- package/dist/document/to-document.js.map +1 -1
- package/dist/document/view-specs.d.ts.map +1 -1
- package/dist/document/view-specs.js +3 -0
- package/dist/document/view-specs.js.map +1 -1
- package/dist/document/views.d.ts +2 -0
- package/dist/document/views.d.ts.map +1 -1
- package/dist/document/views.js +18 -6
- package/dist/document/views.js.map +1 -1
- package/dist/document.schema.json +63 -6
- package/dist/excerpt-of.d.ts +14 -0
- package/dist/excerpt-of.d.ts.map +1 -0
- package/dist/excerpt-of.js +120 -0
- package/dist/excerpt-of.js.map +1 -0
- package/dist/excerpt.d.ts +9 -0
- package/dist/excerpt.d.ts.map +1 -0
- package/dist/excerpt.js +43 -0
- package/dist/excerpt.js.map +1 -0
- package/dist/field-sight.d.ts +33 -0
- package/dist/field-sight.d.ts.map +1 -0
- package/dist/field-sight.js +313 -0
- package/dist/field-sight.js.map +1 -0
- package/dist/forms.d.ts +1 -0
- package/dist/forms.d.ts.map +1 -1
- package/dist/forms.js +1 -0
- package/dist/forms.js.map +1 -1
- package/dist/graph/archived.d.ts +25 -0
- package/dist/graph/archived.d.ts.map +1 -0
- package/dist/graph/archived.js +16 -0
- package/dist/graph/archived.js.map +1 -0
- package/dist/graph/diff.d.ts.map +1 -1
- package/dist/graph/diff.js +2 -1
- package/dist/graph/diff.js.map +1 -1
- package/dist/graph/graph.d.ts +37 -13
- package/dist/graph/graph.d.ts.map +1 -1
- package/dist/graph/graph.js +86 -40
- package/dist/graph/graph.js.map +1 -1
- package/dist/graph/tracked.d.ts +8 -8
- package/dist/graph/tracked.d.ts.map +1 -1
- package/dist/graph/tracked.js +15 -20
- package/dist/graph/tracked.js.map +1 -1
- package/dist/graph/types.d.ts +16 -8
- package/dist/graph/types.d.ts.map +1 -1
- package/dist/graph/types.js.map +1 -1
- package/dist/import/coerce.d.ts +45 -0
- package/dist/import/coerce.d.ts.map +1 -0
- package/dist/import/coerce.js +252 -0
- package/dist/import/coerce.js.map +1 -0
- package/dist/import/csv.d.ts +16 -0
- package/dist/import/csv.d.ts.map +1 -0
- package/dist/import/csv.js +77 -0
- package/dist/import/csv.js.map +1 -0
- package/dist/import/index.d.ts +17 -0
- package/dist/import/index.d.ts.map +1 -0
- package/dist/import/index.js +13 -0
- package/dist/import/index.js.map +1 -0
- package/dist/import/mapping.d.ts +99 -0
- package/dist/import/mapping.d.ts.map +1 -0
- package/dist/import/mapping.js +182 -0
- package/dist/import/mapping.js.map +1 -0
- package/dist/import/rows.d.ts +116 -0
- package/dist/import/rows.d.ts.map +1 -0
- package/dist/import/rows.js +584 -0
- package/dist/import/rows.js.map +1 -0
- package/dist/index.d.ts +38 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -16
- package/dist/index.js.map +1 -1
- package/dist/invariants/engine.d.ts +5 -1
- package/dist/invariants/engine.d.ts.map +1 -1
- package/dist/invariants/engine.js +4 -3
- package/dist/invariants/engine.js.map +1 -1
- package/dist/invariants/types.d.ts +18 -3
- package/dist/invariants/types.d.ts.map +1 -1
- package/dist/json-schema.d.ts +1 -0
- package/dist/json-schema.d.ts.map +1 -1
- package/dist/json-schema.js +2 -0
- package/dist/json-schema.js.map +1 -1
- package/dist/labels.d.ts.map +1 -1
- package/dist/labels.js +2 -1
- package/dist/labels.js.map +1 -1
- package/dist/lines.d.ts +1 -0
- package/dist/lines.d.ts.map +1 -1
- package/dist/lines.js +5 -3
- package/dist/lines.js.map +1 -1
- package/dist/markdown.d.ts +102 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +460 -0
- package/dist/markdown.js.map +1 -0
- package/dist/mutations/arg-shape.d.ts +95 -0
- package/dist/mutations/arg-shape.d.ts.map +1 -0
- package/dist/mutations/arg-shape.js +101 -0
- package/dist/mutations/arg-shape.js.map +1 -0
- package/dist/mutations/define-mutation.d.ts +48 -2
- package/dist/mutations/define-mutation.d.ts.map +1 -1
- package/dist/mutations/define-mutation.js +103 -36
- package/dist/mutations/define-mutation.js.map +1 -1
- package/dist/mutations/derive-edits.d.ts +16 -1
- package/dist/mutations/derive-edits.d.ts.map +1 -1
- package/dist/mutations/derive-edits.js +67 -28
- package/dist/mutations/derive-edits.js.map +1 -1
- package/dist/mutations/derive-repeats.d.ts +8 -0
- package/dist/mutations/derive-repeats.d.ts.map +1 -0
- package/dist/mutations/derive-repeats.js +118 -0
- package/dist/mutations/derive-repeats.js.map +1 -0
- package/dist/mutations/derived-names.d.ts +20 -0
- package/dist/mutations/derived-names.d.ts.map +1 -0
- package/dist/mutations/derived-names.js +19 -0
- package/dist/mutations/derived-names.js.map +1 -0
- package/dist/mutations/form.d.ts +21 -1
- package/dist/mutations/form.d.ts.map +1 -1
- package/dist/mutations/form.js +19 -2
- package/dist/mutations/form.js.map +1 -1
- package/dist/mutations/invalid-arguments.d.ts +14 -0
- package/dist/mutations/invalid-arguments.d.ts.map +1 -0
- package/dist/mutations/invalid-arguments.js +18 -0
- package/dist/mutations/invalid-arguments.js.map +1 -0
- package/dist/mutations/keep-link.d.ts +27 -0
- package/dist/mutations/keep-link.d.ts.map +1 -0
- package/dist/mutations/keep-link.js +56 -0
- package/dist/mutations/keep-link.js.map +1 -0
- package/dist/mutations/kept-arguments.d.ts +26 -0
- package/dist/mutations/kept-arguments.d.ts.map +1 -0
- package/dist/mutations/kept-arguments.js +77 -0
- package/dist/mutations/kept-arguments.js.map +1 -0
- package/dist/mutations/node-ref.d.ts +0 -80
- package/dist/mutations/node-ref.d.ts.map +1 -1
- package/dist/mutations/node-ref.js +0 -93
- package/dist/mutations/node-ref.js.map +1 -1
- package/dist/mutations/types.d.ts +17 -1
- package/dist/mutations/types.d.ts.map +1 -1
- package/dist/mutations/words.d.ts +0 -13
- package/dist/mutations/words.d.ts.map +1 -1
- package/dist/mutations/words.js +1 -12
- package/dist/mutations/words.js.map +1 -1
- package/dist/ops/kept-fields.d.ts +7 -0
- package/dist/ops/kept-fields.d.ts.map +1 -0
- package/dist/ops/kept-fields.js +24 -0
- package/dist/ops/kept-fields.js.map +1 -0
- package/dist/ops/lineage.d.ts +37 -0
- package/dist/ops/lineage.d.ts.map +1 -0
- package/dist/ops/lineage.js +26 -0
- package/dist/ops/lineage.js.map +1 -0
- package/dist/ops/log.d.ts.map +1 -1
- package/dist/ops/log.js +1 -0
- package/dist/ops/log.js.map +1 -1
- package/dist/ops/provenance.d.ts +68 -0
- package/dist/ops/provenance.d.ts.map +1 -0
- package/dist/ops/provenance.js +83 -0
- package/dist/ops/provenance.js.map +1 -0
- package/dist/ops/types.d.ts +25 -0
- package/dist/ops/types.d.ts.map +1 -1
- package/dist/ops/withheld.d.ts +25 -2
- package/dist/ops/withheld.d.ts.map +1 -1
- package/dist/ops/withheld.js +6 -15
- package/dist/ops/withheld.js.map +1 -1
- package/dist/permissions/policy.d.ts +6 -1
- package/dist/permissions/policy.d.ts.map +1 -1
- package/dist/permissions/policy.js +29 -9
- package/dist/permissions/policy.js.map +1 -1
- package/dist/permissions/sight.d.ts +40 -2
- package/dist/permissions/sight.d.ts.map +1 -1
- package/dist/permissions/sight.js +25 -2
- package/dist/permissions/sight.js.map +1 -1
- package/dist/permissions/types.d.ts +21 -0
- package/dist/permissions/types.d.ts.map +1 -1
- package/dist/permissions/types.js.map +1 -1
- package/dist/places.d.ts +0 -49
- package/dist/places.d.ts.map +1 -1
- package/dist/places.js +2 -141
- package/dist/places.js.map +1 -1
- package/dist/provenance.d.ts +14 -0
- package/dist/provenance.d.ts.map +1 -0
- package/dist/provenance.js +13 -0
- package/dist/provenance.js.map +1 -0
- package/dist/repeat-words.d.ts +13 -0
- package/dist/repeat-words.d.ts.map +1 -0
- package/dist/repeat-words.js +56 -0
- package/dist/repeat-words.js.map +1 -0
- package/dist/repeat.d.ts +59 -0
- package/dist/repeat.d.ts.map +1 -0
- package/dist/repeat.js +155 -0
- package/dist/repeat.js.map +1 -0
- package/dist/scaffold/project.d.ts.map +1 -1
- package/dist/scaffold/project.js +13 -0
- package/dist/scaffold/project.js.map +1 -1
- package/dist/scaffold/ui.js +2 -2
- package/dist/scene-districts.d.ts +2 -1
- package/dist/scene-districts.d.ts.map +1 -1
- package/dist/scene-districts.js +2 -1
- package/dist/scene-districts.js.map +1 -1
- package/dist/scene.d.ts +4 -2
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +2 -1
- package/dist/scene.js.map +1 -1
- package/dist/schema/amount-mark.d.ts +13 -0
- package/dist/schema/amount-mark.d.ts.map +1 -0
- package/dist/schema/amount-mark.js +20 -0
- package/dist/schema/amount-mark.js.map +1 -0
- package/dist/schema/amount-words.d.ts +12 -0
- package/dist/schema/amount-words.d.ts.map +1 -0
- package/dist/schema/amount-words.js +31 -0
- package/dist/schema/amount-words.js.map +1 -0
- package/dist/schema/app-link-field.d.ts +4 -0
- package/dist/schema/app-link-field.d.ts.map +1 -0
- package/dist/schema/app-link-field.js +19 -0
- package/dist/schema/app-link-field.js.map +1 -0
- package/dist/schema/app-link.d.ts +41 -0
- package/dist/schema/app-link.d.ts.map +1 -0
- package/dist/schema/app-link.js +40 -0
- package/dist/schema/app-link.js.map +1 -0
- package/dist/schema/define-node.d.ts +25 -94
- package/dist/schema/define-node.d.ts.map +1 -1
- package/dist/schema/define-node.js +3 -247
- package/dist/schema/define-node.js.map +1 -1
- package/dist/schema/field-words.d.ts +45 -0
- package/dist/schema/field-words.d.ts.map +1 -0
- package/dist/schema/field-words.js +124 -0
- package/dist/schema/field-words.js.map +1 -0
- package/dist/schema/json-schema.d.ts +6 -1
- package/dist/schema/json-schema.d.ts.map +1 -1
- package/dist/schema/json-schema.js +83 -2
- package/dist/schema/json-schema.js.map +1 -1
- package/dist/schema/markdown-field.d.ts +4 -0
- package/dist/schema/markdown-field.d.ts.map +1 -0
- package/dist/schema/markdown-field.js +20 -0
- package/dist/schema/markdown-field.js.map +1 -0
- package/dist/schema/markdown.d.ts +6 -0
- package/dist/schema/markdown.d.ts.map +1 -0
- package/dist/schema/markdown.js +27 -0
- package/dist/schema/markdown.js.map +1 -0
- package/dist/schema/reading.d.ts +86 -0
- package/dist/schema/reading.d.ts.map +1 -0
- package/dist/schema/reading.js +270 -0
- package/dist/schema/reading.js.map +1 -0
- package/dist/schema/repeat-field.d.ts +5 -0
- package/dist/schema/repeat-field.d.ts.map +1 -0
- package/dist/schema/repeat-field.js +20 -0
- package/dist/schema/repeat-field.js.map +1 -0
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +5 -1
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/to-json-schema.d.ts +14 -0
- package/dist/schema/to-json-schema.d.ts.map +1 -0
- package/dist/schema/to-json-schema.js +616 -0
- package/dist/schema/to-json-schema.js.map +1 -0
- package/dist/schema/typed-field-builders.d.ts +8 -0
- package/dist/schema/typed-field-builders.d.ts.map +1 -0
- package/dist/schema/typed-field-builders.js +30 -0
- package/dist/schema/typed-field-builders.js.map +1 -0
- package/dist/schema/typed-field-of.d.ts +4 -0
- package/dist/schema/typed-field-of.d.ts.map +1 -0
- package/dist/schema/typed-field-of.js +14 -0
- package/dist/schema/typed-field-of.js.map +1 -0
- package/dist/schema/typed-fields.d.ts +11 -0
- package/dist/schema/typed-fields.d.ts.map +1 -0
- package/dist/schema/typed-fields.js +16 -0
- package/dist/schema/typed-fields.js.map +1 -0
- package/dist/schema/types.d.ts +14 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/value-words.d.ts +21 -0
- package/dist/schema/value-words.d.ts.map +1 -0
- package/dist/schema/value-words.js +32 -0
- package/dist/schema/value-words.js.map +1 -0
- package/dist/search.d.ts +91 -4
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +288 -53
- package/dist/search.js.map +1 -1
- package/dist/seat.d.ts +19 -0
- package/dist/seat.d.ts.map +1 -0
- package/dist/seat.js +19 -0
- package/dist/seat.js.map +1 -0
- package/dist/seen.d.ts +15 -33
- package/dist/seen.d.ts.map +1 -1
- package/dist/seen.js +44 -135
- package/dist/seen.js.map +1 -1
- package/dist/store.d.ts +46 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +121 -22
- package/dist/store.js.map +1 -1
- package/dist/theme/types.d.ts +7 -1
- package/dist/theme/types.d.ts.map +1 -1
- package/dist/theme/types.js.map +1 -1
- package/dist/typed.d.ts +12 -3
- package/dist/typed.d.ts.map +1 -1
- package/dist/typed.js.map +1 -1
- package/dist/validate-graph.d.ts.map +1 -1
- package/dist/validate-graph.js +3 -10
- package/dist/validate-graph.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/views/types.d.ts +57 -8
- package/dist/views/types.d.ts.map +1 -1
- package/dist/views/types.js +22 -3
- package/dist/views/types.js.map +1 -1
- package/dist/village.d.ts +63 -0
- package/dist/village.d.ts.map +1 -0
- package/dist/village.js +143 -0
- package/dist/village.js.map +1 -0
- package/dist/watched.d.ts +12 -45
- package/dist/watched.d.ts.map +1 -1
- package/dist/watched.js +7 -119
- package/dist/watched.js.map +1 -1
- package/dist/words.d.ts +33 -0
- package/dist/words.d.ts.map +1 -0
- package/dist/words.js +36 -0
- package/dist/words.js.map +1 -0
- package/package.json +37 -2
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { TypedField } from "./typed-fields.js";
|
|
2
|
+
/**
|
|
3
|
+
* A LENGTH OF TIME AS IT IS TYPED, IN MINUTES: "90", "1:30", "1h 30m",
|
|
4
|
+
* "1 h 30 min", "1.5 h", "2 hours and 15 minutes", "1d", "1:30:00". A bare number is
|
|
5
|
+
* minutes. Anything else is undefined; a part of a minute is rounded.
|
|
6
|
+
*/
|
|
7
|
+
export declare function parseDuration(input: unknown): number | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* A DURATION AS IT IS READ: "1 h 30 min", "45 min", "2 h". The numbers are
|
|
10
|
+
* the locale's (`Intl`, through the app's or the reader's locale), the units
|
|
11
|
+
* short and the same everywhere: `Intl`'s own short units say "1 hr" in
|
|
12
|
+
* en-US, where the field promises "1 h".
|
|
13
|
+
*/
|
|
14
|
+
export declare function sayDuration(minutes: number, locale?: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* A PHONE NUMBER AS IT IS READ: grouped as "(555) 123-4567" for a reader in
|
|
17
|
+
* the United States or Canada where it is a North American number, and as
|
|
18
|
+
* it was entered everywhere else — a format nobody chose is worse than the
|
|
19
|
+
* one the person typed.
|
|
20
|
+
*/
|
|
21
|
+
export declare function sayPhone(phone: string, locale?: string): string;
|
|
22
|
+
/** A phone number as a `tel:` link: its `+` and digits, and its extension; undefined for fewer than three digits. */
|
|
23
|
+
export declare function telHref(phone: string): string | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* A PLACE AS A LINK TO THE READER'S MAPS APP. No one address opens every
|
|
26
|
+
* reader's own: `geo:` does nothing in a desktop browser, and an address on
|
|
27
|
+
* one maker's maps opens the other's website. So on Apple's platforms
|
|
28
|
+
* maps.apple.com, which opens Maps; everywhere else Google's universal Maps
|
|
29
|
+
* address, which opens the Google Maps app on Android and the map in the
|
|
30
|
+
* browser elsewhere. Neither needs a key; nothing is fetched until it is
|
|
31
|
+
* followed.
|
|
32
|
+
*/
|
|
33
|
+
export declare function mapsHref(place: string, apple?: boolean): string;
|
|
34
|
+
type Readable = {
|
|
35
|
+
readonly fields?: unknown;
|
|
36
|
+
readonly computed?: unknown;
|
|
37
|
+
};
|
|
38
|
+
/** What a kind's field holds where it is a phone, a place or a duration: a stored field's mark, or a computed field that works out a length of time. */
|
|
39
|
+
export declare function fieldSays(definition: Readable | undefined, key: string): TypedField | undefined;
|
|
40
|
+
/** A phone, a place or a duration in words; undefined for a value that is not one. */
|
|
41
|
+
export declare function typedWords(type: TypedField | undefined, value: unknown, locale?: string): string | undefined;
|
|
42
|
+
/** Where a phone or a place takes its reader: a `tel:` link, or the maps app. */
|
|
43
|
+
export declare function typedHref(type: TypedField | undefined, value: unknown): string | undefined;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=field-words.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-words.d.ts","sourceRoot":"","sources":["../../src/schema/field-words.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAYpD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAgBhE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAOpE;AAKD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/D;AAED,qHAAqH;AACrH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIzD;AAKD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,OAAmB,GAAG,MAAM,CAG1E;AAED,KAAK,QAAQ,GAAG;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAoB3E,wJAAwJ;AACxJ,wBAAgB,SAAS,CAAC,UAAU,EAAE,QAAQ,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE/F;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI5G;AAED,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAG1F"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { localeFor, numberAsRead } from "../days.js";
|
|
2
|
+
import { typedFieldOf } from "./typed-field-of.js";
|
|
3
|
+
/*
|
|
4
|
+
* A PHONE NUMBER, A PLACE AND A DURATION, SAID AND LINKED (`typed-fields.ts`
|
|
5
|
+
* holds what they are). On `@graview/core/words`: a face says them as it
|
|
6
|
+
* draws a record, a form reads a duration as it sends one and an import as
|
|
7
|
+
* it reads a cell — none of it before a reader opens a record.
|
|
8
|
+
*/
|
|
9
|
+
/** Minutes in a day, an hour and a minute, by the letter their unit starts with. */
|
|
10
|
+
const PER = { d: 1440, h: 60, m: 1 };
|
|
11
|
+
/**
|
|
12
|
+
* A LENGTH OF TIME AS IT IS TYPED, IN MINUTES: "90", "1:30", "1h 30m",
|
|
13
|
+
* "1 h 30 min", "1.5 h", "2 hours and 15 minutes", "1d", "1:30:00". A bare number is
|
|
14
|
+
* minutes. Anything else is undefined; a part of a minute is rounded.
|
|
15
|
+
*/
|
|
16
|
+
export function parseDuration(input) {
|
|
17
|
+
if (typeof input === "number")
|
|
18
|
+
return Number.isFinite(input) && input >= 0 ? Math.round(input) : undefined;
|
|
19
|
+
if (typeof input !== "string")
|
|
20
|
+
return undefined;
|
|
21
|
+
const text = input.trim().toLowerCase();
|
|
22
|
+
if (/^\d+$/.test(text))
|
|
23
|
+
return Number(text);
|
|
24
|
+
// Hours and minutes, and the seconds a spreadsheet's time keeps: "1:30", "1:30:00".
|
|
25
|
+
const clock = /^(\d+):([0-5]\d)(?::([0-5]\d))?$/.exec(text);
|
|
26
|
+
if (clock)
|
|
27
|
+
return Number(clock[1]) * 60 + Number(clock[2]) + Math.round(Number(clock[3] ?? 0) / 60);
|
|
28
|
+
let total = 0;
|
|
29
|
+
let found = false;
|
|
30
|
+
const rest = text.replace(/(\d*[.,]?\d+) *(days?|d|hours?|hrs?|hr|h|minutes?|mins?|min|m)(?![a-z])/g, (_, amount, unit) => {
|
|
31
|
+
found = true;
|
|
32
|
+
total += Number(amount.replace(",", ".")) * PER[unit[0]];
|
|
33
|
+
return " ";
|
|
34
|
+
});
|
|
35
|
+
return found && /^[\s,+]*(?:and[\s,+]*)*$/.test(rest) ? Math.round(total) : undefined;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A DURATION AS IT IS READ: "1 h 30 min", "45 min", "2 h". The numbers are
|
|
39
|
+
* the locale's (`Intl`, through the app's or the reader's locale), the units
|
|
40
|
+
* short and the same everywhere: `Intl`'s own short units say "1 hr" in
|
|
41
|
+
* en-US, where the field promises "1 h".
|
|
42
|
+
*/
|
|
43
|
+
export function sayDuration(minutes, locale) {
|
|
44
|
+
if (!Number.isFinite(minutes))
|
|
45
|
+
return String(minutes);
|
|
46
|
+
const whole = Math.round(Math.abs(minutes));
|
|
47
|
+
const hours = Math.floor(whole / 60);
|
|
48
|
+
const rest = whole % 60;
|
|
49
|
+
const said = [hours ? `${numberAsRead(hours, locale)} h` : "", rest || !hours ? `${numberAsRead(rest, locale)} min` : ""].filter(Boolean).join(" ");
|
|
50
|
+
return minutes < 0 ? `−${said}` : said;
|
|
51
|
+
}
|
|
52
|
+
/** A North American number: an optional +1, its area code, exchange and line, and an extension. */
|
|
53
|
+
const NANP = /^(\+?1[ .-]?)?\(?([2-9]\d\d)\)?[ .-]?(\d{3})[ .-]?(\d{4})(?: *(?:ext\.?|x|#) *(\d+))?$/i;
|
|
54
|
+
/**
|
|
55
|
+
* A PHONE NUMBER AS IT IS READ: grouped as "(555) 123-4567" for a reader in
|
|
56
|
+
* the United States or Canada where it is a North American number, and as
|
|
57
|
+
* it was entered everywhere else — a format nobody chose is worse than the
|
|
58
|
+
* one the person typed.
|
|
59
|
+
*/
|
|
60
|
+
export function sayPhone(phone, locale) {
|
|
61
|
+
const entered = phone.trim();
|
|
62
|
+
const nanp = /[-_](US|CA)\b/i.test(localeFor(locale)) ? NANP.exec(entered) : null;
|
|
63
|
+
if (!nanp)
|
|
64
|
+
return entered;
|
|
65
|
+
const [, country, area, exchange, line, ext] = nanp;
|
|
66
|
+
return `${country?.startsWith("+") ? "+1 " : ""}(${area}) ${exchange}-${line}${ext ? ` ext. ${ext}` : ""}`;
|
|
67
|
+
}
|
|
68
|
+
/** A phone number as a `tel:` link: its `+` and digits, and its extension; undefined for fewer than three digits. */
|
|
69
|
+
export function telHref(phone) {
|
|
70
|
+
const [, main = "", ext] = /^(.*?)(?: *(?:ext\.?|x|#) *(\d+))?$/i.exec(phone.trim()) ?? [];
|
|
71
|
+
const digits = main.replace(/\D/g, "");
|
|
72
|
+
return digits.length < 3 ? undefined : `tel:${main.startsWith("+") ? "+" : ""}${digits}${ext ? `;ext=${ext}` : ""}`;
|
|
73
|
+
}
|
|
74
|
+
/** Whether this page is read on a Mac, an iPhone or an iPad, whose Maps app opens maps.apple.com. */
|
|
75
|
+
const onApple = () => /Mac|iPhone|iPad|iPod/.test(globalThis.navigator?.userAgent ?? "");
|
|
76
|
+
/**
|
|
77
|
+
* A PLACE AS A LINK TO THE READER'S MAPS APP. No one address opens every
|
|
78
|
+
* reader's own: `geo:` does nothing in a desktop browser, and an address on
|
|
79
|
+
* one maker's maps opens the other's website. So on Apple's platforms
|
|
80
|
+
* maps.apple.com, which opens Maps; everywhere else Google's universal Maps
|
|
81
|
+
* address, which opens the Google Maps app on Android and the map in the
|
|
82
|
+
* browser elsewhere. Neither needs a key; nothing is fetched until it is
|
|
83
|
+
* followed.
|
|
84
|
+
*/
|
|
85
|
+
export function mapsHref(place, apple = onApple()) {
|
|
86
|
+
const query = encodeURIComponent(place.trim());
|
|
87
|
+
return apple ? `https://maps.apple.com/?q=${query}` : `https://www.google.com/maps/search/?api=1&query=${query}`;
|
|
88
|
+
}
|
|
89
|
+
const shapeOf = (definition) => definition?.fields?.shape ?? {};
|
|
90
|
+
const ownField = (definition, key) => {
|
|
91
|
+
const shape = shapeOf(definition);
|
|
92
|
+
return Object.hasOwn(shape, key) ? typedFieldOf(shape[key]) : undefined;
|
|
93
|
+
};
|
|
94
|
+
/*
|
|
95
|
+
* A COMPUTED FIELD THAT WORKS OUT A LENGTH OF TIME says so: `as:
|
|
96
|
+
* "duration"` on its declaration, which a document's compile writes for each
|
|
97
|
+
* one it reads as a sum of durations from the parsed expression
|
|
98
|
+
* (`document/durations.ts`) and a TypeScript declaration says itself. A face
|
|
99
|
+
* reads that and nothing of the expression's words.
|
|
100
|
+
*/
|
|
101
|
+
const workedOutAs = (definition, key) => {
|
|
102
|
+
const computed = definition.computed;
|
|
103
|
+
const entry = computed && Object.hasOwn(computed, key) ? computed[key] : undefined;
|
|
104
|
+
return typeof entry === "object" ? entry.as : undefined;
|
|
105
|
+
};
|
|
106
|
+
/** What a kind's field holds where it is a phone, a place or a duration: a stored field's mark, or a computed field that works out a length of time. */
|
|
107
|
+
export function fieldSays(definition, key) {
|
|
108
|
+
return ownField(definition, key) ?? (definition && workedOutAs(definition, key) === "duration" ? "duration" : undefined);
|
|
109
|
+
}
|
|
110
|
+
/** A phone, a place or a duration in words; undefined for a value that is not one. */
|
|
111
|
+
export function typedWords(type, value, locale) {
|
|
112
|
+
if (type === "duration")
|
|
113
|
+
return typeof value === "number" ? sayDuration(value, locale) : undefined;
|
|
114
|
+
if (type === "phone")
|
|
115
|
+
return typeof value === "string" ? sayPhone(value, locale) : undefined;
|
|
116
|
+
return type === "place" && typeof value === "string" ? value.trim() : undefined;
|
|
117
|
+
}
|
|
118
|
+
/** Where a phone or a place takes its reader: a `tel:` link, or the maps app. */
|
|
119
|
+
export function typedHref(type, value) {
|
|
120
|
+
if (typeof value !== "string" || !value.trim())
|
|
121
|
+
return undefined;
|
|
122
|
+
return type === "phone" ? telHref(value) : type === "place" ? mapsHref(value) : undefined;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=field-words.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-words.js","sourceRoot":"","sources":["../../src/schema/field-words.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import type { AnySchema } from "./schema.js";
|
|
2
|
+
import { type JsonSchema } from "./to-json-schema.js";
|
|
2
3
|
import type { AnyNodeDefinition } from "./types.js";
|
|
3
|
-
export type JsonSchema
|
|
4
|
+
export type { JsonSchema };
|
|
4
5
|
/**
|
|
5
6
|
* One source, three outputs: the same Zod declaration produces runtime
|
|
6
7
|
* validation, TypeScript inference, and the JSON Schema an agent tool
|
|
7
8
|
* definition needs. Nothing is written twice, so nothing drifts.
|
|
8
9
|
*/
|
|
9
10
|
export declare function toJsonSchema(schema: unknown): JsonSchema;
|
|
11
|
+
export declare function formatsByName(ctx: {
|
|
12
|
+
readonly zodSchema: unknown;
|
|
13
|
+
readonly jsonSchema: JsonSchema;
|
|
14
|
+
}): void;
|
|
10
15
|
/** JSON Schema for one node kind, including its id and kind discriminator. */
|
|
11
16
|
export declare function nodeJsonSchema(definition: AnyNodeDefinition): JsonSchema;
|
|
12
17
|
export interface MutationToolSchema {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../../src/schema/json-schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../../src/schema/json-schema.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,CAExD;AAsBD,wBAAgB,aAAa,CAAC,GAAG,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GAAG,IAAI,CAgDzG;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,UAAU,EAAE,iBAAiB,GAAG,UAAU,CAaxE;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IACjC,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAC7F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,GAAG,kBAAkB,CAoCrB;AAuBD,oDAAoD;AACpD,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAMxE"}
|
|
@@ -1,16 +1,30 @@
|
|
|
1
|
+
import { ARCHIVED } from "../graph/archived.js";
|
|
1
2
|
import * as z from "./zod.js";
|
|
2
3
|
import { argumentsTaken, takesAnId } from "../mutations/define-mutation.js";
|
|
3
4
|
import { nodeRefArgs } from "../mutations/node-ref.js";
|
|
5
|
+
import { isAppLinkField } from "./app-link.js";
|
|
6
|
+
import { EVERY, isRepeatField, WEEKDAYS } from "../repeat.js";
|
|
7
|
+
import { isMarkdownField } from "./markdown.js";
|
|
8
|
+
import { typedFieldOf } from "./typed-field-of.js";
|
|
9
|
+
import { amountOf } from "./amount-mark.js";
|
|
10
|
+
import { amountMark, amountSentence } from "./amount-words.js";
|
|
11
|
+
import { writeJsonSchema } from "./to-json-schema.js";
|
|
4
12
|
/**
|
|
5
13
|
* One source, three outputs: the same Zod declaration produces runtime
|
|
6
14
|
* validation, TypeScript inference, and the JSON Schema an agent tool
|
|
7
15
|
* definition needs. Nothing is written twice, so nothing drifts.
|
|
8
16
|
*/
|
|
9
17
|
export function toJsonSchema(schema) {
|
|
10
|
-
return
|
|
18
|
+
return writeJsonSchema(schema, formatsByName);
|
|
11
19
|
}
|
|
12
20
|
/** zod's names for string formats that JSON Schema calls something else; the rest are the same word. */
|
|
13
21
|
const JSON_SCHEMA_FORMATS = { guid: "uuid", url: "uri", datetime: "date-time", json_string: "json-string" };
|
|
22
|
+
/** What a phone, a place and a duration hold, for an agent, where the field says nothing of itself. */
|
|
23
|
+
const TYPED_WORDS = {
|
|
24
|
+
phone: "A phone number as it is written, like +1 555 123 4567 or 020 7946 0958 ext. 12.",
|
|
25
|
+
place: "An address or a place's name, as a person would search a map for it.",
|
|
26
|
+
duration: "A length of time in whole minutes: 90 is 1 h 30 min.",
|
|
27
|
+
};
|
|
14
28
|
/*
|
|
15
29
|
* A FORMAT IS SAID BY ITS NAME (a tool schema is a stability surface). zod
|
|
16
30
|
* writes its own regex for `z.email()`, `z.uuid()`, `z.iso.datetime()` beside
|
|
@@ -19,7 +33,50 @@ const JSON_SCHEMA_FORMATS = { guid: "uuid", url: "uri", datetime: "date-time", j
|
|
|
19
33
|
* A string format says `format` and nothing else; a pattern the author wrote
|
|
20
34
|
* with `.regex(…)` is the author's, and is kept.
|
|
21
35
|
*/
|
|
22
|
-
function formatsByName(ctx) {
|
|
36
|
+
export function formatsByName(ctx) {
|
|
37
|
+
// Another app's address (FR-171), beside its pattern: an agent sets an address, not a name.
|
|
38
|
+
if (isAppLinkField(ctx.zodSchema))
|
|
39
|
+
ctx.jsonSchema["x-graview-app-link"] = true;
|
|
40
|
+
// How a date repeats, kept beside it as `<date>Repeat`: written out where a declaration checks it by a function of its own.
|
|
41
|
+
if (isRepeatField(ctx.zodSchema)) {
|
|
42
|
+
ctx.jsonSchema["x-graview-repeat"] = true;
|
|
43
|
+
if (!ctx.jsonSchema["type"] && !ctx.jsonSchema["anyOf"] && !ctx.jsonSchema["oneOf"])
|
|
44
|
+
Object.assign(ctx.jsonSchema, repeatJson());
|
|
45
|
+
}
|
|
46
|
+
// Prose in Markdown (FR-180): a caller writes Markdown, and it is kept as written.
|
|
47
|
+
if (isMarkdownField(ctx.zodSchema)) {
|
|
48
|
+
ctx.jsonSchema["contentMediaType"] = "text/markdown";
|
|
49
|
+
// Said in words too: not every tool caller reads `contentMediaType`.
|
|
50
|
+
const said = ctx.jsonSchema["description"];
|
|
51
|
+
if (!(typeof said === "string" && said.endsWith("Written in Markdown.")))
|
|
52
|
+
ctx.jsonSchema["description"] = `${typeof said === "string" && said ? `${said.replace(/\.?$/, ".")} ` : ""}Written in Markdown.`;
|
|
53
|
+
}
|
|
54
|
+
/*
|
|
55
|
+
* A PHONE, A PLACE OR A DURATION says which (`x-graview-type`), so an agent
|
|
56
|
+
* sends the shape the field keeps: a phone as it is written, a place as an
|
|
57
|
+
* address or a name, and a duration as WHOLE MINUTES — 90, never "1h 30m".
|
|
58
|
+
* Where the field says nothing of itself, its description says the same.
|
|
59
|
+
*/
|
|
60
|
+
const typed = typedFieldOf(ctx.zodSchema);
|
|
61
|
+
if (typed) {
|
|
62
|
+
const js = ctx.jsonSchema;
|
|
63
|
+
js["x-graview-type"] = typed;
|
|
64
|
+
if (typed === "duration")
|
|
65
|
+
js["x-graview-unit"] = "minutes";
|
|
66
|
+
js["description"] ??= TYPED_WORDS[typed];
|
|
67
|
+
}
|
|
68
|
+
// An amount says what it is (money in USD, a percent as a fraction), so a model sets 10000, never "$10,000" or 15 for 15%.
|
|
69
|
+
const marked = amountOf(ctx.zodSchema, false);
|
|
70
|
+
if (marked) {
|
|
71
|
+
const amount = amountMark(marked);
|
|
72
|
+
ctx.jsonSchema["x-graview-format"] = amount.format ?? "unit";
|
|
73
|
+
if (amount.currency)
|
|
74
|
+
ctx.jsonSchema["x-graview-currency"] = amount.currency;
|
|
75
|
+
if (amount.unit && amount.format !== "money")
|
|
76
|
+
ctx.jsonSchema["x-graview-unit"] = amount.unit;
|
|
77
|
+
const said = ctx.jsonSchema["description"];
|
|
78
|
+
ctx.jsonSchema["description"] = typeof said === "string" && said.length > 0 ? `${said} ${amountSentence(amount)}` : amountSentence(amount);
|
|
79
|
+
}
|
|
23
80
|
const def = ctx.zodSchema._zod?.def;
|
|
24
81
|
if (!def || def.type !== "string" || typeof def.format !== "string" || def.format === "regex")
|
|
25
82
|
return;
|
|
@@ -44,6 +101,10 @@ export function nodeJsonSchema(definition) {
|
|
|
44
101
|
// The kind that stands for the people says so (Roadmap f-people-kind): a record's id is a member's principal id.
|
|
45
102
|
if (definition.people)
|
|
46
103
|
js["x-graview-people"] = true;
|
|
104
|
+
// A stored record may be archived (FR-173): the framework's mark, never a declared field.
|
|
105
|
+
const properties = js["properties"];
|
|
106
|
+
if (properties)
|
|
107
|
+
properties[ARCHIVED] = { type: "boolean", const: true, description: "Set when the record is archived: kept with its links and history, out of lists, counts and rules." };
|
|
47
108
|
return js;
|
|
48
109
|
}
|
|
49
110
|
/**
|
|
@@ -90,6 +151,26 @@ export function mutationToolSchema(mutation) {
|
|
|
90
151
|
nodeRefs: refs,
|
|
91
152
|
};
|
|
92
153
|
}
|
|
154
|
+
/** How a date repeats, as JSON Schema: what `repeatSchema` checks, said for an agent. */
|
|
155
|
+
function repeatJson() {
|
|
156
|
+
const day = { type: "string", pattern: "^\\d{4}-\\d{2}-\\d{2}$" };
|
|
157
|
+
const int = (minimum, maximum) => ({ type: "integer", minimum, maximum });
|
|
158
|
+
return {
|
|
159
|
+
type: "object",
|
|
160
|
+
description: 'How the date beside it repeats; the date is the first occurrence. "on" is weekdays for "week", days of the month (-1 the last) for "month".',
|
|
161
|
+
properties: {
|
|
162
|
+
every: { type: "string", enum: [...EVERY] },
|
|
163
|
+
interval: int(1, 99),
|
|
164
|
+
on: { type: "array", minItems: 1, maxItems: 31, items: { anyOf: [{ type: "string", enum: [...WEEKDAYS] }, int(-1, 31)] } },
|
|
165
|
+
until: day,
|
|
166
|
+
count: int(1, 1000),
|
|
167
|
+
except: { type: "array", maxItems: 500, items: day },
|
|
168
|
+
continues: { type: "string", maxLength: 200 },
|
|
169
|
+
},
|
|
170
|
+
required: ["every"],
|
|
171
|
+
additionalProperties: false,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
93
174
|
/** Every node kind's JSON Schema, keyed by kind. */
|
|
94
175
|
export function schemaJson(schema) {
|
|
95
176
|
const out = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../src/schema/json-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../src/schema/json-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-field.d.ts","sourceRoot":"","sources":["../../src/schema/markdown-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,uEAAuE;AACvE,wBAAgB,aAAa,IAAI,CAAC,CAAC,SAAS,CAE3C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { markMarkdown } from "./markdown.js";
|
|
3
|
+
/*
|
|
4
|
+
* PROSE WRITTEN IN MARKDOWN (FR-180), in the classic zod a product writes
|
|
5
|
+
* its kinds in, so it chains like any other field:
|
|
6
|
+
*
|
|
7
|
+
* fields: z.object({
|
|
8
|
+
* title: z.string(),
|
|
9
|
+
* body: markdownField().optional(),
|
|
10
|
+
* })
|
|
11
|
+
*
|
|
12
|
+
* A document says the same as `{"type": "text", "format": "markdown"}`: up
|
|
13
|
+
* to 20,000 characters, asked for in a text area, drawn as prose on the
|
|
14
|
+
* record's page and said as an excerpt everywhere else.
|
|
15
|
+
*/
|
|
16
|
+
/** A text field whose value is Markdown: at most 20,000 characters. */
|
|
17
|
+
export function markdownField() {
|
|
18
|
+
return markMarkdown(z.string().max(20_000));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=markdown-field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-field.js","sourceRoot":"","sources":["../../src/schema/markdown-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;;;;;;;;;GAYG;AAEH,uEAAuE;AACvE,MAAM,UAAU,aAAa;IAC3B,OAAO,YAAY,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const MARKDOWN: unique symbol;
|
|
2
|
+
/** Marks a schema as holding Markdown. */
|
|
3
|
+
export declare const markMarkdown: <T extends object>(schema: T) => T;
|
|
4
|
+
/** Whether a field holds Markdown — under optional, default and nullable. */
|
|
5
|
+
export declare function isMarkdownField(schema: unknown): boolean;
|
|
6
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/schema/markdown.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,QAAQ,eAAuC,CAAC;AAE7D,0CAA0C;AAC1C,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,MAAM,EAAE,QAAQ,CAAC,KAAG,CAAyE,CAAC;AAErI,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAGxD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { defOf } from "./zod.js";
|
|
2
|
+
/*
|
|
3
|
+
* A TEXT FIELD WRITTEN IN MARKDOWN (FR-180).
|
|
4
|
+
*
|
|
5
|
+
* A document says `{"type": "text", "format": "markdown"}`; TypeScript says
|
|
6
|
+
* `markdownField()`. The value is kept as written — the Markdown, not a
|
|
7
|
+
* rendering of it — and the mark is on the schema's def, as a file field's
|
|
8
|
+
* is (`files.ts`), so a clone shares it, a refinement spreads it and a
|
|
9
|
+
* wrapper holds it inside. The record's page draws it as prose; a list, a
|
|
10
|
+
* card, a describe line and a search hit say its start with the syntax
|
|
11
|
+
* taken out (`excerptOf`).
|
|
12
|
+
*
|
|
13
|
+
* A hosted page builds a document's fields up front, and a module both its
|
|
14
|
+
* first chunk and a fetched one reach is a chunk of its own: so a
|
|
15
|
+
* document's field is marked where it is built (`fieldSchema`, by the same
|
|
16
|
+
* `Symbol.for`), and this is reached only by what declares, draws or
|
|
17
|
+
* describes a record.
|
|
18
|
+
*/
|
|
19
|
+
export const MARKDOWN = Symbol.for("@graview/core:markdown");
|
|
20
|
+
/** Marks a schema as holding Markdown. */
|
|
21
|
+
export const markMarkdown = (schema) => ((defOf(schema)[MARKDOWN] = 1), schema);
|
|
22
|
+
/** Whether a field holds Markdown — under optional, default and nullable. */
|
|
23
|
+
export function isMarkdownField(schema) {
|
|
24
|
+
const def = defOf(schema);
|
|
25
|
+
return !!def && (def[MARKDOWN] === 1 || isMarkdownField(def.innerType));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/schema/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AAE7D,0CAA0C;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAmB,MAAS,EAAK,EAAE,CAAC,CAAC,CAAE,KAAK,CAAC,MAAM,CAA6B,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAErI,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAwD,CAAC;IACjF,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { type ReadableField } from "./define-node.js";
|
|
2
|
+
import type { AnyNodeDefinition } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* WHAT TELLS TWO SAME-NAMED THINGS APART, among the nodes a person is
|
|
5
|
+
* choosing from. A single and its album are both "Blue Hour", and every
|
|
6
|
+
* picker, every ask and the Find strip listed "Blue Hour, Blue Hour": a
|
|
7
|
+
* choice nobody could make. For each node whose name another in the list
|
|
8
|
+
* shares, the first fact that differs between them — "single" and "album",
|
|
9
|
+
* or the dates — else its kind, else its id. Nodes with a name of their
|
|
10
|
+
* own get nothing.
|
|
11
|
+
*/
|
|
12
|
+
export declare function tellApart(nodes: readonly ({
|
|
13
|
+
id: string;
|
|
14
|
+
kind: string;
|
|
15
|
+
} & Record<string, unknown>)[], definitionOf: (kind: string) => AnyNodeDefinition | undefined): Map<string, string>;
|
|
16
|
+
/** Resolves a node's prose description, used for a11y and tool text. */
|
|
17
|
+
export declare function describeNode(definition: AnyNodeDefinition | undefined, node: {
|
|
18
|
+
id: string;
|
|
19
|
+
kind: string;
|
|
20
|
+
} & Record<string, unknown>): string;
|
|
21
|
+
/**
|
|
22
|
+
* WHICH of a node's fields a person sees, and HOW each one reads.
|
|
23
|
+
*
|
|
24
|
+
* One implementation, because there were two: the record on a page and the
|
|
25
|
+
* summary on a card each decided this for themselves, and every rule — hide an
|
|
26
|
+
* ordering key, format minutes as a time, render a boolean as a word, drop a
|
|
27
|
+
* value the heading already said — had to be written into both and kept in
|
|
28
|
+
* step by hand. They diverged the day the second one was written, which is how
|
|
29
|
+
* a summary card ended up showing a list's ordering key as a chip reading "0"
|
|
30
|
+
* while the page beside it did not.
|
|
31
|
+
*
|
|
32
|
+
* `said` is what the surrounding view has already put on screen. A value the
|
|
33
|
+
* heading already carries is not information twice, it is the same sentence
|
|
34
|
+
* twice — and where the heading is a SHORTENED form of a field, an exact
|
|
35
|
+
* comparison never catches it, so the summary's stem is compared too.
|
|
36
|
+
*/
|
|
37
|
+
export declare function readableFields(node: Record<string, unknown>, definition: AnyNodeDefinition | undefined, options?: {
|
|
38
|
+
/** How many a GLANCE shows. Unset, every field: a record is read whole (W-156). */
|
|
39
|
+
readonly limit?: number;
|
|
40
|
+
readonly said?: readonly (string | undefined)[];
|
|
41
|
+
/**
|
|
42
|
+
* A GLANCE drops a value the heading already says as a WORD, not only as
|
|
43
|
+
* the whole heading: a vehicle's summary is headed "2027 Subaru Forester
|
|
44
|
+
* Sport", and "Year 2027 · Subaru" under it spent two of its three facts
|
|
45
|
+
* saying the heading again while the price never appeared. A record's
|
|
46
|
+
* full facts keep every field — that is where each is changed.
|
|
47
|
+
*/
|
|
48
|
+
readonly glance?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* PROSE SAID BY ITS START (FR-180): a long text or Markdown read as its
|
|
51
|
+
* first paragraph, line or about 160 characters, the syntax taken out.
|
|
52
|
+
* A glance always is; a line about a record (a seat's answer, a table's
|
|
53
|
+
* cell) asks for it without a glance's choice of fields.
|
|
54
|
+
*/
|
|
55
|
+
readonly excerpt?: boolean;
|
|
56
|
+
/** The app's locale its days are said in (FR-178): a reader's a host passed wins, and the page's when unsaid. */
|
|
57
|
+
readonly locale?: string | undefined;
|
|
58
|
+
}): readonly ReadableField[];
|
|
59
|
+
/**
|
|
60
|
+
* WHETHER A FIELD'S VALUE IS PROSE (FR-147): a string field declared to hold
|
|
61
|
+
* more than 500 characters — a document's `text`, or `z.string().max(5000)`
|
|
62
|
+
* in TypeScript — whatever it holds now, so an empty draft is still edited
|
|
63
|
+
* in a text area; or a value with a line break in it, or longer than 160
|
|
64
|
+
* characters.
|
|
65
|
+
*/
|
|
66
|
+
export declare function isLongText(definition: AnyNodeDefinition | undefined, key: string, value: unknown): boolean;
|
|
67
|
+
/** One run of a record's facts: under a group's title, or (the first) under none. */
|
|
68
|
+
export interface FieldSection<F extends {
|
|
69
|
+
readonly key: string;
|
|
70
|
+
} = ReadableField> {
|
|
71
|
+
readonly title?: string;
|
|
72
|
+
readonly fields: readonly F[];
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A RECORD'S FACTS, IN THE SECTIONS ITS PAGE DECLARES (FR-148).
|
|
76
|
+
*
|
|
77
|
+
* `fields` are read as `readableFields` ordered them. Unsaid, one untitled
|
|
78
|
+
* section of all of them. With `display.page`, its `fields` first, untitled;
|
|
79
|
+
* each of its `groups` under its title; and what neither names under
|
|
80
|
+
* "Details" when there are groups, else after the first fields. A section
|
|
81
|
+
* with nothing to show is left out.
|
|
82
|
+
*/
|
|
83
|
+
export declare function pageSections<F extends {
|
|
84
|
+
readonly key: string;
|
|
85
|
+
}>(definition: AnyNodeDefinition | undefined, fields: readonly F[]): readonly FieldSection<F>[];
|
|
86
|
+
//# sourceMappingURL=reading.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reading.d.ts","sourceRoot":"","sources":["../../src/schema/reading.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAWnF,OAAO,KAAK,EAAE,iBAAiB,EAAc,MAAM,YAAY,CAAC;AAWhE;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,SAAS,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,EAC1E,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,GAC5D,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA8BrB;AAGD,wEAAwE;AACxE,wBAAgB,YAAY,CAC1B,UAAU,EAAE,iBAAiB,GAAG,SAAS,EACzC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3D,MAAM,CAKR;AAcD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,EAAE,iBAAiB,GAAG,SAAS,EACzC,OAAO,GAAE;IACP,mFAAmF;IACnF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IAChD;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,iHAAiH;IACjH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,GACL,SAAS,aAAa,EAAE,CA2G1B;AAgCD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,iBAAiB,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAI1G;AAED,qFAAqF;AACrF,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa;IAC9E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,UAAU,EAAE,iBAAiB,GAAG,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,CAa5J"}
|