@kanzo-tech/mosaic 0.10.0 → 0.11.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 CHANGED
@@ -23,7 +23,10 @@ import { engine } from "@kanzo-tech/mosaic";
23
23
  a second database the last-mounted chart wins. `lend({ name: url })` registers a URL under a name:
24
24
  the same URL is a no-op, a different one drops the old lease and registers the new, which is what
25
25
  DuckDB-WASM's `File already registered` was refusing. `hold(name, bytes)` registers a copy of a
26
- buffer; `drop(names)` forgets. It is fossil's `Engine` structurally, without depending on fossil.
26
+ buffer; `drop(names)` forgets. `query(sql, { signal })` answers in columns — the Arrow table
27
+ DuckDB-WASM produced, never rows as objects — on a connection of its own, one statement at a time;
28
+ an abort interrupts the running statement (`send`, then `cancelSent()`) and rejects with
29
+ `signal.reason`. It is fossil's `Engine` structurally, without depending on fossil.
27
30
 
28
31
  It boots with DuckDB's `httpfs` loaded, so `s3://` is readable once a secret says how:
29
32
  `query("CREATE OR REPLACE SECRET job (TYPE s3, …, SCOPE 's3://bucket/prefix/')")`, then name the
package/dist/engine.d.ts CHANGED
@@ -28,8 +28,18 @@ import { Coordinator } from "@uwdata/mosaic-core";
28
28
  */
29
29
  export interface Engine {
30
30
  readonly coordinator: Coordinator;
31
- /** Rows as objects, uncached: a read after a `lend` must see the new lease. */
32
- query(sql: string): Promise<Record<string, unknown>[]>;
31
+ /**
32
+ * One statement, answered in columns as DuckDB-WASM produced them — nothing turns them into
33
+ * objects.
34
+ *
35
+ * **An abort interrupts the running statement**, not only the queue in front of it: the engine's
36
+ * connection runs one statement at a time, so a stale one left to finish holds the next reader
37
+ * back. It is `send` then `cancelSent()`, and the promise rejects with `signal.reason` at once.
38
+ * Statements run one after another on a connection of their own, beside the coordinator's.
39
+ */
40
+ query(sql: string, options?: {
41
+ readonly signal?: AbortSignal;
42
+ }): Promise<Columns>;
33
43
  /**
34
44
  * name → URL. The same URL is a no-op; a different one replaces the lease. The name has no scheme:
35
45
  * with `httpfs` loaded, `https://…` or `s3://…` in SQL is read by `httpfs` before the registry is
@@ -41,6 +51,22 @@ export interface Engine {
41
51
  /** Unregisters the names. A name the engine does not hold is not an error. */
42
52
  drop(names: readonly string[]): Promise<void>;
43
53
  }
54
+ /** An answer in columns: the part of apache-arrow's `Table` a reader reads. */
55
+ export interface Columns {
56
+ readonly numRows: number;
57
+ readonly schema: {
58
+ readonly fields: readonly {
59
+ readonly name: string;
60
+ }[];
61
+ };
62
+ getChild(name: string): Column | null;
63
+ }
64
+ /** One column of {@link Columns}: a typed array for a fixed-width type, where a null reads as zero. */
65
+ export interface Column {
66
+ readonly length: number;
67
+ get(index: number): unknown;
68
+ toArray(): ArrayLike<unknown>;
69
+ }
44
70
  /** The page's one engine, booted on first ask. */
45
71
  export declare function engine(): Promise<Engine>;
46
72
  //# sourceMappingURL=engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,+EAA+E;IAC/E,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IACvD;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,8EAA8E;IAC9E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,8EAA8E;IAC9E,IAAI,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AA4GD,kDAAkD;AAClD,wBAAgB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAIxC"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC;;;;;;;;OAQG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClF;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,8EAA8E;IAC9E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,8EAA8E;IAC9E,IAAI,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,+EAA+E;AAC/E,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,SAAS;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,uGAAuG;AACvG,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;CAC/B;AAuLD,kDAAkD;AAClD,wBAAgB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAIxC"}
