import assert from 'node:assert/strict'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import test from 'node:test'; import { verifyUnpackedSharp } from './verify-packaged-sharp.mjs'; void test('verifyUnpackedSharp: accepts intact layout', () => { const root = fs.mkdtempSync(path.join(os.tmpdir(), 'dnd-sharp-verify-')); try { const nm = path.join(root, 'resources', 'app.asar.unpacked', 'node_modules'); const sharpLib = path.join(nm, 'sharp', 'lib'); fs.mkdirSync(sharpLib, { recursive: true }); fs.writeFileSync( path.join(sharpLib, 'index.js'), "'use strict';\nmodule.exports = require('./constructor');\n", 'utf8', ); const imgDir = path.join(nm, '@img', 'sharp-win32-x64'); fs.mkdirSync(imgDir, { recursive: true }); fs.writeFileSync(path.join(imgDir, 'sharp.node'), Buffer.alloc(60_000, 1)); verifyUnpackedSharp({ label: 'fixture', unpackedRoot: root, imgDirs: ['sharp-win32-x64'], }); } finally { fs.rmSync(root, { recursive: true, force: true }); } }); void test('verifyUnpackedSharp: rejects truncated sharp index', () => { const root = fs.mkdtempSync(path.join(os.tmpdir(), 'dnd-sharp-verify-')); try { const nm = path.join(root, 'resources', 'app.asar.unpacked', 'node_modules'); const sharpLib = path.join(nm, 'sharp', 'lib'); fs.mkdirSync(sharpLib, { recursive: true }); fs.writeFileSync(path.join(sharpLib, 'index.js'), 'x', 'utf8'); const imgDir = path.join(nm, '@img', 'sharp-win32-x64'); fs.mkdirSync(imgDir, { recursive: true }); fs.writeFileSync(path.join(imgDir, 'sharp.node'), Buffer.alloc(60_000, 1)); assert.throws( () => verifyUnpackedSharp({ label: 'fixture', unpackedRoot: root, imgDirs: ['sharp-win32-x64'], }), /truncated|corrupt/i, ); } finally { fs.rmSync(root, { recursive: true, force: true }); } }); void test('verifyUnpackedSharp: accepts mac .app layout', () => { const root = fs.mkdtempSync(path.join(os.tmpdir(), 'dnd-sharp-verify-mac-')); try { const nm = path.join( root, 'TTRPGPlayer.app', 'Contents', 'Resources', 'app.asar.unpacked', 'node_modules', ); const sharpLib = path.join(nm, 'sharp', 'lib'); fs.mkdirSync(sharpLib, { recursive: true }); fs.writeFileSync( path.join(sharpLib, 'index.js'), "'use strict';\nmodule.exports = {};\n", 'utf8', ); const imgDir = path.join(nm, '@img', 'sharp-darwin-arm64'); fs.mkdirSync(imgDir, { recursive: true }); fs.writeFileSync(path.join(imgDir, 'sharp.node'), Buffer.alloc(60_000, 1)); verifyUnpackedSharp({ label: 'mac-fixture', unpackedRoot: root, imgDirs: ['sharp-darwin-arm64'], }); } finally { fs.rmSync(root, { recursive: true, force: true }); } });