@fnndsc/menu 0.12.0 → 0.13.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/dist/dag.d.ts CHANGED
@@ -735,16 +735,20 @@ export declare const procFeedDataSchema: z.ZodObject<{
735
735
  seriesDescription: z.ZodOptional<z.ZodString>;
736
736
  /** Why the format is `unknown` or `other`, in words. */
737
737
  reason: z.ZodOptional<z.ZodString>;
738
+ /** The feed whose output this feed's data is: its lineage, when it began from another feed's work. */
739
+ sourceFeed: z.ZodOptional<z.ZodNumber>;
738
740
  }, "strip", z.ZodTypeAny, {
739
741
  format: "unknown" | "other" | "dicom" | "nifti" | "mgz" | "jpeg" | "png";
740
742
  modality?: string | undefined;
741
743
  seriesDescription?: string | undefined;
742
744
  reason?: string | undefined;
745
+ sourceFeed?: number | undefined;
743
746
  }, {
744
747
  format: "unknown" | "other" | "dicom" | "nifti" | "mgz" | "jpeg" | "png";
745
748
  modality?: string | undefined;
746
749
  seriesDescription?: string | undefined;
747
750
  reason?: string | undefined;
751
+ sourceFeed?: number | undefined;
748
752
  }>;
749
753
  export type ProcFeedData = z.infer<typeof procFeedDataSchema>;
750
754
  export declare const procUniverseFeedSchema: z.ZodObject<{
@@ -788,16 +792,20 @@ export declare const procUniverseFeedSchema: z.ZodObject<{
788
792
  seriesDescription: z.ZodOptional<z.ZodString>;
789
793
  /** Why the format is `unknown` or `other`, in words. */
790
794
  reason: z.ZodOptional<z.ZodString>;
795
+ /** The feed whose output this feed's data is: its lineage, when it began from another feed's work. */
796
+ sourceFeed: z.ZodOptional<z.ZodNumber>;
791
797
  }, "strip", z.ZodTypeAny, {
792
798
  format: "unknown" | "other" | "dicom" | "nifti" | "mgz" | "jpeg" | "png";
793
799
  modality?: string | undefined;
794
800
  seriesDescription?: string | undefined;
795
801
  reason?: string | undefined;
802
+ sourceFeed?: number | undefined;
796
803
  }, {
797
804
  format: "unknown" | "other" | "dicom" | "nifti" | "mgz" | "jpeg" | "png";
798
805
  modality?: string | undefined;
799
806
  seriesDescription?: string | undefined;
800
807
  reason?: string | undefined;
808
+ sourceFeed?: number | undefined;
801
809
  }>>;
802
810
  }, "strip", z.ZodTypeAny, {
803
811
  id: number;
@@ -818,6 +826,7 @@ export declare const procUniverseFeedSchema: z.ZodObject<{
818
826
  modality?: string | undefined;
819
827
  seriesDescription?: string | undefined;
820
828
  reason?: string | undefined;
829
+ sourceFeed?: number | undefined;
821
830
  } | undefined;
822
831
  }, {
823
832
  id: number;
@@ -838,6 +847,7 @@ export declare const procUniverseFeedSchema: z.ZodObject<{
838
847
  modality?: string | undefined;
839
848
  seriesDescription?: string | undefined;
840
849
  reason?: string | undefined;
850
+ sourceFeed?: number | undefined;
841
851
  } | undefined;
842
852
  }>;
843
853
  export declare const procUniverseModelSchema: z.ZodObject<{
@@ -882,16 +892,20 @@ export declare const procUniverseModelSchema: z.ZodObject<{
882
892
  seriesDescription: z.ZodOptional<z.ZodString>;
883
893
  /** Why the format is `unknown` or `other`, in words. */
884
894
  reason: z.ZodOptional<z.ZodString>;
895
+ /** The feed whose output this feed's data is: its lineage, when it began from another feed's work. */
896
+ sourceFeed: z.ZodOptional<z.ZodNumber>;
885
897
  }, "strip", z.ZodTypeAny, {
886
898
  format: "unknown" | "other" | "dicom" | "nifti" | "mgz" | "jpeg" | "png";
887
899
  modality?: string | undefined;
888
900
  seriesDescription?: string | undefined;
889
901
  reason?: string | undefined;
902
+ sourceFeed?: number | undefined;
890
903
  }, {
891
904
  format: "unknown" | "other" | "dicom" | "nifti" | "mgz" | "jpeg" | "png";
892
905
  modality?: string | undefined;
893
906
  seriesDescription?: string | undefined;
894
907
  reason?: string | undefined;
908
+ sourceFeed?: number | undefined;
895
909
  }>>;
896
910
  }, "strip", z.ZodTypeAny, {
897
911
  id: number;
@@ -912,6 +926,7 @@ export declare const procUniverseModelSchema: z.ZodObject<{
912
926
  modality?: string | undefined;
913
927
  seriesDescription?: string | undefined;
914
928
  reason?: string | undefined;
929
+ sourceFeed?: number | undefined;
915
930
  } | undefined;
916
931
  }, {
917
932
  id: number;
@@ -932,6 +947,7 @@ export declare const procUniverseModelSchema: z.ZodObject<{
932
947
  modality?: string | undefined;
933
948
  seriesDescription?: string | undefined;
934
949
  reason?: string | undefined;
950
+ sourceFeed?: number | undefined;
935
951
  } | undefined;
936
952
  }>, "many">;
937
953
  /** Whether the index is whole; false while it still warms. */
@@ -956,6 +972,7 @@ export declare const procUniverseModelSchema: z.ZodObject<{
956
972
  modality?: string | undefined;
957
973
  seriesDescription?: string | undefined;
958
974
  reason?: string | undefined;
975
+ sourceFeed?: number | undefined;
959
976
  } | undefined;
960
977
  }[];
961
978
  whole: boolean;
@@ -979,6 +996,7 @@ export declare const procUniverseModelSchema: z.ZodObject<{
979
996
  modality?: string | undefined;
980
997
  seriesDescription?: string | undefined;
981
998
  reason?: string | undefined;
999
+ sourceFeed?: number | undefined;
982
1000
  } | undefined;
983
1001
  }[];
984
1002
  whole: boolean;
@@ -999,14 +1017,33 @@ export declare const procLayoutModelSchema: z.ZodObject<{
999
1017
  positions: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
1000
1018
  /** When it was kept (ISO 8601); null when none is. */
1001
1019
  writtenAt: z.ZodNullable<z.ZodString>;
1020
+ /** How far the session has come laying it out, while it does; absent or null otherwise. */
1021
+ laying: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1022
+ nodes: z.ZodNumber;
1023
+ fraction: z.ZodNumber;
1024
+ }, "strip", z.ZodTypeAny, {
1025
+ nodes: number;
1026
+ fraction: number;
1027
+ }, {
1028
+ nodes: number;
1029
+ fraction: number;
1030
+ }>>>;
1002
1031
  }, "strip", z.ZodTypeAny, {
1003
1032
  name: string;
1004
1033
  positions: Record<string, [number, number, number]> | null;
1005
1034
  writtenAt: string | null;
1035
+ laying?: {
1036
+ nodes: number;
1037
+ fraction: number;
1038
+ } | null | undefined;
1006
1039
  }, {
1007
1040
  name: string;
1008
1041
  positions: Record<string, [number, number, number]> | null;
1009
1042
  writtenAt: string | null;
1043
+ laying?: {
1044
+ nodes: number;
1045
+ fraction: number;
1046
+ } | null | undefined;
1010
1047
  }>;
