mirror of
https://github.com/nodejs/node.git
synced 2025-08-15 21:58:48 +02:00

This patch adds support for `sea.getRawAsset()` which is similar to `sea.getAsset()` but returns the raw asset in an array buffer without copying. Users should avoid writing to the returned array buffer. If the injected section is not marked as writable or not aligned, writing to the raw asset is likely to result in a crash. PR-URL: https://github.com/nodejs/node/pull/50960 Refs: https://github.com/nodejs/single-executable/issues/68 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
73 lines
1.7 KiB
JavaScript
73 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
|
|
const {
|
|
injectAndCodeSign,
|
|
skipIfSingleExecutableIsNotSupported,
|
|
} = require('../common/sea');
|
|
|
|
skipIfSingleExecutableIsNotSupported();
|
|
|
|
// This tests the snapshot support in single executable applications.
|
|
const tmpdir = require('../common/tmpdir');
|
|
|
|
const { copyFileSync, writeFileSync, existsSync } = require('fs');
|
|
const {
|
|
spawnSyncAndExitWithoutError,
|
|
} = require('../common/child_process');
|
|
const assert = require('assert');
|
|
const fixtures = require('../common/fixtures');
|
|
|
|
tmpdir.refresh();
|
|
if (!tmpdir.hasEnoughSpace(120 * 1024 * 1024)) {
|
|
common.skip('Not enough disk space');
|
|
}
|
|
|
|
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();
|
|
copyFileSync(fixtures.path('sea', 'get-asset-raw.js'), tmpdir.resolve('sea.js'));
|
|
copyFileSync(fixtures.path('person.jpg'), tmpdir.resolve('person.jpg'));
|
|
writeFileSync(configFile, `
|
|
{
|
|
"main": "sea.js",
|
|
"output": "sea-prep.blob",
|
|
"assets": {
|
|
"person.jpg": "person.jpg"
|
|
}
|
|
}
|
|
`, 'utf8');
|
|
|
|
spawnSyncAndExitWithoutError(
|
|
process.execPath,
|
|
['--experimental-sea-config', 'sea-config.json'],
|
|
{
|
|
env: {
|
|
NODE_DEBUG_NATIVE: 'SEA',
|
|
...process.env,
|
|
},
|
|
cwd: tmpdir.path
|
|
},
|
|
{});
|
|
|
|
assert(existsSync(seaPrepBlob));
|
|
|
|
copyFileSync(process.execPath, outputFile);
|
|
injectAndCodeSign(outputFile, seaPrepBlob);
|
|
|
|
spawnSyncAndExitWithoutError(
|
|
outputFile,
|
|
{
|
|
env: {
|
|
...process.env,
|
|
NODE_DEBUG_NATIVE: 'SEA',
|
|
__TEST_PERSON_JPG: fixtures.path('person.jpg'),
|
|
}
|
|
},
|
|
{ }
|
|
);
|
|
}
|