signalk-livedepth-plugin 0.3.19 → 0.3.21

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/CHANGELOG.md CHANGED
@@ -4,6 +4,27 @@ All notable changes to this project are documented here, newest first. The
4
4
  format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and
5
5
  versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.3.21] - 2026-11-07
8
+
9
+ ### Changed
10
+
11
+ - **History rebuilds no longer stall the server.** The one-time import now runs
12
+ in a worker thread with its own SQLite connection, so folding historical rows,
13
+ writing tiles and rebuilding the map pyramid no longer block Signal K's event
14
+ loop. The History API provider stays in the main process; the worker requests
15
+ each window over a message port, and the live writer and import share the
16
+ database through WAL with a short busy timeout.
17
+
18
+ ## [0.3.20] - 2026-11-07
19
+
20
+ ### Fixed
21
+
22
+ - **An interrupted history rebuild now resumes.** A server or plugin restart
23
+ aborts the rebuild, but the one-time trigger was cleared anyway, so the next
24
+ start did not resume and the rebuild looked finished. An interrupted run now
25
+ leaves the trigger set and continues from the last completed chunk; it is
26
+ cleared only when the rebuild completes (or fails).
27
+
7
28
  ## [0.3.19] - 2026-11-07
8
29
 
9
30
  ### Added
package/dist/plugin.d.ts CHANGED
@@ -1,6 +1,12 @@
1
1
  import { ServerAPI, Plugin } from "@signalk/server-api";
2
+ import { Worker } from "node:worker_threads";
2
3
  import { TransducerOffset } from "./tiles/core/index.js";
3
4
  import { Config } from "./config.js";
5
+ import type { SeedWorkerData } from "./tiles/seed-worker.js";
6
+ /** How a history rebuild ended. Only a completed or failed run consumes the
7
+ * one-time `seed.run` trigger; an interrupted run leaves it set so the next
8
+ * start resumes from the stored cursor. */
9
+ export type SeedOutcome = "completed" | "failed" | "aborted" | "skipped";
4
10
  /** The vessel's length overall, for locating the reference point the server
5
11
  * reports (the CCRP is midships).
6
12
  *
@@ -23,5 +29,9 @@ export declare function readVesselBeam(app: ServerAPI): number | undefined;
23
29
  * offset is meaningless. We still apply what the user configured, but flag it.
24
30
  */
25
31
  export declare function resolveTransducerOffset(app: ServerAPI, config: Config): TransducerOffset | undefined;
26
- export default function createPlugin(app: ServerAPI): Plugin;
32
+ /** Overridable only so tests can run the seed without a real worker thread. */
33
+ export interface PluginOptions {
34
+ createSeedWorker?: (data: SeedWorkerData) => Worker;
35
+ }
36
+ export default function createPlugin(app: ServerAPI, options?: PluginOptions): Plugin;
27
37
  //# sourceMappingURL=plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAa,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAwB,MAAM,EAAE,MAAM,aAAa,CAAC;AAuB3D;;;;;;;mEAOmE;AACnE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAWpE;AAED;sEACsE;AACtE,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAOjE;AAQD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM,GACb,gBAAgB,GAAG,SAAS,CA2B9B;AAOD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAqM3D"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAa,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAwB,MAAM,EAAE,MAAM,aAAa,CAAC;AAI3D,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,wBAAwB,CAAC;AAqBhC;;2CAE2C;AAC3C,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAEzE;;;;;;;mEAOmE;AACnE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAWpE;AAED;sEACsE;AACtE,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAOjE;AAQD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM,GACb,gBAAgB,GAAG,SAAS,CA2B9B;AAOD,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,MAAM,CAAC;CACrD;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,GAAG,EAAE,SAAS,EACd,OAAO,GAAE,aAAkB,GAC1B,MAAM,CA2UR"}
package/dist/plugin.js CHANGED
@@ -1,8 +1,11 @@
1
+ import { Worker } from "node:worker_threads";
1
2
  import { join } from "path";
