@graview/core 0.1.0
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/LICENSE +96 -0
- package/README.md +35 -0
- package/dist/app.d.ts +294 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +49 -0
- package/dist/app.js.map +1 -0
- package/dist/arrange.d.ts +185 -0
- package/dist/arrange.d.ts.map +1 -0
- package/dist/arrange.js +456 -0
- package/dist/arrange.js.map +1 -0
- package/dist/beginning.d.ts +65 -0
- package/dist/beginning.d.ts.map +1 -0
- package/dist/beginning.js +94 -0
- package/dist/beginning.js.map +1 -0
- package/dist/bind.d.ts +42 -0
- package/dist/bind.d.ts.map +1 -0
- package/dist/bind.js +26 -0
- package/dist/bind.js.map +1 -0
- package/dist/city.d.ts +93 -0
- package/dist/city.d.ts.map +1 -0
- package/dist/city.js +160 -0
- package/dist/city.js.map +1 -0
- package/dist/cli/check/arrangement.d.ts +13 -0
- package/dist/cli/check/arrangement.d.ts.map +1 -0
- package/dist/cli/check/arrangement.js +63 -0
- package/dist/cli/check/arrangement.js.map +1 -0
- package/dist/cli/check/beginnings.d.ts +16 -0
- package/dist/cli/check/beginnings.d.ts.map +1 -0
- package/dist/cli/check/beginnings.js +53 -0
- package/dist/cli/check/beginnings.js.map +1 -0
- package/dist/cli/check/brand.d.ts +17 -0
- package/dist/cli/check/brand.d.ts.map +1 -0
- package/dist/cli/check/brand.js +153 -0
- package/dist/cli/check/brand.js.map +1 -0
- package/dist/cli/check/city.d.ts +17 -0
- package/dist/cli/check/city.d.ts.map +1 -0
- package/dist/cli/check/city.js +58 -0
- package/dist/cli/check/city.js.map +1 -0
- package/dist/cli/check/context.d.ts +50 -0
- package/dist/cli/check/context.d.ts.map +1 -0
- package/dist/cli/check/context.js +37 -0
- package/dist/cli/check/context.js.map +1 -0
- package/dist/cli/check/fields.d.ts +16 -0
- package/dist/cli/check/fields.d.ts.map +1 -0
- package/dist/cli/check/fields.js +237 -0
- package/dist/cli/check/fields.js.map +1 -0
- package/dist/cli/check/index.d.ts +14 -0
- package/dist/cli/check/index.d.ts.map +1 -0
- package/dist/cli/check/index.js +14 -0
- package/dist/cli/check/index.js.map +1 -0
- package/dist/cli/check/intelligence.d.ts +17 -0
- package/dist/cli/check/intelligence.d.ts.map +1 -0
- package/dist/cli/check/intelligence.js +136 -0
- package/dist/cli/check/intelligence.js.map +1 -0
- package/dist/cli/check/lenses.d.ts +17 -0
- package/dist/cli/check/lenses.d.ts.map +1 -0
- package/dist/cli/check/lenses.js +239 -0
- package/dist/cli/check/lenses.js.map +1 -0
- package/dist/cli/check/migrations.d.ts +16 -0
- package/dist/cli/check/migrations.d.ts.map +1 -0
- package/dist/cli/check/migrations.js +43 -0
- package/dist/cli/check/migrations.js.map +1 -0
- package/dist/cli/check/modules.d.ts +16 -0
- package/dist/cli/check/modules.d.ts.map +1 -0
- package/dist/cli/check/modules.js +123 -0
- package/dist/cli/check/modules.js.map +1 -0
- package/dist/cli/check/policy.d.ts +16 -0
- package/dist/cli/check/policy.d.ts.map +1 -0
- package/dist/cli/check/policy.js +90 -0
- package/dist/cli/check/policy.js.map +1 -0
- package/dist/cli/check/relations.d.ts +29 -0
- package/dist/cli/check/relations.d.ts.map +1 -0
- package/dist/cli/check/relations.js +279 -0
- package/dist/cli/check/relations.js.map +1 -0
- package/dist/cli/check/routes.d.ts +16 -0
- package/dist/cli/check/routes.d.ts.map +1 -0
- package/dist/cli/check/routes.js +31 -0
- package/dist/cli/check/routes.js.map +1 -0
- package/dist/cli/check/settings.d.ts +16 -0
- package/dist/cli/check/settings.d.ts.map +1 -0
- package/dist/cli/check/settings.js +81 -0
- package/dist/cli/check/settings.js.map +1 -0
- package/dist/cli/check.d.ts +36 -0
- package/dist/cli/check.d.ts.map +1 -0
- package/dist/cli/check.js +76 -0
- package/dist/cli/check.js.map +1 -0
- package/dist/cli/create.d.ts +20 -0
- package/dist/cli/create.d.ts.map +1 -0
- package/dist/cli/create.js +251 -0
- package/dist/cli/create.js.map +1 -0
- package/dist/cli/describe.d.ts +35 -0
- package/dist/cli/describe.d.ts.map +1 -0
- package/dist/cli/describe.js +230 -0
- package/dist/cli/describe.js.map +1 -0
- package/dist/cli/docs.d.ts +11 -0
- package/dist/cli/docs.d.ts.map +1 -0
- package/dist/cli/docs.js +152 -0
- package/dist/cli/docs.js.map +1 -0
- package/dist/cli/index.d.ts +18 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +281 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/extend.d.ts +23 -0
- package/dist/extend.d.ts.map +1 -0
- package/dist/extend.js +53 -0
- package/dist/extend.js.map +1 -0
- package/dist/graph/diff.d.ts +31 -0
- package/dist/graph/diff.d.ts.map +1 -0
- package/dist/graph/diff.js +71 -0
- package/dist/graph/diff.js.map +1 -0
- package/dist/graph/graph.d.ts +69 -0
- package/dist/graph/graph.d.ts.map +1 -0
- package/dist/graph/graph.js +284 -0
- package/dist/graph/graph.js.map +1 -0
- package/dist/graph/primitives.d.ts +52 -0
- package/dist/graph/primitives.d.ts.map +1 -0
- package/dist/graph/primitives.js +62 -0
- package/dist/graph/primitives.js.map +1 -0
- package/dist/graph/tracked.d.ts +31 -0
- package/dist/graph/tracked.d.ts.map +1 -0
- package/dist/graph/tracked.js +69 -0
- package/dist/graph/tracked.js.map +1 -0
- package/dist/graph/types.d.ts +34 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +0 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/index.d.ts +100 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +90 -0
- package/dist/index.js.map +1 -0
- package/dist/installation.d.ts +112 -0
- package/dist/installation.d.ts.map +1 -0
- package/dist/installation.js +193 -0
- package/dist/installation.js.map +1 -0
- package/dist/intelligence-bridge.d.ts +73 -0
- package/dist/intelligence-bridge.d.ts.map +1 -0
- package/dist/intelligence-bridge.js +31 -0
- package/dist/intelligence-bridge.js.map +1 -0
- package/dist/invariants/engine.d.ts +36 -0
- package/dist/invariants/engine.d.ts.map +1 -0
- package/dist/invariants/engine.js +88 -0
- package/dist/invariants/engine.js.map +1 -0
- package/dist/invariants/types.d.ts +75 -0
- package/dist/invariants/types.d.ts.map +1 -0
- package/dist/invariants/types.js +2 -0
- package/dist/invariants/types.js.map +1 -0
- package/dist/modules.d.ts +75 -0
- package/dist/modules.d.ts.map +1 -0
- package/dist/modules.js +87 -0
- package/dist/modules.js.map +1 -0
- package/dist/mutations/decidable.d.ts +26 -0
- package/dist/mutations/decidable.d.ts.map +1 -0
- package/dist/mutations/decidable.js +39 -0
- package/dist/mutations/decidable.js.map +1 -0
- package/dist/mutations/define-mutation.d.ts +32 -0
- package/dist/mutations/define-mutation.d.ts.map +1 -0
- package/dist/mutations/define-mutation.js +181 -0
- package/dist/mutations/define-mutation.js.map +1 -0
- package/dist/mutations/derive-edits.d.ts +75 -0
- package/dist/mutations/derive-edits.d.ts.map +1 -0
- package/dist/mutations/derive-edits.js +240 -0
- package/dist/mutations/derive-edits.js.map +1 -0
- package/dist/mutations/form.d.ts +63 -0
- package/dist/mutations/form.d.ts.map +1 -0
- package/dist/mutations/form.js +113 -0
- package/dist/mutations/form.js.map +1 -0
- package/dist/mutations/node-ref.d.ts +83 -0
- package/dist/mutations/node-ref.d.ts.map +1 -0
- package/dist/mutations/node-ref.js +113 -0
- package/dist/mutations/node-ref.js.map +1 -0
- package/dist/mutations/types.d.ts +136 -0
- package/dist/mutations/types.d.ts.map +1 -0
- package/dist/mutations/types.js +2 -0
- package/dist/mutations/types.js.map +1 -0
- package/dist/ops/log.d.ts +35 -0
- package/dist/ops/log.d.ts.map +1 -0
- package/dist/ops/log.js +103 -0
- package/dist/ops/log.js.map +1 -0
- package/dist/ops/types.d.ts +52 -0
- package/dist/ops/types.d.ts.map +1 -0
- package/dist/ops/types.js +2 -0
- package/dist/ops/types.js.map +1 -0
- package/dist/ops/undo.d.ts +33 -0
- package/dist/ops/undo.d.ts.map +1 -0
- package/dist/ops/undo.js +65 -0
- package/dist/ops/undo.js.map +1 -0
- package/dist/permissions/policy.d.ts +68 -0
- package/dist/permissions/policy.d.ts.map +1 -0
- package/dist/permissions/policy.js +191 -0
- package/dist/permissions/policy.js.map +1 -0
- package/dist/permissions/types.d.ts +78 -0
- package/dist/permissions/types.d.ts.map +1 -0
- package/dist/permissions/types.js +17 -0
- package/dist/permissions/types.js.map +1 -0
- package/dist/persistence/memory.d.ts +6 -0
- package/dist/persistence/memory.d.ts.map +1 -0
- package/dist/persistence/memory.js +31 -0
- package/dist/persistence/memory.js.map +1 -0
- package/dist/persistence/sqlite.d.ts +59 -0
- package/dist/persistence/sqlite.d.ts.map +1 -0
- package/dist/persistence/sqlite.js +131 -0
- package/dist/persistence/sqlite.js.map +1 -0
- package/dist/persistence/types.d.ts +22 -0
- package/dist/persistence/types.d.ts.map +1 -0
- package/dist/persistence/types.js +2 -0
- package/dist/persistence/types.js.map +1 -0
- package/dist/presence.d.ts +38 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +50 -0
- package/dist/presence.js.map +1 -0
- package/dist/scaffold/domain.d.ts +8 -0
- package/dist/scaffold/domain.d.ts.map +1 -0
- package/dist/scaffold/domain.js +331 -0
- package/dist/scaffold/domain.js.map +1 -0
- package/dist/scaffold/index.d.ts +66 -0
- package/dist/scaffold/index.d.ts.map +1 -0
- package/dist/scaffold/index.js +142 -0
- package/dist/scaffold/index.js.map +1 -0
- package/dist/scaffold/lens.d.ts +31 -0
- package/dist/scaffold/lens.d.ts.map +1 -0
- package/dist/scaffold/lens.js +176 -0
- package/dist/scaffold/lens.js.map +1 -0
- package/dist/scaffold/names.d.ts +44 -0
- package/dist/scaffold/names.d.ts.map +1 -0
- package/dist/scaffold/names.js +69 -0
- package/dist/scaffold/names.js.map +1 -0
- package/dist/scaffold/project.d.ts +41 -0
- package/dist/scaffold/project.d.ts.map +1 -0
- package/dist/scaffold/project.js +604 -0
- package/dist/scaffold/project.js.map +1 -0
- package/dist/scaffold/ui.d.ts +15 -0
- package/dist/scaffold/ui.d.ts.map +1 -0
- package/dist/scaffold/ui.js +536 -0
- package/dist/scaffold/ui.js.map +1 -0
- package/dist/schema/define-node.d.ts +132 -0
- package/dist/schema/define-node.d.ts.map +1 -0
- package/dist/schema/define-node.js +254 -0
- package/dist/schema/define-node.js.map +1 -0
- package/dist/schema/figures.d.ts +42 -0
- package/dist/schema/figures.d.ts.map +1 -0
- package/dist/schema/figures.js +220 -0
- package/dist/schema/figures.js.map +1 -0
- package/dist/schema/json-schema.d.ts +39 -0
- package/dist/schema/json-schema.d.ts.map +1 -0
- package/dist/schema/json-schema.js +74 -0
- package/dist/schema/json-schema.js.map +1 -0
- package/dist/schema/schema.d.ts +43 -0
- package/dist/schema/schema.d.ts.map +1 -0
- package/dist/schema/schema.js +102 -0
- package/dist/schema/schema.js.map +1 -0
- package/dist/schema/types.d.ts +201 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +2 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/search.d.ts +215 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +449 -0
- package/dist/search.js.map +1 -0
- package/dist/settings.d.ts +30 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +74 -0
- package/dist/settings.js.map +1 -0
- package/dist/store.d.ts +284 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +660 -0
- package/dist/store.js.map +1 -0
- package/dist/studio-door.d.ts +187 -0
- package/dist/studio-door.d.ts.map +1 -0
- package/dist/studio-door.js +20 -0
- package/dist/studio-door.js.map +1 -0
- package/dist/sync/conflict.d.ts +37 -0
- package/dist/sync/conflict.d.ts.map +1 -0
- package/dist/sync/conflict.js +56 -0
- package/dist/sync/conflict.js.map +1 -0
- package/dist/sync/engine.d.ts +118 -0
- package/dist/sync/engine.d.ts.map +1 -0
- package/dist/sync/engine.js +341 -0
- package/dist/sync/engine.js.map +1 -0
- package/dist/sync/google-calendar.d.ts +54 -0
- package/dist/sync/google-calendar.d.ts.map +1 -0
- package/dist/sync/google-calendar.js +167 -0
- package/dist/sync/google-calendar.js.map +1 -0
- package/dist/sync/types.d.ts +125 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +6 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/temporal/effectivity.d.ts +75 -0
- package/dist/temporal/effectivity.d.ts.map +1 -0
- package/dist/temporal/effectivity.js +89 -0
- package/dist/temporal/effectivity.js.map +1 -0
- package/dist/testing.d.ts +63 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +194 -0
- package/dist/testing.js.map +1 -0
- package/dist/theme/contrast.d.ts +47 -0
- package/dist/theme/contrast.d.ts.map +1 -0
- package/dist/theme/contrast.js +172 -0
- package/dist/theme/contrast.js.map +1 -0
- package/dist/theme/derive.d.ts +81 -0
- package/dist/theme/derive.d.ts.map +1 -0
- package/dist/theme/derive.js +171 -0
- package/dist/theme/derive.js.map +1 -0
- package/dist/theme/kit.d.ts +106 -0
- package/dist/theme/kit.d.ts.map +1 -0
- package/dist/theme/kit.js +84 -0
- package/dist/theme/kit.js.map +1 -0
- package/dist/theme/palettes.d.ts +32 -0
- package/dist/theme/palettes.d.ts.map +1 -0
- package/dist/theme/palettes.js +96 -0
- package/dist/theme/palettes.js.map +1 -0
- package/dist/theme/types.d.ts +131 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +23 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/views/types.d.ts +89 -0
- package/dist/views/types.d.ts.map +1 -0
- package/dist/views/types.js +88 -0
- package/dist/views/types.js.map +1 -0
- package/dist/watched.d.ts +33 -0
- package/dist/watched.d.ts.map +1 -0
- package/dist/watched.js +50 -0
- package/dist/watched.js.map +1 -0
- package/dist/who.d.ts +26 -0
- package/dist/who.d.ts.map +1 -0
- package/dist/who.js +20 -0
- package/dist/who.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arrange.d.ts","sourceRoot":"","sources":["../src/arrange.ts"],"names":[],"mappings":"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"}
|
package/dist/arrange.js
ADDED
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
import { describeArg } from "./mutations/node-ref.js";
|
|
2
|
+
import { matchNode, parseQuery } from "./search.js";
|
|
3
|
+
import { humaniseField, isCurrent, labelOf, tellApart } from "./schema/define-node.js";
|
|
4
|
+
export const NO_ARRANGEMENT = {};
|
|
5
|
+
/** Whether a lens offers a part, given what it declared. Everything is on unless declined. */
|
|
6
|
+
export function arrangeAllows(option, part) {
|
|
7
|
+
if (option === undefined || option === true)
|
|
8
|
+
return true;
|
|
9
|
+
if (option === false)
|
|
10
|
+
return false;
|
|
11
|
+
return option[part] !== false;
|
|
12
|
+
}
|
|
13
|
+
/** The words for a field, after the declaration's own `display.labels`. */
|
|
14
|
+
function readingOf(definition, field) {
|
|
15
|
+
return definition.display?.labels?.[field] ?? humaniseField(field);
|
|
16
|
+
}
|
|
17
|
+
function fieldType(schema) {
|
|
18
|
+
const shape = describeArg(schema);
|
|
19
|
+
switch (shape.type) {
|
|
20
|
+
case "text":
|
|
21
|
+
case "date":
|
|
22
|
+
case "number":
|
|
23
|
+
case "boolean":
|
|
24
|
+
case "choice":
|
|
25
|
+
return shape.type;
|
|
26
|
+
default:
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** The edges this kind takes part in, from either end, with how each reads from here. */
|
|
31
|
+
export function edgesOf(schema, kind) {
|
|
32
|
+
const offers = new Map();
|
|
33
|
+
const definition = schema.tryDefinition(kind);
|
|
34
|
+
for (const [edgeKind, declared] of Object.entries(definition?.edges ?? {})) {
|
|
35
|
+
offers.set(edgeKind, {
|
|
36
|
+
key: edgeKind,
|
|
37
|
+
label: declared.description ? capitalise(declared.description) : humaniseField(edgeKind),
|
|
38
|
+
about: "edge",
|
|
39
|
+
far: declared.to === "*" ? [...schema.kinds] : [...declared.to],
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
for (const other of schema.definitions) {
|
|
43
|
+
if (other.kind === kind)
|
|
44
|
+
continue;
|
|
45
|
+
for (const [edgeKind, declared] of Object.entries(other.edges ?? {})) {
|
|
46
|
+
if (offers.has(edgeKind))
|
|
47
|
+
continue;
|
|
48
|
+
if (declared.to !== "*" && !declared.to.includes(kind))
|
|
49
|
+
continue;
|
|
50
|
+
offers.set(edgeKind, {
|
|
51
|
+
key: edgeKind,
|
|
52
|
+
label: declared.inverse ? capitalise(declared.inverse) : humaniseField(edgeKind),
|
|
53
|
+
about: "edge",
|
|
54
|
+
far: [other.kind],
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return [...offers.values()];
|
|
59
|
+
}
|
|
60
|
+
const capitalise = (text) => text.charAt(0).toUpperCase() + text.slice(1);
|
|
61
|
+
const IS_WORDS = ["current", "past", "any", "flagged", "clear"];
|
|
62
|
+
/**
|
|
63
|
+
* Whether a condition names one of a kind's RETIRED states — `status:demo`
|
|
64
|
+
* where demos are behind the horizon — which is asking for the past by
|
|
65
|
+
* name. The search box and the list page both left the past out for it and
|
|
66
|
+
* found nothing.
|
|
67
|
+
*/
|
|
68
|
+
export function asksForThePast(definition, conditions) {
|
|
69
|
+
const lifecycle = definition?.lifecycle;
|
|
70
|
+
if (!lifecycle || lifecycle.retired === "date")
|
|
71
|
+
return false;
|
|
72
|
+
const retired = lifecycle.retired.map(String);
|
|
73
|
+
return conditions.some((condition) => condition.key === lifecycle.field && retired.includes(condition.value));
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* What a kind can be arranged by, derived from its declaration alone.
|
|
77
|
+
*
|
|
78
|
+
* Sorts: the label, every field with a scalar type, every edge (by the far
|
|
79
|
+
* end's label). Filters: boolean and choice fields by value, date fields by
|
|
80
|
+
* before/after/on, every edge by a node or by having one at all, and `is`
|
|
81
|
+
* for the lifecycle and the standing. Groups: boolean and choice fields,
|
|
82
|
+
* date fields by day, week or month, and every edge by its far end. A field
|
|
83
|
+
* the declaration hides is not offered — an ordering key is not a thing a
|
|
84
|
+
* person groups by.
|
|
85
|
+
*/
|
|
86
|
+
export function arrangeable(schema, kind) {
|
|
87
|
+
const definition = schema.tryDefinition(kind);
|
|
88
|
+
if (!definition)
|
|
89
|
+
return { kind, sorts: [], filters: [], groups: [] };
|
|
90
|
+
const hidden = new Set(definition.display?.hide ?? []);
|
|
91
|
+
const shape = (definition.fields.shape ?? {});
|
|
92
|
+
const sorts = [{ key: "label", label: "Name", about: "label", type: "text" }];
|
|
93
|
+
const filters = [];
|
|
94
|
+
const groups = [];
|
|
95
|
+
for (const [field, fieldSchema] of Object.entries(shape)) {
|
|
96
|
+
if (field === "id" || field === "kind" || field === "label" || hidden.has(field))
|
|
97
|
+
continue;
|
|
98
|
+
const type = fieldType(fieldSchema);
|
|
99
|
+
if (!type)
|
|
100
|
+
continue;
|
|
101
|
+
const label = readingOf(definition, field);
|
|
102
|
+
const options = type === "choice" ? describeArgOptions(fieldSchema) : type === "boolean" ? ["true", "false"] : undefined;
|
|
103
|
+
const offer = { key: field, label, about: "field", type, ...(options ? { options } : {}) };
|
|
104
|
+
sorts.push(offer);
|
|
105
|
+
if (type === "boolean" || type === "choice" || type === "date")
|
|
106
|
+
filters.push(offer);
|
|
107
|
+
if (type === "boolean" || type === "choice")
|
|
108
|
+
groups.push(offer);
|
|
109
|
+
if (type === "date")
|
|
110
|
+
groups.push({ ...offer, buckets: ["day", "week", "month", "year", "decade"] });
|
|
111
|
+
}
|
|
112
|
+
for (const edge of edgesOf(schema, kind)) {
|
|
113
|
+
sorts.push(edge);
|
|
114
|
+
filters.push(edge);
|
|
115
|
+
groups.push(edge);
|
|
116
|
+
}
|
|
117
|
+
const is = {
|
|
118
|
+
key: "is",
|
|
119
|
+
label: definition.lifecycle ? "Standing and currency" : "Standing",
|
|
120
|
+
about: "is",
|
|
121
|
+
type: "choice",
|
|
122
|
+
options: definition.lifecycle ? [...IS_WORDS] : ["flagged", "clear"],
|
|
123
|
+
};
|
|
124
|
+
filters.push(is);
|
|
125
|
+
const order = definition.fieldRoles?.["order"];
|
|
126
|
+
const natural = order && (order in shape || order === "label") ? { by: order, direction: "asc" } : undefined;
|
|
127
|
+
return { kind, sorts, filters, groups, ...(natural ? { natural } : {}) };
|
|
128
|
+
}
|
|
129
|
+
function describeArgOptions(schema) {
|
|
130
|
+
const shape = describeArg(schema);
|
|
131
|
+
return shape.type === "choice" ? shape.options : [];
|
|
132
|
+
}
|
|
133
|
+
const BUCKETS = ["day", "week", "month", "year", "decade"];
|
|
134
|
+
export function parseArrangement(words) {
|
|
135
|
+
const out = {};
|
|
136
|
+
if (words.q && words.q.trim().length > 0)
|
|
137
|
+
out.query = words.q;
|
|
138
|
+
if (words.sort) {
|
|
139
|
+
const [by, direction] = words.sort.split(":");
|
|
140
|
+
if (by)
|
|
141
|
+
out.sort = { by, direction: direction === "desc" ? "desc" : "asc" };
|
|
142
|
+
}
|
|
143
|
+
if (words.filter) {
|
|
144
|
+
const conditions = [];
|
|
145
|
+
for (const part of words.filter.split(",")) {
|
|
146
|
+
const colon = part.indexOf(":");
|
|
147
|
+
if (colon <= 0)
|
|
148
|
+
continue;
|
|
149
|
+
conditions.push({ key: part.slice(0, colon), value: part.slice(colon + 1) });
|
|
150
|
+
}
|
|
151
|
+
if (conditions.length > 0)
|
|
152
|
+
out.filter = conditions;
|
|
153
|
+
}
|
|
154
|
+
if (words.group) {
|
|
155
|
+
const [by, bucket] = words.group.split(":");
|
|
156
|
+
if (by)
|
|
157
|
+
out.group = { by, ...(BUCKETS.includes(bucket) ? { bucket: bucket } : {}) };
|
|
158
|
+
}
|
|
159
|
+
return out;
|
|
160
|
+
}
|
|
161
|
+
export function formatArrangement(arrangement) {
|
|
162
|
+
const out = {};
|
|
163
|
+
if (arrangement.query && arrangement.query.trim().length > 0)
|
|
164
|
+
out.q = arrangement.query;
|
|
165
|
+
if (arrangement.sort) {
|
|
166
|
+
out.sort = arrangement.sort.direction === "desc" ? `${arrangement.sort.by}:desc` : arrangement.sort.by;
|
|
167
|
+
}
|
|
168
|
+
if (arrangement.filter?.length) {
|
|
169
|
+
out.filter = arrangement.filter.map((condition) => `${condition.key}:${condition.value}`).join(",");
|
|
170
|
+
}
|
|
171
|
+
if (arrangement.group) {
|
|
172
|
+
out.group = arrangement.group.bucket ? `${arrangement.group.by}:${arrangement.group.bucket}` : arrangement.group.by;
|
|
173
|
+
}
|
|
174
|
+
return out;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Keeps only the parts a kind can actually be arranged by, and says which
|
|
178
|
+
* were dropped — a stale link names a field that was renamed, and the
|
|
179
|
+
* honest thing is to show the rest arranged and say what was ignored.
|
|
180
|
+
*/
|
|
181
|
+
export function admitArrangement(arrangement, offers) {
|
|
182
|
+
const dropped = [];
|
|
183
|
+
const out = {};
|
|
184
|
+
if (arrangement.query)
|
|
185
|
+
out.query = arrangement.query;
|
|
186
|
+
if (arrangement.sort) {
|
|
187
|
+
if (offers.sorts.some((offer) => offer.key === arrangement.sort.by))
|
|
188
|
+
out.sort = arrangement.sort;
|
|
189
|
+
else
|
|
190
|
+
dropped.push(`sort ${arrangement.sort.by}`);
|
|
191
|
+
}
|
|
192
|
+
if (arrangement.filter) {
|
|
193
|
+
const kept = arrangement.filter.filter((condition) => {
|
|
194
|
+
const offer = offers.filters.find((candidate) => candidate.key === condition.key);
|
|
195
|
+
if (!offer) {
|
|
196
|
+
dropped.push(`filter ${condition.key}`);
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
return true;
|
|
200
|
+
});
|
|
201
|
+
if (kept.length > 0)
|
|
202
|
+
out.filter = kept;
|
|
203
|
+
}
|
|
204
|
+
if (arrangement.group) {
|
|
205
|
+
if (offers.groups.some((offer) => offer.key === arrangement.group.by))
|
|
206
|
+
out.group = arrangement.group;
|
|
207
|
+
else
|
|
208
|
+
dropped.push(`group ${arrangement.group.by}`);
|
|
209
|
+
}
|
|
210
|
+
return { arrangement: out, dropped };
|
|
211
|
+
}
|
|
212
|
+
const fields = (node) => node;
|
|
213
|
+
const asRecord = (node) => node;
|
|
214
|
+
/** The far ends of `edgeKind` from `id`, either way round, as nodes. */
|
|
215
|
+
function farEnds(graph, id, edgeKind) {
|
|
216
|
+
const seen = new Map();
|
|
217
|
+
for (const node of [...graph.out(id, edgeKind), ...graph.in(id, edgeKind)])
|
|
218
|
+
seen.set(node.id, node);
|
|
219
|
+
return [...seen.values()];
|
|
220
|
+
}
|
|
221
|
+
function labelFor(ctx, node) {
|
|
222
|
+
return labelOf(ctx.schema.tryDefinition(node.kind), asRecord(node));
|
|
223
|
+
}
|
|
224
|
+
const compare = (a, b) => {
|
|
225
|
+
if (a === undefined || a === null)
|
|
226
|
+
return b === undefined || b === null ? 0 : 1;
|
|
227
|
+
if (b === undefined || b === null)
|
|
228
|
+
return -1;
|
|
229
|
+
if (typeof a === "number" && typeof b === "number")
|
|
230
|
+
return a - b;
|
|
231
|
+
if (typeof a === "boolean" && typeof b === "boolean")
|
|
232
|
+
return a === b ? 0 : a ? 1 : -1;
|
|
233
|
+
return String(a).localeCompare(String(b), undefined, { numeric: true, sensitivity: "base" });
|
|
234
|
+
};
|
|
235
|
+
/** What a node sorts by, for a key: its label, a field, or its first far end's label. */
|
|
236
|
+
function sortValue(ctx, node, by) {
|
|
237
|
+
if (by === "label")
|
|
238
|
+
return labelFor(ctx, node);
|
|
239
|
+
const definition = ctx.schema.tryDefinition(node.kind);
|
|
240
|
+
if (definition && by in (definition.fields.shape ?? {}))
|
|
241
|
+
return fields(node)[by];
|
|
242
|
+
const ends = farEnds(ctx.graph, node.id, by).map((end) => labelFor(ctx, end)).sort();
|
|
243
|
+
return ends[0];
|
|
244
|
+
}
|
|
245
|
+
const DAY = /^(\d{4})-(\d{2})-(\d{2})/;
|
|
246
|
+
/** The first day of the bucket a date falls in, as YYYY-MM-DD; weeks start on Monday, in UTC. */
|
|
247
|
+
export function bucketStart(date, bucket) {
|
|
248
|
+
const match = DAY.exec(date);
|
|
249
|
+
if (!match)
|
|
250
|
+
return undefined;
|
|
251
|
+
const [, y, m, d] = match;
|
|
252
|
+
if (bucket === "day")
|
|
253
|
+
return `${y}-${m}-${d}`;
|
|
254
|
+
if (bucket === "month")
|
|
255
|
+
return `${y}-${m}-01`;
|
|
256
|
+
if (bucket === "year")
|
|
257
|
+
return `${y}-01-01`;
|
|
258
|
+
if (bucket === "decade")
|
|
259
|
+
return `${String(Number(y) - (Number(y) % 10)).padStart(4, "0")}-01-01`;
|
|
260
|
+
const at = new Date(Date.UTC(Number(y), Number(m) - 1, Number(d)));
|
|
261
|
+
const back = (at.getUTCDay() + 6) % 7;
|
|
262
|
+
at.setUTCDate(at.getUTCDate() - back);
|
|
263
|
+
return at.toISOString().slice(0, 10);
|
|
264
|
+
}
|
|
265
|
+
const MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
|
266
|
+
function bucketLabel(start, bucket) {
|
|
267
|
+
if (bucket === "month")
|
|
268
|
+
return `${MONTHS[Number(start.slice(5, 7)) - 1]} ${start.slice(0, 4)}`;
|
|
269
|
+
if (bucket === "week")
|
|
270
|
+
return `Week of ${start}`;
|
|
271
|
+
if (bucket === "year")
|
|
272
|
+
return start.slice(0, 4);
|
|
273
|
+
if (bucket === "decade")
|
|
274
|
+
return `The ${start.slice(0, 4)}s`;
|
|
275
|
+
return start;
|
|
276
|
+
}
|
|
277
|
+
/** Whether a node meets one condition of a filter. Search judges its `key:value` tokens with this too. */
|
|
278
|
+
export function conditionHolds(ctx, node, condition) {
|
|
279
|
+
const definition = ctx.schema.tryDefinition(node.kind);
|
|
280
|
+
if (condition.key === "is") {
|
|
281
|
+
switch (condition.value) {
|
|
282
|
+
case "current":
|
|
283
|
+
return isCurrent(definition, asRecord(node), ctx.today);
|
|
284
|
+
case "past":
|
|
285
|
+
return !isCurrent(definition, asRecord(node), ctx.today);
|
|
286
|
+
case "any":
|
|
287
|
+
return true;
|
|
288
|
+
case "flagged":
|
|
289
|
+
return ctx.flagged?.has(node.id) ?? false;
|
|
290
|
+
case "clear":
|
|
291
|
+
return !(ctx.flagged?.has(node.id) ?? false);
|
|
292
|
+
default:
|
|
293
|
+
return true;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
const shape = (definition?.fields.shape ?? {});
|
|
297
|
+
if (condition.key in shape) {
|
|
298
|
+
const value = fields(node)[condition.key];
|
|
299
|
+
const type = fieldType(shape[condition.key]);
|
|
300
|
+
if (type === "date") {
|
|
301
|
+
const [op, date] = condition.value.split(":");
|
|
302
|
+
if (typeof value !== "string" || !date)
|
|
303
|
+
return false;
|
|
304
|
+
const day = value.slice(0, 10);
|
|
305
|
+
return op === "before" ? day < date : op === "after" ? day > date : day === date;
|
|
306
|
+
}
|
|
307
|
+
if (type === "boolean")
|
|
308
|
+
return String(value) === condition.value;
|
|
309
|
+
return String(value) === condition.value;
|
|
310
|
+
}
|
|
311
|
+
// An edge: tied to this node, to anything, or to nothing.
|
|
312
|
+
const ends = farEnds(ctx.graph, node.id, condition.key);
|
|
313
|
+
if (condition.value === "*")
|
|
314
|
+
return ends.length > 0;
|
|
315
|
+
if (condition.value === "none")
|
|
316
|
+
return ends.length === 0;
|
|
317
|
+
return ends.some((end) => end.id === condition.value);
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Whether the words find the node — search's own matcher, so a list's `q`
|
|
321
|
+
* and the Find box never disagree: every word the start of a word in the
|
|
322
|
+
* label or a readable field, case, diacritics and punctuation aside.
|
|
323
|
+
*/
|
|
324
|
+
export function matches(ctx, node, query) {
|
|
325
|
+
return matcherFor(ctx, query)(node);
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* The words, read once for a whole list. `key:value` tokens are conditions,
|
|
329
|
+
* as in the Find box: judged where the kind offers them, ignored where it
|
|
330
|
+
* does not — and words made ONLY of tokens nothing here offers (a pasted
|
|
331
|
+
* `https://…`, a `foo:bar`) find nothing, as `search()` says, rather than
|
|
332
|
+
* everything. `is:any` alone is a horizon, not a search: it keeps all.
|
|
333
|
+
*/
|
|
334
|
+
function matcherFor(ctx, query) {
|
|
335
|
+
const { words, conditions } = parseQuery(query);
|
|
336
|
+
if (words.length === 0 && conditions.length === 0)
|
|
337
|
+
return () => true;
|
|
338
|
+
const offers = new Map();
|
|
339
|
+
const offered = (kind) => {
|
|
340
|
+
let held = offers.get(kind);
|
|
341
|
+
if (!held) {
|
|
342
|
+
held = new Set(arrangeable(ctx.schema, kind).filters.map((offer) => offer.key));
|
|
343
|
+
offers.set(kind, held);
|
|
344
|
+
}
|
|
345
|
+
return held;
|
|
346
|
+
};
|
|
347
|
+
return (node) => {
|
|
348
|
+
const keys = offered(node.kind);
|
|
349
|
+
const applied = conditions.filter((condition) => keys.has(condition.key));
|
|
350
|
+
if (!applied.every((condition) => conditionHolds(ctx, node, condition)))
|
|
351
|
+
return false;
|
|
352
|
+
if (words.length > 0)
|
|
353
|
+
return matchNode(ctx.schema.tryDefinition(node.kind), asRecord(node), words) !== undefined;
|
|
354
|
+
return applied.length > 0;
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Filters, sorts and groups. The filter is a conjunction; the sort is
|
|
359
|
+
* stable; a grouping puts the group with nothing to say last. Nodes whose
|
|
360
|
+
* kind the context cannot describe are kept and sort by what they carry.
|
|
361
|
+
*/
|
|
362
|
+
export function arrange(nodes, arrangement, ctx) {
|
|
363
|
+
const query = arrangement.query?.trim();
|
|
364
|
+
const found = query ? nodes.filter(matcherFor(ctx, query)) : nodes;
|
|
365
|
+
const kept = arrangement.filter?.length
|
|
366
|
+
? found.filter((node) => arrangement.filter.every((condition) => conditionHolds(ctx, node, condition)))
|
|
367
|
+
: [...found];
|
|
368
|
+
const sort = arrangement.sort;
|
|
369
|
+
const ordered = sort
|
|
370
|
+
? kept
|
|
371
|
+
.map((node, index) => ({ node, index, value: sortValue(ctx, node, sort.by) }))
|
|
372
|
+
.sort((a, b) => {
|
|
373
|
+
const byValue = compare(a.value, b.value);
|
|
374
|
+
const signed = sort.direction === "desc" && byValue !== 0 && a.value !== undefined && b.value !== undefined ? -byValue : byValue;
|
|
375
|
+
return signed !== 0 ? signed : a.index - b.index;
|
|
376
|
+
})
|
|
377
|
+
.map((entry) => entry.node)
|
|
378
|
+
: kept;
|
|
379
|
+
const grouping = arrangement.group;
|
|
380
|
+
if (!grouping)
|
|
381
|
+
return { nodes: ordered, groups: [{ key: "", label: "", nodes: ordered }], grouped: false };
|
|
382
|
+
const groups = new Map();
|
|
383
|
+
const put = (key, label, node) => {
|
|
384
|
+
const group = groups.get(key) ?? { label, nodes: [] };
|
|
385
|
+
group.nodes.push(node);
|
|
386
|
+
groups.set(key, group);
|
|
387
|
+
};
|
|
388
|
+
const first = ordered[0];
|
|
389
|
+
const definition = first ? ctx.schema.tryDefinition(first.kind) : undefined;
|
|
390
|
+
const shape = (definition?.fields.shape ?? {});
|
|
391
|
+
const reading = definition ? readingOf(definition, grouping.by) : humaniseField(grouping.by);
|
|
392
|
+
const isField = grouping.by in shape;
|
|
393
|
+
const type = isField ? fieldType(shape[grouping.by]) : undefined;
|
|
394
|
+
const edgeReading = edgesOf(ctx.schema, first?.kind ?? "").find((offer) => offer.key === grouping.by)?.label;
|
|
395
|
+
// "No due date" for a field; an edge reads as a sentence, so "Without the list it is on".
|
|
396
|
+
const none = isField
|
|
397
|
+
? `No ${reading.toLowerCase()}`
|
|
398
|
+
: `Without ${(edgeReading ?? humaniseField(grouping.by)).toLowerCase()}`;
|
|
399
|
+
/*
|
|
400
|
+
* Two far ends of one name — a single and its album, both "Blue Hour" —
|
|
401
|
+
* are told apart in the heading, as they are in a picker (see `tellApart`):
|
|
402
|
+
* "Blue Hour · single, Blue Hour · album" rather than "Blue Hour, Blue Hour".
|
|
403
|
+
*/
|
|
404
|
+
const apart = isField
|
|
405
|
+
? new Map()
|
|
406
|
+
: tellApart([...new Map(ordered.flatMap((node) => farEnds(ctx.graph, node.id, grouping.by)).map((end) => [end.id, end])).values()].map(asRecord), (kind) => ctx.schema.tryDefinition(kind));
|
|
407
|
+
for (const node of ordered) {
|
|
408
|
+
if (isField) {
|
|
409
|
+
const value = fields(node)[grouping.by];
|
|
410
|
+
if (value === undefined || value === null || value === "") {
|
|
411
|
+
put("", none, node);
|
|
412
|
+
}
|
|
413
|
+
else if (type === "date") {
|
|
414
|
+
const bucket = grouping.bucket ?? "day";
|
|
415
|
+
const start = bucketStart(String(value), bucket);
|
|
416
|
+
if (start)
|
|
417
|
+
put(start, bucketLabel(start, bucket), node);
|
|
418
|
+
else
|
|
419
|
+
put("", none, node);
|
|
420
|
+
}
|
|
421
|
+
else if (type === "boolean") {
|
|
422
|
+
put(value ? "1" : "0", value ? "Yes" : "No", node);
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
const format = definition?.display?.format?.[grouping.by];
|
|
426
|
+
put(String(value), format ? format(value) : String(value), node);
|
|
427
|
+
}
|
|
428
|
+
continue;
|
|
429
|
+
}
|
|
430
|
+
const ends = farEnds(ctx.graph, node.id, grouping.by)
|
|
431
|
+
.map((end) => ({ id: end.id, label: apart.has(end.id) ? `${labelFor(ctx, end)} · ${apart.get(end.id)}` : labelFor(ctx, end) }))
|
|
432
|
+
.sort((a, b) => a.label.localeCompare(b.label));
|
|
433
|
+
if (ends.length === 0)
|
|
434
|
+
put("", none, node);
|
|
435
|
+
else
|
|
436
|
+
put(ends.map((end) => end.id).join(","), ends.map((end) => end.label).join(", "), node);
|
|
437
|
+
}
|
|
438
|
+
const optionOrder = type === "choice" ? describeArgOptions(shape[grouping.by]) : undefined;
|
|
439
|
+
const orderedGroups = [...groups.entries()]
|
|
440
|
+
.sort(([a, ga], [b, gb]) => {
|
|
441
|
+
if (a === "")
|
|
442
|
+
return 1;
|
|
443
|
+
if (b === "")
|
|
444
|
+
return -1;
|
|
445
|
+
if (optionOrder)
|
|
446
|
+
return optionOrder.indexOf(a) - optionOrder.indexOf(b);
|
|
447
|
+
if (type === "boolean")
|
|
448
|
+
return b.localeCompare(a); // Yes before No
|
|
449
|
+
if (type === "date")
|
|
450
|
+
return a.localeCompare(b);
|
|
451
|
+
return ga.label.localeCompare(gb.label);
|
|
452
|
+
})
|
|
453
|
+
.map(([key, group]) => ({ key, label: group.label, nodes: group.nodes }));
|
|
454
|
+
return { nodes: ordered, groups: orderedGroups, grouped: true };
|
|
455
|
+
}
|
|
456
|
+
//# sourceMappingURL=arrange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arrange.js","sourceRoot":"","sources":["../src/arrange.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { GraviewApp } from "./app.js";
|
|
2
|
+
import type { AnySchema } from "./schema/schema.js";
|
|
3
|
+
/**
|
|
4
|
+
* THE ORDER THINGS MUST BE MADE IN, WHICH THE DECLARATION ALREADY STATES.
|
|
5
|
+
*
|
|
6
|
+
* `creates: ["feature"]` on an act, and `zoneId: nodeRef(["zone"])` in its
|
|
7
|
+
* input, are together a dependency graph over kinds: a feature cannot be
|
|
8
|
+
* made until a zone exists. Every app declares this and, until now, one
|
|
9
|
+
* place read it — the affordance derivation, withholding a single act whose
|
|
10
|
+
* picker would be empty.
|
|
11
|
+
*
|
|
12
|
+
* Read whole it is the whole of onboarding:
|
|
13
|
+
*
|
|
14
|
+
* - WHICH KINDS CAN BEGIN on an empty graph, and which single act is the
|
|
15
|
+
* only way in. A blank installation of a ten-kind app has one door and
|
|
16
|
+
* seven silent districts, and nobody ever sees that but the first person
|
|
17
|
+
* to open it.
|
|
18
|
+
* - THE ORDER TO ASK IN. Ground before features; practices before the
|
|
19
|
+
* routines that apply them.
|
|
20
|
+
* - THE ORDER TO APPLY IN. A model proposing forty calls should not have
|
|
21
|
+
* to sort them, and a runtime that applies them in the order they
|
|
22
|
+
* arrived fails on the first one that names something not yet made.
|
|
23
|
+
* - WHAT IS UNREACHABLE. A kind no act creates cannot arrive at all, which
|
|
24
|
+
* is a legitimate design (a kind a migration seeds, a kind a module
|
|
25
|
+
* owns) and one the author should have to look at once.
|
|
26
|
+
*
|
|
27
|
+
* It is read from the DECLARATION alone — no graph, no store. What can be
|
|
28
|
+
* done on a particular graph is `deriveAffordances`' question, and this is
|
|
29
|
+
* the question underneath it: what could ever be done at all, and in what
|
|
30
|
+
* order.
|
|
31
|
+
*/
|
|
32
|
+
export interface KindBeginning {
|
|
33
|
+
readonly kind: string;
|
|
34
|
+
/** Acts that create this kind, by name. */
|
|
35
|
+
readonly madeBy: readonly string[];
|
|
36
|
+
/**
|
|
37
|
+
* Kinds an act must be handed before it can make this one, as the union
|
|
38
|
+
* over every act that makes it: the cheapest way in is what matters, so a
|
|
39
|
+
* kind with two doors needs whichever door is open.
|
|
40
|
+
*/
|
|
41
|
+
readonly needs: readonly string[];
|
|
42
|
+
/**
|
|
43
|
+
* How many kinds must exist first, along the shortest chain. 0 is a kind
|
|
44
|
+
* that can begin on an empty graph; `null` is one nothing can make.
|
|
45
|
+
*/
|
|
46
|
+
readonly depth: number | null;
|
|
47
|
+
}
|
|
48
|
+
export interface Beginning {
|
|
49
|
+
/** Every kind, in the order a blank installation can fill them. */
|
|
50
|
+
readonly order: readonly KindBeginning[];
|
|
51
|
+
/** Kinds that can be made with nothing in the graph at all. */
|
|
52
|
+
readonly roots: readonly string[];
|
|
53
|
+
/** The acts that make those kinds: the doors into an empty installation. */
|
|
54
|
+
readonly doors: readonly string[];
|
|
55
|
+
/**
|
|
56
|
+
* Kinds no act can ever make, with why — nothing creates them, or
|
|
57
|
+
* everything that does needs something that is itself unreachable.
|
|
58
|
+
*/
|
|
59
|
+
readonly unreachable: readonly {
|
|
60
|
+
readonly kind: string;
|
|
61
|
+
readonly why: string;
|
|
62
|
+
}[];
|
|
63
|
+
}
|
|
64
|
+
export declare function beginning<S extends AnySchema>(app: GraviewApp<S>): Beginning;
|
|
65
|
+
//# sourceMappingURL=beginning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beginning.d.ts","sourceRoot":"","sources":["../src/beginning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAClF;AAOD,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CA8F5E"}
|