@kanzo-tech/graph 0.18.0 → 0.20.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/README.md +25 -7
- package/dist/core/detail.d.ts +3 -1
- package/dist/core/detail.d.ts.map +1 -1
- package/dist/core/detail.js +55 -30
- package/dist/core/detail.js.map +1 -1
- package/dist/core/error.d.ts +16 -0
- package/dist/core/error.d.ts.map +1 -0
- package/dist/core/error.js +14 -0
- package/dist/core/error.js.map +1 -0
- package/dist/core/filter.d.ts +0 -13
- package/dist/core/filter.d.ts.map +1 -1
- package/dist/core/filter.js +47 -55
- package/dist/core/filter.js.map +1 -1
- package/dist/core/load.d.ts +5 -0
- package/dist/core/load.d.ts.map +1 -1
- package/dist/core/load.js +93 -78
- package/dist/core/load.js.map +1 -1
- package/dist/core/state.d.ts +21 -6
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/store.d.ts.map +1 -1
- package/dist/core/store.js +107 -101
- package/dist/core/store.js.map +1 -1
- package/dist/core/types.d.ts +4 -4
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +8 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -19
- package/dist/index.js.map +1 -1
- package/dist/parts/graph-canvas.js +45 -45
- package/dist/parts/graph-canvas.js.map +1 -1
- package/dist/parts/graph-counts.d.ts +15 -0
- package/dist/parts/graph-counts.d.ts.map +1 -0
- package/dist/parts/graph-counts.js +41 -0
- package/dist/parts/graph-counts.js.map +1 -0
- package/dist/parts/graph-inspector.d.ts.map +1 -1
- package/dist/parts/graph-inspector.js +48 -48
- package/dist/parts/graph-inspector.js.map +1 -1
- package/dist/parts/graph-legend.d.ts +3 -2
- package/dist/parts/graph-legend.d.ts.map +1 -1
- package/dist/parts/graph-legend.js +30 -48
- package/dist/parts/graph-legend.js.map +1 -1
- package/dist/parts/graph-looks.d.ts +16 -0
- package/dist/parts/graph-looks.d.ts.map +1 -0
- package/dist/parts/graph-looks.js +138 -0
- package/dist/parts/graph-looks.js.map +1 -0
- package/dist/parts/graph-search.d.ts +17 -0
- package/dist/parts/graph-search.d.ts.map +1 -0
- package/dist/parts/graph-search.js +89 -0
- package/dist/parts/graph-search.js.map +1 -0
- package/dist/react/use-graph-prefs.d.ts +6 -2
- package/dist/react/use-graph-prefs.d.ts.map +1 -1
- package/dist/react/use-graph-prefs.js +7 -7
- package/dist/react/use-graph-prefs.js.map +1 -1
- package/dist/react/use-graph.js +61 -55
- package/dist/react/use-graph.js.map +1 -1
- package/dist/render/camera.d.ts +26 -0
- package/dist/render/camera.d.ts.map +1 -0
- package/dist/render/camera.js +40 -0
- package/dist/render/camera.js.map +1 -0
- package/dist/render/graph-looks.d.ts +10 -0
- package/dist/render/graph-looks.d.ts.map +1 -1
- package/dist/render/graph-looks.js +37 -20
- package/dist/render/graph-looks.js.map +1 -1
- package/dist/render/placement.d.ts +23 -0
- package/dist/render/placement.d.ts.map +1 -0
- package/dist/render/placement.js +23 -0
- package/dist/render/placement.js.map +1 -0
- package/dist/render/renderer.d.ts +1 -0
- package/dist/render/renderer.d.ts.map +1 -1
- package/dist/render/renderer.js +115 -96
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/webgl.d.ts +5 -4
- package/dist/render/webgl.d.ts.map +1 -1
- package/dist/render/webgl.js +14 -11
- package/dist/render/webgl.js.map +1 -1
- package/package.json +10 -9
package/dist/core/load.js
CHANGED
|
@@ -1,115 +1,130 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { GraphError as I } from "./error.js";
|
|
2
|
+
import { Dictionary as O } from "./categories.js";
|
|
3
|
+
import { projectionOf as g } from "./channels.js";
|
|
4
|
+
import { columnsOf as R } from "./filter.js";
|
|
5
|
+
const _ = (o) => o.manifest.vertex_tables.filter((t) => t.position), v = (o) => (t) => o.properties.some((e) => e.name === t);
|
|
6
|
+
function C(o, t) {
|
|
7
|
+
const e = new AbortController();
|
|
8
|
+
return t(AbortSignal.any([o, e.signal])).catch((r) => {
|
|
9
|
+
throw e.abort(), r;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
async function x(o, t, e) {
|
|
13
|
+
const r = o.scan(t);
|
|
7
14
|
return r.read(r.plan(), { signal: e });
|
|
8
15
|
}
|
|
9
|
-
function E(o,
|
|
10
|
-
const c = new
|
|
16
|
+
function E(o, t, e, r) {
|
|
17
|
+
const c = new O(r), s = new Uint32Array(t), l = e.size === void 0 ? null : new Float32Array(t).fill(Number.NaN);
|
|
11
18
|
return {
|
|
12
19
|
add(a, i) {
|
|
13
|
-
var
|
|
14
|
-
const
|
|
20
|
+
var d, N, b;
|
|
21
|
+
const n = o[a], m = ((d = i.getChild(n.key)) == null ? void 0 : d.toArray()) ?? [], f = e.category === void 0 || (N = i.getChild(e.category)) == null ? void 0 : N.toArray(), u = e.size === void 0 || (b = i.getChild(e.size)) == null ? void 0 : b.toArray(), w = e.byTable ? c.code(n.name) : 0;
|
|
15
22
|
for (let y = 0; y < i.numRows; y++) {
|
|
16
|
-
const h = Number(
|
|
17
|
-
h <
|
|
23
|
+
const h = Number(m[y]);
|
|
24
|
+
h < t && (s[h] = e.byTable || e.category === void 0 ? w : c.code((f == null ? void 0 : f[y]) ?? null), l && (l[h] = Number((u == null ? void 0 : u[y]) ?? Number.NaN)));
|
|
18
25
|
}
|
|
19
26
|
},
|
|
20
27
|
finish() {
|
|
21
|
-
const a = c.ranks(), i = s.map((
|
|
22
|
-
return a.forEach((
|
|
23
|
-
|
|
24
|
-
}), { ranks: i, sizes:
|
|
28
|
+
const a = c.ranks(), i = s.map((m) => a[m] ?? 0), n = [];
|
|
29
|
+
return a.forEach((m, f) => {
|
|
30
|
+
n[m] = c.values[f];
|
|
31
|
+
}), { ranks: i, sizes: l, domain: n };
|
|
25
32
|
}
|
|
26
33
|
};
|
|
27
34
|
}
|
|
28
|
-
function
|
|
29
|
-
let [
|
|
35
|
+
function F(o) {
|
|
36
|
+
let [t, e, r, c] = [1 / 0, 1 / 0, -1 / 0, -1 / 0];
|
|
30
37
|
for (let s = 0; s < o.length; s += 2) {
|
|
31
|
-
const
|
|
32
|
-
Number.isNaN(
|
|
38
|
+
const l = o[s], a = o[s + 1];
|
|
39
|
+
Number.isNaN(l) || Number.isNaN(a) || (l < t && (t = l), l > r && (r = l), a < e && (e = a), a > c && (c = a));
|
|
33
40
|
}
|
|
34
|
-
return
|
|
41
|
+
return t > r ? null : { x: t, y: e, w: r - t, h: c - e };
|
|
35
42
|
}
|
|
36
|
-
async function
|
|
37
|
-
const c = new Set(
|
|
38
|
-
(
|
|
39
|
-
),
|
|
40
|
-
s.map((
|
|
41
|
-
), a = new Float32Array(2 * s.reduce((
|
|
43
|
+
async function S(o, t, e, r) {
|
|
44
|
+
const c = new Set(t.map((n) => n.name)), s = o.manifest.edge_tables.filter(
|
|
45
|
+
(n) => c.has(n.source.references) && c.has(n.destination.references)
|
|
46
|
+
), l = await Promise.all(
|
|
47
|
+
s.map((n) => x(o, { table: n.name, select: [n.source.key, n.destination.key] }, r))
|
|
48
|
+
), a = new Float32Array(2 * s.reduce((n, m) => n + m.record_count, 0));
|
|
42
49
|
let i = 0;
|
|
43
|
-
return
|
|
44
|
-
var u,
|
|
45
|
-
const
|
|
46
|
-
for (const
|
|
47
|
-
const
|
|
48
|
-
for (let y = 0; y <
|
|
49
|
-
const h = Number(
|
|
50
|
-
h < e &&
|
|
50
|
+
return l.forEach((n, m) => {
|
|
51
|
+
var u, w;
|
|
52
|
+
const f = s[m];
|
|
53
|
+
for (const d of n) {
|
|
54
|
+
const N = ((u = d.getChild(f.source.key)) == null ? void 0 : u.toArray()) ?? [], b = ((w = d.getChild(f.destination.key)) == null ? void 0 : w.toArray()) ?? [];
|
|
55
|
+
for (let y = 0; y < d.numRows && i < a.length; y++) {
|
|
56
|
+
const h = Number(N[y]), k = Number(b[y]);
|
|
57
|
+
h < e && k < e && (a[i++] = h, a[i++] = k);
|
|
51
58
|
}
|
|
52
59
|
}
|
|
53
60
|
}), i === a.length ? a : a.slice(0, i);
|
|
54
61
|
}
|
|
55
|
-
async function
|
|
56
|
-
const c =
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
62
|
+
async function D(o, t, e, r) {
|
|
63
|
+
const c = _(o), s = c.reduce((f, u) => f + u.record_count, 0), l = new Float32Array(2 * s).fill(Number.NaN), a = new Uint16Array(s), i = E(c, s, t, e), [n, m] = await C(
|
|
64
|
+
r,
|
|
65
|
+
(f) => Promise.all([
|
|
66
|
+
Promise.all(
|
|
67
|
+
c.map((u) => {
|
|
68
|
+
const { x: w, y: d } = u.position;
|
|
69
|
+
return x(o, { table: u.name, select: g(t, [u.key, w, d], v(u)) }, f);
|
|
70
|
+
})
|
|
71
|
+
),
|
|
72
|
+
S(o, c, s, f)
|
|
73
|
+
])
|
|
74
|
+
);
|
|
75
|
+
return n.forEach((f, u) => {
|
|
76
|
+
var N, b, y;
|
|
77
|
+
const { key: w, position: d } = c[u];
|
|
78
|
+
for (const h of f) {
|
|
79
|
+
const k = ((N = h.getChild(w)) == null ? void 0 : N.toArray()) ?? [], z = ((b = h.getChild((d == null ? void 0 : d.x) ?? "")) == null ? void 0 : b.toArray()) ?? [], P = ((y = h.getChild((d == null ? void 0 : d.y) ?? "")) == null ? void 0 : y.toArray()) ?? [];
|
|
80
|
+
for (let A = 0; A < h.numRows; A++) {
|
|
81
|
+
const p = Number(k[A]);
|
|
82
|
+
p < s && (l[p * 2] = Number(z[A] ?? Number.NaN), l[p * 2 + 1] = Number(P[A] ?? Number.NaN), a[p] = u);
|
|
73
83
|
}
|
|
74
84
|
i.add(u, h);
|
|
75
85
|
}
|
|
76
|
-
}), { geometry: { tables: c, size: s, positions:
|
|
86
|
+
}), { geometry: { tables: c, size: s, positions: l, table: a, links: m, extent: F(l) }, encoding: i.finish() };
|
|
77
87
|
}
|
|
78
|
-
async function
|
|
79
|
-
const { tables: s, size:
|
|
80
|
-
return (await
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
88
|
+
async function K(o, t, e, r, c) {
|
|
89
|
+
const { tables: s, size: l } = t, a = E(s, l, e, r);
|
|
90
|
+
return (await C(
|
|
91
|
+
c,
|
|
92
|
+
(n) => Promise.all(s.map((m) => x(o, { table: m.name, select: g(e, [m.key], v(m)) }, n)))
|
|
93
|
+
)).forEach((n, m) => {
|
|
94
|
+
for (const f of n) a.add(m, f);
|
|
84
95
|
}), a.finish();
|
|
85
96
|
}
|
|
86
|
-
async function
|
|
87
|
-
const c =
|
|
97
|
+
async function L(o, t, e, r) {
|
|
98
|
+
const c = R(e), s = t.flatMap((i, n) => c.every(v(i)) ? [n] : []);
|
|
88
99
|
if (s.length === 0)
|
|
89
|
-
throw new
|
|
90
|
-
const
|
|
91
|
-
|
|
100
|
+
throw new I("graph/untranslatable-filter", `no drawn vertex type has every column this filter names: ${c.join(", ")}`);
|
|
101
|
+
const l = await C(
|
|
102
|
+
r,
|
|
103
|
+
(i) => Promise.all(
|
|
104
|
+
s.map((n) => x(o, { table: t[n].name, filter: e, select: [t[n].key] }, i))
|
|
105
|
+
)
|
|
92
106
|
), a = [];
|
|
93
|
-
return
|
|
94
|
-
var
|
|
95
|
-
const { key:
|
|
107
|
+
return l.forEach((i, n) => {
|
|
108
|
+
var f;
|
|
109
|
+
const { key: m } = t[s[n]];
|
|
96
110
|
for (const u of i) {
|
|
97
|
-
const
|
|
98
|
-
for (let
|
|
111
|
+
const w = ((f = u.getChild(m)) == null ? void 0 : f.toArray()) ?? [];
|
|
112
|
+
for (let d = 0; d < u.numRows; d++) a.push(Number(w[d]));
|
|
99
113
|
}
|
|
100
114
|
}), { filtered: new Set(s), ids: a };
|
|
101
115
|
}
|
|
102
|
-
function
|
|
116
|
+
function M(o, t) {
|
|
103
117
|
const e = new Uint8Array(o.size);
|
|
104
|
-
for (let r = 0; r < o.size; r++) e[r] =
|
|
105
|
-
for (const r of
|
|
118
|
+
for (let r = 0; r < o.size; r++) e[r] = t.filtered.has(o.table[r]) ? 0 : 1;
|
|
119
|
+
for (const r of t.ids) r < o.size && (e[r] = 1);
|
|
106
120
|
return e;
|
|
107
121
|
}
|
|
108
122
|
export {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
123
|
+
_ as drawnTables,
|
|
124
|
+
K as loadEncoding,
|
|
125
|
+
D as loadGraph,
|
|
126
|
+
M as maskOf,
|
|
127
|
+
L as readKept,
|
|
128
|
+
C as together
|
|
114
129
|
};
|
|
115
130
|
//# sourceMappingURL=load.js.map
|
package/dist/core/load.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.js","sources":["../../src/core/load.ts"],"sourcesContent":["import { Dictionary } from \"./categories\";\nimport { projectionOf, type Binding } from \"./channels\";\nimport type { Batch, Corpus, EdgeTable, Filter, VertexTable } from \"@fossil-lang/corpus\";\nimport { columnsOf } from \"./filter\";\n\n/**\n * **The whole graph, read once and laid out as cosmos.gl's buffers.** A drawn vertex's `dense_id` is\n * its index, so every array is sized from the manifest's `record_count`s before a row arrives, and a\n * row is written where its id says. The camera never reaches here: nothing is read because it moved.\n */\n\n/** Where the drawn vertices are and how they connect — read once per corpus. */\nexport interface Geometry {\n /** The vertex tables with a position, in the manifest's order. */\n readonly tables: readonly VertexTable[];\n /** Drawn vertices: ids `0 … size − 1`. */\n readonly size: number;\n /** `[x, y, …]` by id; `NaN` where no row has a position. */\n readonly positions: Float32Array;\n /** By id, the vertex's index in `tables`. */\n readonly table: Uint16Array;\n /** `[src, dst, …]` by id, every relation whose two ends are drawn. */\n readonly links: Float32Array;\n readonly extent: { readonly x: number; readonly y: number; readonly w: number; readonly h: number } | null;\n}\n\n/** What the bound channels say about each vertex — read again when a binding changes. */\nexport interface Encoding {\n /** By id, the category's rank. */\n readonly ranks: Uint32Array;\n /** By id, the ramp's raw value, or `null` when `r` is unbound. */\n readonly sizes: Float32Array | null;\n /** What each rank is: the seed, then the other values seen, in rank order. */\n readonly domain: readonly unknown[];\n}\n\n/** The vertex tables fossil lays out or the program places; a table without a position is not drawn. */\nexport const drawnTables = (corpus: Corpus): VertexTable[] => corpus.manifest.vertex_tables.filter((table) => table.position);\n\nconst has = (table: VertexTable) => (column: string) => table.properties.some((p) => p.name === column);\n\nasync function readAll(corpus: Corpus, params: Parameters<Corpus[\"scan\"]>[0], signal: AbortSignal): Promise<readonly Batch[]> {\n const scan = corpus.scan(params);\n return scan.read(scan.plan(), { signal });\n}\n\nfunction encoder(tables: readonly VertexTable[], size: number, binding: Binding, seed: readonly unknown[]) {\n const dictionary = new Dictionary(seed);\n const codes = new Uint32Array(size);\n const sizes = binding.size === undefined ? null : new Float32Array(size).fill(Number.NaN);\n return {\n add(t: number, batch: Batch) {\n const table = tables[t] as VertexTable;\n const ids = batch.getChild(table.key)?.toArray() ?? [];\n const values = binding.category === undefined ? undefined : batch.getChild(binding.category)?.toArray();\n const ramp = binding.size === undefined ? undefined : batch.getChild(binding.size)?.toArray();\n const own = binding.byTable ? dictionary.code(table.name) : 0;\n for (let i = 0; i < batch.numRows; i++) {\n const id = Number(ids[i]);\n if (!(id < size)) continue;\n codes[id] = binding.byTable || binding.category === undefined ? own : dictionary.code(values?.[i] ?? null);\n if (sizes) sizes[id] = Number(ramp?.[i] ?? Number.NaN);\n }\n },\n finish(): Encoding {\n const order = dictionary.ranks();\n const ranks = codes.map((code) => order[code] ?? 0);\n const domain: unknown[] = [];\n order.forEach((rank, code) => {\n domain[rank] = dictionary.values[code];\n });\n return { ranks, sizes, domain };\n },\n };\n}\n\nfunction extentOf(positions: Float32Array): Geometry[\"extent\"] {\n let [x0, y0, x1, y1] = [Infinity, Infinity, -Infinity, -Infinity];\n for (let i = 0; i < positions.length; i += 2) {\n const x = positions[i] as number;\n const y = positions[i + 1] as number;\n if (Number.isNaN(x) || Number.isNaN(y)) continue;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n return x0 > x1 ? null : { x: x0, y: y0, w: x1 - x0, h: y1 - y0 };\n}\n\nasync function readLinks(corpus: Corpus, tables: readonly VertexTable[], size: number, signal: AbortSignal): Promise<Float32Array> {\n const drawn = new Set(tables.map((table) => table.name));\n const relations = corpus.manifest.edge_tables.filter(\n (edge: EdgeTable) => drawn.has(edge.source.references) && drawn.has(edge.destination.references),\n );\n const answers = await Promise.all(\n relations.map((edge) => readAll(corpus, { table: edge.name, select: [edge.source.key, edge.destination.key] }, signal)),\n );\n const links = new Float32Array(2 * relations.reduce((sum, edge) => sum + edge.record_count, 0));\n let at = 0;\n answers.forEach((batches, r) => {\n const edge = relations[r] as EdgeTable;\n for (const batch of batches) {\n const src = batch.getChild(edge.source.key)?.toArray() ?? [];\n const dst = batch.getChild(edge.destination.key)?.toArray() ?? [];\n for (let e = 0; e < batch.numRows && at < links.length; e++) {\n const a = Number(src[e]);\n const b = Number(dst[e]);\n if (!(a < size && b < size)) continue;\n links[at++] = a;\n links[at++] = b;\n }\n }\n });\n return at === links.length ? links : links.slice(0, at);\n}\n\n/** One scan per drawn table and one per relation between them, read whole, in parallel. */\nexport async function loadGraph(\n corpus: Corpus,\n binding: Binding,\n seed: readonly unknown[],\n signal: AbortSignal,\n): Promise<{ geometry: Geometry; encoding: Encoding }> {\n const tables = drawnTables(corpus);\n const size = tables.reduce((sum, table) => sum + table.record_count, 0);\n const positions = new Float32Array(2 * size).fill(Number.NaN);\n const table = new Uint16Array(size);\n const encode = encoder(tables, size, binding, seed);\n const [vertices, links] = await Promise.all([\n Promise.all(\n tables.map((t) => {\n const { x, y } = t.position as NonNullable<VertexTable[\"position\"]>;\n return readAll(corpus, { table: t.name, select: projectionOf(binding, [t.key, x, y], has(t)) }, signal);\n }),\n ),\n readLinks(corpus, tables, size, signal),\n ]);\n vertices.forEach((batches, t) => {\n const { key, position } = tables[t] as VertexTable;\n for (const batch of batches) {\n const ids = batch.getChild(key)?.toArray() ?? [];\n const xs = batch.getChild(position?.x ?? \"\")?.toArray() ?? [];\n const ys = batch.getChild(position?.y ?? \"\")?.toArray() ?? [];\n for (let i = 0; i < batch.numRows; i++) {\n const id = Number(ids[i]);\n if (!(id < size)) continue;\n positions[id * 2] = Number(xs[i] ?? Number.NaN);\n positions[id * 2 + 1] = Number(ys[i] ?? Number.NaN);\n table[id] = t;\n }\n encode.add(t, batch);\n }\n });\n return { geometry: { tables, size, positions, table, links, extent: extentOf(positions) }, encoding: encode.finish() };\n}\n\n/** A new binding re-reads the channels and nothing else: the positions and the links stay uploaded. */\nexport async function loadEncoding(\n corpus: Corpus,\n geometry: Geometry,\n binding: Binding,\n seed: readonly unknown[],\n signal: AbortSignal,\n): Promise<Encoding> {\n const { tables, size } = geometry;\n const encode = encoder(tables, size, binding, seed);\n const answers = await Promise.all(\n tables.map((t) => readAll(corpus, { table: t.name, select: projectionOf(binding, [t.key], has(t)) }, signal)),\n );\n answers.forEach((batches, t) => {\n for (const batch of batches) encode.add(t, batch);\n });\n return encode.finish();\n}\n\n/** What a filter kept: per table that holds every column it names, the surviving ids. */\nexport interface Kept {\n readonly filtered: ReadonlySet<number>;\n readonly ids: readonly number[];\n}\n\n/**\n * **A predicate, applied as a mask.** A table that lacks a column the filter names is not filtered,\n * which is what a `WHERE` over a union of the tables would do; a filter no drawn table can answer at\n * all is refused, so the unfiltered picture is never drawn as the filtered one.\n */\nexport async function readKept(corpus: Corpus, tables: readonly VertexTable[], filter: Filter, signal: AbortSignal): Promise<Kept> {\n const columns = columnsOf(filter);\n const filtered = tables.flatMap((table, t) => (columns.every(has(table)) ? [t] : []));\n if (filtered.length === 0) {\n throw new Error(`no drawn vertex type has every column this filter names: ${columns.join(\", \")}`);\n }\n const answers = await Promise.all(\n filtered.map((t) => readAll(corpus, { table: (tables[t] as VertexTable).name, filter, select: [(tables[t] as VertexTable).key] }, signal)),\n );\n const ids: number[] = [];\n answers.forEach((batches, i) => {\n const { key } = tables[filtered[i] as number] as VertexTable;\n for (const batch of batches) {\n const column = batch.getChild(key)?.toArray() ?? [];\n for (let r = 0; r < batch.numRows; r++) ids.push(Number(column[r]));\n }\n });\n return { filtered: new Set(filtered), ids };\n}\n\n/** `1` where a vertex survives the page's filter. */\nexport function maskOf(geometry: Geometry, kept: Kept): Uint8Array {\n const mask = new Uint8Array(geometry.size);\n for (let id = 0; id < geometry.size; id++) mask[id] = kept.filtered.has(geometry.table[id] as number) ? 0 : 1;\n for (const id of kept.ids) if (id < geometry.size) mask[id] = 1;\n return mask;\n}\n"],"names":["drawnTables","corpus","table","has","column","p","readAll","params","signal","scan","encoder","tables","size","binding","seed","dictionary","Dictionary","codes","sizes","t","batch","ids","_a","values","_b","ramp","_c","own","i","id","order","ranks","code","domain","rank","extentOf","positions","x0","y0","x1","y1","x","y","readLinks","drawn","relations","edge","answers","links","sum","at","batches","r","src","dst","e","a","b","loadGraph","encode","vertices","projectionOf","key","position","xs","ys","loadEncoding","geometry","readKept","filter","columns","columnsOf","filtered","maskOf","kept","mask"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"load.js","sources":["../../src/core/load.ts"],"sourcesContent":["import { GraphError } from \"./error\";\nimport { Dictionary } from \"./categories\";\nimport { projectionOf, type Binding } from \"./channels\";\nimport type { Batch, Corpus, EdgeTable, Filter, VertexTable } from \"@fossil-lang/corpus\";\nimport { columnsOf } from \"./filter\";\n\n/**\n * **The whole graph, read once and laid out as cosmos.gl's buffers.** A drawn vertex's `dense_id` is\n * its index, so every array is sized from the manifest's `record_count`s before a row arrives, and a\n * row is written where its id says. The camera never reaches here: nothing is read because it moved.\n */\n\n/** Where the drawn vertices are and how they connect — read once per corpus. */\nexport interface Geometry {\n /** The vertex tables with a position, in the manifest's order. */\n readonly tables: readonly VertexTable[];\n /** Drawn vertices: ids `0 … size − 1`. */\n readonly size: number;\n /** `[x, y, …]` by id; `NaN` where no row has a position. */\n readonly positions: Float32Array;\n /** By id, the vertex's index in `tables`. */\n readonly table: Uint16Array;\n /** `[src, dst, …]` by id, every relation whose two ends are drawn. */\n readonly links: Float32Array;\n readonly extent: { readonly x: number; readonly y: number; readonly w: number; readonly h: number } | null;\n}\n\n/** What the bound channels say about each vertex — read again when a binding changes. */\nexport interface Encoding {\n /** By id, the category's rank. */\n readonly ranks: Uint32Array;\n /** By id, the ramp's raw value, or `null` when `r` is unbound. */\n readonly sizes: Float32Array | null;\n /** What each rank is: the seed, then the other values seen, in rank order. */\n readonly domain: readonly unknown[];\n}\n\n/** The vertex tables fossil lays out or the program places; a table without a position is not drawn. */\nexport const drawnTables = (corpus: Corpus): VertexTable[] => corpus.manifest.vertex_tables.filter((table) => table.position);\n\nconst has = (table: VertexTable) => (column: string) => table.properties.some((p) => p.name === column);\n\n/**\n * Reads in parallel that end together: the first to fail aborts the rest, so no read outlives the\n * answer and no second failure goes unheard behind the first.\n */\nexport function together<T>(signal: AbortSignal, reads: (signal: AbortSignal) => Promise<T>): Promise<T> {\n const local = new AbortController();\n return reads(AbortSignal.any([signal, local.signal])).catch((error: unknown) => {\n local.abort();\n throw error;\n });\n}\n\nasync function readAll(corpus: Corpus, params: Parameters<Corpus[\"scan\"]>[0], signal: AbortSignal): Promise<readonly Batch[]> {\n const scan = corpus.scan(params);\n return scan.read(scan.plan(), { signal });\n}\n\nfunction encoder(tables: readonly VertexTable[], size: number, binding: Binding, seed: readonly unknown[]) {\n const dictionary = new Dictionary(seed);\n const codes = new Uint32Array(size);\n const sizes = binding.size === undefined ? null : new Float32Array(size).fill(Number.NaN);\n return {\n add(t: number, batch: Batch) {\n const table = tables[t] as VertexTable;\n const ids = batch.getChild(table.key)?.toArray() ?? [];\n const values = binding.category === undefined ? undefined : batch.getChild(binding.category)?.toArray();\n const ramp = binding.size === undefined ? undefined : batch.getChild(binding.size)?.toArray();\n const own = binding.byTable ? dictionary.code(table.name) : 0;\n for (let i = 0; i < batch.numRows; i++) {\n const id = Number(ids[i]);\n if (!(id < size)) continue;\n codes[id] = binding.byTable || binding.category === undefined ? own : dictionary.code(values?.[i] ?? null);\n if (sizes) sizes[id] = Number(ramp?.[i] ?? Number.NaN);\n }\n },\n finish(): Encoding {\n const order = dictionary.ranks();\n const ranks = codes.map((code) => order[code] ?? 0);\n const domain: unknown[] = [];\n order.forEach((rank, code) => {\n domain[rank] = dictionary.values[code];\n });\n return { ranks, sizes, domain };\n },\n };\n}\n\nfunction extentOf(positions: Float32Array): Geometry[\"extent\"] {\n let [x0, y0, x1, y1] = [Infinity, Infinity, -Infinity, -Infinity];\n for (let i = 0; i < positions.length; i += 2) {\n const x = positions[i] as number;\n const y = positions[i + 1] as number;\n if (Number.isNaN(x) || Number.isNaN(y)) continue;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n return x0 > x1 ? null : { x: x0, y: y0, w: x1 - x0, h: y1 - y0 };\n}\n\nasync function readLinks(corpus: Corpus, tables: readonly VertexTable[], size: number, signal: AbortSignal): Promise<Float32Array> {\n const drawn = new Set(tables.map((table) => table.name));\n const relations = corpus.manifest.edge_tables.filter(\n (edge: EdgeTable) => drawn.has(edge.source.references) && drawn.has(edge.destination.references),\n );\n const answers = await Promise.all(\n relations.map((edge) => readAll(corpus, { table: edge.name, select: [edge.source.key, edge.destination.key] }, signal)),\n );\n const links = new Float32Array(2 * relations.reduce((sum, edge) => sum + edge.record_count, 0));\n let at = 0;\n answers.forEach((batches, r) => {\n const edge = relations[r] as EdgeTable;\n for (const batch of batches) {\n const src = batch.getChild(edge.source.key)?.toArray() ?? [];\n const dst = batch.getChild(edge.destination.key)?.toArray() ?? [];\n for (let e = 0; e < batch.numRows && at < links.length; e++) {\n const a = Number(src[e]);\n const b = Number(dst[e]);\n if (!(a < size && b < size)) continue;\n links[at++] = a;\n links[at++] = b;\n }\n }\n });\n return at === links.length ? links : links.slice(0, at);\n}\n\n/** One scan per drawn table and one per relation between them, read whole, in parallel. */\nexport async function loadGraph(\n corpus: Corpus,\n binding: Binding,\n seed: readonly unknown[],\n signal: AbortSignal,\n): Promise<{ geometry: Geometry; encoding: Encoding }> {\n const tables = drawnTables(corpus);\n const size = tables.reduce((sum, table) => sum + table.record_count, 0);\n const positions = new Float32Array(2 * size).fill(Number.NaN);\n const table = new Uint16Array(size);\n const encode = encoder(tables, size, binding, seed);\n const [vertices, links] = await together(signal, (signal) =>\n Promise.all([\n Promise.all(\n tables.map((t) => {\n const { x, y } = t.position as NonNullable<VertexTable[\"position\"]>;\n return readAll(corpus, { table: t.name, select: projectionOf(binding, [t.key, x, y], has(t)) }, signal);\n }),\n ),\n readLinks(corpus, tables, size, signal),\n ]),\n );\n vertices.forEach((batches, t) => {\n const { key, position } = tables[t] as VertexTable;\n for (const batch of batches) {\n const ids = batch.getChild(key)?.toArray() ?? [];\n const xs = batch.getChild(position?.x ?? \"\")?.toArray() ?? [];\n const ys = batch.getChild(position?.y ?? \"\")?.toArray() ?? [];\n for (let i = 0; i < batch.numRows; i++) {\n const id = Number(ids[i]);\n if (!(id < size)) continue;\n positions[id * 2] = Number(xs[i] ?? Number.NaN);\n positions[id * 2 + 1] = Number(ys[i] ?? Number.NaN);\n table[id] = t;\n }\n encode.add(t, batch);\n }\n });\n return { geometry: { tables, size, positions, table, links, extent: extentOf(positions) }, encoding: encode.finish() };\n}\n\n/** A new binding re-reads the channels and nothing else: the positions and the links stay uploaded. */\nexport async function loadEncoding(\n corpus: Corpus,\n geometry: Geometry,\n binding: Binding,\n seed: readonly unknown[],\n signal: AbortSignal,\n): Promise<Encoding> {\n const { tables, size } = geometry;\n const encode = encoder(tables, size, binding, seed);\n const answers = await together(signal, (signal) =>\n Promise.all(tables.map((t) => readAll(corpus, { table: t.name, select: projectionOf(binding, [t.key], has(t)) }, signal))),\n );\n answers.forEach((batches, t) => {\n for (const batch of batches) encode.add(t, batch);\n });\n return encode.finish();\n}\n\n/** What a filter kept: per table that holds every column it names, the surviving ids. */\nexport interface Kept {\n readonly filtered: ReadonlySet<number>;\n readonly ids: readonly number[];\n}\n\n/**\n * **A predicate, applied as a mask.** A table that lacks a column the filter names is not filtered,\n * which is what a `WHERE` over a union of the tables would do; a filter no drawn table can answer at\n * all is refused, so the unfiltered picture is never drawn as the filtered one.\n */\nexport async function readKept(corpus: Corpus, tables: readonly VertexTable[], filter: Filter, signal: AbortSignal): Promise<Kept> {\n const columns = columnsOf(filter);\n const filtered = tables.flatMap((table, t) => (columns.every(has(table)) ? [t] : []));\n if (filtered.length === 0) {\n throw new GraphError(\"graph/untranslatable-filter\", `no drawn vertex type has every column this filter names: ${columns.join(\", \")}`);\n }\n const answers = await together(signal, (signal) =>\n Promise.all(\n filtered.map((t) => readAll(corpus, { table: (tables[t] as VertexTable).name, filter, select: [(tables[t] as VertexTable).key] }, signal)),\n ),\n );\n const ids: number[] = [];\n answers.forEach((batches, i) => {\n const { key } = tables[filtered[i] as number] as VertexTable;\n for (const batch of batches) {\n const column = batch.getChild(key)?.toArray() ?? [];\n for (let r = 0; r < batch.numRows; r++) ids.push(Number(column[r]));\n }\n });\n return { filtered: new Set(filtered), ids };\n}\n\n/** `1` where a vertex survives the page's filter. */\nexport function maskOf(geometry: Geometry, kept: Kept): Uint8Array {\n const mask = new Uint8Array(geometry.size);\n for (let id = 0; id < geometry.size; id++) mask[id] = kept.filtered.has(geometry.table[id] as number) ? 0 : 1;\n for (const id of kept.ids) if (id < geometry.size) mask[id] = 1;\n return mask;\n}\n"],"names":["drawnTables","corpus","table","has","column","p","together","signal","reads","local","error","readAll","params","scan","encoder","tables","size","binding","seed","dictionary","Dictionary","codes","sizes","t","batch","ids","_a","values","_b","ramp","_c","own","i","id","order","ranks","code","domain","rank","extentOf","positions","x0","y0","x1","y1","x","y","readLinks","drawn","relations","edge","answers","links","sum","at","batches","r","src","dst","e","a","b","loadGraph","encode","vertices","projectionOf","key","position","xs","ys","loadEncoding","geometry","readKept","filter","columns","columnsOf","filtered","GraphError","maskOf","kept","mask"],"mappings":"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"}
|
package/dist/core/state.d.ts
CHANGED
|
@@ -9,6 +9,9 @@ export interface GraphOptions extends Channels {
|
|
|
9
9
|
/**
|
|
10
10
|
* The corpus the host opened with fossil's `open`, or the promise of it. A promise is what makes
|
|
11
11
|
* *opening* a state the graph can report; `null` is no corpus at all.
|
|
12
|
+
*
|
|
13
|
+
* The promise must settle. The graph shows *opening* until it does and sets no deadline of its
|
|
14
|
+
* own: the waits inside an open are fossil's to bound, and a rejection reaches `onFailure`.
|
|
12
15
|
*/
|
|
13
16
|
corpus: Corpus | PromiseLike<Corpus> | null;
|
|
14
17
|
/** Which column the size ramp is spent on — Plot's `r`. */
|
|
@@ -31,22 +34,32 @@ export interface GraphOptions extends Channels {
|
|
|
31
34
|
* positions are drawn as they are. `GraphToolbar` starts and stops the layout whatever this says.
|
|
32
35
|
*/
|
|
33
36
|
simulate?: boolean;
|
|
34
|
-
/**
|
|
35
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Every failure, as it was thrown: fossil's own errors arrive whole, with their `code`, and the
|
|
39
|
+
* graph's are `GraphError`s. Required: unhandled, a browser with no WebGL context shows an empty box.
|
|
40
|
+
*/
|
|
41
|
+
onFailure: (error: unknown) => void;
|
|
36
42
|
onSelect?: (selection: Selection | null) => void;
|
|
37
43
|
onFocus?: (vertex: VertexId | null) => void;
|
|
38
44
|
}
|
|
39
45
|
/**
|
|
40
46
|
* Where the graph is in its life. `none` is no corpus; `opening` is a corpus promised and not yet
|
|
41
47
|
* open; `loading` is the graph, a binding or a filter not yet read or not yet drawn; `idle` is all of
|
|
42
|
-
* it drawn; `failed` is a corpus that would not open or read, or a canvas
|
|
43
|
-
*
|
|
48
|
+
* it drawn; `failed` is a corpus that would not open or read, or a canvas with no GPU device to draw
|
|
49
|
+
* with — none came up, or the one it had was lost.
|
|
50
|
+
*
|
|
51
|
+
* **It is the data's life, not the layout's.** A layout running over a drawn graph is `idle` here and
|
|
52
|
+
* `running` in `motion`: two axes, because each can move without the other — a filter loads under a
|
|
53
|
+
* paused layout, and a layout runs over a graph with nothing left to read. A host that shows one word
|
|
54
|
+
* reads both, `motion === "running"` as "laying out" and `progress` for how far.
|
|
44
55
|
*/
|
|
45
56
|
export type GraphStatus = "none" | "opening" | "loading" | "idle" | "failed";
|
|
46
57
|
/** What the loaded graph holds, under the page's filter. */
|
|
47
58
|
export interface Drawn {
|
|
48
59
|
/** Vertices drawn: every one with a position that survives the filter. */
|
|
49
60
|
readonly vertices: number;
|
|
61
|
+
/** Links drawn: every loaded relation whose two ends are drawn. */
|
|
62
|
+
readonly edges: number;
|
|
50
63
|
/** What each category rank is: the seed first, then any other value seen, in rank order. */
|
|
51
64
|
readonly domain: readonly unknown[];
|
|
52
65
|
/** Per rank, the vertices drawn. */
|
|
@@ -99,8 +112,10 @@ export interface GraphStore {
|
|
|
99
112
|
setTool(tool: Tool): void;
|
|
100
113
|
report(motion: Motion): void;
|
|
101
114
|
reportProgress(value: number): void;
|
|
102
|
-
/**
|
|
103
|
-
|
|
115
|
+
/** The canvas has a renderer again. */
|
|
116
|
+
renderable(): void;
|
|
117
|
+
/** The canvas cannot draw: the graph is `failed`, and `error` goes to `onFailure`. */
|
|
118
|
+
unrenderable(error: unknown): void;
|
|
104
119
|
/** The renderer uploaded this snapshot's geometry, encoding and mask. */
|
|
105
120
|
reportDrawn(snapshot: GraphSnapshot): void;
|
|
106
121
|
}
|
package/dist/core/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAElF,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"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"}
|
package/dist/core/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/core/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/core/store.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAS,YAAY,EAA8B,UAAU,EAAE,MAAM,SAAS,CAAC;AAE3F,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AA4BvG,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,CAiW7D"}
|