1011
1048
  export type ProcLayoutModel = z.infer<typeof procLayoutModelSchema>;
1012
1049
  export declare const PROC_LAYOUT_MODEL_KIND: "proc.layout";
package/dist/dag.js CHANGED
@@ -184,6 +184,8 @@ export const procFeedDataSchema = z.object({
184
184
  seriesDescription: z.string().optional(),
185
185
  /** Why the format is `unknown` or `other`, in words. */
186
186
  reason: z.string().optional(),
187
+ /** The feed whose output this feed's data is: its lineage, when it began from another feed's work. */
188
+ sourceFeed: z.number().optional(),
187
189
  });
188
190
  export const procUniverseFeedSchema = z.object({
189
191
  id: z.number(),
@@ -221,6 +223,8 @@ export const procLayoutModelSchema = z.object({
221
223
  positions: z.record(z.string(), z.tuple([z.number(), z.number(), z.number()])).nullable(),
222
224
  /** When it was kept (ISO 8601); null when none is. */
223
225
  writtenAt: z.string().nullable(),
226
+ /** How far the session has come laying it out, while it does; absent or null otherwise. */
227
+ laying: z.object({ nodes: z.number(), fraction: z.number() }).nullable().optional(),
224
228
  });
225
229
  export const PROC_LAYOUT_MODEL_KIND = 'proc.layout';
226
230
  //# sourceMappingURL=dag.js.map
package/dist/dag.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dag.js","sourceRoot":"","sources":["../src/dag.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dag.js","sourceRoot":"","sources":["../src/dag.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -21,3 +21,4 @@ export { pluginParameterSchema, pluginInfoModelSchema, PLUGIN_INFO_MODEL_KIND, t
21
21
  export { pacsProvenanceSchema, pacsPatientSchema, pacsPatientStatusSchema, PACS_PATIENT_STATUSES, pacsSeriesSchema, pacsStudySchema, pacsQueryModelSchema, pacsServerSchema, pacsServersModelSchema, PACS_QUERY_MODEL_KIND, PACS_SERVERS_MODEL_KIND, patientAddress_of, type PacsSeries, type PacsStudy, type PacsProvenance, type PacsPatient, type PacsPatientStatus, type PacsQueryModel, type PacsServer, type PacsServersModel, } from './pacs.js';
22
22
  export { DICOM_TAG_GROUPS, dicomTagGroupSchema, dicomTagSchema, dicomVaryingTagSchema, dicomTagsModelSchema, dicomGeometrySchema, dicomSeriesModelSchema, imageViewModelSchema, DICOM_MODEL_KINDS, IMAGE_MODEL_KINDS, type DicomTag, type DicomTagGroup, type DicomVaryingTag, type DicomTagsModel, type DicomGeometry, type DicomSeriesModel, type ImageViewModel, } from './dicom.js';
23
23
  export { SESSION_MOTD_MODEL_KIND, motdIndexSchema, sessionMotdSchema, type MotdIndex, type SessionMotd, } from './motd.js';
24
+ export { type UniverseNode, type UniverseGraph, type LandedGroup, type LandedFeed, type UniverseScale, shape_of, groupId_of, anchorId_of, jobsMetric_of, erroredShare_of, universeGraph_build, pluginStarId_of, pluginOfStar, constellationsGraph_build, accretionGraph_build, shapeWords_of, DESCRIPTION_OVERLAP, CAPTION_FEEDS_MIN, CAPTION_SHARE_MIN, descriptionWords_of, wordOverlap_of, descriptionGroups_of, dataPath_of, dataHubId_of, dataHubKey_of, dataGraph_build, dataHubTip_of, UNIVERSE_REACH, UNIVERSE_HUG_NODES, UNIVERSE_LAYOUTS, type UniverseLayout, universeReach_of, universeEngine_of, foldId_of, foldShape_of, universeKey_of, universeLayoutGraph_build, } from './universe.js';
package/dist/index.js CHANGED
@@ -21,4 +21,5 @@ export { pluginParameterSchema, pluginInfoModelSchema, PLUGIN_INFO_MODEL_KIND, }
21
21
  export { pacsProvenanceSchema, pacsPatientSchema, pacsPatientStatusSchema, PACS_PATIENT_STATUSES, pacsSeriesSchema, pacsStudySchema, pacsQueryModelSchema, pacsServerSchema, pacsServersModelSchema, PACS_QUERY_MODEL_KIND, PACS_SERVERS_MODEL_KIND, patientAddress_of, } from './pacs.js';
22
22
  export { DICOM_TAG_GROUPS, dicomTagGroupSchema, dicomTagSchema, dicomVaryingTagSchema, dicomTagsModelSchema, dicomGeometrySchema, dicomSeriesModelSchema, imageViewModelSchema, DICOM_MODEL_KINDS, IMAGE_MODEL_KINDS, } from './dicom.js';
23
23
  export { SESSION_MOTD_MODEL_KIND, motdIndexSchema, sessionMotdSchema, } from './motd.js';
24
+ export { shape_of, groupId_of, anchorId_of, jobsMetric_of, erroredShare_of, universeGraph_build, pluginStarId_of, pluginOfStar, constellationsGraph_build, accretionGraph_build, shapeWords_of, DESCRIPTION_OVERLAP, CAPTION_FEEDS_MIN, CAPTION_SHARE_MIN, descriptionWords_of, wordOverlap_of, descriptionGroups_of, dataPath_of, dataHubId_of, dataHubKey_of, dataGraph_build, dataHubTip_of, UNIVERSE_REACH, UNIVERSE_HUG_NODES, UNIVERSE_LAYOUTS, universeReach_of, universeEngine_of, foldId_of, foldShape_of, universeKey_of, universeLayoutGraph_build, } from './universe.js';
24
25
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GAMpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,cAAc,EACd,iBAAiB,GAMlB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,GAOtB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,aAAa,EACb,gCAAgC,EAChC,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EAItB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,GAgBrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,YAAY,GAEb,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,GAUhB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EAGpB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,GAMvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GAGvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,GASlB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,GAQlB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,iBAAiB,GAGlB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,304 @@
1
+ /**
2
+ * @file The universe as graphs: every feed the index holds, drawn as the
3
+ * space a surface lays out.
4
+ *
5
+ * As the index reads a feed the session says what it is: its jobs collapsed
6
+ * by plugin per place in the pipeline — a chain is a chain, a fan of three
7
+ * hundred conversions is one node of 300 — with a status on every node.
8
+ * These build the graphs a universe is laid out from — round each shape's
9
+ * unseen hub, round the plugin stars, as data hubs, or grown in creation
10
+ * order — pure functions of the feeds, shared by the surface that draws the
11
+ * space and the session that lays it out once for every surface.
12
+ *
13
+ * Every node is real: a group of jobs that ran. Nothing is invented to fill
14
+ * the wait, which is what lets it be a readout rather than a screensaver.
15
+ *
16
+ * @module
17
+ */
18
+ /**
19
+ * One node of a universe graph: what a layout places and a surface draws.
20
+ * Structural, so a surface's own node type (with its look) accepts it.
21
+ */
22
+ export interface UniverseNode {
23
+ id: string;
24
+ label: string;
25
+ parentIds: string[];
26
+ joinParentIds: string[];
27
+ /** Execution status; undefined for an anchor. */
28
+ status?: string;
29
+ metric?: number;
30
+ count?: number;
31
+ /** The share of a collapsed group that ended in error, 0..1. */
32
+ share?: number;
33
+ ghost?: boolean;
34
+ halo?: boolean;
35
+ ring?: boolean;
36
+ hue?: string;
37
+ caption?: string;
38
+ dim?: boolean;
39
+ /** Its joins are a relation, not an edge of the run (lineage): drawn faint, never as tubes. */
40
+ joinFaint?: boolean;
41
+ attrs?: Record<string, number | string | string[]>;
42
+ }
43
+ /** A universe graph. */
44
+ export interface UniverseGraph {
45
+ nodes: UniverseNode[];
46
+ }
47
+ /** One node of a feed's collapsed shape. */
48
+ export interface LandedGroup {
49
+ plugin: string;
50
+ count: number;
51
+ /** How many of the count ended in error; zero from an older daemon. */
52
+ errored: number;
53
+ status: string;
54
+ parent: number | null;
55
+ }
56
+ /** One feed as the session reported it landing. */
57
+ export interface LandedFeed {
58
+ id: number;
59
+ /** The feed's name, for the tip; empty from a daemon that predates it. */
60
+ title: string;
61
+ jobs: number;
62
+ status: string;
63
+ chain: string[];
64
+ groups: LandedGroup[];
65
+ /** When the feed was made (ISO 8601): the order a replay reveals it in; absent or empty from a daemon that predates it. */
66
+ createdAt?: string;
67
+ /** What the feed's data is, once the index has read it: its format, and for DICOM its modality and series description. */
68
+ data?: {
69
+ format: string;
70
+ modality?: string;
71
+ seriesDescription?: string;
72
+ reason?: string;
73
+ sourceFeed?: number;
74
+ };
75
+ }
76
+ /**
77
+ * The signature of a feed's shape: what pulls like feeds together.
78
+ *
79
+ * @param feed - The feed.
80
+ * @returns The plugins in group order with their parent places — the same
81
+ * for two feeds that ran the same pipeline, whatever their counts.
82
+ */
83
+ export declare function shape_of(feed: LandedFeed): string;
84
+ /** The id of a feed's group node. */
85
+ export declare function groupId_of(feedId: number, index: number): string;
86
+ /** The id of a shape's unseen anchor. */
87
+ export declare function anchorId_of(shape: string): string;
88
+ /**
89
+ * Builds the space from the feeds that have landed so far.
90
+ *
91
+ * @param landed - The feeds, in any order; the graph is the same for any order.
92
+ * @returns The graph: every feed's groups, and one ghost anchor per shape
93
+ * that each feed's root hangs from — present in the settle, never drawn.
94
+ */
95
+ /**
96
+ * What sizes a sphere: the jobs it stands for, on a log scale, or nothing
97
+ * (every sphere alike, so the field reads by shape alone).
98
+ */
99
+ export type UniverseScale = 'jobs' | 'feeds';
100
+ /**
101
+ * A sphere's weight on the jobs scale. Logarithmic, because a group of
102
+ * eighty thousand beside groups of three hundred left everything but the
103
+ * giant at the smallest radius and the giant at the heart of gravity — a
104
+ * fat caterpillar where a field should be.
105
+ *
106
+ * @param count - The jobs the group stands for.
107
+ * @returns The metric the settle sizes by.
108
+ */
109
+ export declare function jobsMetric_of(count: number): number;
110
+ /**
111
+ * The share of a group that ended in error, 0..1, or undefined when none
112
+ * did: what hues the sphere. A group is not red because one job in eighty
113
+ * thousand failed; it is as red as its failures are many.
114
+ *
115
+ * @param group - The group.
116
+ * @returns The share, or undefined for a clean group.
117
+ */
118
+ export declare function erroredShare_of(group: LandedGroup): number | undefined;
119
+ export declare function universeGraph_build(landed: ReadonlyArray<LandedFeed>, scale?: UniverseScale): UniverseGraph;
120
+ /**
121
+ * A plugin star's id.
122
+ *
123
+ * @param plugin - The plugin's name (versions collapse: the name alone).
124
+ * @returns The id.
125
+ */
126
+ export declare function pluginStarId_of(plugin: string): string;
127
+ /**
128
+ * The plugin a star stands for.
129
+ *
130
+ * @param nodeId - A node id.
131
+ * @returns The plugin's name, or null when the node is not a plugin star.
132
+ */
133
+ export declare function pluginOfStar(nodeId: string): string | null;
134
+ /**
135
+ * The space as constellations: every feed its own molecule with no shape's
136
+ * hub to hang from, each stage marked with its plugin, and one ringed star
137
+ * per plugin, sized by the feeds that ran it — the engine places the stars
138
+ * by what runs with what and pulls each stage to its own.
139
+ *
140
+ * @param landed - Every landed feed.
141
+ * @param scale - What sizes a stage.
142
+ * @returns The graph.
143
+ */
144
+ export declare function constellationsGraph_build(landed: ReadonlyArray<LandedFeed>, scale?: UniverseScale): UniverseGraph;
145
+ /**
146
+ * The space as it grows by accretion: every feed its own molecule, no hubs
147
+ * and no stars, each stage carrying its plugin (what makes feeds alike) and
148
+ * its feed's creation time (the order the coral grows in).
149
+ *
150
+ * @param landed - Every landed feed.
151
+ * @param scale - What sizes a stage.
152
+ * @returns The graph.
153
+ */
154
+ export declare function accretionGraph_build(landed: ReadonlyArray<LandedFeed>, scale?: UniverseScale): UniverseGraph;
155
+ /**
156
+ * A shape in words: its plugins in pipeline order, each once.
157
+ *
158
+ * @param shape - The shape string (`r:pl-a>0:pl-b>0:pl-b`).
159
+ * @returns `pl-a > pl-b`.
160
+ */
161
+ export declare function shapeWords_of(shape: string): string;
162
+ /** Two descriptions whose words overlap this much are one group. */
163
+ export declare const DESCRIPTION_OVERLAP: number;
164
+ /**
165
+ * The least a description group holds to be labelled in the space: five
166
+ * feeds, or two in every hundred. Formats and modalities are always
167
+ * labelled; a group of one or two is a hover away — labelling every one
168
+ * crowded the middle of the space unreadable.
169
+ */
170
+ export declare const CAPTION_FEEDS_MIN: number;
171
+ export declare const CAPTION_SHARE_MIN: number;
172
+ /**
173
+ * A description as words to compare: upper case, separators to spaces, and
174
+ * the words that say nothing about the sequence dropped — pure numbers, and
175
+ * sizes and fields of view (`220`, `256X256`, `FOV220`, `3MM`).
176
+ *
177
+ * @param description - A series description.
178
+ * @returns Its words, in order, each once.
179
+ */
180
+ export declare function descriptionWords_of(description: string): string[];
181
+ /**
182
+ * How much two sets of words overlap: shared over the smaller, so a short
183
+ * description that is all of a longer one is the same series.
184
+ *
185
+ * @param a - Words.
186
+ * @param b - Words.
187
+ * @returns 0..1.
188
+ */
189
+ export declare function wordOverlap_of(a: ReadonlyArray<string>, b: ReadonlyArray<string>): number;
190
+ /**
191
+ * Groups descriptions by their words: most common first, each joining the
192
+ * first group whose name its words overlap enough, else starting its own.
193
+ * A group is named by the description most of its members carry.
194
+ *
195
+ * @param descriptions - Each feed's description (repeats count).
196
+ * @returns Each description's group name.
197
+ */
198
+ export declare function descriptionGroups_of(descriptions: ReadonlyArray<string>): Map<string, string>;
199
+ /**
200
+ * Where a feed hangs in the DATA tree: its hubs from the format down, each
201
+ * with its label.
202
+ *
203
+ * @param feed - The feed.
204
+ * @param groupOf - Each description's group name.
205
+ * @returns The path of hubs, format first.
206
+ */
207
+ export declare function dataPath_of(feed: LandedFeed, groupOf: ReadonlyMap<string, string>): Array<{
208
+ key: string;
209
+ label: string;
210
+ }>;
211
+ /**
212
+ * A data hub's id.
213
+ *
214
+ * @param key - The hub's path key (`dicom`, `dicom/MR`, `dicom/MR/SAG MPRAGE`).
215
+ * @returns The id.
216
+ */
217
+ export declare function dataHubId_of(key: string): string;
218
+ /**
219
+ * The path key a data hub stands for.
220
+ *
221
+ * @param nodeId - A node id.
222
+ * @returns The key, or null when the node is not a data hub.
223
+ */
224
+ export declare function dataHubKey_of(nodeId: string): string | null;
225
+ /**
226
+ * The space as DATA: every feed its own molecule, hung from the hub of what
227
+ * it began from; hubs chained format → modality → description group, each
228
+ * drawn as a nebula sized by the feeds beneath it.
229
+ *
230
+ * @param landed - Every landed feed.
231
+ * @param scale - What sizes a stage.
232
+ * @returns The graph, and each hub's label and feed count.
233
+ */
234
+ export declare function dataGraph_build(landed: ReadonlyArray<LandedFeed>, scale?: UniverseScale): {
235
+ graph: UniverseGraph;
236
+ hubs: Map<string, {
237
+ label: string;
238
+ feeds: number;
239
+ }>;
240
+ };
241
+ /**
242
+ * What a data hub's tip says: its path from the format down, and how many
243
+ * feeds hang beneath it.
244
+ *
245
+ * @param nodeId - A node id.
246
+ * @param hubs - The hubs, from {@link dataGraph_build}.
247
+ * @returns The tip, or null when the node is not a data hub.
248
+ */
249
+ export declare function dataHubTip_of(nodeId: string, hubs: ReadonlyMap<string, {
250
+ label: string;
251
+ feeds: number;
252
+ }>): string | null;
253
+ /** How far a sphere's repulsion reaches while the space is small: a molecule hugs itself at this bound. */
254
+ export declare const UNIVERSE_REACH: number;
255
+ /** The most nodes a space may hold and still be bounded by {@link UNIVERSE_REACH}; a crowd is left unbounded. */
256
+ export declare const UNIVERSE_HUG_NODES: number;
257
+ /** The layouts a universe can be laid out in. */
258
+ export type UniverseLayout = 'galaxy' | 'spokes' | 'clumps' | 'constellations' | 'data' | 'accretion';
259
+ /** Every layout, in the order the LAYOUT block offers them. */
260
+ export declare const UNIVERSE_LAYOUTS: ReadonlyArray<UniverseLayout>;
261
+ /**
262
+ * The reach a space's settle takes: bounded while small, so a lone molecule
263
+ * hugs itself, unbounded for a crowd.
264
+ *
265
+ * @param nodes - How many nodes the space holds.
266
+ * @returns The reach, or undefined for none.
267
+ */
268
+ export declare function universeReach_of(nodes: number): number | undefined;
269
+ /**
270
+ * The layout engine a universe layout runs: DATA settles its hub tree as the
271
+ * galaxy does, under the engine named `hubs`.
272
+ *
273
+ * @param layout - The layout.
274
+ * @returns The engine's name.
275
+ */
276
+ export declare function universeEngine_of(layout: UniverseLayout): string;
277
+ /** A folded shape's stage id. */
278
+ export declare function foldId_of(shape: string, index: number): string;
279
+ /**
280
+ * The shape a folded stage belongs to.
281
+ *
282
+ * @param nodeId - A node id.
283
+ * @returns The shape, or null when the node is not a folded stage.
284
+ */
285
+ export declare function foldShape_of(nodeId: string): string | null;
286
+ /**
287
+ * The molecule a universe node belongs to: its feed, or its folded shape;
288
+ * none for an anchor, a hub or a star.
289
+ *
290
+ * @param nodeId - A node id.
291
+ * @returns The molecule's key, or null.
292
+ */
293
+ export declare function universeKey_of(nodeId: string): string | null;
294
+ /**
295
+ * The graph a universe layout is laid out from, over every feed (the FEEDS
296
+ * view, sized by jobs): the one a surface draws, and the one a session lays
297
+ * out for it.
298
+ *
299
+ * @param layout - The layout.
300
+ * @param landed - Every landed feed.
301
+ * @param scale - What sizes a stage.
302
+ * @returns The graph.
303
+ */
304
+ export declare function universeLayoutGraph_build(layout: UniverseLayout, landed: ReadonlyArray<LandedFeed>, scale?: UniverseScale): UniverseGraph;
@@ -0,0 +1,499 @@
1
+ /**
2
+ * @file The universe as graphs: every feed the index holds, drawn as the
3
+ * space a surface lays out.
4
+ *
5
+ * As the index reads a feed the session says what it is: its jobs collapsed
6
+ * by plugin per place in the pipeline — a chain is a chain, a fan of three
7
+ * hundred conversions is one node of 300 — with a status on every node.
8
+ * These build the graphs a universe is laid out from — round each shape's
9
+ * unseen hub, round the plugin stars, as data hubs, or grown in creation
10
+ * order — pure functions of the feeds, shared by the surface that draws the
11
+ * space and the session that lays it out once for every surface.
12
+ *
13
+ * Every node is real: a group of jobs that ran. Nothing is invented to fill
14
+ * the wait, which is what lets it be a readout rather than a screensaver.
15
+ *
16
+ * @module
17
+ */
18
+ /**
19
+ * The signature of a feed's shape: what pulls like feeds together.
20
+ *
21
+ * @param feed - The feed.
22
+ * @returns The plugins in group order with their parent places — the same
23
+ * for two feeds that ran the same pipeline, whatever their counts.
24
+ */
25
+ export function shape_of(feed) {
26
+ return feed.groups.map((group) => `${group.parent ?? 'r'}:${group.plugin}`).join('>');
27
+ }
28
+ /** The id of a feed's group node. */
29
+ export function groupId_of(feedId, index) {
30
+ return `feed:${feedId}:${index}`;
31
+ }
32
+ /** The id of a shape's unseen anchor. */
33
+ export function anchorId_of(shape) {
34
+ return `shape:${shape}`;
35
+ }
36
+ /**
37
+ * A sphere's weight on the jobs scale. Logarithmic, because a group of
38
+ * eighty thousand beside groups of three hundred left everything but the
39
+ * giant at the smallest radius and the giant at the heart of gravity — a
40
+ * fat caterpillar where a field should be.
41
+ *
42
+ * @param count - The jobs the group stands for.
43
+ * @returns The metric the settle sizes by.
44
+ */
45
+ export function jobsMetric_of(count) {
46
+ return Math.log2(Math.max(1, count) + 1);
47
+ }
48
+ /**
49
+ * The share of a group that ended in error, 0..1, or undefined when none
50
+ * did: what hues the sphere. A group is not red because one job in eighty
51
+ * thousand failed; it is as red as its failures are many.
52
+ *
53
+ * @param group - The group.
54
+ * @returns The share, or undefined for a clean group.
55
+ */
56
+ export function erroredShare_of(group) {
57
+ if (group.errored <= 0 || group.count <= 0)
58
+ return undefined;
59
+ return Math.min(1, group.errored / group.count);
60
+ }
61
+ export function universeGraph_build(landed, scale = 'jobs') {
62
+ const nodes = [];
63
+ const anchors = new Set();
64
+ const feeds = [...landed].sort((a, b) => a.id - b.id);
65
+ const perShape = new Map();
66
+ for (const feed of feeds) {
67
+ if (feed.groups.length === 0)
68
+ continue;
69
+ const shape = shape_of(feed);
70
+ perShape.set(shape, (perShape.get(shape) ?? 0) + 1);
71
+ }
72
+ for (const feed of feeds) {
73
+ if (feed.groups.length === 0)
74
+ continue;
75
+ const shape = shape_of(feed);
76
+ const anchor = anchorId_of(shape);
77
+ if (!anchors.has(shape)) {
78
+ anchors.add(shape);
79
+ // No mass: an anchor gathers its feeds without carving room of its
80
+ // own — but it is drawn as a halo, the cluster's handle, sized by
81
+ // how many feeds share the shape.
82
+ nodes.push({ id: anchor, label: shapeWords_of(shape), parentIds: [], joinParentIds: [], ghost: true, halo: true, metric: 1, count: perShape.get(shape) ?? 1 });
83
+ }
84
+ feed.groups.forEach((group, index) => {
85
+ const share = erroredShare_of(group);
86
+ nodes.push({
87
+ id: groupId_of(feed.id, index),
88
+ label: group.plugin,
89
+ parentIds: [group.parent === null ? anchor : groupId_of(feed.id, group.parent)],
90
+ joinParentIds: [],
91
+ status: group.status,
92
+ metric: scale === 'jobs' ? jobsMetric_of(group.count) : 1,
93
+ ...(group.count > 1 ? { count: group.count } : {}),
94
+ ...(share !== undefined ? { share } : {}),
95
+ });
96
+ });
97
+ }
98
+ return { nodes };
99
+ }
100
+ /** The prefix of a plugin star's id. */
101
+ const PLUGIN_STAR_PREFIX = 'plugin:';
102
+ /**
103
+ * A plugin star's id.
104
+ *
105
+ * @param plugin - The plugin's name (versions collapse: the name alone).
106
+ * @returns The id.
107
+ */
108
+ export function pluginStarId_of(plugin) {
109
+ return `${PLUGIN_STAR_PREFIX}${plugin}`;
110
+ }
111
+ /**
112
+ * The plugin a star stands for.
113
+ *
114
+ * @param nodeId - A node id.
115
+ * @returns The plugin's name, or null when the node is not a plugin star.
116
+ */
117
+ export function pluginOfStar(nodeId) {
118
+ return nodeId.startsWith(PLUGIN_STAR_PREFIX) ? nodeId.slice(PLUGIN_STAR_PREFIX.length) : null;
119
+ }
120
+ /**
121
+ * The space as constellations: every feed its own molecule with no shape's
122
+ * hub to hang from, each stage marked with its plugin, and one ringed star
123
+ * per plugin, sized by the feeds that ran it — the engine places the stars
124
+ * by what runs with what and pulls each stage to its own.
125
+ *
126
+ * @param landed - Every landed feed.
127
+ * @param scale - What sizes a stage.
128
+ * @returns The graph.
129
+ */
130
+ export function constellationsGraph_build(landed, scale = 'jobs') {
131
+ const nodes = [];
132
+ const feedsUsing = new Map();
133
+ const feeds = [...landed].sort((a, b) => a.id - b.id);
134
+ for (const feed of feeds) {
135
+ if (feed.groups.length === 0)
136
+ continue;
137
+ for (const plugin of new Set(feed.groups.map((group) => group.plugin)))
138
+ feedsUsing.set(plugin, (feedsUsing.get(plugin) ?? 0) + 1);
139
+ feed.groups.forEach((group, index) => {
140
+ const share = erroredShare_of(group);
141
+ nodes.push({
142
+ id: groupId_of(feed.id, index),
143
+ label: group.plugin,
144
+ parentIds: group.parent === null ? [] : [groupId_of(feed.id, group.parent)],
145
+ joinParentIds: [],
146
+ status: group.status,
147
+ metric: scale === 'jobs' ? jobsMetric_of(group.count) : 1,
148
+ attrs: { plugin: group.plugin },
149
+ ...(group.count > 1 ? { count: group.count } : {}),
150
+ ...(share !== undefined ? { share } : {}),
151
+ });
152
+ });
153
+ }
154
+ for (const [plugin, count] of [...feedsUsing].sort((a, b) => (a[0] < b[0] ? -1 : 1))) {
155
+ nodes.push({
156
+ id: pluginStarId_of(plugin),
157
+ label: plugin,
158
+ parentIds: [],
159
+ joinParentIds: [],
160
+ // A star's mass is how many feeds ran it, on a log.
161
+ metric: 1 + Math.log(count),
162
+ hue: '#e8f4ff',
163
+ ring: true,
164
+ attrs: { kind: 'star', plugin },
165
+ });
166
+ }
167
+ return { nodes };
168
+ }
169
+ /**
170
+ * The space as it grows by accretion: every feed its own molecule, no hubs
171
+ * and no stars, each stage carrying its plugin (what makes feeds alike) and
172
+ * its feed's creation time (the order the coral grows in).
173
+ *
174
+ * @param landed - Every landed feed.
175
+ * @param scale - What sizes a stage.
176
+ * @returns The graph.
177
+ */
178
+ export function accretionGraph_build(landed, scale = 'jobs') {
179
+ const createdOf = new Map();
180
+ for (const feed of landed) {
181
+ const at = feed.createdAt === undefined ? Number.NaN : Date.parse(feed.createdAt);
182
+ if (Number.isFinite(at))
183
+ createdOf.set(feed.id, at);
184
+ }
185
+ const nodes = constellationsGraph_build(landed, scale).nodes
186
+ .filter((node) => node.attrs?.['kind'] !== 'star')
187
+ .map((node) => {
188
+ const created = createdOf.get(Number(node.id.split(':')[1]));
189
+ return created === undefined ? node : { ...node, attrs: { ...node.attrs, createdAt: created } };
190
+ });
191
+ return { nodes };
192
+ }
193
+ /**
194
+ * A shape in words: its plugins in pipeline order, each once.
195
+ *
196
+ * @param shape - The shape string (`r:pl-a>0:pl-b>0:pl-b`).
197
+ * @returns `pl-a > pl-b`.
198
+ */
199
+ export function shapeWords_of(shape) {
200
+ const seen = [];
201
+ for (const part of shape.split('>')) {
202
+ const plugin = part.slice(part.indexOf(':') + 1);
203
+ if (plugin.length > 0 && !seen.includes(plugin))
204
+ seen.push(plugin);
205
+ }
206
+ return seen.join(' > ');
207
+ }
208
+ /** Two descriptions whose words overlap this much are one group. */
209
+ export const DESCRIPTION_OVERLAP = 0.5;
210
+ /**
211
+ * The least a description group holds to be labelled in the space: five
212
+ * feeds, or two in every hundred. Formats and modalities are always
213
+ * labelled; a group of one or two is a hover away — labelling every one
214
+ * crowded the middle of the space unreadable.
215
+ */
216
+ export const CAPTION_FEEDS_MIN = 5;
217
+ export const CAPTION_SHARE_MIN = 0.02;
218
+ /** The prefix of a data hub's id. */
219
+ const DATA_HUB_PREFIX = 'data:';
220
+ /** What the formats read as on a hub. */
221
+ const FORMAT_WORDS = {
222
+ dicom: 'DICOM', nifti: 'NIfTI', mgz: 'MGZ', jpeg: 'JPEG', png: 'PNG', other: 'OTHER', unknown: 'UNREADABLE', unread: 'NOT YET READ',
223
+ };
224
+ /**
225
+ * A description as words to compare: upper case, separators to spaces, and
226
+ * the words that say nothing about the sequence dropped — pure numbers, and
227
+ * sizes and fields of view (`220`, `256X256`, `FOV220`, `3MM`).
228
+ *
229
+ * @param description - A series description.
230
+ * @returns Its words, in order, each once.
231
+ */
232
+ export function descriptionWords_of(description) {
233
+ const words = description
234
+ .toUpperCase()
235
+ .replace(/[_\-.,/\\()[\]:;+]+/g, ' ')
236
+ .split(/\s+/)
237
+ .filter((word) => word.length > 0)
238
+ .filter((word) => !/^\d+$/.test(word))
239
+ .filter((word) => !/^\d+X\d+$/.test(word))
240
+ .filter((word) => !/^FOV\d*$/.test(word))
241
+ .filter((word) => !/^\d+(\.\d+)?(MM|CM)$/.test(word));
242
+ return [...new Set(words)];
243
+ }
244
+ /**
245
+ * How much two sets of words overlap: shared over the smaller, so a short
246
+ * description that is all of a longer one is the same series.
247
+ *
248
+ * @param a - Words.
249
+ * @param b - Words.
250
+ * @returns 0..1.
251
+ */
252
+ export function wordOverlap_of(a, b) {
253
+ if (a.length === 0 || b.length === 0)
254
+ return 0;
255
+ const set = new Set(a);
256
+ const shared = b.filter((word) => set.has(word)).length;
257
+ return shared / Math.min(a.length, b.length);
258
+ }
259
+ /**
260
+ * Groups descriptions by their words: most common first, each joining the
261
+ * first group whose name its words overlap enough, else starting its own.
262
+ * A group is named by the description most of its members carry.
263
+ *
264
+ * @param descriptions - Each feed's description (repeats count).
265
+ * @returns Each description's group name.
266
+ */
267
+ export function descriptionGroups_of(descriptions) {
268
+ const counts = new Map();
269
+ for (const description of descriptions)
270
+ counts.set(description, (counts.get(description) ?? 0) + 1);
271
+ const ordered = [...counts.keys()].sort((a, b) => (counts.get(b) ?? 0) - (counts.get(a) ?? 0) || (a < b ? -1 : 1));
272
+ const groups = [];
273
+ const groupOf = new Map();
274
+ for (const description of ordered) {
275
+ const words = descriptionWords_of(description);
276
+ const home = words.length === 0 ? undefined : groups.find((group) => wordOverlap_of(group.words, words) >= DESCRIPTION_OVERLAP);
277
+ if (home !== undefined) {
278
+ groupOf.set(description, home.name);
279
+ continue;
280
+ }
281
+ groups.push({ name: description, words });
282
+ groupOf.set(description, description);
283
+ }
284
+ return groupOf;
285
+ }
286
+ /**
287
+ * Where a feed hangs in the DATA tree: its hubs from the format down, each
288
+ * with its label.
289
+ *
290
+ * @param feed - The feed.
291
+ * @param groupOf - Each description's group name.
292
+ * @returns The path of hubs, format first.
293
+ */
294
+ export function dataPath_of(feed, groupOf) {
295
+ const format = feed.data?.format ?? 'unread';
296
+ const path = [{ key: format, label: FORMAT_WORDS[format] ?? format.toUpperCase() }];
297
+ if (format !== 'dicom')
298
+ return path;
299
+ const modality = feed.data?.modality ?? 'NO MODALITY';
300
+ path.push({ key: `${format}/${modality}`, label: modality });
301
+ const description = feed.data?.seriesDescription;
302
+ const group = description === undefined ? 'NO DESCRIPTION' : groupOf.get(description) ?? description;
303
+ path.push({ key: `${format}/${modality}/${group}`, label: group });
304
+ return path;
305
+ }
306
+ /**
307
+ * A data hub's id.
308
+ *
309
+ * @param key - The hub's path key (`dicom`, `dicom/MR`, `dicom/MR/SAG MPRAGE`).
310
+ * @returns The id.
311
+ */
312
+ export function dataHubId_of(key) {
313
+ return `${DATA_HUB_PREFIX}${key}`;
314
+ }
315
+ /**
316
+ * The path key a data hub stands for.
317
+ *
318
+ * @param nodeId - A node id.
319
+ * @returns The key, or null when the node is not a data hub.
320
+ */
321
+ export function dataHubKey_of(nodeId) {
322
+ return nodeId.startsWith(DATA_HUB_PREFIX) ? nodeId.slice(DATA_HUB_PREFIX.length) : null;
323
+ }
324
+ /**
325
+ * The space as DATA: every feed its own molecule, hung from the hub of what
326
+ * it began from; hubs chained format → modality → description group, each
327
+ * drawn as a nebula sized by the feeds beneath it.
328
+ *
329
+ * @param landed - Every landed feed.
330
+ * @param scale - What sizes a stage.
331
+ * @returns The graph, and each hub's label and feed count.
332
+ */
333
+ export function dataGraph_build(landed, scale = 'jobs') {
334
+ const feeds = [...landed].filter((feed) => feed.groups.length > 0).sort((a, b) => a.id - b.id);
335
+ const groupOf = descriptionGroups_of(feeds.map((feed) => feed.data?.seriesDescription).filter((d) => d !== undefined));
336
+ const hubs = new Map();
337
+ const nodes = [];
338
+ for (const feed of feeds) {
339
+ const path = dataPath_of(feed, groupOf);
340
+ let parent = null;
341
+ for (const step of path) {
342
+ const known = hubs.get(step.key);
343
+ if (known === undefined)
344
+ hubs.set(step.key, { label: step.label, feeds: 1, parent });
345
+ else
346
+ known.feeds += 1;
347
+ parent = step.key;
348
+ }
349
+ const leaf = dataHubId_of(parent);
350
+ feed.groups.forEach((group, index) => {
351
+ const share = erroredShare_of(group);
352
+ nodes.push({
353
+ id: groupId_of(feed.id, index),
354
+ label: group.plugin,
355
+ parentIds: [group.parent === null ? leaf : groupId_of(feed.id, group.parent)],
356
+ joinParentIds: [],
357
+ status: group.status,
358
+ metric: scale === 'jobs' ? jobsMetric_of(group.count) : 1,
359
+ ...(group.count > 1 ? { count: group.count } : {}),
360
+ ...(share !== undefined ? { share } : {}),
361
+ });
362
+ });
363
+ }
364
+ // Lineage: a feed whose data is another feed's output is joined to that
365
+ // feed's root — a faint thread under stars, a join tube up close — and the
366
+ // join draws the two a little together in the settle.
367
+ const rootOf = new Map();
368
+ for (const feed of feeds) {
369
+ const index = feed.groups.findIndex((group) => group.parent === null);
370
+ if (index >= 0)
371
+ rootOf.set(feed.id, groupId_of(feed.id, index));
372
+ }
373
+ const nodeOf = new Map(nodes.map((n) => [n.id, n]));
374
+ for (const feed of feeds) {
375
+ const source = feed.data?.sourceFeed;
376
+ const from = source === undefined || source === feed.id ? undefined : rootOf.get(source);
377
+ const root = rootOf.get(feed.id);
378
+ if (from === undefined || root === undefined)
379
+ continue;
380
+ const node = nodeOf.get(root);
381
+ if (node !== undefined) {
382
+ node.joinParentIds = [...node.joinParentIds, from];
383
+ node.joinFaint = true;
384
+ }
385
+ }
386
+ // The hubs: no mass of their own, drawn as nebulae sized by their feeds,
387
+ // each hung from the hub above it so a format's modalities gather.
388
+ const captioned = (key, feedsUnder) => key.split('/').length < 3 || feedsUnder >= Math.max(CAPTION_FEEDS_MIN, CAPTION_SHARE_MIN * feeds.length);
389
+ const hubNodes = [...hubs].map(([key, hub]) => ({
390
+ id: dataHubId_of(key),
391
+ label: hub.label,
392
+ parentIds: hub.parent === null ? [] : [dataHubId_of(hub.parent)],
393
+ joinParentIds: [],
394
+ // An anchor, not a body: as bodies the hubs drew a thread to every feed
395
+ // they hold and still sat at the middle of their own clouds.
396
+ ghost: true,
397
+ halo: true,
398
+ metric: 1,
399
+ count: hub.feeds,
400
+ // Read without hovering: what the hub is, and how many feeds hang from it.
401
+ ...(captioned(key, hub.feeds) ? { caption: `${hub.label} · ${hub.feeds.toLocaleString('en-US')}` } : {}),
402
+ }));
403
+ return {
404
+ graph: { nodes: [...hubNodes, ...nodes] },
405
+ hubs: new Map([...hubs].map(([key, hub]) => [key, { label: hub.label, feeds: hub.feeds }])),
406
+ };
407
+ }
408
+ /**
409
+ * What a data hub's tip says: its path from the format down, and how many
410
+ * feeds hang beneath it.
411
+ *
412
+ * @param nodeId - A node id.
413
+ * @param hubs - The hubs, from {@link dataGraph_build}.
414
+ * @returns The tip, or null when the node is not a data hub.
415
+ */
416
+ export function dataHubTip_of(nodeId, hubs) {
417
+ const key = dataHubKey_of(nodeId);
418
+ if (key === null)
419
+ return null;
420
+ const parts = key.split('/');
421
+ const labels = parts.map((_part, index) => hubs.get(parts.slice(0, index + 1).join('/'))?.label ?? parts[index] ?? '');
422
+ const feeds = hubs.get(key)?.feeds ?? 0;
423
+ return `${labels.join(' · ')} · ${feeds.toLocaleString('en-US')} feed${feeds === 1 ? '' : 's'}`;
424
+ }
425
+ // ── Laying the universe out ───────────────────────────────────────────────────
426
+ /** How far a sphere's repulsion reaches while the space is small: a molecule hugs itself at this bound. */
427
+ export const UNIVERSE_REACH = 12;
428
+ /** The most nodes a space may hold and still be bounded by {@link UNIVERSE_REACH}; a crowd is left unbounded. */
429
+ export const UNIVERSE_HUG_NODES = 240;
430
+ /** Every layout, in the order the LAYOUT block offers them. */
431
+ export const UNIVERSE_LAYOUTS = ['galaxy', 'spokes', 'clumps', 'constellations', 'data', 'accretion'];
432
+ /**
433
+ * The reach a space's settle takes: bounded while small, so a lone molecule
434
+ * hugs itself, unbounded for a crowd.
435
+ *
436
+ * @param nodes - How many nodes the space holds.
437
+ * @returns The reach, or undefined for none.
438
+ */
439
+ export function universeReach_of(nodes) {
440
+ return nodes <= UNIVERSE_HUG_NODES ? UNIVERSE_REACH : undefined;
441
+ }
442
+ /**
443
+ * The layout engine a universe layout runs: DATA settles its hub tree as the
444
+ * galaxy does, under the engine named `hubs`.
445
+ *
446
+ * @param layout - The layout.
447
+ * @returns The engine's name.
448
+ */
449
+ export function universeEngine_of(layout) {
450
+ return layout === 'data' ? 'hubs' : layout;
451
+ }
452
+ /** A folded shape's stage id. */
453
+ export function foldId_of(shape, index) {
454
+ return `fold:${shape}:${index}`;
455
+ }
456
+ /**
457
+ * The shape a folded stage belongs to.
458
+ *
459
+ * @param nodeId - A node id.
460
+ * @returns The shape, or null when the node is not a folded stage.
461
+ */
462
+ export function foldShape_of(nodeId) {
463
+ const match = nodeId.match(/^fold:(.+):\d+$/);
464
+ return match === null ? null : match[1];
465
+ }
466
+ /**
467
+ * The molecule a universe node belongs to: its feed, or its folded shape;
468
+ * none for an anchor, a hub or a star.
469
+ *
470
+ * @param nodeId - A node id.
471
+ * @returns The molecule's key, or null.
472
+ */
473
+ export function universeKey_of(nodeId) {
474
+ const feed = nodeId.match(/^feed:(\d+):/);
475
+ if (feed !== null)
476
+ return `feed:${feed[1]}`;
477
+ const folded = foldShape_of(nodeId);
478
+ return folded === null ? null : `fold:${folded}`;
479
+ }
480
+ /**
481
+ * The graph a universe layout is laid out from, over every feed (the FEEDS
482
+ * view, sized by jobs): the one a surface draws, and the one a session lays
483
+ * out for it.
484
+ *
485
+ * @param layout - The layout.
486
+ * @param landed - Every landed feed.
487
+ * @param scale - What sizes a stage.
488
+ * @returns The graph.
489
+ */
490
+ export function universeLayoutGraph_build(layout, landed, scale = 'jobs') {
491
+ if (layout === 'constellations')
492
+ return constellationsGraph_build(landed, scale);
493
+ if (layout === 'data')
494
+ return dataGraph_build(landed, scale).graph;
495
+ if (layout === 'accretion')
496
+ return accretionGraph_build(landed, scale);
497
+ return universeGraph_build(landed, scale);
498
+ }
499
+ //# sourceMappingURL=universe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"universe.js","sourceRoot":"","sources":["../src/universe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA0DH;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAgB;IACvC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAkB,EAAU,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7G,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,KAAa;IACtD,OAAO,QAAQ,MAAM,IAAI,KAAK,EAAE,CAAC;AACnC,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,SAAS,KAAK,EAAE,CAAC;AAC1B,CAAC;AAeD;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,KAAkB;IAChD,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAiC,EAAE,QAAuB,MAAM;IAClG,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAgB,IAAI,GAAG,EAAE,CAAC;IACvC,MAAM,KAAK,GAAiB,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAa,EAAE,CAAa,EAAU,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACpG,MAAM,QAAQ,GAAwB,IAAI,GAAG,EAAE,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACvC,MAAM,KAAK,GAAW,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACvC,MAAM,KAAK,GAAW,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,MAAM,GAAW,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,mEAAmE;YACnE,kEAAkE;YAClE,kCAAkC;YAClC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjK,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAkB,EAAE,KAAa,EAAQ,EAAE;YAC9D,MAAM,KAAK,GAAuB,eAAe,CAAC,KAAK,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC;gBAC9B,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,SAAS,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC/E,aAAa,EAAE,EAAE;gBACjB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,MAAM,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzD,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,wCAAwC;AACxC,MAAM,kBAAkB,GAAW,SAAS,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,GAAG,kBAAkB,GAAG,MAAM,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChG,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAiC,EAAE,QAAuB,MAAM;IACxG,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,UAAU,GAAwB,IAAI,GAAG,EAAE,CAAC;IAClD,MAAM,KAAK,GAAiB,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAa,EAAE,CAAa,EAAU,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACpG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACvC,KAAK,MAAM,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAkB,EAAU,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvJ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAkB,EAAE,KAAa,EAAQ,EAAE;YAC9D,MAAM,KAAK,GAAuB,eAAe,CAAC,KAAK,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC;gBAC9B,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,SAAS,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3E,aAAa,EAAE,EAAE;gBACjB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,MAAM,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;gBAC/B,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC;YAC3B,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,EAAE;YACb,aAAa,EAAE,EAAE;YACjB,oDAAoD;YACpD,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3B,GAAG,EAAE,SAAS;YACd,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;SAChC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAiC,EAAE,QAAuB,MAAM;IACnG,MAAM,SAAS,GAAwB,IAAI,GAAG,EAAE,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAW,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1F,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,KAAK,GAAmB,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,KAAK;SACzE,MAAM,CAAC,CAAC,IAAkB,EAAW,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;SACxE,GAAG,CAAC,CAAC,IAAkB,EAAgB,EAAE;QACxC,MAAM,OAAO,GAAuB,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC;IAClG,CAAC,CAAC,CAAC;IACL,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAGD;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,MAAM,mBAAmB,GAAW,GAAG,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAW,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAW,IAAI,CAAC;AAE9C,qCAAqC;AACrC,MAAM,eAAe,GAAW,OAAO,CAAC;AAExC,yCAAyC;AACzC,MAAM,YAAY,GAAqC;IACrD,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc;CACpI,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,KAAK,GAAa,WAAW;SAChC,WAAW,EAAE;SACb,OAAO,CAAC,sBAAsB,EAAE,GAAG,CAAC;SACpC,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SAClD,MAAM,CAAC,CAAC,IAAY,EAAW,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtD,MAAM,CAAC,CAAC,IAAY,EAAW,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1D,MAAM,CAAC,CAAC,IAAY,EAAW,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzD,MAAM,CAAC,CAAC,IAAY,EAAW,EAAE,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,CAAwB,EAAE,CAAwB;IAC/E,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAgB,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,MAAM,GAAW,CAAC,CAAC,MAAM,CAAC,CAAC,IAAY,EAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACjF,OAAO,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAmC;IACtE,MAAM,MAAM,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC9C,KAAK,MAAM,WAAW,IAAI,YAAY;QAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpG,MAAM,OAAO,GAAa,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrJ,MAAM,MAAM,GAA6C,EAAE,CAAC;IAC5D,MAAM,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC/C,KAAK,MAAM,WAAW,IAAI,OAAO,EAAE,CAAC;QAClC,MAAM,KAAK,GAAa,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,mBAAmB,CAAC,CAAC;QAChI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,SAAS;QACX,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,IAAgB,EAAE,OAAoC;IAChF,MAAM,MAAM,GAAW,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,QAAQ,CAAC;IACrD,MAAM,IAAI,GAA0C,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3H,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,QAAQ,GAAW,IAAI,CAAC,IAAI,EAAE,QAAQ,IAAI,aAAa,CAAC;IAC9D,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAuB,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACrE,MAAM,KAAK,GAAW,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC;IAC7G,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,GAAG,eAAe,GAAG,GAAG,EAAE,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1F,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiC,EAAE,QAAuB,MAAM;IAC9F,MAAM,KAAK,GAAiB,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAgB,EAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAa,EAAE,CAAa,EAAU,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAClK,MAAM,OAAO,GAAwB,oBAAoB,CACvD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAgB,EAAsB,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAqB,EAAe,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAClJ,CAAC;IACF,MAAM,IAAI,GAAyE,IAAI,GAAG,EAAE,CAAC;IAC7F,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;;gBAChF,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;YACtB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,GAAW,YAAY,CAAC,MAAgB,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAkB,EAAE,KAAa,EAAQ,EAAE;YAC9D,MAAM,KAAK,GAAuB,eAAe,CAAC,KAAK,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC;gBAC9B,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,SAAS,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7E,aAAa,EAAE,EAAE;gBACjB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,MAAM,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzD,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IACD,wEAAwE;IACxE,2EAA2E;IAC3E,sDAAsD;IACtD,MAAM,MAAM,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAW,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAkB,EAAW,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;QACpG,IAAI,KAAK,IAAI,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,MAAM,GAA8B,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAe,EAA0B,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAuB,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;QACzD,MAAM,IAAI,GAAuB,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7G,MAAM,IAAI,GAAuB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACvD,MAAM,IAAI,GAA6B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IACD,yEAAyE;IACzE,mEAAmE;IACnE,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,UAAkB,EAAW,EAAE,CAC7D,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3G,MAAM,QAAQ,GAAmB,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAgB,EAAE,CAAC,CAAC;QAC5E,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC;QACrB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,SAAS,EAAE,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChE,aAAa,EAAE,EAAE;QACjB,wEAAwE;QACxE,6DAA6D;QAC7D,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,2EAA2E;QAC3E,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzG,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC,EAAE;QACzC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAC5F,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,IAA2D;IACvG,MAAM,GAAG,GAAkB,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,KAAK,GAAa,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,MAAM,GAAa,KAAK,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACzJ,MAAM,KAAK,GAAW,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IAChD,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAClG,CAAC;AAED,iFAAiF;AAEjF,2GAA2G;AAC3G,MAAM,CAAC,MAAM,cAAc,GAAW,EAAE,CAAC;AACzC,iHAAiH;AACjH,MAAM,CAAC,MAAM,kBAAkB,GAAW,GAAG,CAAC;AAI9C,+DAA+D;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAkC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAErI;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,KAAK,IAAI,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7C,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,KAAa;IACpD,OAAO,QAAQ,KAAK,IAAI,KAAK,EAAE,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,KAAK,GAA4B,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvE,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,KAAK,CAAC,CAAC,CAAY,CAAC;AACtD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,IAAI,GAA4B,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACnE,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAkB,YAAY,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAsB,EAAE,MAAiC,EAAE,QAAuB,MAAM;IAChI,IAAI,MAAM,KAAK,gBAAgB;QAAE,OAAO,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACjF,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC;IACnE,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACvE,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC5C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fnndsc/menu",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "The mise wire contract: envelope, session protocol, and result-model schemas that surfaces and the kernel both speak",
5
5
  "repository": {
6
6
  "type": "git",