first commit
This commit is contained in:
320
build/node_modules/prepack/lib/prepack-cli.js
generated
vendored
Normal file
320
build/node_modules/prepack/lib/prepack-cli.js
generated
vendored
Normal file
@@ -0,0 +1,320 @@
|
||||
"use strict";
|
||||
|
||||
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); /**
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
/* eslint-disable no-shadow */
|
||||
|
||||
var _errors = require("./errors.js");
|
||||
|
||||
var _options = require("./options.js");
|
||||
|
||||
var _prepackNode = require("./prepack-node.js");
|
||||
|
||||
var _fs = require("fs");
|
||||
|
||||
var _fs2 = _interopRequireDefault(_fs);
|
||||
|
||||
var _v = require("v8");
|
||||
|
||||
var _v2 = _interopRequireDefault(_v);
|
||||
|
||||
var _package = require("../package.json");
|
||||
|
||||
var _invariant = require("./invariant");
|
||||
|
||||
var _invariant2 = _interopRequireDefault(_invariant);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
// Prepack helper
|
||||
function run(Object, Array, console, JSON, process, prepackStdin, prepackFileSync, FatalError, CompatibilityValues, fs) {
|
||||
var HELP_STR = "\n input The name of the file to run Prepack over (for web please provide the single js bundle file)\n --out The name of the output file\n --compatibility The target environment for Prepack [" + CompatibilityValues.map(function (v) {
|
||||
return "\"" + v + "\"";
|
||||
}).join(", ") + "]\n --mathRandomSeed If you want Prepack to evaluate Math.random() calls, please provide a seed.\n --srcmapIn The input sourcemap filename. If present, Prepack will output a sourcemap that maps from\n the original file (pre-input sourcemap) to Prepack's output\n --srcmapOut The output sourcemap filename.\n --maxStackDepth Specify the maximum call stack depth.\n --timeout The amount of time in seconds until Prepack should time out.\n --additionalFunctions Additional functions that should be prepacked (comma separated).\n --abstractEffectsInAdditionalFunctions Experimental flag to allow abstract effectful function calls.\n --lazyObjectsRuntime Enable lazy objects feature and specify the JS runtime that support this feature.\n --debugNames Changes the output of Prepack so that for named functions and variables that get emitted into\n Prepack's output, the original name is appended as a suffix to Prepack's generated identifier.\n --speculate Enable speculative initialization of modules (for the module system Prepack has builtin\n knowledge about). Prepack will try to execute all factory functions it is able to.\n --trace Traces the order of module initialization.\n --serialize Serializes the partially evaluated global environment as a program that recreates it.\n (default = true)\n --residual Produces the residual program that results after constant folding.\n --profile Enables console logging of profile information of different phases of prepack.\n --statsFile The name of the output file where statistics will be written to.\n --heapGraphFilePath The name of the output file where heap graph will be written to.\n --inlineExpressions When generating code, tells prepack to avoid naming expressions when they are only used once,\n and instead inline them where they are used.\n --simpleClosures When generating code, tells prepack to not defer initializing closures\n --omitInvariants When generating code, tells prepack to omit writing invariants. (Invariants generated by default.)\n --version Output the version number.\n ";
|
||||
var args = Array.from(process.argv);
|
||||
args.splice(0, 2);
|
||||
var inputFilenames = [];
|
||||
var outputFilename = void 0;
|
||||
var compatibility = void 0;
|
||||
var mathRandomSeed = void 0;
|
||||
var inputSourceMap = void 0;
|
||||
var outputSourceMap = void 0;
|
||||
var statsFileName = void 0;
|
||||
var maxStackDepth = void 0;
|
||||
var timeout = void 0;
|
||||
var additionalFunctions = void 0;
|
||||
var lazyObjectsRuntime = void 0;
|
||||
var heapGraphFilePath = void 0;
|
||||
var debugInFilePath = void 0;
|
||||
var debugOutFilePath = void 0;
|
||||
var flags = {
|
||||
initializeMoreModules: false,
|
||||
trace: false,
|
||||
debugNames: false,
|
||||
omitInvariants: false,
|
||||
inlineExpressions: false,
|
||||
simpleClosures: false,
|
||||
abstractEffectsInAdditionalFunctions: false,
|
||||
logStatistics: false,
|
||||
logModules: false,
|
||||
delayInitializations: false,
|
||||
delayUnsupportedRequires: false,
|
||||
accelerateUnsupportedRequires: true,
|
||||
internalDebug: false,
|
||||
debugScopes: false,
|
||||
serialize: false,
|
||||
residual: false,
|
||||
profile: false,
|
||||
reactEnabled: false,
|
||||
reactOutput: "create-element"
|
||||
};
|
||||
|
||||
while (args.length) {
|
||||
var arg = args.shift();
|
||||
if (!arg.startsWith("--")) {
|
||||
inputFilenames.push(arg);
|
||||
} else {
|
||||
arg = arg.slice(2);
|
||||
switch (arg) {
|
||||
case "out":
|
||||
arg = args.shift();
|
||||
outputFilename = arg;
|
||||
break;
|
||||
case "compatibility":
|
||||
arg = args.shift();
|
||||
if (!CompatibilityValues.includes(arg)) {
|
||||
console.error("Unsupported compatibility: " + arg);
|
||||
process.exit(1);
|
||||
}
|
||||
compatibility = arg;
|
||||
break;
|
||||
case "mathRandomSeed":
|
||||
mathRandomSeed = args.shift();
|
||||
break;
|
||||
case "srcmapIn":
|
||||
inputSourceMap = args.shift();
|
||||
break;
|
||||
case "srcmapOut":
|
||||
outputSourceMap = args.shift();
|
||||
break;
|
||||
case "statsFile":
|
||||
statsFileName = args.shift();
|
||||
break;
|
||||
case "maxStackDepth":
|
||||
var value = args.shift();
|
||||
if (isNaN(value)) {
|
||||
console.error("Stack depth value must be a number");
|
||||
process.exit(1);
|
||||
}
|
||||
maxStackDepth = parseInt(value, 10);
|
||||
break;
|
||||
case "timeout":
|
||||
var seconds = args.shift();
|
||||
if (isNaN(seconds)) {
|
||||
console.error("Timeout must be a number");
|
||||
process.exit(1);
|
||||
}
|
||||
timeout = parseInt(seconds, 10) * 1000;
|
||||
break;
|
||||
case "additionalFunctions":
|
||||
var line = args.shift();
|
||||
additionalFunctions = line.split(",");
|
||||
break;
|
||||
case "debugInFilePath":
|
||||
debugInFilePath = args.shift();
|
||||
break;
|
||||
case "debugOutFilePath":
|
||||
debugOutFilePath = args.shift();
|
||||
break;
|
||||
case "lazyObjectsRuntime":
|
||||
lazyObjectsRuntime = args.shift();
|
||||
break;
|
||||
case "heapGraphFilePath":
|
||||
heapGraphFilePath = args.shift();
|
||||
break;
|
||||
case "help":
|
||||
console.log("Usage: prepack.js [ -- | input.js ] [ --out output.js ] [ --compatibility jsc ] [ --mathRandomSeed seedvalue ] [ --srcmapIn inputMap ] [ --srcmapOut outputMap ] [ --maxStackDepth depthValue ] [ --timeout seconds ] [ --additionalFunctions fnc1,fnc2,... ] [ --lazyObjectsRuntime lazyObjectsRuntimeName] [ --heapGraphFilePath heapGraphFilePath]" + Object.keys(flags).map(function (s) {
|
||||
return "[ --" + s + "]";
|
||||
}).join(" ") + "\n" + HELP_STR);
|
||||
return;
|
||||
case "version":
|
||||
console.log(_package.version);
|
||||
return;
|
||||
default:
|
||||
if (arg in flags) {
|
||||
flags[arg] = true;
|
||||
} else {
|
||||
console.error("Unknown option: " + arg);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!flags.serialize && !flags.residual) flags.serialize = true;
|
||||
|
||||
var resolvedOptions = Object.assign({}, {
|
||||
compatibility: compatibility,
|
||||
mathRandomSeed: mathRandomSeed,
|
||||
inputSourceMapFilename: inputSourceMap,
|
||||
errorHandler: errorHandler,
|
||||
sourceMaps: !!outputSourceMap,
|
||||
maxStackDepth: maxStackDepth,
|
||||
timeout: timeout,
|
||||
additionalFunctions: additionalFunctions,
|
||||
lazyObjectsRuntime: lazyObjectsRuntime,
|
||||
heapGraphFormat: "DotLanguage",
|
||||
debugInFilePath: debugInFilePath,
|
||||
debugOutFilePath: debugOutFilePath
|
||||
}, flags);
|
||||
if (lazyObjectsRuntime && (resolvedOptions.additionalFunctions || resolvedOptions.delayInitializations || resolvedOptions.inlineExpressions)) {
|
||||
console.error("lazy objects feature is incompatible with additionalFunctions, delayInitializations and inlineExpressions options");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
var errors = new Map();
|
||||
function errorHandler(diagnostic) {
|
||||
if (diagnostic.location) errors.set(diagnostic.location, diagnostic);
|
||||
return "Recover";
|
||||
}
|
||||
|
||||
function printDiagnostics() {
|
||||
var foundFatal = false;
|
||||
if (errors.size > 0) {
|
||||
console.error("Errors found while prepacking");
|
||||
var _iteratorNormalCompletion = true;
|
||||
var _didIteratorError = false;
|
||||
var _iteratorError = undefined;
|
||||
|
||||
try {
|
||||
for (var _iterator = errors[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
||||
var _ref = _step.value;
|
||||
|
||||
var _ref2 = _slicedToArray(_ref, 2);
|
||||
|
||||
var loc = _ref2[0];
|
||||
var error = _ref2[1];
|
||||
|
||||
var sourceMessage = "";
|
||||
switch (loc.source) {
|
||||
case "":
|
||||
sourceMessage = "In an unknown source file";
|
||||
break;
|
||||
case "no-filename-specified":
|
||||
sourceMessage = "In stdin";
|
||||
break;
|
||||
default:
|
||||
// flow made me do this || ""
|
||||
sourceMessage = "In input file " + (loc.source || "");
|
||||
break;
|
||||
}
|
||||
|
||||
foundFatal = foundFatal || error.severity === "FatalError";
|
||||
console.error(sourceMessage + "(" + loc.start.line + ":" + (loc.start.column + 1) + ") " + error.severity + " " + error.errorCode + ": " + error.message + (" (https://github.com/facebook/prepack/wiki/" + error.errorCode + ")"));
|
||||
if (foundFatal) {
|
||||
console.error(error.callStack || "");
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
_didIteratorError = true;
|
||||
_iteratorError = err;
|
||||
} finally {
|
||||
try {
|
||||
if (!_iteratorNormalCompletion && _iterator.return) {
|
||||
_iterator.return();
|
||||
}
|
||||
} finally {
|
||||
if (_didIteratorError) {
|
||||
throw _iteratorError;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return foundFatal;
|
||||
}
|
||||
|
||||
try {
|
||||
if (inputFilenames.length === 0) {
|
||||
prepackStdin(resolvedOptions, processSerializedCode);
|
||||
return;
|
||||
}
|
||||
var serialized = prepackFileSync(inputFilenames, resolvedOptions);
|
||||
processSerializedCode(null, serialized);
|
||||
} catch (err) {
|
||||
//FatalErrors must have generated at least one CompilerDiagnostic.
|
||||
if (err instanceof FatalError) {
|
||||
(0, _invariant2.default)(errors.size > 0, "FatalError must generate at least one CompilerDiagnostic");
|
||||
} else {
|
||||
// if it is not a FatalError, it means prepack failed, and we should display the CompilerDiagnostics and stack trace.
|
||||
printDiagnostics();
|
||||
console.error(err.stack);
|
||||
process.exit(1);
|
||||
}
|
||||
} finally {
|
||||
var foundFatal = printDiagnostics();
|
||||
if (foundFatal) process.exit(1);
|
||||
}
|
||||
|
||||
function processSerializedCode(err, serialized) {
|
||||
//FatalErrors must have generated at least one CompilerDiagnostic.
|
||||
if (err && err instanceof FatalError) {
|
||||
(0, _invariant2.default)(errors.size > 0, "FatalError must generate at least one CompilerDiagnostic");
|
||||
}
|
||||
if (err && !(err instanceof FatalError)) {
|
||||
// if it is not a FatalError, it means prepack failed, and we should display the CompilerDiagnostics and stack trace.
|
||||
printDiagnostics();
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
}
|
||||
// we print the non-fatal diagnostics. We test again if there is any FatalError-level CompilerDiagnostics that wouldn't have thrown a FatalError.
|
||||
var foundFatal = printDiagnostics();
|
||||
if (foundFatal) process.exit(1);
|
||||
if (serialized) {
|
||||
if (serialized.code === "") {
|
||||
console.error("Prepack returned empty code.");
|
||||
return;
|
||||
}
|
||||
if (outputFilename) {
|
||||
console.log("Prepacked source code written to " + outputFilename + ".");
|
||||
fs.writeFileSync(outputFilename, serialized.code);
|
||||
} else {
|
||||
console.log(serialized.code);
|
||||
}
|
||||
if (statsFileName) {
|
||||
if (serialized.statistics === undefined || serialized.timingStats === undefined) {
|
||||
return;
|
||||
}
|
||||
var stats = {
|
||||
SerializerStatistics: serialized.statistics,
|
||||
TimingStatistics: serialized.timingStats,
|
||||
MemoryStatistics: _v2.default.getHeapStatistics()
|
||||
};
|
||||
fs.writeFileSync(statsFileName, JSON.stringify(stats));
|
||||
}
|
||||
if (outputSourceMap) {
|
||||
fs.writeFileSync(outputSourceMap, serialized.map ? JSON.stringify(serialized.map) : "");
|
||||
}
|
||||
if (heapGraphFilePath) {
|
||||
(0, _invariant2.default)(serialized.heapGraph);
|
||||
fs.writeFileSync(heapGraphFilePath, serialized.heapGraph);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (typeof __residual === "function") {
|
||||
// If we're running inside of Prepack. This is the residual function we'll
|
||||
// want to leave untouched in the final program.
|
||||
__residual("boolean", run, Object, Array, console, JSON, process, _prepackNode.prepackStdin, _prepackNode.prepackFileSync, _errors.FatalError, _options.CompatibilityValues, _fs2.default);
|
||||
} else {
|
||||
run(Object, Array, console, JSON, process, _prepackNode.prepackStdin, _prepackNode.prepackFileSync, _errors.FatalError, _options.CompatibilityValues, _fs2.default);
|
||||
}
|
||||
//# sourceMappingURL=prepack-cli.js.map
|
||||
Reference in New Issue
Block a user