@graview/core 0.1.29 → 0.1.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app-places.d.ts +2 -2
- package/dist/app-places.d.ts.map +1 -1
- package/dist/app-places.js +53 -3
- package/dist/app-places.js.map +1 -1
- package/dist/app.d.ts +16 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js.map +1 -1
- package/dist/arrange.d.ts +3 -1
- package/dist/arrange.d.ts.map +1 -1
- package/dist/arrange.js +3 -1
- package/dist/arrange.js.map +1 -1
- package/dist/arrangement.d.ts +18 -0
- package/dist/arrangement.d.ts.map +1 -1
- package/dist/arrangement.js +34 -0
- package/dist/arrangement.js.map +1 -1
- package/dist/arranging.d.ts.map +1 -1
- package/dist/arranging.js +17 -6
- package/dist/arranging.js.map +1 -1
- package/dist/blocks.d.ts +1 -1
- package/dist/blocks.d.ts.map +1 -1
- package/dist/cli/check/brand.d.ts.map +1 -1
- package/dist/cli/check/brand.js +29 -1
- package/dist/cli/check/brand.js.map +1 -1
- package/dist/cli/check/lenses.d.ts.map +1 -1
- package/dist/cli/check/lenses.js +6 -1
- package/dist/cli/check/lenses.js.map +1 -1
- package/dist/cli/check/relations.d.ts +23 -0
- package/dist/cli/check/relations.d.ts.map +1 -1
- package/dist/cli/check/relations.js +53 -3
- package/dist/cli/check/relations.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +32 -0
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/describe.d.ts.map +1 -1
- package/dist/cli/describe.js +27 -4
- package/dist/cli/describe.js.map +1 -1
- package/dist/cli/doctor.d.ts +18 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +58 -5
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/document-schema.d.ts +2 -0
- package/dist/cli/document-schema.d.ts.map +1 -1
- package/dist/cli/document-schema.js +154 -5
- package/dist/cli/document-schema.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/types.js +6 -1
- package/dist/cli/types.js.map +1 -1
- package/dist/conformance/fixtures.d.ts.map +1 -1
- package/dist/conformance/fixtures.js +165 -0
- package/dist/conformance/fixtures.js.map +1 -1
- package/dist/coverage-words.d.ts +18 -0
- package/dist/coverage-words.d.ts.map +1 -0
- package/dist/coverage-words.js +18 -0
- package/dist/coverage-words.js.map +1 -0
- package/dist/document/act-findings.d.ts.map +1 -1
- package/dist/document/act-findings.js +21 -3
- package/dist/document/act-findings.js.map +1 -1
- package/dist/document/blocks.d.ts +20 -7
- package/dist/document/blocks.d.ts.map +1 -1
- package/dist/document/blocks.js +85 -15
- package/dist/document/blocks.js.map +1 -1
- package/dist/document/brand-check.d.ts +5 -0
- package/dist/document/brand-check.d.ts.map +1 -1
- package/dist/document/brand-check.js +16 -2
- package/dist/document/brand-check.js.map +1 -1
- package/dist/document/compile-checked.d.ts.map +1 -1
- package/dist/document/compile-checked.js +11 -4
- package/dist/document/compile-checked.js.map +1 -1
- package/dist/document/compile.d.ts +0 -2
- package/dist/document/compile.d.ts.map +1 -1
- package/dist/document/compile.js +19 -17
- package/dist/document/compile.js.map +1 -1
- package/dist/document/compiled.d.ts +2 -0
- package/dist/document/compiled.d.ts.map +1 -1
- package/dist/document/compiled.js +49 -12
- package/dist/document/compiled.js.map +1 -1
- package/dist/document/computed-values.d.ts +3 -0
- package/dist/document/computed-values.d.ts.map +1 -1
- package/dist/document/computed-values.js +12 -2
- package/dist/document/computed-values.js.map +1 -1
- package/dist/document/describe-coverage.d.ts +3 -0
- package/dist/document/describe-coverage.d.ts.map +1 -1
- package/dist/document/describe-coverage.js +12 -5
- package/dist/document/describe-coverage.js.map +1 -1
- package/dist/document/describe-place.d.ts.map +1 -1
- package/dist/document/describe-place.js +3 -1
- package/dist/document/describe-place.js.map +1 -1
- package/dist/document/diff.d.ts.map +1 -1
- package/dist/document/diff.js +39 -8
- package/dist/document/diff.js.map +1 -1
- package/dist/document/edit.d.ts +1 -1
- package/dist/document/edit.d.ts.map +1 -1
- package/dist/document/edit.js +251 -15
- package/dist/document/edit.js.map +1 -1
- package/dist/document/expr/evaluate.d.ts +25 -0
- package/dist/document/expr/evaluate.d.ts.map +1 -1
- package/dist/document/expr/evaluate.js +38 -0
- package/dist/document/expr/evaluate.js.map +1 -1
- package/dist/document/format-words.d.ts +1 -1
- package/dist/document/format-words.d.ts.map +1 -1
- package/dist/document/format-words.js +3 -1
- package/dist/document/format-words.js.map +1 -1
- package/dist/document/framework-path.d.ts +11 -0
- package/dist/document/framework-path.d.ts.map +1 -0
- package/dist/document/framework-path.js +122 -0
- package/dist/document/framework-path.js.map +1 -0
- package/dist/document/index.d.ts +2 -2
- package/dist/document/index.d.ts.map +1 -1
- package/dist/document/index.js +1 -1
- package/dist/document/index.js.map +1 -1
- package/dist/document/linked-findings.d.ts +5 -0
- package/dist/document/linked-findings.d.ts.map +1 -0
- package/dist/document/linked-findings.js +100 -0
- package/dist/document/linked-findings.js.map +1 -0
- package/dist/document/migrate.d.ts.map +1 -1
- package/dist/document/migrate.js +4 -1
- package/dist/document/migrate.js.map +1 -1
- package/dist/document/policy-words.d.ts +2 -0
- package/dist/document/policy-words.d.ts.map +1 -1
- package/dist/document/policy-words.js +16 -1
- package/dist/document/policy-words.js.map +1 -1
- package/dist/document/right-names.d.ts +10 -0
- package/dist/document/right-names.d.ts.map +1 -0
- package/dist/document/right-names.js +57 -0
- package/dist/document/right-names.js.map +1 -0
- package/dist/document/rules.d.ts.map +1 -1
- package/dist/document/rules.js +13 -5
- package/dist/document/rules.js.map +1 -1
- package/dist/document/schema.d.ts +80 -3
- package/dist/document/schema.d.ts.map +1 -1
- package/dist/document/schema.js +57 -7
- package/dist/document/schema.js.map +1 -1
- package/dist/document/template-parse.d.ts.map +1 -1
- package/dist/document/template-parse.js +36 -3
- package/dist/document/template-parse.js.map +1 -1
- package/dist/document/template.d.ts +13 -1
- package/dist/document/template.d.ts.map +1 -1
- package/dist/document/template.js +29 -9
- package/dist/document/template.js.map +1 -1
- package/dist/document/to-document.d.ts.map +1 -1
- package/dist/document/to-document.js +11 -0
- package/dist/document/to-document.js.map +1 -1
- package/dist/document/views.d.ts +36 -4
- package/dist/document/views.d.ts.map +1 -1
- package/dist/document/views.js +64 -21
- package/dist/document/views.js.map +1 -1
- package/dist/document.schema.json +1037 -51
- package/dist/field-sight.js +2 -2
- package/dist/field-sight.js.map +1 -1
- package/dist/forms.d.ts +1 -0
- package/dist/forms.d.ts.map +1 -1
- package/dist/forms.js +2 -0
- package/dist/forms.js.map +1 -1
- package/dist/graph/archived.d.ts +9 -0
- package/dist/graph/archived.d.ts.map +1 -1
- package/dist/graph/archived.js +9 -0
- package/dist/graph/archived.js.map +1 -1
- package/dist/graph/diff.d.ts +16 -0
- package/dist/graph/diff.d.ts.map +1 -1
- package/dist/graph/diff.js +18 -0
- package/dist/graph/diff.js.map +1 -1
- package/dist/graph/graph.d.ts.map +1 -1
- package/dist/graph/graph.js +5 -8
- package/dist/graph/graph.js.map +1 -1
- package/dist/grid-sort.d.ts +20 -0
- package/dist/grid-sort.d.ts.map +1 -0
- package/dist/grid-sort.js +58 -0
- package/dist/grid-sort.js.map +1 -0
- package/dist/history.d.ts +88 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +146 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +16 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/dist/kind-list.d.ts +78 -0
- package/dist/kind-list.d.ts.map +1 -0
- package/dist/kind-list.js +176 -0
- package/dist/kind-list.js.map +1 -0
- package/dist/linked.d.ts +95 -0
- package/dist/linked.d.ts.map +1 -0
- package/dist/linked.js +181 -0
- package/dist/linked.js.map +1 -0
- package/dist/mutations/derive-edits.d.ts.map +1 -1
- package/dist/mutations/derive-edits.js +89 -38
- package/dist/mutations/derive-edits.js.map +1 -1
- package/dist/mutations/derived-names.d.ts +3 -1
- package/dist/mutations/derived-names.d.ts.map +1 -1
- package/dist/mutations/derived-names.js +5 -3
- package/dist/mutations/derived-names.js.map +1 -1
- package/dist/mutations/edit-start.d.ts +28 -0
- package/dist/mutations/edit-start.d.ts.map +1 -0
- package/dist/mutations/edit-start.js +24 -0
- package/dist/mutations/edit-start.js.map +1 -0
- package/dist/mutations/form.d.ts +12 -0
- package/dist/mutations/form.d.ts.map +1 -1
- package/dist/mutations/form.js +4 -0
- package/dist/mutations/form.js.map +1 -1
- package/dist/mutations/kept-arguments.js +2 -2
- package/dist/mutations/kept-arguments.js.map +1 -1
- package/dist/mutations/types.d.ts +1 -1
- package/dist/mutations/types.d.ts.map +1 -1
- package/dist/navigate.d.ts +13 -0
- package/dist/navigate.d.ts.map +1 -0
- package/dist/navigate.js +13 -0
- package/dist/navigate.js.map +1 -0
- package/dist/ops/digest.d.ts +33 -0
- package/dist/ops/digest.d.ts.map +1 -0
- package/dist/ops/digest.js +47 -0
- package/dist/ops/digest.js.map +1 -0
- package/dist/ops/lineage.d.ts +6 -0
- package/dist/ops/lineage.d.ts.map +1 -1
- package/dist/ops/lineage.js +5 -4
- package/dist/ops/lineage.js.map +1 -1
- package/dist/ops/log.d.ts +6 -0
- package/dist/ops/log.d.ts.map +1 -1
- package/dist/ops/log.js +19 -12
- package/dist/ops/log.js.map +1 -1
- package/dist/ops/suggestions.d.ts +26 -0
- package/dist/ops/suggestions.d.ts.map +1 -0
- package/dist/ops/suggestions.js +21 -0
- package/dist/ops/suggestions.js.map +1 -0
- package/dist/ops/tidying.d.ts +48 -0
- package/dist/ops/tidying.d.ts.map +1 -0
- package/dist/ops/tidying.js +84 -0
- package/dist/ops/tidying.js.map +1 -0
- package/dist/ops/types.d.ts +17 -0
- package/dist/ops/types.d.ts.map +1 -1
- package/dist/ops/undo.d.ts.map +1 -1
- package/dist/ops/undo.js +10 -0
- package/dist/ops/undo.js.map +1 -1
- package/dist/past.d.ts +35 -0
- package/dist/past.d.ts.map +1 -0
- package/dist/past.js +173 -0
- package/dist/past.js.map +1 -0
- package/dist/permissions/policy.d.ts +8 -1
- package/dist/permissions/policy.d.ts.map +1 -1
- package/dist/permissions/policy.js +20 -5
- package/dist/permissions/policy.js.map +1 -1
- package/dist/places.d.ts +6 -2
- package/dist/places.d.ts.map +1 -1
- package/dist/places.js +48 -3
- package/dist/places.js.map +1 -1
- package/dist/scaffold/agents.d.ts.map +1 -1
- package/dist/scaffold/agents.js +13 -0
- package/dist/scaffold/agents.js.map +1 -1
- package/dist/scaffold/project.d.ts.map +1 -1
- package/dist/scaffold/project.js +5 -0
- package/dist/scaffold/project.js.map +1 -1
- package/dist/scaffold/ui.d.ts.map +1 -1
- package/dist/scaffold/ui.js +15 -5
- package/dist/scaffold/ui.js.map +1 -1
- package/dist/schema/app-address.d.ts +5 -0
- package/dist/schema/app-address.d.ts.map +1 -0
- package/dist/schema/app-address.js +10 -0
- package/dist/schema/app-address.js.map +1 -0
- package/dist/schema/app-link.d.ts +1 -4
- package/dist/schema/app-link.d.ts.map +1 -1
- package/dist/schema/app-link.js +5 -7
- package/dist/schema/app-link.js.map +1 -1
- package/dist/schema/define-node.d.ts +16 -0
- package/dist/schema/define-node.d.ts.map +1 -1
- package/dist/schema/define-node.js +6 -0
- package/dist/schema/define-node.js.map +1 -1
- package/dist/schema/files.d.ts +8 -0
- package/dist/schema/files.d.ts.map +1 -1
- package/dist/schema/files.js.map +1 -1
- package/dist/schema/json-schema.d.ts.map +1 -1
- package/dist/schema/json-schema.js +19 -1
- package/dist/schema/json-schema.js.map +1 -1
- package/dist/schema/linked-field.d.ts +6 -0
- package/dist/schema/linked-field.d.ts.map +1 -0
- package/dist/schema/linked-field.js +34 -0
- package/dist/schema/linked-field.js.map +1 -0
- package/dist/schema/linked-reads.d.ts +20 -0
- package/dist/schema/linked-reads.d.ts.map +1 -0
- package/dist/schema/linked-reads.js +69 -0
- package/dist/schema/linked-reads.js.map +1 -0
- package/dist/schema/linked-schema.d.ts +5 -0
- package/dist/schema/linked-schema.d.ts.map +1 -0
- package/dist/schema/linked-schema.js +9 -0
- package/dist/schema/linked-schema.js.map +1 -0
- package/dist/schema/linked.d.ts +147 -0
- package/dist/schema/linked.d.ts.map +1 -0
- package/dist/schema/linked.js +151 -0
- package/dist/schema/linked.js.map +1 -0
- package/dist/schema/reading.d.ts.map +1 -1
- package/dist/schema/reading.js +82 -27
- package/dist/schema/reading.js.map +1 -1
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +11 -4
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/types.d.ts +17 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +30 -2
- package/dist/search.js.map +1 -1
- package/dist/seat-of.d.ts +9 -0
- package/dist/seat-of.d.ts.map +1 -0
- package/dist/seat-of.js +14 -0
- package/dist/seat-of.js.map +1 -0
- package/dist/seen.d.ts +0 -12
- package/dist/seen.d.ts.map +1 -1
- package/dist/seen.js +5 -0
- package/dist/seen.js.map +1 -1
- package/dist/store.d.ts +58 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +96 -11
- package/dist/store.js.map +1 -1
- package/dist/theme/derive.d.ts +16 -0
- package/dist/theme/derive.d.ts.map +1 -1
- package/dist/theme/derive.js +14 -0
- package/dist/theme/derive.js.map +1 -1
- package/dist/theme/marks.d.ts +19 -2
- package/dist/theme/marks.d.ts.map +1 -1
- package/dist/theme/marks.js +67 -2
- package/dist/theme/marks.js.map +1 -1
- package/dist/theme/types.d.ts +7 -2
- package/dist/theme/types.d.ts.map +1 -1
- package/dist/theme/types.js.map +1 -1
- package/dist/tidying.d.ts +62 -0
- package/dist/tidying.d.ts.map +1 -0
- package/dist/tidying.js +131 -0
- package/dist/tidying.js.map +1 -0
- package/dist/typed.d.ts +1 -1
- package/dist/typed.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/via.d.ts.map +1 -1
- package/dist/via.js +2 -1
- package/dist/via.js.map +1 -1
- package/dist/views/address.d.ts +13 -0
- package/dist/views/address.d.ts.map +1 -0
- package/dist/views/address.js +29 -0
- package/dist/views/address.js.map +1 -0
- package/dist/views/types.d.ts +52 -3
- package/dist/views/types.d.ts.map +1 -1
- package/dist/views/types.js +4 -3
- package/dist/views/types.js.map +1 -1
- package/package.json +21 -1
package/dist/schema/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/schema/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/schema/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAWA,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,CA6DzG;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,UAAU,EAAE,iBAAiB,GAAG,UAAU,CAexE;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,8 +1,9 @@
|
|
|
1
|
-
import { ARCHIVED } from "../graph/archived.js";
|
|
1
|
+
import { ARCHIVED, LEFT_ALONE } from "../graph/archived.js";
|
|
2
2
|
import * as z from "./zod.js";
|
|
3
3
|
import { argumentsTaken, takesAnId } from "../mutations/define-mutation.js";
|
|
4
4
|
import { nodeRefArgs } from "../mutations/node-ref.js";
|
|
5
5
|
import { isAppLinkField } from "./app-link.js";
|
|
6
|
+
import { linkedRelationOf } from "./linked.js";
|
|
6
7
|
import { EVERY, isRepeatField, WEEKDAYS } from "../repeat.js";
|
|
7
8
|
import { isMarkdownField } from "./markdown.js";
|
|
8
9
|
import { typedFieldOf } from "./typed-field-of.js";
|
|
@@ -37,6 +38,20 @@ export function formatsByName(ctx) {
|
|
|
37
38
|
// Another app's address (FR-171), beside its pattern: an agent sets an address, not a name.
|
|
38
39
|
if (isAppLinkField(ctx.zodSchema))
|
|
39
40
|
ctx.jsonSchema["x-graview-app-link"] = true;
|
|
41
|
+
/*
|
|
42
|
+
* A RECORD IN ANOTHER APP (FR-171): which app and kinds, and how one is
|
|
43
|
+
* written — `house:<id>`, an id the host's search finds there (the seat's
|
|
44
|
+
* `find_linked`). The far app is read as the viewer, and never changed.
|
|
45
|
+
*/
|
|
46
|
+
const linked = linkedRelationOf(ctx.zodSchema);
|
|
47
|
+
if (linked && (ctx.jsonSchema["type"] === "string" || ctx.jsonSchema["type"] === "array")) {
|
|
48
|
+
ctx.jsonSchema["x-graview-linked"] = { address: linked.address, kinds: [...linked.kinds], cardinality: linked.cardinality };
|
|
49
|
+
const kinds = linked.kinds.join(" or ");
|
|
50
|
+
const how = `${linked.cardinality === "many" ? "Records" : "A record"}: a ${kinds} in the app ${linked.address}, as "${linked.kinds[0]}:<id>" — an id found there with find_linked. Linking never changes that app.`;
|
|
51
|
+
const said = ctx.jsonSchema["description"];
|
|
52
|
+
if (!(typeof said === "string" && said.includes(how)))
|
|
53
|
+
ctx.jsonSchema["description"] = `${typeof said === "string" && said ? `${said.replace(/\.?$/, ".")} ` : ""}${how}`;
|
|
54
|
+
}
|
|
40
55
|
// How a date repeats, kept beside it as `<date>Repeat`: written out where a declaration checks it by a function of its own.
|
|
41
56
|
if (isRepeatField(ctx.zodSchema)) {
|
|
42
57
|
ctx.jsonSchema["x-graview-repeat"] = true;
|
|
@@ -105,6 +120,9 @@ export function nodeJsonSchema(definition) {
|
|
|
105
120
|
const properties = js["properties"];
|
|
106
121
|
if (properties)
|
|
107
122
|
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." };
|
|
123
|
+
// And a person may have said to leave it alone: no automated author changes it.
|
|
124
|
+
if (properties)
|
|
125
|
+
properties[LEFT_ALONE] = { type: "boolean", const: true, description: "Set when a person said to leave the record alone: no automated author changes it." };
|
|
108
126
|
return js;
|
|
109
127
|
}
|
|
110
128
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../src/schema/json-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../src/schema/json-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare function linkedRecordField(target: string | readonly string[], options?: {
|
|
3
|
+
readonly cardinality?: "one" | "many";
|
|
4
|
+
readonly description?: string;
|
|
5
|
+
}): z.ZodString | z.ZodArray<z.ZodString>;
|
|
6
|
+
//# sourceMappingURL=linked-field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linked-field.d.ts","sourceRoot":"","sources":["../../src/schema/linked-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkBxB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAanM"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { linkedRefOf, markLinked, parseLinkedTarget } from "./linked.js";
|
|
3
|
+
/*
|
|
4
|
+
* A DECLARATION'S RELATION TO ANOTHER APP'S KIND (FR-171), in the classic
|
|
5
|
+
* zod a product writes its kinds in. A relation to another app is kept on
|
|
6
|
+
* the record that links, so in TypeScript it is a field:
|
|
7
|
+
*
|
|
8
|
+
* fields: z.object({
|
|
9
|
+
* name: z.string(),
|
|
10
|
+
* forHouse: linkedRecordField("@nick/house/house").optional(),
|
|
11
|
+
* })
|
|
12
|
+
*
|
|
13
|
+
* A document says the same as a relation, `"forHouse": { "to":
|
|
14
|
+
* ["@nick/house/house"], "cardinality": "one" }`. Its value is `house:<id>`
|
|
15
|
+
* (or a list of them, `{ cardinality: "many" }`); the host's
|
|
16
|
+
* `linkedRecords` says what that record is, as the viewer.
|
|
17
|
+
*/
|
|
18
|
+
export function linkedRecordField(target, options = {}) {
|
|
19
|
+
const targets = [target].flat();
|
|
20
|
+
const parsed = targets.map((one) => parseLinkedTarget(one));
|
|
21
|
+
if (parsed.length === 0 || parsed.some((one) => !one))
|
|
22
|
+
throw new Error(`linkedRecordField(${JSON.stringify(target)}): a target is "@", the app's address, "/" and the kind, like "@nick/house/house"`);
|
|
23
|
+
const address = parsed[0].address;
|
|
24
|
+
if (parsed.some((one) => one.address !== address))
|
|
25
|
+
throw new Error(`linkedRecordField(${JSON.stringify(target)}): a relation reaches one app`);
|
|
26
|
+
const relation = { address, kinds: [...new Set(parsed.map((one) => one.kind))], cardinality: options.cardinality ?? "one", ...(options.description ? { description: options.description } : {}) };
|
|
27
|
+
const one = z
|
|
28
|
+
.string()
|
|
29
|
+
.max(300)
|
|
30
|
+
.refine((value) => linkedRefOf(value, relation) !== undefined, `a record of ${relation.kinds.join(" or ")} in ${address}, as "<kind>:<id>"`);
|
|
31
|
+
const schema = relation.cardinality === "one" ? one : z.array(one).max(200);
|
|
32
|
+
return markLinked(options.description ? schema.describe(options.description) : schema, relation);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=linked-field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linked-field.js","sourceRoot":"","sources":["../../src/schema/linked-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAuB,MAAM,aAAa,CAAC;AAE9F;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAkC,EAAE,UAAoF,EAAE;IAC1J,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mFAAmF,CAAC,CAAC;IACvM,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC;IACnC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAI,CAAC,OAAO,KAAK,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC;IAChJ,MAAM,QAAQ,GAAmB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACnN,MAAM,GAAG,GAAG,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,SAAS,EAAE,eAAe,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,OAAO,oBAAoB,CAAC,CAAC;IAC/I,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5E,OAAO,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACnG,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { LinkedReader, LinkedRecordAnswer, LinkedRecordRef, LinkedRecords, LinkedViewer } from "./linked.js";
|
|
2
|
+
/** A page's reading of far records, as one viewer: at once, from the answers in. */
|
|
3
|
+
export interface LinkedReads {
|
|
4
|
+
/** What the rule language reads through: an answer in, or unread — and asked for, once. */
|
|
5
|
+
readonly read: LinkedReader;
|
|
6
|
+
/** The host's answer for one record, asked once; a throw is null. */
|
|
7
|
+
ask(ref: LinkedRecordRef): Promise<LinkedRecordAnswer>;
|
|
8
|
+
/** The answer in for one record, if any: undefined while it is asked. */
|
|
9
|
+
answered(ref: LinkedRecordRef): LinkedRecordAnswer | undefined;
|
|
10
|
+
/** Asked afresh: every answer forgotten, so the next read asks again (a far value changed). */
|
|
11
|
+
forget(ref?: LinkedRecordRef): void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* WHAT A PAGE READS FAR RECORDS THROUGH, AS ONE VIEWER (FR-171): each record
|
|
15
|
+
* asked of the host once, its answer kept, and `answered` told — so the page
|
|
16
|
+
* reads again, and a computed value that read "not read yet" reads the far
|
|
17
|
+
* value. An expression never waits: until the answer is in, it reads unread.
|
|
18
|
+
*/
|
|
19
|
+
export declare function linkedReads(host: LinkedRecords, viewer: LinkedViewer, answered?: (ref: LinkedRecordRef) => void): LinkedReads;
|
|
20
|
+
//# sourceMappingURL=linked-reads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linked-reads.d.ts","sourceRoot":"","sources":["../../src/schema/linked-reads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,YAAY,EAAgB,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAU5I,oFAAoF;AACpF,MAAM,WAAW,WAAW;IAC1B,2FAA2F;IAC3F,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,qEAAqE;IACrE,GAAG,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvD,yEAAyE;IACzE,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAC/D,+FAA+F;IAC/F,MAAM,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CACrC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,GAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAe,GAAG,WAAW,CA+CvI"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHAT A PAGE READS ANOTHER APP'S RECORDS THROUGH (FR-171), on the main
|
|
3
|
+
* entry because the provider builds one wherever a host hands it
|
|
4
|
+
* `linkedRecords`: small, and nothing of zod or of the record's words.
|
|
5
|
+
*/
|
|
6
|
+
const keyOf = (ref, viewer) => `${viewer.kind}\u0000${viewer.id ?? ""}\u0000${ref.address}\u0000${ref.kind}\u0000${ref.id}`;
|
|
7
|
+
/**
|
|
8
|
+
* WHAT A PAGE READS FAR RECORDS THROUGH, AS ONE VIEWER (FR-171): each record
|
|
9
|
+
* asked of the host once, its answer kept, and `answered` told — so the page
|
|
10
|
+
* reads again, and a computed value that read "not read yet" reads the far
|
|
11
|
+
* value. An expression never waits: until the answer is in, it reads unread.
|
|
12
|
+
*/
|
|
13
|
+
export function linkedReads(host, viewer, answered = () => { }) {
|
|
14
|
+
const asked = new Map();
|
|
15
|
+
const answers = new Map();
|
|
16
|
+
const ask = (ref) => {
|
|
17
|
+
const key = keyOf(ref, viewer);
|
|
18
|
+
let answer = asked.get(key);
|
|
19
|
+
if (!answer) {
|
|
20
|
+
answer = Promise.resolve()
|
|
21
|
+
.then(() => host.resolve(ref, viewer))
|
|
22
|
+
.then((found) => (isAnswer(found) ? found : null), () => null)
|
|
23
|
+
.then((found) => {
|
|
24
|
+
if (asked.get(key) === answer) {
|
|
25
|
+
answers.set(key, found);
|
|
26
|
+
answered(ref);
|
|
27
|
+
}
|
|
28
|
+
return found;
|
|
29
|
+
});
|
|
30
|
+
asked.set(key, answer);
|
|
31
|
+
}
|
|
32
|
+
return answer;
|
|
33
|
+
};
|
|
34
|
+
return {
|
|
35
|
+
read(ref) {
|
|
36
|
+
const key = keyOf(ref, viewer);
|
|
37
|
+
if (answers.has(key)) {
|
|
38
|
+
const found = answers.get(key);
|
|
39
|
+
return found === null ? { unread: true } : "denied" in found ? { denied: true } : { record: found };
|
|
40
|
+
}
|
|
41
|
+
void ask(ref);
|
|
42
|
+
return { unread: true };
|
|
43
|
+
},
|
|
44
|
+
ask,
|
|
45
|
+
answered: (ref) => answers.get(keyOf(ref, viewer)),
|
|
46
|
+
forget(ref) {
|
|
47
|
+
if (!ref) {
|
|
48
|
+
asked.clear();
|
|
49
|
+
answers.clear();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const key = keyOf(ref, viewer);
|
|
53
|
+
asked.delete(key);
|
|
54
|
+
answers.delete(key);
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** Whether the host's answer is one a page can read: a record with a label and fields, a refusal, or nothing. */
|
|
59
|
+
function isAnswer(found) {
|
|
60
|
+
if (found === null)
|
|
61
|
+
return true;
|
|
62
|
+
if (typeof found !== "object" || found === undefined)
|
|
63
|
+
return false;
|
|
64
|
+
if (found.denied === true)
|
|
65
|
+
return true;
|
|
66
|
+
const record = found;
|
|
67
|
+
return typeof record.label === "string" && typeof record.id === "string" && typeof record.kind === "string" && typeof record.fields === "object" && record.fields !== null;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=linked-reads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linked-reads.js","sourceRoot":"","sources":["../../src/schema/linked-reads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as z from "./zod.js";
|
|
2
|
+
import { type LinkedRelation } from "./linked.js";
|
|
3
|
+
/** The schema a relation to another app is kept in, in zod/mini: `kind:id`, or a list of them. */
|
|
4
|
+
export declare function linkedSchema(relation: LinkedRelation): z.ZodMiniType;
|
|
5
|
+
//# sourceMappingURL=linked-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linked-schema.d.ts","sourceRoot":"","sources":["../../src/schema/linked-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,EAA2B,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAE3E,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,CAAC,CAAC,WAAW,CAOpE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as z from "./zod.js";
|
|
2
|
+
import { linkedRefOf, markLinked } from "./linked.js";
|
|
3
|
+
/** The schema a relation to another app is kept in, in zod/mini: `kind:id`, or a list of them. */
|
|
4
|
+
export function linkedSchema(relation) {
|
|
5
|
+
const one = z.string().check(z.maxLength(300), z.refine((value) => linkedRefOf(value, relation) !== undefined, `a record of ${relation.kinds.join(" or ")} in ${relation.address}, as "<kind>:<id>"`));
|
|
6
|
+
const schema = relation.cardinality === "one" ? one : z.array(one).check(z.maxLength(200));
|
|
7
|
+
return markLinked(relation.description ? schema.check(z.describe(relation.description)) : schema, relation);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=linked-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linked-schema.js","sourceRoot":"","sources":["../../src/schema/linked-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAuB,MAAM,aAAa,CAAC;AAE3E,kGAAkG;AAClG,MAAM,UAAU,YAAY,CAAC,QAAwB;IACnD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAC1B,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAChB,CAAC,CAAC,MAAM,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,SAAS,EAAE,eAAe,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,QAAQ,CAAC,OAAO,oBAAoB,CAAC,CAC/J,CAAC;IACF,MAAM,MAAM,GAAkB,QAAQ,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1G,OAAO,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC9G,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/** A kind in another app, as a relation's `to` names it: `@` + the app's address + `/` + the kind. */
|
|
2
|
+
export declare const LINKED_TARGET: RegExp;
|
|
3
|
+
/**
|
|
4
|
+
* THE APP AND THE KIND A RELATION'S TARGET NAMES — or undefined when it names
|
|
5
|
+
* a kind of this document. The address is what an app-link field would
|
|
6
|
+
* hold for that app: `@nick/house/house` is the kind `house` of `@nick/house`;
|
|
7
|
+
* `@app_kf5eydr9z58jzf/house` of the app with that id; `@https://x.dev/a/house`
|
|
8
|
+
* of the app at `https://x.dev/a`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseLinkedTarget(target: string): {
|
|
11
|
+
readonly address: string;
|
|
12
|
+
readonly kind: string;
|
|
13
|
+
} | undefined;
|
|
14
|
+
/** Whether a relation's target is a kind in another app. */
|
|
15
|
+
export declare const isLinkedTarget: (target: unknown) => target is string;
|
|
16
|
+
/** A relation to another app's kinds, as its declaration says it. */
|
|
17
|
+
export interface LinkedRelation {
|
|
18
|
+
/** The other app's address: `@nick/house`, an app id, or an http(s) address. */
|
|
19
|
+
readonly address: string;
|
|
20
|
+
/** Its kinds the relation may link. */
|
|
21
|
+
readonly kinds: readonly string[];
|
|
22
|
+
readonly cardinality: "one" | "many";
|
|
23
|
+
/** The relation's own sentence, where the declaration gave one. */
|
|
24
|
+
readonly description?: string;
|
|
25
|
+
}
|
|
26
|
+
/** One record in another app: which app, which kind, which id. */
|
|
27
|
+
export interface LinkedRecordRef {
|
|
28
|
+
readonly address: string;
|
|
29
|
+
readonly kind: string;
|
|
30
|
+
readonly id: string;
|
|
31
|
+
}
|
|
32
|
+
/** What a link keeps for a far record: `house:h1`. */
|
|
33
|
+
export declare const linkedValue: (ref: Pick<LinkedRecordRef, "kind" | "id">) => string;
|
|
34
|
+
/** The far record a kept value names, read against its relation; undefined when it names none. */
|
|
35
|
+
export declare function linkedRefOf(value: unknown, relation: Pick<LinkedRelation, "address" | "kinds">): LinkedRecordRef | undefined;
|
|
36
|
+
/** Every far record a link's value names — one, or each of many — in order. */
|
|
37
|
+
export declare function linkedRefsOf(value: unknown, relation: Pick<LinkedRelation, "address" | "kinds">): readonly LinkedRecordRef[];
|
|
38
|
+
/** Marks a schema as holding links to records of another app. */
|
|
39
|
+
export declare const markLinked: <T extends object>(schema: T, relation: LinkedRelation) => T;
|
|
40
|
+
/** The relation to another app a field holds — under optional, default and nullable — or undefined. */
|
|
41
|
+
export declare function linkedRelationOf(schema: unknown): LinkedRelation | undefined;
|
|
42
|
+
/** A definition's relations to other apps, by the field each is kept in. */
|
|
43
|
+
export declare function linkedRelations(definition: {
|
|
44
|
+
readonly fields?: unknown;
|
|
45
|
+
} | undefined): ReadonlyMap<string, LinkedRelation>;
|
|
46
|
+
/** A relation as a document declares it: where it goes, how many, and its sentence. */
|
|
47
|
+
interface DeclaredRelation {
|
|
48
|
+
readonly to: readonly string[] | "*";
|
|
49
|
+
readonly cardinality?: "one" | "many" | undefined;
|
|
50
|
+
readonly description?: string | undefined;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The relation to another app a document's relation declares, or undefined
|
|
54
|
+
* for one within the document. Only a relation whose every target is a kind
|
|
55
|
+
* of ONE other app is one (`graview check` says `linked-mixed` and
|
|
56
|
+
* `linked-apps` of the rest).
|
|
57
|
+
*/
|
|
58
|
+
export declare function linkedRelationOfSpec(edge: DeclaredRelation): LinkedRelation | undefined;
|
|
59
|
+
/** Whether a document's relation reaches out of the document at all: any of its targets names another app. */
|
|
60
|
+
export declare const reachesAnotherApp: (edge: DeclaredRelation) => boolean;
|
|
61
|
+
/** A document kind's relations within the document, its relations to other apps aside. */
|
|
62
|
+
export declare function localEdges<E extends DeclaredRelation>(edges: Readonly<Record<string, E>> | undefined): Record<string, E>;
|
|
63
|
+
/** A document kind's relations to other apps, by name. */
|
|
64
|
+
export declare function linkedEdges(edges: Readonly<Record<string, DeclaredRelation>> | undefined): Map<string, LinkedRelation>;
|
|
65
|
+
/** A far record as the host says it to one viewer. */
|
|
66
|
+
export interface LinkedRecord {
|
|
67
|
+
readonly address: string;
|
|
68
|
+
readonly kind: string;
|
|
69
|
+
readonly id: string;
|
|
70
|
+
/** What it is called in its own app: its label there. */
|
|
71
|
+
readonly label: string;
|
|
72
|
+
/** Its describe line there, where its kind has one. */
|
|
73
|
+
readonly describe?: string;
|
|
74
|
+
/** Its card's lines there — a glance at it, field by field, in words — after its title. */
|
|
75
|
+
readonly card?: readonly {
|
|
76
|
+
readonly label: string;
|
|
77
|
+
readonly text: string;
|
|
78
|
+
}[];
|
|
79
|
+
/** The fields this viewer may see there, as values, for an expression to walk (`forHouse.listPrice`). Nothing they may not see. */
|
|
80
|
+
readonly fields: Readonly<Record<string, unknown>>;
|
|
81
|
+
/** Where it opens in its own app: a path on the host or an http(s) address. */
|
|
82
|
+
readonly href?: string;
|
|
83
|
+
/** Its app's name, as the host says it. */
|
|
84
|
+
readonly app?: string;
|
|
85
|
+
}
|
|
86
|
+
/** The host's answer for one far record and one viewer: the record; `{ denied: true }` when they may not open its app; null when there is no such record. */
|
|
87
|
+
export type LinkedRecordAnswer = LinkedRecord | {
|
|
88
|
+
readonly denied: true;
|
|
89
|
+
} | null;
|
|
90
|
+
/** Who is looking, as the host is told: a principal. */
|
|
91
|
+
export type LinkedViewer = {
|
|
92
|
+
readonly kind: string;
|
|
93
|
+
readonly id?: string | undefined;
|
|
94
|
+
readonly roles?: readonly string[] | undefined;
|
|
95
|
+
};
|
|
96
|
+
/** What linking asks the host for: records of these kinds in that app, matching words. */
|
|
97
|
+
export interface LinkedSearch {
|
|
98
|
+
readonly address: string;
|
|
99
|
+
readonly kinds: readonly string[];
|
|
100
|
+
/** Words a person typed; empty for the first few. */
|
|
101
|
+
readonly query: string;
|
|
102
|
+
readonly limit: number;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* THE HOST'S WAY TO READ ANOTHER APP'S RECORDS (FR-171), beside `resolveApp`
|
|
106
|
+
* and handed where it is — `mount`, `<Embed>`, `GraviewProvider` and the
|
|
107
|
+
* routed face (`PagesApp`) — as `linkedRecords`. Every call is AS THE VIEWER:
|
|
108
|
+
* what it answers is what that viewer may see in the far app, and a viewer
|
|
109
|
+
* who may not open that app is answered `{ denied: true }`. A throw is
|
|
110
|
+
* taken as null.
|
|
111
|
+
*/
|
|
112
|
+
export interface LinkedRecords {
|
|
113
|
+
/** One far record: its label, describe line, card and the fields this viewer may see; denied; or null. */
|
|
114
|
+
resolve(ref: LinkedRecordRef, viewer: LinkedViewer): Promise<LinkedRecordAnswer>;
|
|
115
|
+
/** The records a link may pick, for this viewer: at most `limit`, best first; denied when they may not open the app. */
|
|
116
|
+
find(search: LinkedSearch, viewer: LinkedViewer): Promise<readonly LinkedRecord[] | {
|
|
117
|
+
readonly denied: true;
|
|
118
|
+
}>;
|
|
119
|
+
/**
|
|
120
|
+
* THE NAVIGATION SEAM: open the far record in its own app. Where a host
|
|
121
|
+
* gives it, pressing a linked record calls it rather than following its
|
|
122
|
+
* `href` (an app on the same host opening in place); otherwise the
|
|
123
|
+
* record's `href` is followed.
|
|
124
|
+
*/
|
|
125
|
+
open?(ref: LinkedRecordRef, viewer: LinkedViewer): void;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* A FAR RECORD AS AN EXPRESSION READS IT, at once: the host's answer once it
|
|
129
|
+
* is in; `denied`; or `unread` — not asked yet, not answered yet, no host to
|
|
130
|
+
* ask, or no such record. An expression never waits and never throws for
|
|
131
|
+
* one: it reads nothing, and says which.
|
|
132
|
+
*/
|
|
133
|
+
export type LinkedRead = {
|
|
134
|
+
readonly record: LinkedRecord;
|
|
135
|
+
} | {
|
|
136
|
+
readonly denied: true;
|
|
137
|
+
} | {
|
|
138
|
+
readonly unread: true;
|
|
139
|
+
};
|
|
140
|
+
/** How the rule language reads a far record: at once, from what has been answered. */
|
|
141
|
+
export type LinkedReader = (ref: LinkedRecordRef) => LinkedRead;
|
|
142
|
+
/** Read far records through `reader` for every expression judged over `graph`; undefined stops. */
|
|
143
|
+
export declare function readLinkedThrough(graph: object, reader: LinkedReader | undefined): void;
|
|
144
|
+
/** The reader a graph's far records are read through, if any. */
|
|
145
|
+
export declare const linkedReaderOf: (graph: object) => LinkedReader | undefined;
|
|
146
|
+
export {};
|
|
147
|
+
//# sourceMappingURL=linked.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linked.d.ts","sourceRoot":"","sources":["../../src/schema/linked.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { isAppAddress } from "./app-address.js";
|
|
2
|
+
/*
|
|
3
|
+
* Nothing of zod here: the rule language reads a link through this module,
|
|
4
|
+
* and a page that judges a rule carries no zod for it. A schema's
|
|
5
|
+
* definition is read where zod keeps it; the schema a link is kept in is
|
|
6
|
+
* `linked-schema.ts`'s.
|
|
7
|
+
*/
|
|
8
|
+
const defOf = (schema) => typeof schema === "object" && schema !== null ? schema._zod?.def : undefined;
|
|
9
|
+
/*
|
|
10
|
+
* A RELATION TO A KIND IN ANOTHER APP (FR-171, the full relation).
|
|
11
|
+
*
|
|
12
|
+
* 0.1.29's `app-link` field named another app. This names a RECORD there:
|
|
13
|
+
* a relation whose `to` is `@<app address>/<kind>` —
|
|
14
|
+
*
|
|
15
|
+
* "edges": { "forHouse": { "to": ["@nick/house/house"], "cardinality": "one" } }
|
|
16
|
+
*
|
|
17
|
+
* — and linking one picks a record in that app; the far document is never
|
|
18
|
+
* touched. The record that links keeps which one, as a value of its own
|
|
19
|
+
* (`house:h1`, the far kind and its id), so the edit that sets it, its undo,
|
|
20
|
+
* its history and who may see it are the reading app's like any field's.
|
|
21
|
+
* What the far record IS — its card, its describe line, the fields this
|
|
22
|
+
* viewer may see there — is the host's to say, as the viewer
|
|
23
|
+
* (`LinkedRecords`); a viewer who may not open the far app sees "linked
|
|
24
|
+
* record (no access)" and nothing of it.
|
|
25
|
+
*
|
|
26
|
+
* This module is what a page builds a document's fields with, and what the
|
|
27
|
+
* rule language reads a link through, so it holds that and no more. What
|
|
28
|
+
* draws one is `@graview/primitives`'s, fetched with the first one drawn;
|
|
29
|
+
* the in-memory host, the history of a far change and the words for a
|
|
30
|
+
* relation are `@graview/core/linked`'s.
|
|
31
|
+
*/
|
|
32
|
+
/** A kind in another app, as a relation's `to` names it: `@` + the app's address + `/` + the kind. */
|
|
33
|
+
export const LINKED_TARGET = /^@(?:https?:\/\/[^\s<>"'`\\#?]+|[A-Za-z0-9][\w.~-]*(?:\/[\w.~-]+)*)\/[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
|
|
34
|
+
/**
|
|
35
|
+
* THE APP AND THE KIND A RELATION'S TARGET NAMES — or undefined when it names
|
|
36
|
+
* a kind of this document. The address is what an app-link field would
|
|
37
|
+
* hold for that app: `@nick/house/house` is the kind `house` of `@nick/house`;
|
|
38
|
+
* `@app_kf5eydr9z58jzf/house` of the app with that id; `@https://x.dev/a/house`
|
|
39
|
+
* of the app at `https://x.dev/a`.
|
|
40
|
+
*/
|
|
41
|
+
export function parseLinkedTarget(target) {
|
|
42
|
+
if (typeof target !== "string" || !target.startsWith("@") || !LINKED_TARGET.test(target))
|
|
43
|
+
return undefined;
|
|
44
|
+
const cut = target.lastIndexOf("/");
|
|
45
|
+
const body = target.slice(0, cut);
|
|
46
|
+
const kind = target.slice(cut + 1);
|
|
47
|
+
// `@owner/app` keeps its @, as an app-link holds it; an id or an http(s) address does not have one.
|
|
48
|
+
const address = /^@https?:\/\//.test(body) || !body.includes("/") ? body.slice(1) : body;
|
|
49
|
+
return isAppAddress(address) ? { address, kind } : undefined;
|
|
50
|
+
}
|
|
51
|
+
/** Whether a relation's target is a kind in another app. */
|
|
52
|
+
export const isLinkedTarget = (target) => typeof target === "string" && parseLinkedTarget(target) !== undefined;
|
|
53
|
+
/*
|
|
54
|
+
* WHAT A LINK KEEPS: `<kind>:<id>` — the far kind and the id its app knows
|
|
55
|
+
* it by. A kind is a word with no colon, so the first colon divides them.
|
|
56
|
+
*/
|
|
57
|
+
const KEPT = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*:\S[^\n]{0,199}$/;
|
|
58
|
+
/** What a link keeps for a far record: `house:h1`. */
|
|
59
|
+
export const linkedValue = (ref) => `${ref.kind}:${ref.id}`;
|
|
60
|
+
/** The far record a kept value names, read against its relation; undefined when it names none. */
|
|
61
|
+
export function linkedRefOf(value, relation) {
|
|
62
|
+
if (typeof value !== "string" || !KEPT.test(value))
|
|
63
|
+
return undefined;
|
|
64
|
+
const at = value.indexOf(":");
|
|
65
|
+
const kind = value.slice(0, at);
|
|
66
|
+
return relation.kinds.includes(kind) ? { address: relation.address, kind, id: value.slice(at + 1) } : undefined;
|
|
67
|
+
}
|
|
68
|
+
/** Every far record a link's value names — one, or each of many — in order. */
|
|
69
|
+
export function linkedRefsOf(value, relation) {
|
|
70
|
+
const values = Array.isArray(value) ? value : value === undefined || value === null ? [] : [value];
|
|
71
|
+
return values.flatMap((one) => {
|
|
72
|
+
const ref = linkedRefOf(one, relation);
|
|
73
|
+
return ref ? [ref] : [];
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/*
|
|
77
|
+
* WHICH FIELDS HOLD A LINK TO ANOTHER APP: a mark on the schema's def, as an
|
|
78
|
+
* app-link is marked, carrying the relation — so a clone shares it, a
|
|
79
|
+
* wrapper holds it inside, and every face, tool and checker reads the
|
|
80
|
+
* relation from the field the record keeps it in.
|
|
81
|
+
*/
|
|
82
|
+
const LINKED = Symbol.for("@graview/core:linked");
|
|
83
|
+
/** Marks a schema as holding links to records of another app. */
|
|
84
|
+
export const markLinked = (schema, relation) => (Object.defineProperty(defOf(schema), LINKED, { value: relation, enumerable: true }), schema);
|
|
85
|
+
/** The relation to another app a field holds — under optional, default and nullable — or undefined. */
|
|
86
|
+
export function linkedRelationOf(schema) {
|
|
87
|
+
const def = defOf(schema);
|
|
88
|
+
return def ? (def[LINKED] ?? linkedRelationOf(def.innerType)) : undefined;
|
|
89
|
+
}
|
|
90
|
+
/** A definition's relations to other apps, by the field each is kept in. */
|
|
91
|
+
export function linkedRelations(definition) {
|
|
92
|
+
const shape = definition?.fields?.shape ?? {};
|
|
93
|
+
const found = new Map();
|
|
94
|
+
for (const [field, schema] of Object.entries(shape)) {
|
|
95
|
+
const relation = linkedRelationOf(schema);
|
|
96
|
+
if (relation)
|
|
97
|
+
found.set(field, relation);
|
|
98
|
+
}
|
|
99
|
+
return found;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The relation to another app a document's relation declares, or undefined
|
|
103
|
+
* for one within the document. Only a relation whose every target is a kind
|
|
104
|
+
* of ONE other app is one (`graview check` says `linked-mixed` and
|
|
105
|
+
* `linked-apps` of the rest).
|
|
106
|
+
*/
|
|
107
|
+
export function linkedRelationOfSpec(edge) {
|
|
108
|
+
if (edge.to === "*" || edge.to.length === 0)
|
|
109
|
+
return undefined;
|
|
110
|
+
const targets = edge.to.map(parseLinkedTarget);
|
|
111
|
+
if (targets.some((target) => !target))
|
|
112
|
+
return undefined;
|
|
113
|
+
const address = targets[0].address;
|
|
114
|
+
if (targets.some((target) => target.address !== address))
|
|
115
|
+
return undefined;
|
|
116
|
+
return { address, kinds: [...new Set(targets.map((target) => target.kind))], cardinality: edge.cardinality ?? "many", ...(edge.description ? { description: edge.description } : {}) };
|
|
117
|
+
}
|
|
118
|
+
/** Whether a document's relation reaches out of the document at all: any of its targets names another app. */
|
|
119
|
+
export const reachesAnotherApp = (edge) => edge.to !== "*" && edge.to.some((target) => typeof target === "string" && target.startsWith("@"));
|
|
120
|
+
/** A document kind's relations within the document, its relations to other apps aside. */
|
|
121
|
+
export function localEdges(edges) {
|
|
122
|
+
return Object.fromEntries(Object.entries(edges ?? {}).filter(([, edge]) => !reachesAnotherApp(edge)));
|
|
123
|
+
}
|
|
124
|
+
/** A document kind's relations to other apps, by name. */
|
|
125
|
+
export function linkedEdges(edges) {
|
|
126
|
+
const found = new Map();
|
|
127
|
+
for (const [name, edge] of Object.entries(edges ?? {})) {
|
|
128
|
+
const relation = linkedRelationOfSpec(edge);
|
|
129
|
+
if (relation)
|
|
130
|
+
found.set(name, relation);
|
|
131
|
+
}
|
|
132
|
+
return found;
|
|
133
|
+
}
|
|
134
|
+
/*
|
|
135
|
+
* WHERE A GRAPH'S FAR RECORDS ARE READ FROM, for whoever is looking at it:
|
|
136
|
+
* a page registers its store's graph once, with the reader of its viewer,
|
|
137
|
+
* and every computed field, rule and template judged over that graph walks
|
|
138
|
+
* a link through it. A seat's own graph (`store.seenBy`) is registered by
|
|
139
|
+
* whoever serves the seat. A graph with none reads every far record unread.
|
|
140
|
+
*/
|
|
141
|
+
const READERS = new WeakMap();
|
|
142
|
+
/** Read far records through `reader` for every expression judged over `graph`; undefined stops. */
|
|
143
|
+
export function readLinkedThrough(graph, reader) {
|
|
144
|
+
if (reader)
|
|
145
|
+
READERS.set(graph, reader);
|
|
146
|
+
else
|
|
147
|
+
READERS.delete(graph);
|
|
148
|
+
}
|
|
149
|
+
/** The reader a graph's far records are read through, if any. */
|
|
150
|
+
export const linkedReaderOf = (graph) => READERS.get(graph);
|
|
151
|
+
//# sourceMappingURL=linked.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linked.js","sourceRoot":"","sources":["../../src/schema/linked.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;
|
|
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;AAYnF,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,CAkI1B;AA4DD;;;;;;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"}
|