signalk-questdb 2.1.0 → 2.1.2

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.
Files changed (67) hide show
  1. package/dist/ilp-writer.d.ts +1 -0
  2. package/dist/ilp-writer.js +17 -1
  3. package/dist/ilp-writer.js.map +1 -1
  4. package/dist/index.js +2 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/migration.js +40 -45
  7. package/dist/migration.js.map +1 -1
  8. package/dist/wal-monitor.js +1 -1
  9. package/dist/wal-monitor.js.map +1 -1
  10. package/package.json +2 -2
  11. package/dist/test/config.test.d.ts +0 -1
  12. package/dist/test/config.test.js +0 -161
  13. package/dist/test/config.test.js.map +0 -1
  14. package/dist/test/configpanel-responses.test.d.ts +0 -1
  15. package/dist/test/configpanel-responses.test.js +0 -197
  16. package/dist/test/configpanel-responses.test.js.map +0 -1
  17. package/dist/test/console-proxy.test.d.ts +0 -1
  18. package/dist/test/console-proxy.test.js +0 -664
  19. package/dist/test/console-proxy.test.js.map +0 -1
  20. package/dist/test/container-env.test.d.ts +0 -1
  21. package/dist/test/container-env.test.js +0 -70
  22. package/dist/test/container-env.test.js.map +0 -1
  23. package/dist/test/delta-routing.test.d.ts +0 -1
  24. package/dist/test/delta-routing.test.js +0 -258
  25. package/dist/test/delta-routing.test.js.map +0 -1
  26. package/dist/test/full-export-range.test.d.ts +0 -1
  27. package/dist/test/full-export-range.test.js +0 -78
  28. package/dist/test/full-export-range.test.js.map +0 -1
  29. package/dist/test/history-v1.test.d.ts +0 -1
  30. package/dist/test/history-v1.test.js +0 -676
  31. package/dist/test/history-v1.test.js.map +0 -1
  32. package/dist/test/history-v2.test.d.ts +0 -1
  33. package/dist/test/history-v2.test.js +0 -1001
  34. package/dist/test/history-v2.test.js.map +0 -1
  35. package/dist/test/host-limits.test.d.ts +0 -1
  36. package/dist/test/host-limits.test.js +0 -81
  37. package/dist/test/host-limits.test.js.map +0 -1
  38. package/dist/test/ilp-writer.test.d.ts +0 -1
  39. package/dist/test/ilp-writer.test.js +0 -419
  40. package/dist/test/ilp-writer.test.js.map +0 -1
  41. package/dist/test/influx-detect.test.d.ts +0 -1
  42. package/dist/test/influx-detect.test.js +0 -287
  43. package/dist/test/influx-detect.test.js.map +0 -1
  44. package/dist/test/migration.test.d.ts +0 -1
  45. package/dist/test/migration.test.js +0 -851
  46. package/dist/test/migration.test.js.map +0 -1
  47. package/dist/test/package-e2e.test.d.ts +0 -1
  48. package/dist/test/package-e2e.test.js +0 -306
  49. package/dist/test/package-e2e.test.js.map +0 -1
  50. package/dist/test/path-matcher.test.d.ts +0 -1
  51. package/dist/test/path-matcher.test.js +0 -224
  52. package/dist/test/path-matcher.test.js.map +0 -1
  53. package/dist/test/query-client.test.d.ts +0 -1
  54. package/dist/test/query-client.test.js +0 -299
  55. package/dist/test/query-client.test.js.map +0 -1
  56. package/dist/test/questdb-endpoint.test.d.ts +0 -1
  57. package/dist/test/questdb-endpoint.test.js +0 -297
  58. package/dist/test/questdb-endpoint.test.js.map +0 -1
  59. package/dist/test/restore.test.d.ts +0 -1
  60. package/dist/test/restore.test.js +0 -543
  61. package/dist/test/restore.test.js.map +0 -1
  62. package/dist/test/time-range.test.d.ts +0 -1
  63. package/dist/test/time-range.test.js +0 -53
  64. package/dist/test/time-range.test.js.map +0 -1
  65. package/dist/test/wal-monitor.test.d.ts +0 -1
  66. package/dist/test/wal-monitor.test.js +0 -405
  67. package/dist/test/wal-monitor.test.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"migration.test.js","sourceRoot":"","sources":["../../src/test/migration.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,306 +0,0 @@
1
- // End-to-end checks on the BUILT plugin, as a consumer receives it.
2
- //
3
- // The other suites test modules in isolation. These test the seams that only
4
- // exist once the package is assembled: that Signal K can load the ESM entry
5
- // point at all, that the federated config panel the Admin UI fetches is
6
- // complete and self-consistent, and that the browser bundle did not swallow
7
- // server-only code. Every one of these has broken at least once during the
8
- // TypeScript/ESM/Vite migration, always silently — the build stayed green
9
- // while the plugin failed to load or the panel rendered blank.
10
- //
11
- // Run with `npm run build:all`, which builds before testing — like every
12
- // suite here, this executes from dist/. A missing panel build is a FAILURE
13
- // here rather than a skip: these assertions exist because the panel can
14
- // break silently, and skipping them on absent output would report green for
15
- // exactly the build that produced nothing.
16
- //
17
- // Where an assertion is about what users RECEIVE rather than what the build
18
- // produced, it reads npm's publish manifest instead of the working tree.
19
- // Those differ: .npmignore can exclude a file that is sitting right there on
20
- // disk, which is exactly how public/assets/ nearly got dropped.
21
- import { describe, it } from "node:test";
22
- import assert from "node:assert/strict";
23
- import { readFileSync, existsSync, readdirSync, mkdtempSync, rmSync, } from "node:fs";
24
- import { tmpdir } from "node:os";
25
- import { createRequire } from "node:module";
26
- import { execFileSync } from "node:child_process";
27
- import path from "node:path";
28
- import { fileURLToPath, pathToFileURL } from "node:url";
29
- const require = createRequire(import.meta.url);
30
- const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
31
- const publicDir = path.join(repoRoot, "public");
32
- /**
33
- * Fail loudly rather than skip. `npm run build:all` builds before testing,
34
- * and CI runs `npm run build` first, so an absent panel means the build
35
- * produced nothing — the case these assertions are here to catch.
36
- */
37
- const requirePanelBuild = () => {
38
- assert.ok(existsSync(path.join(publicDir, "remoteEntry.js")), "public/remoteEntry.js is missing — run `npm run build:all` (or `npm run build`) before the tests");
39
- };
40
- const readPublic = (file) => readFileSync(path.join(publicDir, file), "utf8");
41
- const panelChunks = () => existsSync(path.join(publicDir, "assets"))
42
- ? readdirSync(path.join(publicDir, "assets")).filter((f) => f.endsWith(".js"))
43
- : [];
44
- /** Every JS file the Admin UI could end up executing. */
45
- const allBundleSources = () => panelChunks()
46
- .map((f) => readFileSync(path.join(publicDir, "assets", f), "utf8"))
47
- .concat([readPublic("remoteEntry.js")]);
48
- // Require a path prefix, since a bare "logger.js" also appears inside the
49
- // federation runtime as plain data. remoteEntry.js references chunks as
50
- // "./assets/x.js"; the chunks reference their siblings as "./x.js".
51
- const chunkRefs = (source) => [...source.matchAll(/["'`]\.\/(?:assets\/)?([\w.-]+\.js)["'`]/g)].map((m) => m[1]);
52
- /**
53
- * Every chunk reachable from remoteEntry.js, following imports transitively.
54
- * The entry names only a handful directly — the rest are pulled in by those
55
- * chunks in turn, and a second-level chunk going missing breaks the panel
56
- * just as completely as a first-level one.
57
- */
58
- const reachableChunks = () => {
59
- const assetsDir = path.join(publicDir, "assets");
60
- const seen = new Set();
61
- const queue = chunkRefs(readPublic("remoteEntry.js"));
62
- while (queue.length > 0) {
63
- const chunk = queue.pop();
64
- if (seen.has(chunk))
65
- continue;
66
- const file = path.join(assetsDir, chunk);
67
- if (!existsSync(file)) {
68
- // Recorded so the assertion below reports it rather than skipping it.
69
- seen.add(chunk);
70
- continue;
71
- }
72
- seen.add(chunk);
73
- queue.push(...chunkRefs(readFileSync(file, "utf8")));
74
- }
75
- return [...seen];
76
- };
77
- /**
78
- * Paths npm would actually publish. Reading the working tree proves nothing
79
- * about the tarball — .npmignore excludes by exact filename, so a rename or
80
- * a well-meant "make the ignore files consistent" edit can drop a file that
81
- * is still present on disk and still passes every other check here.
82
- */
83
- let manifestCache = null;
84
- const publishedFiles = () => {
85
- if (manifestCache)
86
- return manifestCache;
87
- // `--cache` into a temp dir, and `--offline` so nothing is fetched.
88
- //
89
- // npm writes to its cache even for a dry-run pack. The Signal K plugin
90
- // registry scores plugins by running `npm test` inside
91
- // `firejail --net=none --read-only=/home`, so the default cache under
92
- // $HOME fails with EROFS and every assertion here errored — costing the
93
- // plugin 30 points with a `tests-failing` badge while the suite passed
94
- // everywhere else. Keep this sandbox-safe.
95
- const cacheDir = mkdtempSync(path.join(tmpdir(), "sk-questdb-pack-"));
96
- let out;
97
- try {
98
- out = execFileSync("npm", ["pack", "--dry-run", "--json", "--offline", "--cache", cacheDir], {
99
- cwd: repoRoot,
100
- encoding: "utf8",
101
- stdio: ["ignore", "pipe", "ignore"],
102
- });
103
- }
104
- finally {
105
- rmSync(cacheDir, { recursive: true, force: true });
106
- }
107
- // npm has shipped both shapes for `pack --json`: an array of results, and
108
- // an object keyed by package name (npm 12 under a lifecycle script). Take
109
- // whichever came back rather than pinning the test to one npm version.
110
- const parsed = JSON.parse(out);
111
- const [result] = (Array.isArray(parsed) ? parsed : Object.values(parsed));
112
- assert.ok(result?.files, `unexpected npm pack --json output: ${out.slice(0, 200)}`);
113
- manifestCache = result.files.map((f) => f.path);
114
- return manifestCache;
115
- };
116
- describe("plugin entry point (what Signal K loads)", () => {
117
- // Signal K's importOrRequire() does `require(dir)` and takes
118
- // `mod.default ?? mod`. The package is ESM, so this only works because
119
- // Node >= 20.19 can require an ES module — the exact combination that
120
- // broke with "type": "module" plus CommonJS-emitted output.
121
- it("is require()-able and yields the plugin factory", () => {
122
- const mod = require(repoRoot);
123
- const factory = mod.default ?? mod;
124
- assert.equal(typeof factory, "function", "plugin must export a factory function");
125
- });
126
- it("constructs a plugin with the lifecycle Signal K calls", () => {
127
- const mod = require(repoRoot);
128
- const factory = mod.default ?? mod;
129
- const plugin = factory({
130
- debug: () => { },
131
- error: () => { },
132
- setPluginStatus: () => { },
133
- });
134
- assert.equal(plugin.id, "signalk-questdb");
135
- assert.equal(typeof plugin.name, "string");
136
- assert.equal(typeof plugin.start, "function");
137
- assert.equal(typeof plugin.stop, "function");
138
- });
139
- it("exposes a config schema the Admin UI form can render", () => {
140
- const mod = require(repoRoot);
141
- const plugin = (mod.default ?? mod)({
142
- debug: () => { },
143
- error: () => { },
144
- setPluginStatus: () => { },
145
- });
146
- const schema = typeof plugin.schema === "function" ? plugin.schema() : plugin.schema;
147
- assert.equal(schema.type, "object");
148
- // Options the panel reads back by name; a schema rename here silently
149
- // empties the corresponding field in the form.
150
- for (const key of [
151
- "questdbHost",
152
- "questdbMemoryLimit",
153
- "questdbCpuLimit",
154
- "pathFilter",
155
- "samplingRates",
156
- "compression",
157
- "ilpFlushIntervalMs",
158
- ]) {
159
- assert.ok(schema.properties[key], `schema must declare ${key}`);
160
- }
161
- });
162
- it("keeps the compression codecs the panel offers", () => {
163
- const mod = require(repoRoot);
164
- const plugin = (mod.default ?? mod)({
165
- debug: () => { },
166
- error: () => { },
167
- setPluginStatus: () => { },
168
- });
169
- const schema = typeof plugin.schema === "function" ? plugin.schema() : plugin.schema;
170
- const codecs = schema.properties.compression.anyOf.map((v) => v.const);
171
- // The panel's <select> renders exactly these, and toCompression() falls
172
- // back to "lz4" for anything else — so a codec added to the schema but
173
- // not to the panel would be silently coerced on save.
174
- assert.deepEqual(codecs, ["none", "lz4", "zstd"]);
175
- });
176
- });
177
- describe("federated config panel (what the Admin UI fetches)", () => {
178
- it("emits a remote entry", () => {
179
- requirePanelBuild();
180
- assert.ok(readPublic("remoteEntry.js").length > 0);
181
- });
182
- it("exports the get/init pair the Admin UI's ESM loader requires", async () => {
183
- requirePanelBuild();
184
- // dynamicutilities.ts does `await import(remoteEntryUrl)` and only
185
- // accepts the module as a container when BOTH are functions — so
186
- // import it the same way rather than pattern-matching the text, which
187
- // a minified identifier could satisfy by accident.
188
- const entry = await import(pathToFileURL(path.join(publicDir, "remoteEntry.js")).href);
189
- assert.equal(typeof entry.get, "function", "remoteEntry must export get()");
190
- assert.equal(typeof entry.init, "function", "remoteEntry must export init()");
191
- });
192
- it("actually exposes ./PluginConfigurationPanel", async () => {
193
- requirePanelBuild();
194
- // A container can export get/init and still expose nothing under the
195
- // name the Admin UI asks for — a renamed or dropped `exposes` key in
196
- // vite.config.ts builds cleanly and fails only when a user opens the
197
- // panel. So request the module the way the host does.
198
- const entry = await import(pathToFileURL(path.join(publicDir, "remoteEntry.js")).href);
199
- const factory = await entry.get("./PluginConfigurationPanel");
200
- assert.equal(typeof factory, "function", "get('./PluginConfigurationPanel') must return a module factory");
201
- });
202
- it("actually exposes ./AppPanel", async () => {
203
- requirePanelBuild();
204
- // The embeddable webapp. Signal K's Embedded route (/admin/#/e/<name>)
205
- // resolves this exact module name; without it the admin UI fails with
206
- // "Module ./AppPanel does not exist in container". Shipping a static
207
- // public/index.html is NOT a substitute — that file is never loaded, which
208
- // is precisely how 1.8.0 went out with a webapp that could not open.
209
- const entry = await import(pathToFileURL(path.join(publicDir, "remoteEntry.js")).href);
210
- const factory = await entry.get("./AppPanel");
211
- assert.equal(typeof factory, "function", "get('./AppPanel') must return a module factory");
212
- });
213
- it("serves the app icon at the URL the Admin UI builds", () => {
214
- // The webapp card builds `/<package>/<appIcon>`, and Signal K serves the
215
- // package's public/ directory there. An icon sitting only at the repo
216
- // root, or a path written as "./app-icon.svg", both render a blank card.
217
- const pkg = JSON.parse(readFileSync(path.join(repoRoot, "package.json"), "utf8"));
218
- const appIcon = pkg.signalk?.appIcon;
219
- assert.ok(appIcon, "package.json signalk.appIcon must be set");
220
- assert.ok(!appIcon.startsWith("./") && !appIcon.startsWith("/"), `appIcon must be a bare filename (got "${appIcon}") — the Admin UI ` +
221
- `interpolates it into /<package>/<appIcon>`);
222
- assert.ok(existsSync(path.join(publicDir, appIcon)), `${appIcon} must exist in public/ — that is what Signal K serves`);
223
- assert.ok(publishedFiles().includes(`public/${appIcon}`), `public/${appIcon} must be in the published package`);
224
- });
225
- it("ships every chunk the remote entry imports", () => {
226
- requirePanelBuild();
227
- // The panel 404s at load if a chunk is missing — which is what
228
- // excluding public/assets/ from .npmignore would have caused.
229
- const referenced = reachableChunks();
230
- assert.ok(referenced.length > 0, "remote entry should import chunks");
231
- for (const chunk of referenced) {
232
- assert.ok(existsSync(path.join(publicDir, "assets", chunk)), `assets/${chunk} is reachable from remoteEntry but not in the build`);
233
- }
234
- });
235
- it("renders through the shared React singleton, not its own copy", () => {
236
- requirePanelBuild();
237
- // Classic JSX compiles to React.createElement against the shared
238
- // instance. The automatic runtime would import react/jsx-runtime,
239
- // which is not in the federation `shared` scope — the host page then
240
- // has two Reacts, useState reads null, and the panel silently fails
241
- // to mount with no build error.
242
- const sources = allBundleSources();
243
- const createElementCalls = sources.reduce((n, src) => n + (src.match(/createElement/g)?.length ?? 0), 0);
244
- assert.ok(createElementCalls > 100, `expected classic-runtime createElement calls, found ${createElementCalls}`);
245
- for (const src of sources) {
246
- assert.doesNotMatch(src, /jsx-runtime|jsxRuntime/, "bundle must not pull in react/jsx-runtime (second React instance)");
247
- }
248
- });
249
- it("keeps server-only modules out of the browser bundle", () => {
250
- requirePanelBuild();
251
- // The panel imports types from the server tree. Those imports must
252
- // stay `import type`: a value import drags the module's runtime
253
- // dependencies into the browser — typebox via config/schema,
254
- // fs/promises via host-limits (which webpack/rollup cannot polyfill).
255
- for (const src of allBundleSources()) {
256
- assert.doesNotMatch(src, /\bfs\/promises\b/, "fs/promises leaked into the bundle");
257
- assert.doesNotMatch(src, /typebox/i, "typebox leaked into the bundle");
258
- }
259
- });
260
- });
261
- describe("published package layout", () => {
262
- it("points main at a file that exists", () => {
263
- const pkg = JSON.parse(readFileSync(path.join(repoRoot, "package.json"), "utf8"));
264
- assert.ok(existsSync(path.join(repoRoot, pkg.main)), `${pkg.main} is missing`);
265
- });
266
- it("publishes the entry point Signal K requires", () => {
267
- const pkg = JSON.parse(readFileSync(path.join(repoRoot, "package.json"), "utf8"));
268
- assert.ok(publishedFiles().includes(pkg.main), `${pkg.main} is on disk but excluded from the package`);
269
- });
270
- it("publishes the panel and every chunk it imports", () => {
271
- requirePanelBuild();
272
- // The check that matters for the Admin UI: remoteEntry.js alone is
273
- // useless. Excluding public/assets/ leaves the panel 404ing on load
274
- // for every user, while the build output on disk looks complete.
275
- const published = publishedFiles();
276
- assert.ok(published.includes("public/remoteEntry.js"), "public/remoteEntry.js is not in the package");
277
- // Transitive: the entry names only a few chunks directly, and a
278
- // second-level one going missing breaks the panel just as completely.
279
- const referenced = reachableChunks();
280
- assert.ok(referenced.length > 0, "remote entry should import chunks");
281
- for (const chunk of referenced) {
282
- assert.ok(published.includes(`public/assets/${chunk}`), `assets/${chunk} is reachable from remoteEntry but the package excludes it`);
283
- }
284
- });
285
- it("keeps local build artifacts out of the package", () => {
286
- // .mf/ is federation's diagnostics dir; it shipped once already because
287
- // .gitignore does not govern npm.
288
- for (const p of publishedFiles()) {
289
- assert.doesNotMatch(p, /^\.mf\//, `${p} should not be published`);
290
- assert.doesNotMatch(p, /^src\//, `${p} should not be published`);
291
- }
292
- });
293
- it("declares itself ESM, which is what makes the panel load as a module", () => {
294
- const pkg = JSON.parse(readFileSync(path.join(repoRoot, "package.json"), "utf8"));
295
- // The server emits <script type="module"> for the panel only when the
296
- // plugin's package.json says "type": "module"; without it the ESM
297
- // remote is loaded as a classic script and never registers.
298
- assert.equal(pkg.type, "module");
299
- });
300
- it("keeps the Admin UI keyword that makes the panel appear at all", () => {
301
- const pkg = JSON.parse(readFileSync(path.join(repoRoot, "package.json"), "utf8"));
302
- assert.ok(pkg.keywords.includes("signalk-node-server-plugin"));
303
- assert.ok(pkg.keywords.includes("signalk-plugin-configurator"));
304
- });
305
- });
306
- //# sourceMappingURL=package-e2e.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-e2e.test.js","sourceRoot":"","sources":["../../src/test/package-e2e.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,224 +0,0 @@
1
- import { describe, it } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { minimatch } from "minimatch";
4
- import { PathMatcher, RateMatcher, Throttle } from "../path-matcher.js";
5
- describe("PathMatcher", () => {
6
- it("matches literal patterns exactly", () => {
7
- const m = new PathMatcher(["electrical.batteries.12v.name"]);
8
- assert.equal(m.matches("electrical.batteries.12v.name"), true);
9
- assert.equal(m.matches("electrical.batteries.12v.voltage"), false);
10
- // A literal must not behave like a prefix.
11
- assert.equal(m.matches("electrical.batteries.12v.name.extra"), false);
12
- });
13
- it("matches glob patterns", () => {
14
- const m = new PathMatcher([
15
- "navigation.gnss.*",
16
- "environment.*.temperature",
17
- ]);
18
- assert.equal(m.matches("navigation.gnss.satellites"), true);
19
- assert.equal(m.matches("navigation.speedOverGround"), false);
20
- assert.equal(m.matches("environment.water.temperature"), true);
21
- });
22
- it("is empty only when no patterns are configured", () => {
23
- assert.equal(new PathMatcher([]).isEmpty, true);
24
- assert.equal(new PathMatcher(["a.b"]).isEmpty, false);
25
- assert.equal(new PathMatcher(["a.*"]).isEmpty, false);
26
- });
27
- it("agrees with minimatch across a mixed pattern list", () => {
28
- // The optimisation must not change behaviour: literals bypass minimatch
29
- // entirely, so this pins the two implementations together.
30
- const patterns = [
31
- "design.*",
32
- "electrical.batteries.12v.name",
33
- "navigation.gnss.*",
34
- "environment.*.temperature",
35
- "tanks.fuel.*.currentLevel",
36
- "watch.*",
37
- "notifications.*",
38
- ];
39
- const paths = [
40
- "design.aisShipType",
41
- "electrical.batteries.12v.name",
42
- "electrical.batteries.12v.voltage",
43
- "navigation.gnss.satellites",
44
- "navigation.speedOverGround",
45
- "environment.water.temperature",
46
- "environment.inside.engineRoom.temperature",
47
- "tanks.fuel.0.currentLevel",
48
- "watch",
49
- "watch.x",
50
- "design",
51
- "a.b.c",
52
- ];
53
- const matcher = new PathMatcher(patterns);
54
- for (const path of paths) {
55
- assert.equal(matcher.matches(path), patterns.some((p) => minimatch(path, p)), `disagreed with minimatch for ${path}`);
56
- }
57
- });
58
- // Counting the glob evaluations makes the memoization observable: result
59
- // stability alone would also pass with no cache at all, and caching is the
60
- // whole point of the change.
61
- function countingMatcher(pattern) {
62
- const m = new PathMatcher([pattern]);
63
- let evaluations = 0;
64
- const globs = m.globs;
65
- for (const g of globs) {
66
- const real = g.match.bind(g);
67
- g.match = (p) => {
68
- evaluations++;
69
- return real(p);
70
- };
71
- }
72
- return { matcher: m, count: () => evaluations };
73
- }
74
- it("evaluates a path once and reuses the result", () => {
75
- const { matcher, count } = countingMatcher("navigation.*");
76
- for (let i = 0; i < 5; i++) {
77
- assert.equal(matcher.matches("navigation.position"), true);
78
- }
79
- assert.equal(count(), 1, "expected the glob to be evaluated only once");
80
- });
81
- it("re-evaluates after the cache ceiling flushes, still correctly", () => {
82
- const { matcher, count } = countingMatcher("navigation.*");
83
- assert.equal(matcher.matches("navigation.position"), true);
84
- const afterFirst = count();
85
- // Cross the ceiling so the cache clears.
86
- for (let i = 0; i < 5100; i++)
87
- matcher.matches(`filler.path.${i}`);
88
- assert.equal(matcher.matches("navigation.position"), true);
89
- assert.ok(count() > afterFirst, "expected a re-evaluation once the cache was flushed");
90
- assert.equal(matcher.matches("filler.path.1"), false);
91
- });
92
- });
93
- describe("RateMatcher", () => {
94
- it("resolves a literal pattern to its rate", () => {
95
- const r = new RateMatcher({ "navigation.position": 500 });
96
- assert.equal(r.rateFor("navigation.position"), 500);
97
- assert.equal(r.rateFor("navigation.speedOverGround"), null);
98
- });
99
- it("resolves a glob pattern to its rate", () => {
100
- const r = new RateMatcher({ "environment.wind.*": 200 });
101
- assert.equal(r.rateFor("environment.wind.speedApparent"), 200);
102
- assert.equal(r.rateFor("environment.water.temperature"), null);
103
- });
104
- it("ignores non-positive rates, matching the previous skip", () => {
105
- const r = new RateMatcher({ "a.*": 0, "b.*": -1, "c.*": 100 });
106
- assert.equal(r.rateFor("a.x"), null);
107
- assert.equal(r.rateFor("b.x"), null);
108
- assert.equal(r.rateFor("c.x"), 100);
109
- });
110
- it("prefers an exact pattern over a glob", () => {
111
- // Both match; the literal is the more specific intent.
112
- const r = new RateMatcher({ "tanks.*": 10000, "tanks.fuel.0.level": 250 });
113
- assert.equal(r.rateFor("tanks.fuel.0.level"), 250);
114
- assert.equal(r.rateFor("tanks.water.0.level"), 10000);
115
- });
116
- it("is empty when no usable rates are configured", () => {
117
- assert.equal(new RateMatcher({}).isEmpty, true);
118
- assert.equal(new RateMatcher({ "a.*": 0 }).isEmpty, true);
119
- assert.equal(new RateMatcher({ "a.*": 5 }).isEmpty, false);
120
- });
121
- });
122
- describe("RateMatcher throttle semantics", () => {
123
- // The previous implementation returned as soon as a positive override
124
- // matched, and only otherwise fell through to the default rate. Resolving
125
- // the rate first and applying one check must keep exactly that behaviour.
126
- function effectiveRate(rates, path, defaultRate) {
127
- return new RateMatcher(rates).rateFor(path) ?? defaultRate;
128
- }
129
- it("uses the override when one matches", () => {
130
- assert.equal(effectiveRate({ "environment.wind.*": 200 }, "environment.wind.angle", 2000), 200);
131
- });
132
- it("falls back to the default when nothing matches", () => {
133
- assert.equal(effectiveRate({ "environment.wind.*": 200 }, "navigation.position", 2000), 2000);
134
- });
135
- it("falls back to the default when the only match is non-positive", () => {
136
- // A 0 override meant "not a throttle rule" and fell through, rather than
137
- // disabling throttling for that path.
138
- assert.equal(effectiveRate({ "navigation.*": 0 }, "navigation.position", 2000), 2000);
139
- });
140
- });
141
- describe("RateMatcher memoization", () => {
142
- it("evaluates a path once and reuses the resolved rate", () => {
143
- const r = new RateMatcher({ "environment.wind.*": 200 });
144
- let evaluations = 0;
145
- const globs = r.globs;
146
- for (const g of globs) {
147
- const real = g.matcher.match.bind(g.matcher);
148
- g.matcher.match = (p) => {
149
- evaluations++;
150
- return real(p);
151
- };
152
- }
153
- for (let i = 0; i < 5; i++) {
154
- assert.equal(r.rateFor("environment.wind.angle"), 200);
155
- }
156
- assert.equal(evaluations, 1, "expected one glob evaluation");
157
- });
158
- it("memoizes a non-match too, so misses are not re-evaluated", () => {
159
- const r = new RateMatcher({ "environment.wind.*": 200 });
160
- for (let i = 0; i < 3; i++) {
161
- assert.equal(r.rateFor("navigation.position"), null);
162
- }
163
- });
164
- });
165
- describe("Throttle", () => {
166
- const T0 = 1_000_000;
167
- it("throttles per path AND context, never across vessels", () => {
168
- // The issue #93 regression: two AIS targets updating the same path
169
- // inside one sampling window must BOTH record.
170
- const t = new Throttle();
171
- assert.equal(t.shouldDrop("navigation.position", "vessels.a", 2000, T0), false);
172
- assert.equal(t.shouldDrop("navigation.position", "vessels.b", 2000, T0 + 10), false);
173
- assert.equal(t.shouldDrop("navigation.position", "self", 2000, T0 + 20), false);
174
- });
175
- it("drops a same-pair update inside the window and passes it after", () => {
176
- const t = new Throttle();
177
- assert.equal(t.shouldDrop("a.b", "self", 2000, T0), false);
178
- assert.equal(t.shouldDrop("a.b", "self", 2000, T0 + 1999), true);
179
- assert.equal(t.shouldDrop("a.b", "self", 2000, T0 + 2000), false);
180
- });
181
- it("a dropped update does not extend the window", () => {
182
- const t = new Throttle();
183
- t.shouldDrop("a.b", "self", 2000, T0);
184
- t.shouldDrop("a.b", "self", 2000, T0 + 1500);
185
- // Window still measures from T0, not from the dropped attempt.
186
- assert.equal(t.shouldDrop("a.b", "self", 2000, T0 + 2100), false);
187
- });
188
- it("treats a non-positive rate as no throttling", () => {
189
- const t = new Throttle();
190
- assert.equal(t.shouldDrop("a.b", "self", 0, T0), false);
191
- assert.equal(t.shouldDrop("a.b", "self", 0, T0 + 1), false);
192
- assert.equal(t.shouldDrop("a.b", "self", -5, T0 + 2), false);
193
- });
194
- it("clear() forgets all pairs", () => {
195
- const t = new Throttle();
196
- t.shouldDrop("a.b", "self", 2000, T0);
197
- t.clear();
198
- assert.equal(t.shouldDrop("a.b", "self", 2000, T0 + 1), false);
199
- });
200
- it("evicts pairs older than every sampling window at the cap", () => {
201
- // Months of transient AIS contexts must not grow the map forever: a
202
- // pair whose last write predates every window can never throttle
203
- // again, so crossing the cap sweeps them out.
204
- const t = new Throttle(3);
205
- t.shouldDrop("p", "vessels.a", 2000, T0);
206
- t.shouldDrop("p", "vessels.b", 2000, T0);
207
- t.shouldDrop("p", "vessels.c", 2000, T0);
208
- assert.equal(t.size, 3);
209
- t.shouldDrop("p", "vessels.d", 2000, T0 + 2500);
210
- assert.equal(t.size, 1, "stale pairs swept, only the new pair kept");
211
- });
212
- it("falls back to a full clear when every pair is still active", () => {
213
- // Pressure valve: if the cap is reached by genuinely concurrent pairs,
214
- // bounded memory wins over throttling continuity.
215
- const t = new Throttle(3);
216
- t.shouldDrop("p", "vessels.a", 2000, T0);
217
- t.shouldDrop("p", "vessels.b", 2000, T0);
218
- t.shouldDrop("p", "vessels.c", 2000, T0);
219
- t.shouldDrop("p", "vessels.d", 2000, T0 + 100);
220
- assert.equal(t.size, 1, "active pairs cleared to admit the new one");
221
- assert.equal(t.shouldDrop("p", "vessels.b", 2000, T0 + 200), false, "a cleared pair records again immediately");
222
- });
223
- });
224
- //# sourceMappingURL=path-matcher.test.js.map