// This tests invalid options for --experimental-sea-config. 'use strict'; require('../common'); const tmpdir = require('../common/tmpdir'); const { writeFileSync, mkdirSync } = require('fs'); const { spawnSyncAndAssert } = require('../common/child_process'); { tmpdir.refresh(); const config = 'non-existent-relative.json'; spawnSyncAndAssert( process.execPath, ['--experimental-sea-config', config], { cwd: tmpdir.path, }, { status: 1, stderr: /Cannot read single executable configuration from non-existent-relative\.json/ }); } { tmpdir.refresh(); const config = tmpdir.resolve('non-existent-absolute.json'); spawnSyncAndAssert( process.execPath, ['--experimental-sea-config', config], { cwd: tmpdir.path, }, { status: 1, stderr: /Cannot read single executable configuration from .*non-existent-absolute\.json/ }); } { tmpdir.refresh(); const config = tmpdir.resolve('invalid.json'); writeFileSync(config, '\n{\n"main"', 'utf8'); spawnSyncAndAssert( process.execPath, ['--experimental-sea-config', config], { cwd: tmpdir.path, }, { status: 1, stderr: /INCOMPLETE_ARRAY_OR_OBJECT/ }); } { tmpdir.refresh(); const config = tmpdir.resolve('empty.json'); writeFileSync(config, '{}', 'utf8'); spawnSyncAndAssert( process.execPath, ['--experimental-sea-config', config], { cwd: tmpdir.path, }, { status: 1, stderr: /"main" field of .*empty\.json is not a non-empty string/ }); } { tmpdir.refresh(); const config = tmpdir.resolve('no-main.json'); writeFileSync(config, '{"output": "test.blob"}', 'utf8'); spawnSyncAndAssert( process.execPath, ['--experimental-sea-config', config], { cwd: tmpdir.path, }, { status: 1, stderr: /"main" field of .*no-main\.json is not a non-empty string/ }); } { tmpdir.refresh(); const config = tmpdir.resolve('no-output.json'); writeFileSync(config, '{"main": "bundle.js"}', 'utf8'); spawnSyncAndAssert( process.execPath, ['--experimental-sea-config', config], { cwd: tmpdir.path, }, { status: 1, stderr: /"output" field of .*no-output\.json is not a non-empty string/ }); } { tmpdir.refresh(); const config = tmpdir.resolve('invalid-disableExperimentalSEAWarning.json'); writeFileSync(config, ` { "main": "bundle.js", "output": "sea-prep.blob", "disableExperimentalSEAWarning": "💥" } `, 'utf8'); spawnSyncAndAssert( process.execPath, ['--experimental-sea-config', config], { cwd: tmpdir.path, }, { status: 1, stderr: /"disableExperimentalSEAWarning" field of .*invalid-disableExperimentalSEAWarning\.json is not a Boolean/ }); } { tmpdir.refresh(); const config = tmpdir.resolve('nonexistent-main-relative.json'); writeFileSync(config, '{"main": "bundle.js", "output": "sea.blob"}', 'utf8'); spawnSyncAndAssert( process.execPath, ['--experimental-sea-config', config], { cwd: tmpdir.path, }, { status: 1, stderr: /Cannot read main script .*bundle\.js/ }); } { tmpdir.refresh(); const config = tmpdir.resolve('nonexistent-main-absolute.json'); const main = tmpdir.resolve('bundle.js'); const configJson = JSON.stringify({ main, output: 'sea.blob' }); writeFileSync(config, configJson, 'utf8'); spawnSyncAndAssert( process.execPath, ['--experimental-sea-config', config], { cwd: tmpdir.path, }, { status: 1, stderr: /Cannot read main script .*bundle\.js/ }); } { tmpdir.refresh(); const config = tmpdir.resolve('output-is-dir-absolute.json'); const main = tmpdir.resolve('bundle.js'); const output = tmpdir.resolve('output-dir'); mkdirSync(output); writeFileSync(main, 'console.log("hello")', 'utf-8'); const configJson = JSON.stringify({ main, output, }); writeFileSync(config, configJson, 'utf8'); spawnSyncAndAssert( process.execPath, ['--experimental-sea-config', config], { cwd: tmpdir.path, }, { status: 1, stderr: /Cannot write output to .*output-dir/ }); } { tmpdir.refresh(); const config = tmpdir.resolve('output-is-dir-relative.json'); const main = tmpdir.resolve('bundle.js'); const output = tmpdir.resolve('output-dir'); mkdirSync(output); writeFileSync(main, 'console.log("hello")', 'utf-8'); const configJson = JSON.stringify({ main, output: 'output-dir' }); writeFileSync(config, configJson, 'utf8'); spawnSyncAndAssert( process.execPath, ['--experimental-sea-config', config], { cwd: tmpdir.path, }, { status: 1, stderr: /Cannot write output to output-dir/ }); }