package/dist/engine.js CHANGED
@@ -48,8 +48,11 @@ async function boot() {
48
48
  const connector = wasmConnector({ duckdb, config: RANGE_READS });
49
49
  const coordinator = new Coordinator(connector);
50
50
  await coordinator.exec(`LOAD '${build.httpfs}'`);
51
- // Files are read lazily by range; caching their metadata is what keeps a pan from re-probing.
51
+ // Files are read lazily by range; caching their metadata is what keeps a pan from re-probing, and
52
+ // caching Parquet footers is what keeps every tile read from re-reading one that grows with the
53
+ // corpus — 2.2× on a window's reads, measured in fossil on 2026-09-30.
52
54
  await coordinator.exec("SET enable_http_metadata_cache = true");
55
+ await coordinator.exec("SET parquet_metadata_cache = true");
53
56
  const behind = new Map();
54
57
  // Registry changes run one at a time: two `lend`s of one name racing each other would each see the
55
58
  // old entry, and the second register would be refused.
@@ -65,9 +68,23 @@ async function boot() {
65
68
  await duckdb.dropFile(name);
66
69
  behind.delete(name);
67
70
  };
71
+ const connection = duckdb.connect();
72
+ let queue = Promise.resolve();
73
+ const query = (sql, options = {}) => {
74
+ const { signal } = options;
75
+ const run = queue.then(() => answer(connection, sql, signal));
76
+ queue = run.catch(() => { });
77
+ if (!signal)
78
+ return run;
79
+ return new Promise((resolve, reject) => {
80
+ const abort = () => reject(signal.reason);
81
+ signal.addEventListener("abort", abort, { once: true });
82
+ run.then(resolve, reject).finally(() => signal.removeEventListener("abort", abort));
83
+ });
84
+ };
68
85
  return {
69
86
  coordinator,
70
- query: (sql) => coordinator.query(sql, { type: "json", cache: false }),
87
+ query,
71
88
  lend: (files) => serial(async () => {
72
89
  for (const [name, url] of Object.entries(files)) {
73
90
  if (behind.get(name) === url)
@@ -89,6 +106,51 @@ async function boot() {
89
106
  }),
90
107
  };
91
108
  }
109
+ async function answer(pending, sql, signal) {
110
+ signal?.throwIfAborted();
111
+ const connection = await pending;
112
+ const interrupt = () => void connection.cancelSent();
113
+ signal?.addEventListener("abort", interrupt, { once: true });
114
+ try {
115
+ const reader = await connection.send(sql);
116
+ await reader.open();
117
+ const fields = reader.schema?.fields ?? [];
118
+ const batches = [];
119
+ for await (const batch of reader)
120
+ batches.push(batch);
121
+ signal?.throwIfAborted();
122
+ return columnsOf(fields, batches);
123
+ }
124
+ catch (error) {
125
+ if (signal?.aborted)
126
+ throw signal.reason;
127
+ throw error;
128
+ }
129
+ finally {
130
+ signal?.removeEventListener("abort", interrupt);
131
+ }
132
+ }
133
+ const NO_ROWS = { length: 0, get: () => null, toArray: () => [] };
134
+ /** Arrow's own `Vector.concat` joins a column's batches; a column with no batch is empty. */
135
+ function columnsOf(fields, batches) {
136
+ const joined = new Map();
137
+ return {
138
+ numRows: batches.reduce((sum, batch) => sum + batch.numRows, 0),
139
+ schema: { fields },
140
+ getChild(name) {
141
+ const at = fields.findIndex((field) => field.name === name);
142
+ if (at < 0)
143
+ return null;
144
+ let column = joined.get(name);
145
+ if (!column) {
146
+ const [first, ...rest] = batches.map((batch) => batch.getChildAt(at)).filter((c) => c !== null);
147
+ column = first ? (rest.length > 0 ? first.concat(...rest) : first) : NO_ROWS;
148
+ joined.set(name, column);
149
+ }
150
+ return column;
151
+ },
152
+ };
153
+ }
92
154
  /**
93
155
  * Keyed on the document's global rather than on this module, so two copies of the package in one
94
156
  * bundle still share one database — which is the invariant, not the module identity.
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA6CjE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,GAAG,EAAE,UAAU,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,CAAC;AAElE,qFAAqF;AACrF,MAAM,MAAM,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AAEvE;;;;;;;GAOG;AACH,SAAS,MAAM;IACb,OAAO;QACL,GAAG,EAAE;YACH,UAAU,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,0CAA0C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxF,UAAU,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,uDAAuD,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrG,MAAM,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,qDAAqD,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAChG;QACD,EAAE,EAAE;YACF,UAAU,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,yCAAyC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvF,UAAU,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,sDAAsD,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpG,MAAM,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,oDAAoD,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC/F;KACF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAE5B,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,UAAU,KAAK,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAClE,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,UAAU,EAAE,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/E,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE3C,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,WAAW,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjD,8FAA8F;IAC9F,MAAM,WAAW,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAEhE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgC,CAAC;IAEvD,mGAAmG;IACnG,uDAAuD;IACvD,IAAI,IAAI,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAC,IAAyB,EAAiB,EAAE;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;QACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAC9B,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,OAAO;QACL,WAAW;QACX,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CACb,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAuC;QAC9F,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CACd,MAAM,CAAC,KAAK,IAAI,EAAE;YAChB,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChD,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG;oBAAE,SAAS;gBACvC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;gBACpB,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACxE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC;QACJ,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACpB,MAAM,CAAC,KAAK,IAAI,EAAE;YAChB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YACpB,4FAA4F;YAC5F,MAAM,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzB,CAAC,CAAC;QACJ,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CACd,MAAM,CAAC,KAAK,IAAI,EAAE;YAChB,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC;KACL,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAEpD,kDAAkD;AAClD,MAAM,UAAU,MAAM;IACpB,MAAM,KAAK,GAAG,UAAyC,CAAC;IACxD,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IACtB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kanzo-tech/mosaic",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "The Mosaic conversation, without React — coordinator, clients and clauses re-exported as one surface, plus the Arrow column reader and the id-set client that every consumer of them was writing by hand.",
5
5
  "type": "module",
6
6
  "license": "MIT",