@graview/core 0.1.27 → 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/capital.d.ts +2 -0
- package/dist/capital.d.ts.map +1 -1
- package/dist/capital.js +2 -0
- package/dist/capital.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 +52 -21
- 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 +78 -7
- 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 +434 -34
- 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 +33 -0
- package/dist/document/policy-words.d.ts.map +1 -0
- package/dist/document/policy-words.js +69 -0
- package/dist/document/policy-words.js.map +1 -0
- 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 +27 -28
- 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 +31 -11
- 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 +290 -59
- 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,182 @@
|
|
|
1
|
+
import { fieldOf } from "../document/field-spec.js";
|
|
2
|
+
import { nameKey } from "../labels.js";
|
|
3
|
+
import { article, fieldWords, humanizeField, labelOf, nounOf, pluralOf } from "../schema/define-node.js";
|
|
4
|
+
import { edgeWords } from "../schema/value-words.js";
|
|
5
|
+
/** A mapping that names something the kind has not got. Thrown before any row is read: it is the caller's to fix, not the sheet's. */
|
|
6
|
+
export class ImportMappingError extends Error {
|
|
7
|
+
problems;
|
|
8
|
+
constructor(problems) {
|
|
9
|
+
super(problems.join(" "));
|
|
10
|
+
this.problems = problems;
|
|
11
|
+
this.name = "ImportMappingError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const schemaOf = (from) => ("schema" in from && !("definitions" in from) ? from.schema : from);
|
|
15
|
+
/** The relations declared toward `kind` by other kinds (and by itself), by name. */
|
|
16
|
+
function incoming(schema, kind) {
|
|
17
|
+
const found = new Map();
|
|
18
|
+
for (const definition of schema.definitions) {
|
|
19
|
+
for (const [name, decl] of Object.entries(definition.edges)) {
|
|
20
|
+
if (decl.to !== "*" && !decl.to.includes(kind))
|
|
21
|
+
continue;
|
|
22
|
+
const list = found.get(name) ?? [];
|
|
23
|
+
list.push({ from: definition.kind, decl });
|
|
24
|
+
found.set(name, list);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return found;
|
|
28
|
+
}
|
|
29
|
+
/** The kind's field as an import reads it: its document spec, or a word when a document has no type for it. */
|
|
30
|
+
export function fieldSpecFor(definition, field) {
|
|
31
|
+
const shape = definition.fields.shape ?? {};
|
|
32
|
+
if (!Object.hasOwn(shape, field))
|
|
33
|
+
return undefined;
|
|
34
|
+
const read = fieldOf(shape[field]);
|
|
35
|
+
const optional = shape[field].safeParse?.(undefined).success ?? false;
|
|
36
|
+
const spec = "spec" in read ? read.spec : { type: "string", ...(optional ? {} : { required: true }) };
|
|
37
|
+
return { spec, schema: shape[field] };
|
|
38
|
+
}
|
|
39
|
+
/** Reads a mapping against the kind's declaration; a target it has not got is an `ImportMappingError`. */
|
|
40
|
+
export function readMapping(schema, kind, mapping,
|
|
41
|
+
/** The fields the importer's sight keeps from it (Roadmap f-field-sight): to the importer, fields the kind does not have. */
|
|
42
|
+
kept) {
|
|
43
|
+
const definition = schema.tryDefinition(kind);
|
|
44
|
+
if (!definition)
|
|
45
|
+
throw new ImportMappingError([`This app has no kind called “${kind}”.`]);
|
|
46
|
+
const noun = nounOf(definition, kind);
|
|
47
|
+
const edges = definition.edges;
|
|
48
|
+
const toward = incoming(schema, kind);
|
|
49
|
+
const columns = [];
|
|
50
|
+
const problems = [];
|
|
51
|
+
for (const [column, target] of Object.entries(mapping)) {
|
|
52
|
+
if (target === null || target === undefined)
|
|
53
|
+
continue;
|
|
54
|
+
const name = typeof target === "string" ? target : "field" in target ? target.field : target.relation;
|
|
55
|
+
const wantsField = typeof target === "string" || "field" in target;
|
|
56
|
+
const direction = typeof target === "object" && target !== null && "relation" in target ? target.direction : undefined;
|
|
57
|
+
if (wantsField) {
|
|
58
|
+
const field = kept?.(name) ? undefined : fieldSpecFor(definition, name);
|
|
59
|
+
if (field) {
|
|
60
|
+
columns.push({ column, as: "field", field: name, ...field });
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (typeof target !== "string") {
|
|
64
|
+
problems.push(`The ${column} column goes to “${name}”, which ${withNoun(noun)} has no field called.`);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (direction !== "in" && Object.hasOwn(edges, name)) {
|
|
69
|
+
const decl = edges[name];
|
|
70
|
+
columns.push({ column, as: "relation", relation: name, direction: "out", kinds: decl.to === "*" ? [...schema.kinds] : [...decl.to], one: decl.cardinality === "one" });
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const far = direction === "out" ? undefined : toward.get(name);
|
|
74
|
+
if (far && far.length > 0) {
|
|
75
|
+
columns.push({ column, as: "relation", relation: name, direction: "in", kinds: [...new Set(far.map((one) => one.from))], one: far.some((one) => one.decl.cardinality === "one") });
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
problems.push(`The ${column} column goes to “${name}”, which is neither a field of ${withNoun(noun)} nor a relation it has.`);
|
|
79
|
+
}
|
|
80
|
+
if (problems.length > 0)
|
|
81
|
+
throw new ImportMappingError(problems);
|
|
82
|
+
return columns;
|
|
83
|
+
}
|
|
84
|
+
const withNoun = (noun) => `${article(noun)} ${noun}`;
|
|
85
|
+
/** A header's words for comparing: case, accents, punctuation and a plural "s" aside. */
|
|
86
|
+
function key(text) {
|
|
87
|
+
return nameKey(humanizeField(text))
|
|
88
|
+
.replace(/[^\p{L}\p{N} ]+/gu, " ")
|
|
89
|
+
.replace(/\s+/g, " ")
|
|
90
|
+
.trim();
|
|
91
|
+
}
|
|
92
|
+
const singular = (text) => text.replace(/(ies)$/, "y").replace(/(?<=[^s])s$/, "");
|
|
93
|
+
/**
|
|
94
|
+
* A MAPPING PROPOSED FROM THE HEADER ROW (FR-177), for the seat or a
|
|
95
|
+
* builder to offer and a person to correct. A header matches a field by
|
|
96
|
+
* its name, its label or its name spoken ("Booked on" for `bookedOn`), a
|
|
97
|
+
* plural aside; a relation by its name, its words from either end, or the
|
|
98
|
+
* noun or plural of the kind at its far end ("Event" for a link to an
|
|
99
|
+
* event). A header that starts with the kind's own noun is read without it
|
|
100
|
+
* ("Vendor name" is the name). Each field or relation is matched once, by
|
|
101
|
+
* the first header that names it; what nothing answers to is `unmatched`.
|
|
102
|
+
*/
|
|
103
|
+
export function proposeMapping(declaration, kind, header) {
|
|
104
|
+
const schema = schemaOf(declaration);
|
|
105
|
+
const definition = schema.tryDefinition(kind);
|
|
106
|
+
if (!definition)
|
|
107
|
+
throw new ImportMappingError([`This app has no kind called “${kind}”.`]);
|
|
108
|
+
const noun = nounOf(definition, kind);
|
|
109
|
+
const shape = definition.fields.shape ?? {};
|
|
110
|
+
const candidates = [];
|
|
111
|
+
const add = (target, said, id, words) => {
|
|
112
|
+
const keys = new Set();
|
|
113
|
+
for (const word of words) {
|
|
114
|
+
if (!word)
|
|
115
|
+
continue;
|
|
116
|
+
keys.add(key(word));
|
|
117
|
+
keys.add(singular(key(word)));
|
|
118
|
+
}
|
|
119
|
+
candidates.push({ target, said, keys, id });
|
|
120
|
+
};
|
|
121
|
+
for (const field of Object.keys(shape)) {
|
|
122
|
+
const words = fieldWords(definition, field);
|
|
123
|
+
const extra = field === "label" || field === "name" || field === "title" ? ["name", "title", noun] : [];
|
|
124
|
+
add({ field }, `the field ${words}`, `field:${field}`, [field, words, ...extra]);
|
|
125
|
+
}
|
|
126
|
+
for (const [name, decl] of Object.entries(definition.edges)) {
|
|
127
|
+
const kinds = decl.to === "*" ? [] : decl.to;
|
|
128
|
+
const far = kinds.flatMap((one) => [one, nounOf(schema.tryDefinition(one), one), pluralOf(schema, one)]);
|
|
129
|
+
add({ relation: name }, `the relation “${edgeWords(schema, kind, name, "out")}”`, `out:${name}`, [name, decl.description, ...far]);
|
|
130
|
+
}
|
|
131
|
+
for (const [name, list] of incoming(schema, kind)) {
|
|
132
|
+
if (Object.hasOwn(definition.edges, name))
|
|
133
|
+
continue;
|
|
134
|
+
const far = list.flatMap(({ from }) => [from, nounOf(schema.tryDefinition(from), from), pluralOf(schema, from)]);
|
|
135
|
+
const inverse = list.map(({ from }) => edgeWords(schema, from, name, "in"));
|
|
136
|
+
add({ relation: name, direction: "in" }, `the relation “${inverse[0]}”`, `in:${name}`, [name, ...inverse, ...far]);
|
|
137
|
+
}
|
|
138
|
+
const used = new Set();
|
|
139
|
+
const mapping = {};
|
|
140
|
+
const columns = [];
|
|
141
|
+
const unmatched = [];
|
|
142
|
+
const nounKey = key(noun);
|
|
143
|
+
for (const column of header) {
|
|
144
|
+
const own = key(column);
|
|
145
|
+
const asked = [own, singular(own), ...(own.startsWith(`${nounKey} `) ? [own.slice(nounKey.length + 1), singular(own.slice(nounKey.length + 1))] : [])];
|
|
146
|
+
const found = asked.map((one) => candidates.find((candidate) => !used.has(candidate.id) && candidate.keys.has(one))).find((one) => one !== undefined);
|
|
147
|
+
if (!found) {
|
|
148
|
+
unmatched.push(column);
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
used.add(found.id);
|
|
152
|
+
mapping[column] = found.target;
|
|
153
|
+
columns.push({ column, target: found.target, said: found.said });
|
|
154
|
+
}
|
|
155
|
+
const missing = Object.keys(shape)
|
|
156
|
+
.filter((field) => !used.has(`field:${field}`))
|
|
157
|
+
.filter((field) => fieldSpecFor(definition, field)?.spec.required === true && definition.defaults?.[field] === undefined)
|
|
158
|
+
.map((field) => fieldWords(definition, field));
|
|
159
|
+
return { mapping, columns, unmatched, missing, ...matchFor(schema, definition, kind, columns) };
|
|
160
|
+
}
|
|
161
|
+
/** A field whose values name one record each: an email, a code, a key, a reference, an id of somebody else's. */
|
|
162
|
+
const KEYISH = /^(e-?mail|code|sku|key|ref|reference|externalId|[a-z]+(Id|Code|Number|Ref))$/;
|
|
163
|
+
const PROBE = "graview-import-probe";
|
|
164
|
+
/** What `proposeMapping` suggests rows are matched by: a key column, else the column the name is read from. */
|
|
165
|
+
function matchFor(schema, definition, kind, columns) {
|
|
166
|
+
const plural = pluralOf(schema, kind).toLowerCase();
|
|
167
|
+
const fieldColumns = columns.flatMap((one) => ("field" in one.target ? [{ column: one.column, field: one.target.field }] : []));
|
|
168
|
+
const keyed = fieldColumns.find(({ field }) => fieldSpecFor(definition, field)?.spec.type === "email" || KEYISH.test(field));
|
|
169
|
+
if (keyed)
|
|
170
|
+
return { match: { column: keyed.column, field: keyed.field }, matchSaid: `rows are matched to ${plural} by ${keyed.column}` };
|
|
171
|
+
// The column the kind's name is read from: a record is called what that cell says.
|
|
172
|
+
const naming = fieldColumns.find(({ field }) => {
|
|
173
|
+
try {
|
|
174
|
+
return labelOf(definition, { id: "", kind, [field]: PROBE }) === PROBE;
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
return naming ? { match: "label", matchSaid: `rows are matched to ${plural} by their name, under ${naming.column}` } : {};
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/import/mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { Violation } from "../invariants/types.js";
|
|
2
|
+
import type { Author, Operation, Via } from "../ops/types.js";
|
|
3
|
+
import type { Principal } from "../permissions/types.js";
|
|
4
|
+
import type { AnySchema } from "../schema/schema.js";
|
|
5
|
+
import { type PlannedChange, type Store } from "../store.js";
|
|
6
|
+
import { type ImportMapping, type ImportMatch } from "./mapping.js";
|
|
7
|
+
/**
|
|
8
|
+
* ROWS TO RECORDS (FR-177). A spreadsheet became an app only by a chat
|
|
9
|
+
* retyping it fifty records at a time; `importRows` takes the rows as they
|
|
10
|
+
* are — arrays under a header row, or records keyed by header — and a
|
|
11
|
+
* mapping from columns to the kind's fields and relations, reads each cell
|
|
12
|
+
* by its field's type, links a cell that names another kind's record by
|
|
13
|
+
* its label (an exact name, or the one label it starts, as acts take
|
|
14
|
+
* names), and lands every row that fits as ONE batch: undone as one,
|
|
15
|
+
* attributed to the importer, `via: "import"`. A row that does not fit is
|
|
16
|
+
* left out and said, in words, with every reason; the rest still land.
|
|
17
|
+
* Asked with `preview: true` (or as `previewImport`), it says all of that
|
|
18
|
+
* and keeps nothing.
|
|
19
|
+
*/
|
|
20
|
+
/** One row: cells in the header's order, or a record keyed by header. */
|
|
21
|
+
export type ImportRow = readonly unknown[] | Readonly<Record<string, unknown>>;
|
|
22
|
+
export interface ImportOptions {
|
|
23
|
+
/** Who is importing. The rows are judged by their policy and resolved by their sight, and the history names them. */
|
|
24
|
+
readonly by: Author | Principal;
|
|
25
|
+
/** Say what would happen, and keep nothing. */
|
|
26
|
+
readonly preview?: boolean;
|
|
27
|
+
/** The channel each op records. Defaults to `"import"`. */
|
|
28
|
+
readonly via?: Via;
|
|
29
|
+
/** What the batch was, in a sentence. Defaults to "Import 52 vendors". */
|
|
30
|
+
readonly intent?: string;
|
|
31
|
+
/** The batch the ops are kept under. Defaults to a fresh one. */
|
|
32
|
+
readonly batch?: string;
|
|
33
|
+
/** `3/4/2024` is the 4th of March, read day first; else the 3rd of April. */
|
|
34
|
+
readonly dayFirst?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* A HOST'S LAST WORD (as `ApplyOptions.admit`): asked with the import as
|
|
37
|
+
* planned before anything is kept, its ops as they would be appended;
|
|
38
|
+
* whatever it throws goes on up and nothing is kept.
|
|
39
|
+
*/
|
|
40
|
+
readonly admit?: (planned: PlannedChange) => void;
|
|
41
|
+
/**
|
|
42
|
+
* HOW A ROW FINDS THE RECORD IT IS ALREADY: `"label"`, a record of the
|
|
43
|
+
* kind called what the row would call it; `{ column, field }`, one whose
|
|
44
|
+
* `field` holds what the row has under `column`. Found under the
|
|
45
|
+
* importer's sight among the live records, a row that finds one changes
|
|
46
|
+
* it — only the fields the row has, through the kind's edit act, so the
|
|
47
|
+
* policy is asked as a press on "Change" would be — and links what it
|
|
48
|
+
* names that the record is not yet linked to; one that finds none makes
|
|
49
|
+
* one. Unsaid, every row makes a record, as before.
|
|
50
|
+
*/
|
|
51
|
+
readonly match?: ImportMatch;
|
|
52
|
+
}
|
|
53
|
+
/** A link a row makes: the relation, which way it runs, and the record at the far end. */
|
|
54
|
+
export interface ImportLink {
|
|
55
|
+
readonly relation: string;
|
|
56
|
+
readonly direction: "out" | "in";
|
|
57
|
+
readonly id: string;
|
|
58
|
+
readonly label: string;
|
|
59
|
+
}
|
|
60
|
+
/** A field a row changes on the record it found: what it held, and what it will. */
|
|
61
|
+
export interface ImportChange {
|
|
62
|
+
readonly field: string;
|
|
63
|
+
readonly from: unknown;
|
|
64
|
+
readonly to: unknown;
|
|
65
|
+
}
|
|
66
|
+
/** What became of one row. */
|
|
67
|
+
export interface ImportRowOutcome {
|
|
68
|
+
/** The row as a spreadsheet numbers it: the header is row 1, the first record row 2. */
|
|
69
|
+
readonly row: number;
|
|
70
|
+
readonly made: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* What the row does: `make` a record, `change` the one it found (its
|
|
73
|
+
* fields, or links it lacked), `leave` that one as it is, or is `refuse`d.
|
|
74
|
+
*/
|
|
75
|
+
readonly action: "make" | "change" | "leave" | "refuse";
|
|
76
|
+
/** The fields a row that found its record changes on it, under `match`. */
|
|
77
|
+
readonly changes?: readonly ImportChange[];
|
|
78
|
+
/** The record it makes (or made), when it is not refused. */
|
|
79
|
+
readonly id?: string;
|
|
80
|
+
readonly label?: string;
|
|
81
|
+
readonly fields?: Readonly<Record<string, unknown>>;
|
|
82
|
+
readonly links: readonly ImportLink[];
|
|
83
|
+
/** Every reason it is refused, in words; empty for a row that is made. */
|
|
84
|
+
readonly refused: readonly string[];
|
|
85
|
+
/** The row's outcome in one sentence: "Row 4 would make Bloom & Co, linked to Smith wedding." */
|
|
86
|
+
readonly sentence: string;
|
|
87
|
+
}
|
|
88
|
+
export interface ImportResult {
|
|
89
|
+
readonly kind: string;
|
|
90
|
+
/** Whether anything was kept: false for a preview, and for an import with no row that fits. */
|
|
91
|
+
readonly kept: boolean;
|
|
92
|
+
readonly rows: readonly ImportRowOutcome[];
|
|
93
|
+
/** Rows made (or that would be). */
|
|
94
|
+
readonly made: number;
|
|
95
|
+
/** Rows that found their record and change it (or would), under `match`. */
|
|
96
|
+
readonly changed: number;
|
|
97
|
+
/** Rows that found their record and leave it as it is, under `match`. */
|
|
98
|
+
readonly unchanged: number;
|
|
99
|
+
/** Links those rows make. */
|
|
100
|
+
readonly linked: number;
|
|
101
|
+
/** Rows refused. */
|
|
102
|
+
readonly refused: number;
|
|
103
|
+
/** Header columns the mapping does not import. */
|
|
104
|
+
readonly ignored: readonly string[];
|
|
105
|
+
/** The totals, in a sentence. */
|
|
106
|
+
readonly sentence: string;
|
|
107
|
+
/** The batch it was kept under — what `store.undo` takes to take it back. */
|
|
108
|
+
readonly batch?: string;
|
|
109
|
+
readonly ops?: readonly Operation[];
|
|
110
|
+
/** Problems the import brought that were not there before it, once kept. */
|
|
111
|
+
readonly introduces?: readonly Violation[];
|
|
112
|
+
}
|
|
113
|
+
/** Says what a row would do: preview `importRows`. */
|
|
114
|
+
export declare function previewImport<S extends AnySchema>(store: Store<S>, kind: string, rows: readonly ImportRow[], mapping: ImportMapping, options: Omit<ImportOptions, "preview">): ImportResult;
|
|
115
|
+
export declare function importRows<S extends AnySchema>(store: Store<S>, kind: string, rows: readonly ImportRow[], mapping: ImportMapping, options: ImportOptions): ImportResult;
|
|
116
|
+
//# sourceMappingURL=rows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../src/import/rows.ts"],"names":[],"mappings":"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"}
|