UNPKG

pkg-fetch

Version:

Github Releases page of this project contains base binaries, used by `pkg` to create executables. `pkg-fetch` npm package downloads base binaries or compiles them from source.

48 lines (35 loc) 3.26 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.verify = undefined; var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var verify = exports.verify = function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(local) { return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return (0, _chmod.plusx)(local); case 2: _context.next = 4; return (0, _spawn.spawn)(local, ['--pkg-fallback', '-e', script]); case 4: case 'end': return _context.stop(); } } }, _callee, this); })); return function verify(_x) { return _ref.apply(this, arguments); }; }(); var _chmod = require('./chmod.js'); var _spawn = require('./spawn.js'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var script = '\n var vm = require(\'vm\');\n var assert = require(\'assert\');\n var text = \'(function () { return 42; })\';\n var cd, fn, result;\n var modules = process.versions.modules | 0;\n\n var s1 = new vm.Script(text, { filename: \'s1\', produceCachedData: true, sourceless: true });\n assert(s1.cachedDataProduced);\n cd = s1.cachedData;\n\n var kCpuFeaturesOffset, cpuFeatures;\n\n if (modules === 14) {\n } else\n if (modules === 46 || modules === 48 ||\n modules === 51 || modules === 57) {\n kCpuFeaturesOffset = 0x0c;\n } else {\n assert(false, modules);\n }\n\n if (modules >= 46 && // no cpu_features field in 0.12\n // non-zero features even in sourceless mode in arm\n process.arch !== \'arm\') {\n cpuFeatures = cd.readUInt32LE(kCpuFeaturesOffset);\n assert(cpuFeatures === 0, \'CPU_FEATURES must be zero\');\n }\n\n var s2 = new vm.Script(undefined, { filename: \'s2\', cachedData: cd, sourceless: true });\n fn = s2.runInThisContext();\n result = fn();\n assert.equal(result, 42);\n\n if (modules === 14) {\n } else\n if (modules === 46 || modules === 48 ||\n modules === 51 || modules === 57) {\n var paddedPayloadOffset = 0x48; // see SerializedCodeData::Payload()\n var index = paddedPayloadOffset + 10;\n cd[index] ^= 0xf0;\n var s3 = new vm.Script(undefined, { filename: \'s3\', cachedData: cd, sourceless: true });\n assert(s3.cachedDataRejected, \'s3.cachedDataRejected must be true\');\n } else {\n assert(false);\n }\n\n var s4 = new vm.Script(text, { filename: \'s4\', produceCachedData: true });\n assert(s4.cachedDataProduced, \'s4.cachedDataProduced must be true\');\n cd = s4.cachedData;\n\n if (modules >= 46 && // no cpu_features field in 0.12\n // zero features even in non-sourceless mode in arm\n process.arch !== \'arm\') {\n cpuFeatures = cd.readUInt32LE(kCpuFeaturesOffset);\n assert(cpuFeatures !== 0, \'CPU_FEATURES must be non-zero\');\n }\n\n console.log(\'ok\');\n';