62 lines
3.0 KiB
JavaScript
62 lines
3.0 KiB
JavaScript
import { readFileSync, writeFileSync } from "node:fs";
|
|
import { dirname, resolve } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const root = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
const packageRoot = resolve(root, "node_modules/@rerun-io/web-viewer");
|
|
const manifest = JSON.parse(readFileSync(resolve(packageRoot, "package.json"), "utf8"));
|
|
|
|
if (manifest.version !== "0.34.1") {
|
|
throw new Error(
|
|
`Refusing to patch @rerun-io/web-viewer ${manifest.version}; audit the new vendor lifecycle first.`,
|
|
);
|
|
}
|
|
|
|
const patches = [
|
|
{
|
|
label: "compiled watchdog",
|
|
path: resolve(packageRoot, "index.js"),
|
|
before: ` function check_for_panic() {\n if (self.#handle?.has_panicked()) {`,
|
|
after: ` function check_for_panic() {\n if (self.#state !== "ready" || !self.#handle) {\n return;\n }\n if (self.#handle.has_panicked()) {`,
|
|
},
|
|
{
|
|
label: "source watchdog",
|
|
path: resolve(packageRoot, "index.ts"),
|
|
before: ` function check_for_panic() {\n if (self.#handle?.has_panicked()) {`,
|
|
after: ` function check_for_panic() {\n if (self.#state !== "ready" || !self.#handle) {\n return;\n }\n if (self.#handle.has_panicked()) {`,
|
|
},
|
|
{
|
|
label: "compiled singleton global listener",
|
|
path: resolve(packageRoot, "index.js"),
|
|
before: `function setupGlobalEventListeners() {\n window.addEventListener("keyup", (e) => {`,
|
|
after: `let globalEventListenersInstalled = false;\nfunction setupGlobalEventListeners() {\n if (globalEventListenersInstalled) {\n return;\n }\n globalEventListenersInstalled = true;\n window.addEventListener("keyup", (e) => {`,
|
|
},
|
|
{
|
|
label: "source singleton global listener",
|
|
path: resolve(packageRoot, "index.ts"),
|
|
before: `function setupGlobalEventListeners() {\n window.addEventListener("keyup", (e) => {`,
|
|
after: `let globalEventListenersInstalled = false;\nfunction setupGlobalEventListeners() {\n if (globalEventListenersInstalled) {\n return;\n }\n globalEventListenersInstalled = true;\n window.addEventListener("keyup", (e) => {`,
|
|
},
|
|
];
|
|
|
|
for (const patch of patches) {
|
|
const source = readFileSync(patch.path, "utf8");
|
|
if (source.includes(patch.after)) continue;
|
|
if (!source.includes(patch.before)) {
|
|
throw new Error(`Vendor ${patch.label} patch no longer matches ${patch.path}.`);
|
|
}
|
|
writeFileSync(patch.path, source.replace(patch.before, patch.after));
|
|
}
|
|
|
|
for (const path of [resolve(packageRoot, "index.js"), resolve(packageRoot, "index.ts")]) {
|
|
const source = readFileSync(path, "utf8");
|
|
const keyupListenerCount = source.split('window.addEventListener("keyup"').length - 1;
|
|
if (!source.includes("let globalEventListenersInstalled = false;") || keyupListenerCount !== 1) {
|
|
throw new Error(`Vendor singleton global listener verification failed for ${path}.`);
|
|
}
|
|
}
|
|
|
|
console.log(
|
|
"Patched @rerun-io/web-viewer 0.34.1 watchdog teardown and singleton global keyup listener.",
|
|
);
|