3
+ import { Temporal } from "@js-temporal/polyfill";
2
4
  import { schema, formUiSchema } from "./config.js";
3
5
  import { createTileDB, createTileStore } from "./tiles/store.js";
4
6
  import { createTileWriter } from "./tiles/writer.js";
5
- import { SEED_CURSOR_KEY, seedFromHistory } from "./tiles/seed.js";
7
+ import { SEED_CURSOR_KEY } from "./tiles/seed.js";
8
+ import { getHistoryAPI } from "./history.js";
6
9
  import { TIDE_MODE_KEY, createSlackwaterTideProvider, createTideCorrection, datumLabel, shouldResetGrid, tideMode, } from "./tide.js";
7
10
  import { registerBathymetryRoutes, registerSeedRoutes, } from "./tiles/api.js";
8
11
  import { registerPlotterExtension } from "./plotterext/provider.js";
@@ -76,7 +79,11 @@ export function resolveTransducerOffset(app, config) {
76
79
  function skipNote(skipped) {
77
80
  return skipped > 0 ? ` (${skipped} skipped: no tide prediction)` : "";
78
81
  }
79
- export default function createPlugin(app) {
82
+ export default function createPlugin(app, options = {}) {
83
+ const createSeedWorker = options.createSeedWorker ??
84
+ ((data) => new Worker(new URL("./tiles/seed-worker.js", import.meta.url), {
85
+ workerData: data,
86
+ }));
80
87
  let abortController = undefined;
81
88
  // The gridded store served to chart clients. Built in start(), read by the
82
89
  // routes registered in registerWithRouter().
@@ -87,48 +94,151 @@ export default function createPlugin(app) {
87
94
  /** The datum the store is in; also reported to chart clients. */
88
95
  let tideState = "off";
89
96
  let seedStatus = { running: false };
97
+ /** Bumped on every start/stop so a seed still winding down cannot overwrite
98
+ * the status of the run that replaced it. */
99
+ let seedGeneration = 0;
100
+ let seedWorker;
101
+ let seedSettle;
90
102
  let running = false;
91
103
  let routesRegistered = false;
92
104
  const runSeed = async (resolution) => {
93
105
  if (seedStatus.running)
94
- return;
95
- const store = tileStore;
106
+ return "skipped";
96
107
  const cfg = config;
97
- if (!store || !cfg)
98
- return;
108
+ if (!tileStore || !cfg)
109
+ return "skipped";
99
110
  // The store's datum is fixed once it holds cells: fold history with the
100
111
  // same correction it was built with, and refuse rather than write raw rows
101
112
  // into a datum grid.
102
113
  if (tideState !== "off" && !tide) {
103
114
  seedStatus = { running: false, error: "tide model unavailable" };
104
115
  app.setPluginError("Cannot rebuild from history: the tide model is unavailable, so raw depths would be stored in the wrong datum.");
105
- return;
116
+ return "failed";
106
117
  }
118
+ // If the plugin is stopped and started while this run is still finishing,
119
+ // the run is superseded: its worker is terminated and the new run owns the
120
+ // status.
121
+ const generation = seedGeneration;
122
+ const current = () => generation === seedGeneration;
107
123
  seedStatus = { running: true };
124
+ app.setPluginStatus("Waiting for the history provider…");
125
+ const api = await getHistoryAPI({ app });
126
+ if (!current())
127
+ return "aborted";
128
+ if (!api) {
129
+ seedStatus = { running: false, error: "no history provider" };
130
+ app.setPluginError("Cannot rebuild from history: no History API provider is available.");
131
+ return "failed";
132
+ }
108
133
  app.setPluginStatus("Rebuilding bathymetry tiles from history…");
109
- try {
110
- const progress = await seedFromHistory({
111
- app,
112
- store,
134
+ return new Promise((resolve) => {
135
+ let settled = false;
136
+ const settle = (outcome) => {
137
+ if (settled)
138
+ return;
139
+ settled = true;
140
+ if (seedSettle === settle)
141
+ seedSettle = undefined;
142
+ resolve(outcome);
143
+ };
144
+ seedSettle = settle;
145
+ // The worker owns its own SQLite connection and does the expensive
146
+ // folding, writing and pyramid rebuild. History requests are forwarded
147
+ // here because the provider lives in this process.
148
+ const worker = createSeedWorker({
149
+ dbPath: join(app.getDataDirPath(), "bathymetry-tiles.sqlite"),
113
150
  config: cfg,
114
151
  resolution,
115
152
  offset: transducer,
116
- tide,
117
- signal: abortController?.signal,
118
- onProgress: (p) => {
119
- seedStatus = { running: !p.done, progress: p };
120
- app.setPluginStatus(`Rebuilding bathymetry tiles: ${p.points} points over ${p.chunks} windows${skipNote(p.skipped)}`);
121
- },
153
+ tide: tideState === "off" ? undefined : tideState,
122
154
  });
123
- seedStatus = { running: false, progress };
124
- app.setPluginStatus(`Bathymetry rebuild complete: ${progress.points} points${skipNote(progress.skipped)}`);
125
- }
126
- catch (err) {
127
- seedStatus = { running: false, error: String(err) };
128
- app.setPluginError(`Bathymetry rebuild failed: ${err}`);
129
- }
155
+ seedWorker = worker;
156
+ worker.on("message", (message) => {
157
+ if (!current())
158
+ return;
159
+ if (message.type === "getValues") {
160
+ const req = {
161
+ ...message.req,
162
+ from: Temporal.Instant.from(message.req.from),
163
+ to: Temporal.Instant.from(message.req.to),
164
+ };
165
+ api.getValues(req).then((res) => {
166
+ if (!current())
167
+ return;
168
+ worker.postMessage({
169
+ type: "getValuesResult",
170
+ id: message.id,
171
+ res,
172
+ });
173
+ }, (err) => {
174
+ if (!current())
175
+ return;
176
+ worker.postMessage({
177
+ type: "getValuesError",
178
+ id: message.id,
179
+ message: String(err),
180
+ });
181
+ });
182
+ return;
183
+ }
184
+ switch (message.type) {
185
+ case "progress": {
186
+ seedStatus = {
187
+ running: !message.progress.done,
188
+ progress: message.progress,
189
+ };
190
+ app.setPluginStatus(`Rebuilding bathymetry tiles: ${message.progress.points} points over ${message.progress.chunks} windows${skipNote(message.progress.skipped)}`);
191
+ break;
192
+ }
193
+ case "result": {
194
+ seedStatus = { running: false, progress: message.progress };
195
+ if (message.progress.done) {
196
+ app.setPluginStatus(`Bathymetry rebuild complete: ${message.progress.points} points${skipNote(message.progress.skipped)}`);
197
+ settle("completed");
198
+ }
199
+ else {
200
+ app.setPluginStatus(`Bathymetry rebuild interrupted after ${message.progress.chunks} windows; it will resume on the next start.`);
201
+ settle("aborted");
202
+ }
203
+ break;
204
+ }
205
+ case "error": {
206
+ seedStatus = { running: false, error: message.message };
207
+ app.setPluginError(`Bathymetry rebuild failed: ${message.message}`);
208
+ settle("failed");
209
+ break;
210
+ }
211
+ case "debug": {
212
+ app.debug("[seed worker] %s", message.message);
213
+ break;
214
+ }
215
+ }
216
+ });
217
+ worker.on("error", (err) => {
218
+ if (!current())
219
+ return settle("aborted");
220
+ seedStatus = { running: false, error: String(err) };
221
+ app.setPluginError(`Bathymetry rebuild failed: ${err}`);
222
+ settle("failed");
223
+ });
224
+ worker.on("exit", (code) => {
225
+ seedWorker = undefined;
226
+ if (settled)
227
+ return;
228
+ if (!current())
229
+ return settle("aborted");
230
+ seedStatus = { running: false, error: `seed worker exited (${code})` };
231
+ app.setPluginError(`Bathymetry rebuild worker exited with code ${code}.`);
232
+ settle(code === 0 ? "aborted" : "failed");
233
+ });
234
+ });
235
+ };
236
+ const seed = {
237
+ run: async () => {
238
+ await runSeed();
239
+ },
240
+ status: () => seedStatus,
130
241
  };
131
- const seed = { run: runSeed, status: () => seedStatus };
132
242
  return {
133
243
  id: "signalk-livedepth-plugin",
134
244
  name: "LiveDepth",
@@ -136,6 +246,13 @@ export default function createPlugin(app) {
136
246
  async start(startConfig, restart) {
137
247
  config = startConfig;
138
248
  app.debug("Starting signalk-livedepth-plugin");
249
+ // A new start supersedes any seed still winding down from the previous
250
+ // one (its worker is terminated and its store is closed).
251
+ const previous = seedWorker;
252
+ seedWorker = undefined;
253
+ void previous?.terminate();
254
+ seedGeneration++;
255
+ seedStatus = { running: false };
139
256
  abortController = new AbortController();
140
257
  tileStore = createTileStore(createTileDB(join(app.getDataDirPath(), `bathymetry-tiles.sqlite`)));
141
258
  transducer = resolveTransducerOffset(app, config);
@@ -208,17 +325,29 @@ export default function createPlugin(app) {
208
325
  routesRegistered = true;
209
326
  }
210
327
  if (collecting && startConfig.seed?.run) {
211
- // One-time rebuild. Clear the trigger when it finishes (or fails) so it
212
- // doesn't fire again on the next start; an interrupted run resumes from
213
- // the stored cursor instead of repeating.
214
- void runSeed(startConfig.seed.resolution).then(() => restart({
215
- ...startConfig,
216
- seed: { ...startConfig.seed, run: false },
217
- }));
328
+ // One-time rebuild. A completed or failed run consumes the trigger; an
329
+ // interrupted run leaves it set so the next start resumes from the
330
+ // stored cursor instead of repeating.
331
+ void runSeed(startConfig.seed.resolution).then((outcome) => {
332
+ if (outcome === "completed" || outcome === "failed") {
333
+ restart({
334
+ ...startConfig,
335
+ seed: { ...startConfig.seed, run: false },
336
+ });
337
+ }
338
+ });
218
339
  }
219
340
  },
220
341
  stop() {
221
342
  running = false;
343
+ seedGeneration++;
344
+ const settle = seedSettle;
345
+ seedSettle = undefined;
346
+ settle?.("aborted");
347
+ const worker = seedWorker;
348
+ seedWorker = undefined;
349
+ void worker?.terminate();
350
+ seedStatus = { running: false };
222
351
  abortController?.abort("Stopping signalk-livedepth-plugin");
223
352
  tileStore?.close();
224
353
  tileStore = undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -24,12 +24,6 @@ export interface AccumulatorOptions {
24
24
  ancestors?: boolean;
25
25
  }
26
26
  export declare function createTileAccumulator(store: TileStore, { baseZoom, ancestors }?: AccumulatorOptions): TileAccumulator;
27
- /**
28
- * Build every level of the pyramid from the base tiles in one bottom-up pass:
29
- * pool each level into the one below, reading each child once. Used after a
30
- * bulk load that ran with `ancestors: false`, so the whole pyramid is built
31
- * once rather than re-walked per changed tile per batch.
32
- */
33
27
  export declare function rebuildAncestors(store: TileStore, { baseZoom, minZoom, }?: {
34
28
  baseZoom?: number;
35
29
  minZoom?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"accumulator.d.ts","sourceRoot":"","sources":["../../../src/tiles/core/accumulator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAWtC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC5B,KAAK,IAAI,IAAI,CAAC;IACd,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;0DAGsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,EAChB,EAAE,QAAoB,EAAE,SAAgB,EAAE,GAAE,kBAAuB,GAClE,eAAe,CA4CjB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAChB,EACE,QAAoB,EACpB,OAAkB,GACnB,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,IAAI,CAwBN"}
1
+ {"version":3,"file":"accumulator.d.ts","sourceRoot":"","sources":["../../../src/tiles/core/accumulator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAWtC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC5B,KAAK,IAAI,IAAI,CAAC;IACd,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;0DAGsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,EAChB,EAAE,QAAoB,EAAE,SAAgB,EAAE,GAAE,kBAAuB,GAClE,eAAe,CA4CjB;AAaD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAChB,EACE,QAAoB,EACpB,OAAkB,GACnB,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,IAAI,CAmCN"}
@@ -52,6 +52,10 @@ export function createTileAccumulator(store, { baseZoom = BASE_ZOOM, ancestors =
52
52
  * bulk load that ran with `ancestors: false`, so the whole pyramid is built
53
53
  * once rather than re-walked per changed tile per batch.
54
54
  */
55
+ /** Parents written per transaction. The seed worker shares the database with
56
+ * the live writer, so a whole pyramid level in one transaction would hold the
57
+ * write lock long enough to stall the live flush. */
58
+ const REBUILD_BATCH = 256;
55
59
  export function rebuildAncestors(store, { baseZoom = BASE_ZOOM, minZoom = MIN_ZOOM, } = {}) {
56
60
  for (let z = baseZoom; z > minZoom; z--) {
57
61
  const parents = new Map();
@@ -60,16 +64,29 @@ export function rebuildAncestors(store, { baseZoom = BASE_ZOOM, minZoom = MIN_ZO
60
64
  const py = y >> 1;
61
65
  parents.set(`${px},${py}`, { x: px, y: py });
62
66
  }
63
- store.transaction(() => {
64
- for (const { x, y } of parents.values()) {
65
- store.write(z - 1, x, y, minPoolTile([
66
- store.read(z, x * 2, y * 2),
67
- store.read(z, x * 2 + 1, y * 2),
68
- store.read(z, x * 2, y * 2 + 1),
69
- store.read(z, x * 2 + 1, y * 2 + 1),
70
- ]));
71
- }
72
- });
67
+ let batch = [];
68
+ const flush = () => {
69
+ if (batch.length === 0)
70
+ return;
71
+ const writing = batch;
72
+ batch = [];
73
+ store.transaction(() => {
74
+ for (const { x, y } of writing) {
75
+ store.write(z - 1, x, y, minPoolTile([
76
+ store.read(z, x * 2, y * 2),
77
+ store.read(z, x * 2 + 1, y * 2),
78
+ store.read(z, x * 2, y * 2 + 1),
79
+ store.read(z, x * 2 + 1, y * 2 + 1),
80
+ ]));
81
+ }
82
+ });
83
+ };
84
+ for (const parent of parents.values()) {
85
+ batch.push(parent);
86
+ if (batch.length >= REBUILD_BATCH)
87
+ flush();
88
+ }
89
+ flush();
73
90
  }
74
91
  }
75
92
  //# sourceMappingURL=accumulator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"accumulator.js","sourceRoot":"","sources":["../../../src/tiles/core/accumulator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accumulator.js","sourceRoot":"","sources":["../../../src/tiles/core/accumulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { PathSpec, ValuesResponse } from "@signalk/server-api/history";
2
+ import type { Config } from "../config.js";
3
+ import { TideDatum } from "../tide.js";
4
+ import type { TransducerOffset } from "./core/index.js";
5
+ import { SeedProgress } from "./seed.js";
6
+ /** Everything the seed worker needs to rebuild the store on its own. */
7
+ export interface SeedWorkerData {
8
+ dbPath: string;
9
+ config: Config;
10
+ resolution?: number;
11
+ offset?: TransducerOffset;
12
+ /** The datum to fold history into, or undefined when correction is off. */
13
+ tide?: TideDatum;
14
+ }
15
+ /** A history request with the instants flattened to strings: Temporal objects
16
+ * do not survive `postMessage` structured cloning. */
17
+ export interface SeedWorkerValuesRequest {
18
+ from: string;
19
+ to: string;
20
+ resolution?: number;
21
+ pathSpecs: PathSpec[];
22
+ }
23
+ /** Messages the worker sends to the plugin. */
24
+ export type SeedWorkerOut = {
25
+ type: "progress";
26
+ progress: SeedProgress;
27
+ } | {
28
+ type: "result";
29
+ progress: SeedProgress;
30
+ } | {
31
+ type: "error";
32
+ message: string;
33
+ } | {
34
+ type: "debug";
35
+ message: string;
36
+ } | {
37
+ type: "getValues";
38
+ id: number;
39
+ req: SeedWorkerValuesRequest;
40
+ };
41
+ /** Messages the plugin sends back to the worker. */
42
+ export type SeedWorkerIn = {
43
+ type: "getValuesResult";
44
+ id: number;
45
+ res: ValuesResponse;
46
+ } | {
47
+ type: "getValuesError";
48
+ id: number;
49
+ message: string;
50
+ } | {
51
+ type: "abort";
52
+ };
53
+ /** The slice of a worker's `parentPort` the seed needs, so tests can drive it
54
+ * without a real thread. */
55
+ export interface SeedWorkerPort {
56
+ post(message: SeedWorkerOut): void;
57
+ onMessage(handler: (message: SeedWorkerIn) => void): void;
58
+ }
59
+ /**
60
+ * Rebuild the tile store in a worker thread.
61
+ *
62
+ * The History API provider lives in the main process, so the worker asks the
63
+ * plugin for each chunk over the port instead of reaching for the provider
64
+ * directly. Everything expensive — folding rows, the tide lookup arithmetic,
65
+ * the SQLite writes and the pyramid rebuild — happens here, off the event loop.
66
+ */
67
+ export declare function runSeedWorker(data: SeedWorkerData, port: SeedWorkerPort): Promise<void>;
68
+ //# sourceMappingURL=seed-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-worker.d.ts","sourceRoot":"","sources":["../../src/tiles/seed-worker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,QAAQ,EAER,cAAc,EACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EACL,SAAS,EAGV,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAmB,YAAY,EAAE,MAAM,WAAW,CAAC;AAG1D,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,2EAA2E;IAC3E,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED;sDACsD;AACtD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,+CAA+C;AAC/C,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAEpE,oDAAoD;AACpD,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtB;4BAC4B;AAC5B,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI,CAAC;CAC3D;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CAsFf"}
@@ -0,0 +1,107 @@
1
+ import { parentPort, workerData } from "node:worker_threads";
2
+ import { createSlackwaterTideProvider, createTideCorrection, } from "../tide.js";
3
+ import { seedFromHistory } from "./seed.js";
4
+ import { createTileDB, createTileStore } from "./store.js";
5
+ /**
6
+ * Rebuild the tile store in a worker thread.
7
+ *
8
+ * The History API provider lives in the main process, so the worker asks the
9
+ * plugin for each chunk over the port instead of reaching for the provider
10
+ * directly. Everything expensive — folding rows, the tide lookup arithmetic,
11
+ * the SQLite writes and the pyramid rebuild — happens here, off the event loop.
12
+ */
13
+ export async function runSeedWorker(data, port) {
14
+ const pending = new Map();
15
+ let nextId = 1;
16
+ const controller = new AbortController();
17
+ const abort = () => {
18
+ controller.abort();
19
+ for (const request of pending.values()) {
20
+ request.reject(new Error("aborted"));
21
+ }
22
+ pending.clear();
23
+ };
24
+ port.onMessage((message) => {
25
+ if (message.type === "abort") {
26
+ abort();
27
+ return;
28
+ }
29
+ const request = pending.get(message.id);
30
+ if (!request)
31
+ return;
32
+ pending.delete(message.id);
33
+ if (message.type === "getValuesResult") {
34
+ request.resolve(message.res);
35
+ }
36
+ else {
37
+ request.reject(new Error(message.message));
38
+ }
39
+ });
40
+ const history = {
41
+ getValues(req) {
42
+ if (!req.from || !req.to) {
43
+ return Promise.reject(new Error("history request needs from and to"));
44
+ }
45
+ return new Promise((resolve, reject) => {
46
+ const id = nextId++;
47
+ pending.set(id, { resolve, reject });
48
+ port.post({
49
+ type: "getValues",
50
+ id,
51
+ req: {
52
+ from: req.from.toString(),
53
+ to: req.to.toString(),
54
+ resolution: req.resolution,
55
+ pathSpecs: req.pathSpecs,
56
+ },
57
+ });
58
+ });
59
+ },
60
+ getContexts: async () => [],
61
+ getPaths: async () => [],
62
+ };
63
+ let store;
64
+ try {
65
+ store = createTileStore(createTileDB(data.dbPath));
66
+ const tide = data.tide
67
+ ? createTideCorrection(await createSlackwaterTideProvider(), data.tide)
68
+ : undefined;
69
+ const app = {
70
+ debug: (format, ...args) => port.post({
71
+ type: "debug",
72
+ message: `${format} ${args.map(String).join(" ")}`,
73
+ }),
74
+ };
75
+ const progress = await seedFromHistory({
76
+ app,
77
+ store,
78
+ config: data.config,
79
+ resolution: data.resolution,
80
+ offset: data.offset,
81
+ tide,
82
+ history,
83
+ signal: controller.signal,
84
+ onProgress: (p) => port.post({ type: "progress", progress: p }),
85
+ });
86
+ port.post({ type: "result", progress });
87
+ }
88
+ catch (err) {
89
+ port.post({ type: "error", message: String(err) });
90
+ }
91
+ finally {
92
+ store?.close();
93
+ }
94
+ }
95
+ const mainThread = parentPort;
96
+ if (mainThread) {
97
+ const port = {
98
+ post: (message) => mainThread.postMessage(message),
99
+ onMessage: (handler) => mainThread.on("message", (message) => handler(message)),
100
+ };
101
+ void runSeedWorker(workerData, port).finally(() => {
102
+ // The message listener itself keeps the thread alive. Close the port a
103
+ // turn later so the final `result` message is delivered before it exits.
104
+ setImmediate(() => mainThread.close());
105
+ });
106
+ }
107
+ //# sourceMappingURL=seed-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-worker.js","sourceRoot":"","sources":["../../src/tiles/seed-worker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/tiles/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EACV,UAAU,EAGX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAsB,MAAM,YAAY,CAAC;AAChE,OAAO,EACL,SAAS,EACT,gBAAgB,EAIjB,MAAM,iBAAiB,CAAC;AAEzB,kEAAkE;AAClE,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,sEAAsE;AACtE,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;IACxB,kDAAkD;IAClD,EAAE,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;IACtB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,wEAAwE;IACxE,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,uEAAuE;IACvE,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;CAC/C;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,EACpC,GAAG,EACH,KAAK,EACL,MAAM,EACN,IAAI,EACJ,EAA2B,EAC3B,UAAoC,EACpC,UAAqC,EACrC,OAAO,EACP,MAAM,EACN,IAAI,EACJ,MAAM,EACN,UAAU,GACX,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAqGrC"}
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/tiles/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EACV,UAAU,EAGX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAsB,MAAM,YAAY,CAAC;AAChE,OAAO,EACL,SAAS,EACT,gBAAgB,EAIjB,MAAM,iBAAiB,CAAC;AAEzB,kEAAkE;AAClE,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,sEAAsE;AACtE,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;IACxB,kDAAkD;IAClD,EAAE,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;IACtB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,wEAAwE;IACxE,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,uEAAuE;IACvE,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;CAC/C;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,EACpC,GAAG,EACH,KAAK,EACL,MAAM,EACN,IAAI,EACJ,EAA2B,EAC3B,UAAoC,EACpC,UAAqC,EACrC,OAAO,EACP,MAAM,EACN,IAAI,EACJ,MAAM,EACN,UAAU,GACX,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CA0GrC"}