You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					422 lines
				
				11 KiB
			
		
		
			
		
	
	
					422 lines
				
				11 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | var es5 = require("./es5"); | ||
|  | var canEvaluate = typeof navigator == "undefined"; | ||
|  | 
 | ||
|  | var errorObj = {e: {}}; | ||
|  | var tryCatchTarget; | ||
|  | var globalObject = typeof self !== "undefined" ? self : | ||
|  |     typeof window !== "undefined" ? window : | ||
|  |     typeof global !== "undefined" ? global : | ||
|  |     this !== undefined ? this : null; | ||
|  | 
 | ||
|  | function tryCatcher() { | ||
|  |     try { | ||
|  |         var target = tryCatchTarget; | ||
|  |         tryCatchTarget = null; | ||
|  |         return target.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 typeof value === "function" || | ||
|  |            typeof value === "object" && value !== null; | ||
|  | } | ||
|  | 
 | ||
|  | 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; | ||
|  | } | ||
|  | 
 | ||
|  | function thrower(r) { | ||
|  |     throw r; | ||
|  | } | ||
|  | 
 | ||
|  | var inheritedDataKeys = (function() { | ||
|  |     var excludedPrototypes = [ | ||
|  |         Array.prototype, | ||
|  |         Object.prototype, | ||
|  |         Function.prototype | ||
|  |     ]; | ||
|  | 
 | ||
|  |     var isExcludedProto = function(val) { | ||
|  |         for (var i = 0; i < excludedPrototypes.length; ++i) { | ||
|  |             if (excludedPrototypes[i] === val) { | ||
|  |                 return true; | ||
|  |             } | ||
|  |         } | ||
|  |         return false; | ||
|  |     }; | ||
|  | 
 | ||
|  |     if (es5.isES5) { | ||
|  |         var getKeys = Object.getOwnPropertyNames; | ||
|  |         return function(obj) { | ||
|  |             var ret = []; | ||
|  |             var visitedKeys = Object.create(null); | ||
|  |             while (obj != null && !isExcludedProto(obj)) { | ||
|  |                 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 { | ||
|  |         var hasProp = {}.hasOwnProperty; | ||
|  |         return function(obj) { | ||
|  |             if (isExcludedProto(obj)) return []; | ||
|  |             var ret = []; | ||
|  | 
 | ||
|  |             /*jshint forin:false */ | ||
|  |             enumeration: for (var key in obj) { | ||
|  |                 if (hasProp.call(obj, key)) { | ||
|  |                     ret.push(key); | ||
|  |                 } else { | ||
|  |                     for (var i = 0; i < excludedPrototypes.length; ++i) { | ||
|  |                         if (hasProp.call(excludedPrototypes[i], key)) { | ||
|  |                             continue enumeration; | ||
|  |                         } | ||
|  |                     } | ||
|  |                     ret.push(key); | ||
|  |                 } | ||
|  |             } | ||
|  |             return ret; | ||
|  |         }; | ||
|  |     } | ||
|  | 
 | ||
|  | })(); | ||
|  | 
 | ||
|  | var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/; | ||
|  | function isClass(fn) { | ||
|  |     try { | ||
|  |         if (typeof fn === "function") { | ||
|  |             var keys = es5.names(fn.prototype); | ||
|  | 
 | ||
|  |             var hasMethods = es5.isES5 && keys.length > 1; | ||
|  |             var hasMethodsOtherThanConstructor = keys.length > 0 && | ||
|  |                 !(keys.length === 1 && keys[0] === "constructor"); | ||
|  |             var hasThisAssignmentAndStaticMethods = | ||
|  |                 thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0; | ||
|  | 
 | ||
|  |             if (hasMethods || hasMethodsOtherThanConstructor || | ||
|  |                 hasThisAssignmentAndStaticMethods) { | ||
|  |                 return true; | ||
|  |             } | ||
|  |         } | ||
|  |         return false; | ||
|  |     } catch (e) { | ||
|  |         return false; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | function toFastProperties(obj) { | ||
|  |     /*jshint -W027,-W055,-W031*/ | ||
|  |     function FakeConstructor() {} | ||
|  |     FakeConstructor.prototype = obj; | ||
|  |     var receiver = new FakeConstructor(); | ||
|  |     function ic() { | ||
|  |         return typeof receiver.foo; | ||
|  |     } | ||
|  |     ic(); | ||
|  |     ic(); | ||
|  |     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 isError(obj) { | ||
|  |     return obj instanceof Error || | ||
|  |         (obj !== null && | ||
|  |            typeof obj === "object" && | ||
|  |            typeof obj.message === "string" && | ||
|  |            typeof obj.name === "string"); | ||
|  | } | ||
|  | 
 | ||
|  | 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 isError(obj) && 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)) { | ||
|  |             try { | ||
|  |                 es5.defineProperty(to, key, es5.getDescriptor(from, key)); | ||
|  |             } catch (ignore) {} | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | var asArray = function(v) { | ||
|  |     if (es5.isArray(v)) { | ||
|  |         return v; | ||
|  |     } | ||
|  |     return null; | ||
|  | }; | ||
|  | 
 | ||
|  | if (typeof Symbol !== "undefined" && Symbol.iterator) { | ||
|  |     var ArrayFrom = typeof Array.from === "function" ? function(v) { | ||
|  |         return Array.from(v); | ||
|  |     } : function(v) { | ||
|  |         var ret = []; | ||
|  |         var it = v[Symbol.iterator](); | ||
|  |         var itResult; | ||
|  |         while (!((itResult = it.next()).done)) { | ||
|  |             ret.push(itResult.value); | ||
|  |         } | ||
|  |         return ret; | ||
|  |     }; | ||
|  | 
 | ||
|  |     asArray = function(v) { | ||
|  |         if (es5.isArray(v)) { | ||
|  |             return v; | ||
|  |         } else if (v != null && typeof v[Symbol.iterator] === "function") { | ||
|  |             return ArrayFrom(v); | ||
|  |         } | ||
|  |         return null; | ||
|  |     }; | ||
|  | } | ||
|  | 
 | ||
|  | var isNode = typeof process !== "undefined" && | ||
|  |         classString(process).toLowerCase() === "[object process]"; | ||
|  | 
 | ||
|  | var hasEnvVariables = typeof process !== "undefined" && | ||
|  |     typeof process.env !== "undefined"; | ||
|  | 
 | ||
|  | function env(key) { | ||
|  |     return hasEnvVariables ? process.env[key] : undefined; | ||
|  | } | ||
|  | 
 | ||
|  | function getNativePromise() { | ||
|  |     if (typeof Promise === "function") { | ||
|  |         try { | ||
|  |             var promise = new Promise(function(){}); | ||
|  |             if (classString(promise) === "[object Promise]") { | ||
|  |                 return Promise; | ||
|  |             } | ||
|  |         } catch (e) {} | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | var reflectHandler; | ||
|  | function contextBind(ctx, cb) { | ||
|  |     if (ctx === null || | ||
|  |         typeof cb !== "function" || | ||
|  |         cb === reflectHandler) { | ||
|  |         return cb; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (ctx.domain !== null) { | ||
|  |         cb = ctx.domain.bind(cb); | ||
|  |     } | ||
|  | 
 | ||
|  |     var async = ctx.async; | ||
|  |     if (async !== null) { | ||
|  |         var old = cb; | ||
|  |         cb = function() { | ||
|  |             var $_len = arguments.length + 2;var args = new Array($_len); for(var $_i = 2; $_i < $_len ; ++$_i) {args[$_i] = arguments[$_i  - 2];}; | ||
|  |             args[0] = old; | ||
|  |             args[1] = this; | ||
|  |             return async.runInAsyncScope.apply(async, args); | ||
|  |         }; | ||
|  |     } | ||
|  |     return cb; | ||
|  | } | ||
|  | 
 | ||
|  | var ret = { | ||
|  |     setReflectHandler: function(fn) { | ||
|  |         reflectHandler = fn; | ||
|  |     }, | ||
|  |     isClass: isClass, | ||
|  |     isIdentifier: isIdentifier, | ||
|  |     inheritedDataKeys: inheritedDataKeys, | ||
|  |     getDataPropertyOrDefault: getDataPropertyOrDefault, | ||
|  |     thrower: thrower, | ||
|  |     isArray: es5.isArray, | ||
|  |     asArray: asArray, | ||
|  |     notEnumerableProp: notEnumerableProp, | ||
|  |     isPrimitive: isPrimitive, | ||
|  |     isObject: isObject, | ||
|  |     isError: isError, | ||
|  |     canEvaluate: canEvaluate, | ||
|  |     errorObj: errorObj, | ||
|  |     tryCatch: tryCatch, | ||
|  |     inherits: inherits, | ||
|  |     withAppended: withAppended, | ||
|  |     maybeWrapAsError: maybeWrapAsError, | ||
|  |     toFastProperties: toFastProperties, | ||
|  |     filledRange: filledRange, | ||
|  |     toString: safeToString, | ||
|  |     canAttachTrace: canAttachTrace, | ||
|  |     ensureErrorObject: ensureErrorObject, | ||
|  |     originatesFromRejection: originatesFromRejection, | ||
|  |     markAsOriginatingFromRejection: markAsOriginatingFromRejection, | ||
|  |     classString: classString, | ||
|  |     copyDescriptors: copyDescriptors, | ||
|  |     isNode: isNode, | ||
|  |     hasEnvVariables: hasEnvVariables, | ||
|  |     env: env, | ||
|  |     global: globalObject, | ||
|  |     getNativePromise: getNativePromise, | ||
|  |     contextBind: contextBind | ||
|  | }; | ||
|  | ret.isRecentNode = ret.isNode && (function() { | ||
|  |     var version; | ||
|  |     if (process.versions && process.versions.node) { | ||
|  |         version = process.versions.node.split(".").map(Number); | ||
|  |     } else if (process.version) { | ||
|  |         version = process.version.split(".").map(Number); | ||
|  |     } | ||
|  |     return (version[0] === 0 && version[1] > 10) || (version[0] > 0); | ||
|  | })(); | ||
|  | ret.nodeSupportsAsyncResource = ret.isNode && (function() { | ||
|  |     var supportsAsync = false; | ||
|  |     try { | ||
|  |         var res = require("async_hooks").AsyncResource; | ||
|  |         supportsAsync = typeof res.prototype.runInAsyncScope === "function"; | ||
|  |     } catch (e) { | ||
|  |         supportsAsync = false; | ||
|  |     } | ||
|  |     return supportsAsync; | ||
|  | })(); | ||
|  | 
 | ||
|  | if (ret.isNode) ret.toFastProperties(process); | ||
|  | 
 | ||
|  | try {throw new Error(); } catch (e) {ret.lastLineError = e;} | ||
|  | module.exports = ret; |