38 lines · 1.7 KB · TypeScript
RawDownload
import { mkdtempSync, mkdirSync, rmSync, symlinkSync, writeFileSync } from "node:fs";import { tmpdir } from "node:os";import { join } from "node:path";import { afterEach, describe, expect, it } from "vitest";import { findMachOBinaries, isMachO } from "./codesign.mjs"; const workspaces: string[] = []; afterEach(() => {  for (const workspace of workspaces.splice(0)) {    rmSync(workspace, { recursive: true, force: true });  }}); describe("presentation runtime signing", () => {  it("detects thin and universal Mach-O files without following pnpm-style links or short files", () => {    const workspace = mkdtempSync(join(tmpdir(), "lattice-presentation-signing-"));    workspaces.push(workspace);    const packages = join(workspace, "node_modules/.pnpm/native");    mkdirSync(packages, { recursive: true });    const addon = join(packages, "addon.node");    const executable = join(packages, "executable");    const javascript = join(packages, "index.js");    // Shorter than a Mach-O header, though it starts with the universal magic.    const shortFile = join(packages, "short");    writeFileSync(addon, Buffer.from("cffaedfe00000000", "hex"));    writeFileSync(executable, Buffer.from("cafebabe00000000", "hex"));    writeFileSync(javascript, "export default true;\n");    writeFileSync(shortFile, Buffer.from([0xca, 0xfe]));    symlinkSync(addon, join(workspace, "node_modules/addon.node"));     expect(isMachO(addon)).toBe(true);    expect(isMachO(javascript)).toBe(false);    expect(isMachO(shortFile)).toBe(false);    expect(findMachOBinaries(workspace)).toEqual([addon, executable]);    expect(findMachOBinaries(join(workspace, "missing"))).toEqual([]);  });});