| "use strict"; |
| var es5 = require("./es5.js"); |
| var canEvaluate = typeof navigator == "undefined"; |
| var haveGetters = (function(){ |
| try { |
| var o = {}; |
| es5.defineProperty(o, "f", { |
| get: function () { |
| return 3; |
| } |
| }); |
| return o.f === 3; |
| } |
| catch (e) { |
| return false; |
| } |
| |
| })(); |
| |
| var errorObj = {e: {}}; |
| var tryCatchTarget; |
| function tryCatcher() { |
| try { |
| return tryCatchTarget.apply(this, arguments); |
| } catch (e) { |
| errorObj.e = e; |
| return errorObj; |
| } |
| } |
| function tryCatch(fn) { |
| tryCatchTarget = fn; |
| return tryCatcher; |
| } |
| |
| var inherits = function(Child, Parent) { |
| var hasProp = {}.hasOwnProperty; |
| |
| function T() { |
| this.constructor = Child; |
| this.constructor$ = Parent; |
| for (var propertyName in Parent.prototype) { |
| if (hasProp.call(Parent.prototype, propertyName) && |
| propertyName.charAt(propertyName.length-1) !== "$" |
| ) { |
| this[propertyName + "$"] = Parent.prototype[propertyName]; |
| } |
| } |
| } |
| T.prototype = Parent.prototype; |
| Child.prototype = new T(); |
| return Child.prototype; |
| }; |
| |
| |
| function isPrimitive(val) { |
| return val == null || val === true || val === false || |
| typeof val === "string" || typeof val === "number"; |
| |
| } |
| |
| function isObject(value) { |
| return !isPrimitive(value); |
| } |
| |
| function maybeWrapAsError(maybeError) { |
| if (!isPrimitive(maybeError)) return maybeError; |
| |
| return new Error(safeToString(maybeError)); |
| } |
| |
| function withAppended(target, appendee) { |
| var len = target.length; |
| var ret = new Array(len + 1); |
| var i; |
| for (i = 0; i < len; ++i) { |
| ret[i] = target[i]; |
| } |
| ret[i] = appendee; |
| return ret; |
| } |
| |
| function getDataPropertyOrDefault(obj, key, defaultValue) { |
| if (es5.isES5) { |
| var desc = Object.getOwnPropertyDescriptor(obj, key); |
| if (desc != null) { |
| return desc.get == null && desc.set == null |
| ? desc.value |
| : defaultValue; |
| } |
| } else { |
| return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined; |
| } |
| } |
| |
| function notEnumerableProp(obj, name, value) { |
| if (isPrimitive(obj)) return obj; |
| var descriptor = { |
| value: value, |
| configurable: true, |
| enumerable: false, |
| writable: true |
| }; |
| es5.defineProperty(obj, name, descriptor); |
| return obj; |
| } |
| |
| |
| var wrapsPrimitiveReceiver = (function() { |
| return this !== "string"; |
| }).call("string"); |
| |
| function thrower(r) { |
| throw r; |
| } |
| |
| var inheritedDataKeys = (function() { |
| if (es5.isES5) { |
| var oProto = Object.prototype; |
| var getKeys = Object.getOwnPropertyNames; |
| return function(obj) { |
| var ret = []; |
| var visitedKeys = Object.create(null); |
| while (obj != null && obj !== oProto) { |
| var keys; |
| try { |
| keys = getKeys(obj); |
| } catch (e) { |
| return ret; |
| } |
| for (var i = 0; i < keys.length; ++i) { |
| var key = keys[i]; |
| if (visitedKeys[key]) continue; |
| visitedKeys[key] = true; |
| var desc = Object.getOwnPropertyDescriptor(obj, key); |
| if (desc != null && desc.get == null && desc.set == null) { |
| ret.push(key); |
| } |
| } |
| obj = es5.getPrototypeOf(obj); |
| } |
| return ret; |
| }; |
| } else { |
| return function(obj) { |
| var ret = []; |
| /*jshint forin:false */ |
| for (var key in obj) { |
| ret.push(key); |
| } |
| return ret; |
| }; |
| } |
| |
| })(); |
| |
| function isClass(fn) { |
| try { |
| if (typeof fn === "function") { |
| var keys = es5.names(fn.prototype); |
| if (es5.isES5) return keys.length > 1; |
| return keys.length > 0 && |
| !(keys.length === 1 && keys[0] === "constructor"); |
| } |
| return false; |
| } catch (e) { |
| return false; |
| } |
| } |
| |
| function toFastProperties(obj) { |
| /*jshint -W027,-W055,-W031*/ |
| function f() {} |
| f.prototype = obj; |
| var l = 8; |
| while (l--) new f(); |
| return obj; |
| eval(obj); |
| } |
| |
| var rident = /^[a-z$_][a-z$_0-9]*$/i; |
| function isIdentifier(str) { |
| return rident.test(str); |
| } |
| |
| function filledRange(count, prefix, suffix) { |
| var ret = new Array(count); |
| for(var i = 0; i < count; ++i) { |
| ret[i] = prefix + i + suffix; |
| } |
| return ret; |
| } |
| |
| function safeToString(obj) { |
| try { |
| return obj + ""; |
| } catch (e) { |
| return "[no string representation]"; |
| } |
| } |
| |
| function markAsOriginatingFromRejection(e) { |
| try { |
| notEnumerableProp(e, "isOperational", true); |
| } |
| catch(ignore) {} |
| } |
| |
| function originatesFromRejection(e) { |
| if (e == null) return false; |
| return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) || |
| e["isOperational"] === true); |
| } |
| |
| function canAttachTrace(obj) { |
| return obj instanceof Error && es5.propertyIsWritable(obj, "stack"); |
| } |
| |
| var ensureErrorObject = (function() { |
| if (!("stack" in new Error())) { |
| return function(value) { |
| if (canAttachTrace(value)) return value; |
| try {throw new Error(safeToString(value));} |
| catch(err) {return err;} |
| }; |
| } else { |
| return function(value) { |
| if (canAttachTrace(value)) return value; |
| return new Error(safeToString(value)); |
| }; |
| } |
| })(); |
| |
| function classString(obj) { |
| return {}.toString.call(obj); |
| } |
| |
| function copyDescriptors(from, to, filter) { |
| var keys = es5.names(from); |
| for (var i = 0; i < keys.length; ++i) { |
| var key = keys[i]; |
| if (filter(key)) { |
| es5.defineProperty(to, key, es5.getDescriptor(from, key)); |
| } |
| } |
| } |
| |
| var ret = { |
| isClass: isClass, |
| isIdentifier: isIdentifier, |
| inheritedDataKeys: inheritedDataKeys, |
| getDataPropertyOrDefault: getDataPropertyOrDefault, |
| thrower: thrower, |
| isArray: es5.isArray, |
| haveGetters: haveGetters, |
| notEnumerableProp: notEnumerableProp, |
| isPrimitive: isPrimitive, |
| isObject: isObject, |
| canEvaluate: canEvaluate, |
| errorObj: errorObj, |
| tryCatch: tryCatch, |
| inherits: inherits, |
| withAppended: withAppended, |
| maybeWrapAsError: maybeWrapAsError, |
| wrapsPrimitiveReceiver: wrapsPrimitiveReceiver, |
| toFastProperties: toFastProperties, |
| filledRange: filledRange, |
| toString: safeToString, |
| canAttachTrace: canAttachTrace, |
| ensureErrorObject: ensureErrorObject, |
| originatesFromRejection: originatesFromRejection, |
| markAsOriginatingFromRejection: markAsOriginatingFromRejection, |
| classString: classString, |
| copyDescriptors: copyDescriptors, |
| hasDevTools: typeof chrome !== "undefined" && chrome && |
| typeof chrome.loadTimes === "function", |
| isNode: typeof process !== "undefined" && |
| classString(process).toLowerCase() === "[object process]" |
| }; |
| try {throw new Error(); } catch (e) {ret.lastLineError = e;} |
| module.exports = ret; |