'use strict'; const common = require('../common'); const { generateSEA, skipIfSingleExecutableIsNotSupported, } = require('../common/sea'); skipIfSingleExecutableIsNotSupported(); // This tests the creation of a single executable application with an empty // script. const tmpdir = require('../common/tmpdir'); const { writeFileSync, existsSync } = require('fs'); const { spawnSyncAndExitWithoutError } = require('../common/child_process'); const assert = require('assert'); const configFile = tmpdir.resolve('sea-config.json'); const seaPrepBlob = tmpdir.resolve('sea-prep.blob'); const outputFile = tmpdir.resolve(process.platform === 'win32' ? 'sea.exe' : 'sea'); tmpdir.refresh(); writeFileSync(tmpdir.resolve('empty.js'), '', 'utf-8'); writeFileSync(configFile, ` { "main": "empty.js", "output": "sea-prep.blob" } `); spawnSyncAndExitWithoutError( process.execPath, ['--experimental-sea-config', 'sea-config.json'], { cwd: tmpdir.path }); assert(existsSync(seaPrepBlob)); // Verify the workflow. try { generateSEA(outputFile, process.execPath, seaPrepBlob, true); } catch (e) { if (/Cannot copy/.test(e.message)) { common.skip(e.message); } else if (common.isWindows) { if (/Cannot sign/.test(e.message) || /Cannot find signtool/.test(e.message)) { common.skip(e.message); } } throw e; } spawnSyncAndExitWithoutError( outputFile, { env: { NODE_DEBUG_NATIVE: 'SEA', ...process.env, } });