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.
- package/dist/ilp-writer.d.ts +1 -0
- package/dist/ilp-writer.js +17 -1
- package/dist/ilp-writer.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/migration.js +40 -45
- package/dist/migration.js.map +1 -1
- package/dist/wal-monitor.js +1 -1
- package/dist/wal-monitor.js.map +1 -1
- package/package.json +2 -2
- package/dist/test/config.test.d.ts +0 -1
- package/dist/test/config.test.js +0 -161
- package/dist/test/config.test.js.map +0 -1
- package/dist/test/configpanel-responses.test.d.ts +0 -1
- package/dist/test/configpanel-responses.test.js +0 -197
- package/dist/test/configpanel-responses.test.js.map +0 -1
- package/dist/test/console-proxy.test.d.ts +0 -1
- package/dist/test/console-proxy.test.js +0 -664
- package/dist/test/console-proxy.test.js.map +0 -1
- package/dist/test/container-env.test.d.ts +0 -1
- package/dist/test/container-env.test.js +0 -70
- package/dist/test/container-env.test.js.map +0 -1
- package/dist/test/delta-routing.test.d.ts +0 -1
- package/dist/test/delta-routing.test.js +0 -258
- package/dist/test/delta-routing.test.js.map +0 -1
- package/dist/test/full-export-range.test.d.ts +0 -1
- package/dist/test/full-export-range.test.js +0 -78
- package/dist/test/full-export-range.test.js.map +0 -1
- package/dist/test/history-v1.test.d.ts +0 -1
- package/dist/test/history-v1.test.js +0 -676
- package/dist/test/history-v1.test.js.map +0 -1
- package/dist/test/history-v2.test.d.ts +0 -1
- package/dist/test/history-v2.test.js +0 -1001
- package/dist/test/history-v2.test.js.map +0 -1
- package/dist/test/host-limits.test.d.ts +0 -1
- package/dist/test/host-limits.test.js +0 -81
- package/dist/test/host-limits.test.js.map +0 -1
- package/dist/test/ilp-writer.test.d.ts +0 -1
- package/dist/test/ilp-writer.test.js +0 -419
- package/dist/test/ilp-writer.test.js.map +0 -1
- package/dist/test/influx-detect.test.d.ts +0 -1
- package/dist/test/influx-detect.test.js +0 -287
- package/dist/test/influx-detect.test.js.map +0 -1
- package/dist/test/migration.test.d.ts +0 -1
- package/dist/test/migration.test.js +0 -851
- package/dist/test/migration.test.js.map +0 -1
- package/dist/test/package-e2e.test.d.ts +0 -1
- package/dist/test/package-e2e.test.js +0 -306
- package/dist/test/package-e2e.test.js.map +0 -1
- package/dist/test/path-matcher.test.d.ts +0 -1
- package/dist/test/path-matcher.test.js +0 -224
- package/dist/test/path-matcher.test.js.map +0 -1
- package/dist/test/query-client.test.d.ts +0 -1
- package/dist/test/query-client.test.js +0 -299
- package/dist/test/query-client.test.js.map +0 -1
- package/dist/test/questdb-endpoint.test.d.ts +0 -1
- package/dist/test/questdb-endpoint.test.js +0 -297
- package/dist/test/questdb-endpoint.test.js.map +0 -1
- package/dist/test/restore.test.d.ts +0 -1
- package/dist/test/restore.test.js +0 -543
- package/dist/test/restore.test.js.map +0 -1
- package/dist/test/time-range.test.d.ts +0 -1
- package/dist/test/time-range.test.js +0 -53
- package/dist/test/time-range.test.js.map +0 -1
- package/dist/test/wal-monitor.test.d.ts +0 -1
- package/dist/test/wal-monitor.test.js +0 -405
- 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
|