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.
		
		
		
		
		
			
		
			
				
					
					
						
							421 lines
						
					
					
						
							11 KiB
						
					
					
				
			
		
		
	
	
							421 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;
 | 
						|
 |