mirror of
https://github.com/VibedByKaKi/t3-code-android-nightly.git
synced 2026-10-09 11:51:15 +02:00
105 lines
3.2 KiB
JavaScript
105 lines
3.2 KiB
JavaScript
import { assert, describe, it } from "vite-plus/test";
|
|
|
|
import { verifyPreloadBundle } from "./verify-preload-bundle.mjs";
|
|
|
|
const validPreload = `
|
|
const electron = require("electron");
|
|
const PICK_FOLDER_CHANNEL = "desktop:pick-folder";
|
|
electron.contextBridge.exposeInMainWorld("__clerk_internal_electron_passkeys", {});
|
|
electron.contextBridge.exposeInMainWorld("desktopBridge", {
|
|
getClientPlatform: () => process.platform,
|
|
getLocalEnvironmentBootstraps: () => [],
|
|
getPathForFile: () => "",
|
|
pickFolder: (options) => electron.ipcRenderer.invoke(PICK_FOLDER_CHANNEL, options),
|
|
});
|
|
`;
|
|
|
|
describe("desktop preload bundle verifier", () => {
|
|
it("rejects required API names that only appear in strings", () => {
|
|
assert.throws(
|
|
() =>
|
|
verifyPreloadBundle(`
|
|
"desktopBridge getClientPlatform getLocalEnvironmentBootstraps pickFolder";
|
|
"__clerk_internal_electron_passkeys";
|
|
require("electron");
|
|
`),
|
|
/missing executable APIs/,
|
|
);
|
|
});
|
|
|
|
it("rejects a required API whose exposed value is not callable", () => {
|
|
assert.throws(
|
|
() =>
|
|
verifyPreloadBundle(
|
|
validPreload.replace(
|
|
"getClientPlatform: () => process.platform,",
|
|
"getClientPlatform: undefined,",
|
|
),
|
|
),
|
|
/missing executable APIs: getClientPlatform/,
|
|
);
|
|
});
|
|
|
|
it("accepts a required API exposed through a function alias", () => {
|
|
assert.doesNotThrow(() =>
|
|
verifyPreloadBundle(`
|
|
const readClientPlatform = () => process.platform;
|
|
${validPreload.replace(
|
|
"getClientPlatform: () => process.platform,",
|
|
"getClientPlatform: readClientPlatform,",
|
|
)}
|
|
`),
|
|
);
|
|
});
|
|
|
|
it("rejects dynamic imports with comments before the opening parenthesis", () => {
|
|
assert.throws(
|
|
() =>
|
|
verifyPreloadBundle(`${validPreload}\nimport /* @vite-ignore */("unsupported-module");`),
|
|
/dynamic import\(\)/,
|
|
);
|
|
});
|
|
|
|
it("ignores import-like text in strings", () => {
|
|
assert.doesNotThrow(() =>
|
|
verifyPreloadBundle(`${validPreload}\nconst message = 'import /* comment */("module")';`),
|
|
);
|
|
});
|
|
|
|
it("rejects unsupported require calls with comments before the opening parenthesis", () => {
|
|
assert.throws(
|
|
() => verifyPreloadBundle(`${validPreload}\nrequire /* @__PURE__ */ ("node:fs");`),
|
|
/unsupported sandbox imports: node:fs/,
|
|
);
|
|
});
|
|
|
|
it("rejects unsupported optional require calls", () => {
|
|
assert.throws(
|
|
() => verifyPreloadBundle(`${validPreload}\nrequire?.("node:fs");`),
|
|
/unsupported sandbox imports: node:fs/,
|
|
);
|
|
});
|
|
|
|
it("accepts Electron sandbox module aliases", () => {
|
|
assert.doesNotThrow(() =>
|
|
verifyPreloadBundle(`
|
|
${validPreload}
|
|
require("electron/common");
|
|
require("electron/renderer");
|
|
require("node:events");
|
|
require("node:timers");
|
|
require("node:url");
|
|
`),
|
|
);
|
|
});
|
|
|
|
it("ignores require-like text in strings and comments", () => {
|
|
assert.doesNotThrow(() =>
|
|
verifyPreloadBundle(`
|
|
${validPreload}
|
|
const message = 'require("node:fs")';
|
|
// require("node:path")
|
|
`),
|
|
);
|
|
});
|
|
});
|