refactor: convert decode history worker to TypeScript
This commit is contained in:
+54
@@ -0,0 +1,54 @@
|
||||
// SPDX-FileCopyrightText: 2026 Stan Grams <sjg@haxx.space>
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import assert from "node:assert/strict";
|
||||
import { readFile } from "node:fs/promises";
|
||||
import test from "node:test";
|
||||
import vm from "node:vm";
|
||||
|
||||
test("decode-history worker decodes CBOR and batches messages", async () => {
|
||||
const messages = [];
|
||||
const worker = {
|
||||
onmessage: null,
|
||||
postMessage(message) { messages.push(message); },
|
||||
};
|
||||
const payload = Uint8Array.from([0xa1, 0x63, 0x61, 0x69, 0x73, 0x83, 0x01, 0x02, 0x03]);
|
||||
const context = vm.createContext({
|
||||
self: worker,
|
||||
TextDecoder,
|
||||
Uint8Array,
|
||||
DataView,
|
||||
ArrayBuffer,
|
||||
Number,
|
||||
Math,
|
||||
String,
|
||||
Error,
|
||||
fetch: async () => ({
|
||||
ok: true,
|
||||
status: 200,
|
||||
arrayBuffer: async () => payload.buffer,
|
||||
}),
|
||||
});
|
||||
const source = await readFile(
|
||||
new URL("../../assets/web/generated/decode-history-worker.js", import.meta.url),
|
||||
"utf8",
|
||||
);
|
||||
new vm.Script(source).runInContext(context);
|
||||
worker.onmessage({ data: { type: "fetch-history", url: "/decode/history", batchLimit: 2 } });
|
||||
await new Promise((resolve) => { setTimeout(resolve, 0); });
|
||||
|
||||
assert.deepEqual(
|
||||
messages.map(({ type, phase, total, processed }) => ({ type, phase, total, processed })),
|
||||
[
|
||||
{ type: "status", phase: "fetching", total: undefined, processed: undefined },
|
||||
{ type: "status", phase: "decoding", total: undefined, processed: undefined },
|
||||
{ type: "start", phase: undefined, total: 3, processed: undefined },
|
||||
{ type: "group", phase: undefined, total: 3, processed: 2 },
|
||||
{ type: "group", phase: undefined, total: 3, processed: 3 },
|
||||
{ type: "done", phase: undefined, total: 3, processed: undefined },
|
||||
],
|
||||
);
|
||||
assert.deepEqual(Array.from(messages[3].messages), [1, 2]);
|
||||
assert.deepEqual(Array.from(messages[4].messages), [3]);
|
||||
});
|
||||
Reference in New Issue
Block a user