first commit
This commit is contained in:
161
build/node_modules/prepack/lib/serializer/logger.js
generated
vendored
Normal file
161
build/node_modules/prepack/lib/serializer/logger.js
generated
vendored
Normal file
@@ -0,0 +1,161 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.Logger = undefined;
|
||||
|
||||
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**
|
||||
* 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.
|
||||
*/
|
||||
|
||||
var _realm = require("../realm.js");
|
||||
|
||||
var _errors = require("../errors.js");
|
||||
|
||||
var _index = require("../methods/index.js");
|
||||
|
||||
var _completions = require("../completions.js");
|
||||
|
||||
var _index2 = require("../values/index.js");
|
||||
|
||||
var _singletons = require("../singletons.js");
|
||||
|
||||
var _invariant = require("../invariant.js");
|
||||
|
||||
var _invariant2 = _interopRequireDefault(_invariant);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
var Logger = exports.Logger = function () {
|
||||
function Logger(realm, internalDebug) {
|
||||
_classCallCheck(this, Logger);
|
||||
|
||||
this.realm = realm;
|
||||
this._hasErrors = false;
|
||||
this.internalDebug = internalDebug;
|
||||
}
|
||||
|
||||
_createClass(Logger, [{
|
||||
key: "tryQuery",
|
||||
|
||||
|
||||
// Wraps a query that might potentially execute user code.
|
||||
value: function tryQuery(f, defaultValue, logFailures) {
|
||||
var _this = this;
|
||||
|
||||
var realm = this.realm;
|
||||
var context = new _realm.ExecutionContext();
|
||||
context.isStrict = realm.isStrict;
|
||||
var env = realm.$GlobalEnv;
|
||||
context.lexicalEnvironment = env;
|
||||
context.variableEnvironment = env;
|
||||
context.realm = realm;
|
||||
realm.pushContext(context);
|
||||
// We use partial evaluation so that we can throw away any state mutations
|
||||
var oldErrorHandler = realm.errorHandler;
|
||||
var _newErrorHandler = void 0;
|
||||
realm.errorHandler = _newErrorHandler = function newErrorHandler(d) {
|
||||
if (d.severity === "Information" || d.severity === "Warning") return "Recover";
|
||||
if (logFailures) {
|
||||
realm.errorHandler = oldErrorHandler;
|
||||
realm.handleError(d);
|
||||
realm.errorHandler = _newErrorHandler;
|
||||
}
|
||||
return "Fail";
|
||||
};
|
||||
try {
|
||||
var result = void 0;
|
||||
var effects = realm.evaluateForEffects(function () {
|
||||
try {
|
||||
result = f();
|
||||
} catch (e) {
|
||||
if (e instanceof _completions.Completion) {
|
||||
if (logFailures) _this.logCompletion(e);
|
||||
result = defaultValue;
|
||||
} else if (e instanceof _errors.FatalError) {
|
||||
result = defaultValue;
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
return realm.intrinsics.undefined;
|
||||
});
|
||||
(0, _invariant2.default)(effects[0] === realm.intrinsics.undefined);
|
||||
return result;
|
||||
} finally {
|
||||
realm.errorHandler = oldErrorHandler;
|
||||
realm.popContext(context);
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: "logCompletion",
|
||||
value: function logCompletion(res) {
|
||||
var realm = this.realm;
|
||||
var value = res.value;
|
||||
if (this.internalDebug) console.error("=== " + res.constructor.name + " ===");
|
||||
if (this.tryQuery(function () {
|
||||
return value instanceof _index2.ObjectValue && (0, _index.InstanceofOperator)(realm, value, realm.intrinsics.Error);
|
||||
}, false, false)) {
|
||||
var object = value;
|
||||
try {
|
||||
var err = new _errors.FatalError(this.tryQuery(function () {
|
||||
return _singletons.To.ToStringPartial(realm, (0, _index.Get)(realm, object, "message"));
|
||||
}, "(unknown message)", false));
|
||||
err.stack = this.tryQuery(function () {
|
||||
return _singletons.To.ToStringPartial(realm, (0, _index.Get)(realm, object, "stack"));
|
||||
}, "(unknown stack)", false);
|
||||
console.error(err.message);
|
||||
console.error(err.stack);
|
||||
if (this.internalDebug && res instanceof _completions.ThrowCompletion) console.error(res.nativeStack);
|
||||
} catch (err) {
|
||||
var message = object.properties.get("message");
|
||||
console.error(message && message.descriptor && message.descriptor.value instanceof _index2.StringValue ? message.descriptor.value.value : "(no message available)");
|
||||
console.error(err.stack);
|
||||
if (object.$ErrorData) {
|
||||
console.error(object.$ErrorData.contextStack);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
value = _singletons.To.ToStringPartial(realm, value);
|
||||
} catch (err) {
|
||||
value = err.message;
|
||||
}
|
||||
console.error(value);
|
||||
if (this.internalDebug && res instanceof _completions.ThrowCompletion) console.error(res.nativeStack);
|
||||
}
|
||||
this._hasErrors = true;
|
||||
}
|
||||
}, {
|
||||
key: "logError",
|
||||
value: function logError(value, message) {
|
||||
var loc = value.expressionLocation;
|
||||
if (loc) {
|
||||
var locString = loc.start.line + ":" + (loc.start.column + 1);
|
||||
if (loc.source) locString = loc.source + ":" + locString;
|
||||
message = message + "\nat: " + locString;
|
||||
} else if (value.intrinsicName) {
|
||||
message = message + "\nintrinsic name: " + value.intrinsicName;
|
||||
}
|
||||
|
||||
console.error(message);
|
||||
this._hasErrors = true;
|
||||
}
|
||||
}, {
|
||||
key: "hasErrors",
|
||||
value: function hasErrors() {
|
||||
return this._hasErrors;
|
||||
}
|
||||
}]);
|
||||
|
||||
return Logger;
|
||||
}();
|
||||
//# sourceMappingURL=logger.js.map
|
||||
Reference in New Issue
Block a user