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
						
					
					
				| "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;
 |