{"version":3,"sources":["jsdelivr-header.js","/npm/tp-platform@1.0.4/node_modules/tp-register-listener/src/register-listener.ts","/npm/tp-platform@1.0.4/src/lib/query-params.ts","/npm/tp-platform@1.0.4/src/lib/interface.ts","/npm/tp-platform@1.0.4/src/lib/platform-utils.ts","/npm/tp-platform@1.0.4/src/lib/platform-registry.ts","/npm/tp-platform@1.0.4/node_modules/lodash/_freeGlobal.js","/npm/tp-platform@1.0.4/node_modules/lodash/_root.js","/npm/tp-platform@1.0.4/node_modules/lodash/_Symbol.js","/npm/tp-platform@1.0.4/node_modules/lodash/_getRawTag.js","/npm/tp-platform@1.0.4/node_modules/lodash/_objectToString.js","/npm/tp-platform@1.0.4/node_modules/lodash/_baseGetTag.js","/npm/tp-platform@1.0.4/node_modules/lodash/isObject.js","/npm/tp-platform@1.0.4/node_modules/lodash/isFunction.js","/npm/tp-platform@1.0.4/node_modules/lodash/_isMasked.js","/npm/tp-platform@1.0.4/node_modules/lodash/_coreJsData.js","/npm/tp-platform@1.0.4/node_modules/lodash/_toSource.js","/npm/tp-platform@1.0.4/node_modules/lodash/_baseIsNative.js","/npm/tp-platform@1.0.4/node_modules/lodash/_getValue.js","/npm/tp-platform@1.0.4/node_modules/lodash/_getNative.js","/npm/tp-platform@1.0.4/node_modules/lodash/_defineProperty.js","/npm/tp-platform@1.0.4/node_modules/lodash/_baseAssignValue.js","/npm/tp-platform@1.0.4/node_modules/lodash/eq.js","/npm/tp-platform@1.0.4/node_modules/lodash/_assignValue.js","/npm/tp-platform@1.0.4/node_modules/lodash/_copyObject.js","/npm/tp-platform@1.0.4/node_modules/lodash/identity.js","/npm/tp-platform@1.0.4/node_modules/lodash/_apply.js","/npm/tp-platform@1.0.4/node_modules/lodash/_overRest.js","/npm/tp-platform@1.0.4/node_modules/lodash/constant.js","/npm/tp-platform@1.0.4/node_modules/lodash/_baseSetToString.js","/npm/tp-platform@1.0.4/node_modules/lodash/_shortOut.js","/npm/tp-platform@1.0.4/node_modules/lodash/_setToString.js","/npm/tp-platform@1.0.4/node_modules/lodash/_baseRest.js","/npm/tp-platform@1.0.4/node_modules/lodash/isLength.js","/npm/tp-platform@1.0.4/node_modules/lodash/isArrayLike.js","/npm/tp-platform@1.0.4/node_modules/lodash/_isIndex.js","/npm/tp-platform@1.0.4/node_modules/lodash/_isIterateeCall.js","/npm/tp-platform@1.0.4/node_modules/lodash/_createAssigner.js","/npm/tp-platform@1.0.4/node_modules/lodash/_isPrototype.js","/npm/tp-platform@1.0.4/node_modules/lodash/_baseTimes.js","/npm/tp-platform@1.0.4/node_modules/lodash/isObjectLike.js","/npm/tp-platform@1.0.4/node_modules/lodash/_baseIsArguments.js","/npm/tp-platform@1.0.4/node_modules/lodash/isArguments.js","/npm/tp-platform@1.0.4/node_modules/lodash/isArray.js","/npm/tp-platform@1.0.4/node_modules/lodash/stubFalse.js","/npm/tp-platform@1.0.4/node_modules/lodash/isBuffer.js","/npm/tp-platform@1.0.4/node_modules/lodash/_baseIsTypedArray.js","/npm/tp-platform@1.0.4/node_modules/lodash/_baseUnary.js","/npm/tp-platform@1.0.4/node_modules/lodash/_nodeUtil.js","/npm/tp-platform@1.0.4/node_modules/lodash/isTypedArray.js","/npm/tp-platform@1.0.4/node_modules/lodash/_arrayLikeKeys.js","/npm/tp-platform@1.0.4/node_modules/lodash/_overArg.js","/npm/tp-platform@1.0.4/node_modules/lodash/_nativeKeys.js","/npm/tp-platform@1.0.4/node_modules/lodash/_baseKeys.js","/npm/tp-platform@1.0.4/node_modules/lodash/keys.js","/npm/tp-platform@1.0.4/node_modules/lodash/assign.js","/npm/tp-platform@1.0.4/src/lib/merge-configs.ts","/npm/tp-platform@1.0.4/src/lib/PlatformNode.ts","/npm/tp-platform@1.0.4/src/platform.ts","/npm/tp-platform@1.0.4/src/lib/dom.ts"],"names":[],"mappings":"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","file":"/npm/tp-platform@1.0.4/dist/platform.umd.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/tp-platform@1.0.4/dist/platform.umd.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict'\nimport { EventListenerOptions } from './interface'\n\n/* istanbul ignore next */\nconst NOOP = () => {\n  // empty\n}\nlet _uiEvtOpts: boolean = false\n\ntry {\n  let opts = Object.defineProperty({}, 'passive', {\n    get: /* istanbul ignore next */ () => {\n      _uiEvtOpts = true\n    }\n  })\n  window.addEventListener('optsTest', NOOP, opts)\n} catch (e) {\n  // empty\n}\n\nfunction registerListener(\n  ele: any,\n  eventName: string,\n  callback: EventListener,\n  opts: EventListenerOptions = {},\n  unRegisterListenersCollection?: Function[]\n): Function {\n  if (!ele) throw new TypeError('Function requires \"ele\" parameter!')\n  if (!eventName) throw new TypeError('Function requires \"eventName\" parameter!')\n  if (!callback) throw new TypeError('Function requires \"callback\" parameter!')\n\n  // use event listener options when supported\n  // otherwise it's just a boolean for the \"capture\" arg\n  const listenerOpts: any = _uiEvtOpts\n    ? {\n        capture: !!opts.capture,\n        passive: !!opts.passive\n      }\n    : !!opts.capture\n\n  let unReg: Function\n  if (!('addEventListener' in ele) || !('removeEventListener' in ele)) {\n    throw new Error(\n      'The current environment does not support addEventListener&removeEventListener!'\n    )\n  }\n\n  // use the native addEventListener\n  ele['addEventListener'](eventName, callback, listenerOpts)\n\n  unReg = function unregisterListener() {\n    ele['removeEventListener'](eventName, callback, listenerOpts)\n  }\n\n  if (unRegisterListenersCollection && Array.isArray(unRegisterListenersCollection)) {\n    unRegisterListenersCollection.push(unReg)\n  }\n\n  return unReg\n}\n\n;(registerListener as any)._uiEvtOpts = _uiEvtOpts\n\nexport default registerListener\n","'use strict';\n\n/**\n * @hidden\n */\nexport default class QueryParams {\n  data: { [key: string]: any } = {};\n\n  parseUrl(url: string) {\n    if (url) {\n      let startIndex = url.indexOf('?');\n      if (startIndex > -1) {\n        let queries = url.slice(startIndex + 1).split('&');\n        for (let i = 0; i < queries.length; i++) {\n          if (queries[i].indexOf('=') > 0) {\n            let split = queries[i].split('=');\n            if (split.length > 1) {\n              this.data[split[0]] = split[1].split('#')[0];\n            }\n          }\n        }\n      }\n    }\n  }\n\n  get(key: string): any {\n    return this.data[key];\n  }\n}\n","export type DocumentDirection = 'ltr' | 'rtl'\nexport type PlatformConfigs = { [key: string]: PlatformConfig }\n\n// Use type to determine uniqueness;\n// For example: 'ios' and 'android' will not co-exist at the same time\nexport enum Type {\n  BASE = 0,\n  PLATFORM = 1,\n  SYSTEM = 2,\n  BRAND = 3,\n  ENVIRONMENT = 4\n} // 指定开始, 后面递增\n\nexport interface PlatformConfig {\n  type: Type\n  initialize?: Function\n  settings?: {}\n  isMatch?: Function\n  versionParser?: Function\n}\n\nexport interface PlatformVersion {\n  str?: string\n  num?: number\n  major?: number\n  minor?: number\n  patch?: number\n}\n\nexport interface BackButtonAction {\n  fn: Function\n  priority: number\n}\n\nexport interface EventListenerOptions {\n  capture?: boolean\n  passive?: boolean\n}\n\nexport interface SDKInfo {\n  jsSDKUrl: string\n  jsSDKName: string\n  jsSDKEventName: string\n  timeout?: number\n}\n","'use strict';\n\nimport {Platform} from '../platform';\n\nexport function isMobile(plt: Platform): boolean {\n  return !isTablet(plt) && plt.isPlatformMatch('mobile', ['AppleWebKit.*Mobile.*']);\n}\n\nexport function isTablet(plt: Platform): boolean {\n  let smallest = Math.min(plt.width(), plt.height());\n  let largest = Math.max(plt.width(), plt.height());\n  const matchSize = (smallest > 460 && smallest < 1100) &&\n    (largest > 780 && largest < 1400);\n\n  const matchUa = plt.isPlatformMatch('ipad', ['ipad']);\n  return matchSize && matchUa;\n}\n\nexport function isDesktop(plt: Platform): boolean {\n  return !isMobile(plt) && !isTablet(plt) && plt.testNavigatorPlatform('win|mac|x11|linux');\n}\n\nexport function isMac(plt: Platform): boolean {\n  return plt.testNavigatorPlatform('mac') && plt.isPlatformMatch('macintosh', ['macintosh']);\n}\n\nexport function isWindows(plt: Platform): boolean {\n  return plt.isPlatformMatch('windows', ['windows', 'microsoft', 'windows phone']) || plt.testNavigatorPlatform('win');\n}\n\nexport function isLinux(plt: Platform): boolean {\n  const matchUa = plt.isPlatformMatch('linux', ['linux', 'x11'], ['android']);\n  const matchPlatform = plt.testNavigatorPlatform('x11|linux');\n  return matchUa || matchPlatform;\n}\n\nexport function isAndroid(plt: Platform): boolean {\n  return plt.isPlatformMatch('android', ['android', 'silk'], ['windows phone']);\n}\n\nexport function isCordova(plt: Platform): boolean {\n  const win: any = plt.win();\n  return !!(win['cordova'] || win['PhoneGap'] || win['phonegap']);\n}\n\nexport function isElectron(plt: Platform): boolean {\n  return plt.testUserAgent('Electron');\n}\n\nexport function isIos(plt: Platform): boolean {\n  const matchUa = plt.isPlatformMatch('ios', ['iphone', 'ipad', 'ipod'], ['windows phone']);\n  // shortcut function to be reused internally\n  // checks navigator.platform to see if it's an actual iOS device\n  // this does not use the user-agent string because it is often spoofed\n  // an actual iPad will return true, a chrome dev tools iPad will return false\n  const matchPlatform = plt.testNavigatorPlatform('iphone|ipad|ipod');\n  return matchUa || matchPlatform;\n}\n\nexport function isSafari(plt: Platform): boolean {\n  return plt.testUserAgent('Safari');\n}\n\nexport function isWKWebView(plt: Platform): boolean {\n  return isIos(plt) && !!(plt.win() as any)['webkit'];\n}\n\nexport function isIosUIWebView(plt: Platform): boolean {\n  return isIos(plt) && !isWKWebView(plt) && !isSafari(plt);\n}\n\n","'use strict'\n\nimport { Platform } from '../platform'\nimport { PlatformConfig, Type } from './interface'\nimport {\n  isAndroid,\n  isCordova,\n  isDesktop,\n  isElectron,\n  isIos,\n  isIosUIWebView,\n  isLinux,\n  isMac,\n  isMobile,\n  isTablet,\n  isWindows\n} from './platform-utils'\n\nconst PLATFORM_CONFIGS: { [key: string]: PlatformConfig } = {\n  /**\n   * core\n   */\n  core: {\n    type: Type.BASE,\n    settings: {\n      mode: 'md'\n    },\n    isMatch() {\n      return true\n    }\n  },\n\n  mobile: {\n    type: Type.PLATFORM,\n    settings: {\n      hoverCSS: false\n    },\n    isMatch(plt: Platform) {\n      return isMobile(plt)\n    }\n  },\n\n  /**\n   * tablet: 平板电脑, pad\n   */\n  tablet: {\n    type: Type.PLATFORM,\n    settings: {\n      hoverCSS: false\n    },\n    isMatch(plt: Platform) {\n      return isTablet(plt)\n    }\n  },\n\n  /**\n   * desktop: 桌面\n   */\n  desktop: {\n    type: Type.PLATFORM,\n    settings: {\n      hoverCSS: true\n    },\n    isMatch(plt: Platform) {\n      return isDesktop(plt)\n    }\n  },\n\n  /**\n   * android\n   */\n  android: {\n    type: Type.SYSTEM,\n    settings: {\n      mode: 'md',\n      autoFocusAssist: 'immediate',\n      tapPolyfill: true,\n      scrollAssist: true\n    },\n    isMatch(plt: Platform) {\n      return isAndroid(plt)\n    },\n    versionParser(plt: Platform) {\n      return plt.matchUserAgentVersion(/Android (\\d+).(\\d+)?/)\n    }\n  },\n\n  /**\n   * ios\n   */\n  ios: {\n    type: Type.SYSTEM,\n    settings: {\n      mode: 'ios',\n      autoFocusAssist: 'delay',\n      tapPolyfill: isIosUIWebView,\n      scrollAssist: false\n    },\n    isMatch(plt: Platform) {\n      return isIos(plt)\n    },\n    versionParser(plt: Platform) {\n      return plt.matchUserAgentVersion(/OS (\\d+)_(\\d+)?/)\n    }\n  },\n\n  /**\n   * Desktop: Windows\n   */\n  windows: {\n    type: Type.SYSTEM,\n    settings: {\n      mode: 'wp',\n      autoFocusAssist: 'immediate'\n    },\n    isMatch(plt: Platform): boolean {\n      return isWindows(plt)\n    }\n  },\n\n  mac: {\n    type: Type.SYSTEM,\n    isMatch(plt: Platform): boolean {\n      return isMac(plt)\n    }\n  },\n\n  /**\n   * for desktop\n   */\n  linux: {\n    type: Type.SYSTEM,\n    isMatch(plt: Platform): boolean {\n      return isLinux(plt)\n    }\n  },\n\n  /**\n   * iphone\n   */\n  iphone: {\n    type: Type.BRAND,\n    isMatch(plt: Platform) {\n      return plt.isPlatformMatch('iphone')\n    }\n  },\n\n  /**\n   * ipad\n   */\n  ipad: {\n    type: Type.BRAND,\n    settings: {\n      keyboardHeight: 500\n    },\n    isMatch(plt: Platform) {\n      return plt.isPlatformMatch('ipad')\n    }\n  },\n\n  /**\n   * cordova\n   */\n  cordova: {\n    type: Type.ENVIRONMENT,\n    initialize: /* istanbul ignore next */ function(plt: Platform) {\n      // prepare a custom \"ready\" for cordova \"deviceready\"\n      plt.prepareReady = function() {\n        plt.windowLoad(function(win: Window, doc: HTMLDocument) {\n          doc.addEventListener('deviceready', function() {\n            // cordova has fully loaded and we've added listeners\n            plt.triggerReady('cordova')\n          })\n        })\n      }\n    },\n    isMatch(plt: Platform): boolean {\n      return isCordova(plt)\n    }\n  },\n\n  /**\n   * electron\n   */\n  electron: {\n    type: Type.ENVIRONMENT,\n    initialize: /* istanbul ignore next */ function(plt: Platform) {\n      plt.prepareReady = function() {\n        plt.windowLoad(function() {\n          plt.triggerReady('electron')\n        })\n      }\n    },\n    isMatch(plt: Platform): boolean {\n      return isElectron(plt)\n    }\n  }\n}\n\nexport default PLATFORM_CONFIGS\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nmodule.exports = constant;\n","var constant = require('./constant'),\n    defineProperty = require('./_defineProperty'),\n    identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var identity = require('./identity'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var eq = require('./eq'),\n    isArrayLike = require('./isArrayLike'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","var baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var assignValue = require('./_assignValue'),\n    copyObject = require('./_copyObject'),\n    createAssigner = require('./_createAssigner'),\n    isArrayLike = require('./isArrayLike'),\n    isPrototype = require('./_isPrototype'),\n    keys = require('./keys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * function Bar() {\n *   this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n  if (isPrototype(source) || isArrayLike(source)) {\n    copyObject(source, keys(source), object);\n    return;\n  }\n  for (var key in source) {\n    if (hasOwnProperty.call(source, key)) {\n      assignValue(object, key, source[key]);\n    }\n  }\n});\n\nmodule.exports = assign;\n","'use strict';\n\nimport {PlatformConfigs} from './interface';\nimport assign from 'lodash/assign';\n\n/**\n * @name mergeConfigs\n * @description\n * Merge Parameters, and the priority is:\n * 1. Custom parameters have higher priority than the default configuration,\n *     such as `core` configuration, custom priority is higher than the default.\n * 2. In the `plt.platforms()` array, the more advanced Platform parameters,\n *     the higher the priority is, such as: core < mobile < ios < iphone < cordova.\n * 3. The plain object will use `assign` to collect params, other types of parameters will be replaced directly.\n *\n * @param {PlatformConfigs} defaultConfigs - dist configs\n * @param {PlatformConfigs} customerConfigs - customer configs\n * @return {PlatformConfigs}\n */\nexport default function mergeConfigs(defaultConfigs: PlatformConfigs, customerConfigs: PlatformConfigs): PlatformConfigs {\n  const isObject = (val: any) => typeof val === 'object';\n  const isPlainObject = (val: any) => isObject(val) && Object.getPrototypeOf(val) === Object.prototype;\n\n  if (!defaultConfigs || !customerConfigs) return {};\n  if (!isPlainObject(defaultConfigs) || !isPlainObject(customerConfigs)) return {};\n\n  let _finalConf = defaultConfigs;\n  for (let outerKey in customerConfigs) {\n    if (_finalConf[outerKey] && isObject(_finalConf[outerKey])) {\n      let _cusConf: any = customerConfigs[outerKey];\n      let _defConf: any = _finalConf[outerKey];\n      for (let innerKey in _cusConf) {\n        if (isPlainObject(_cusConf[innerKey]) && isPlainObject(_defConf[innerKey])) {\n          assign(_defConf[innerKey], _cusConf[innerKey]);\n        } else {\n          _defConf[innerKey] = _cusConf[innerKey];\n        }\n      }\n    } else {\n      _finalConf[outerKey] = customerConfigs[outerKey];\n    }\n  }\n\n  return _finalConf;\n}\n","import { Platform } from '../platform'\nimport { PlatformConfig, PlatformVersion, Type } from './interface'\nimport assign from 'lodash/assign'\n\n/**\n * @hidden\n */\nexport default class PlatformNode {\n  name: string = ''\n  type: Type = 0\n\n  private c: PlatformConfig\n\n  constructor(registry: { [name: string]: PlatformConfig }, platformName: string) {\n    this.c = registry[platformName]\n    this.name = platformName\n    this.type = this.c.type\n  }\n\n  reduceSettings(totalSettings: any): any {\n    return assign(totalSettings, this.settings())\n  }\n\n  settings() {\n    return this.c.settings || {}\n  }\n\n  isMatch(p: Platform): boolean {\n    return (this.c.isMatch && this.c.isMatch(p)) || false\n  }\n\n  initialize(plt: Platform) {\n    this.c.initialize && this.c.initialize(plt)\n  }\n\n  version(plt: Platform): PlatformVersion | null {\n    if (this.c.versionParser) {\n      const v = this.c.versionParser(plt)\n      if (v) {\n        if (!v.patch) v.patch = '0'\n        const str = v.major + '.' + v.minor + (v.patch ? '.' + v.patch : '')\n        return {\n          str: str,\n          num: parseFloat(str),\n          major: parseInt(v.major, 10),\n          minor: parseInt(v.minor, 10),\n          patch: parseInt(v.patch, 10)\n        }\n      }\n    }\n    return null\n  }\n}\n","'use strict'\n\nimport registerListener from 'tp-register-listener'\nimport { getCss } from './lib/dom'\nimport QueryParams from './lib/query-params'\nimport PLATFORM_CONFIGS from './lib/platform-registry'\nimport mergeConfigs from './lib/merge-configs'\nimport PlatformNode from './lib/PlatformNode'\nimport assign from 'lodash/assign'\n\nimport {\n  DocumentDirection,\n  PlatformConfig,\n  PlatformConfigs,\n  PlatformVersion,\n  SDKInfo,\n  Type\n} from './lib/interface'\n\nexport { mergeConfigs, PLATFORM_CONFIGS }\n\n/**\n * @class Platform\n * @description\n * The Platform service can be used to get information about your current device.\n * You can get all of the platforms associated with the device using the [platforms](#platforms)\n * method, including whether the app is being viewed from a mobile/tablet/desktop, if it's\n * on a mobile device or browser, and the exact System (iOS, Android, Windows etc).\n * You can also get the orientation of the device, if it uses right-to-left\n * language direction, and much much more. With this information you can completely\n * customize your app to fit any device.\n *\n * @example\n * ```ts\n * import { Platform } from 'tp-platform';\n *\n * const plt = new Platform({});\n * ```\n */\nexport class Platform {\n  /** @internal */\n  Css: {\n    transform?: string\n    transition?: string\n    transitionDuration?: string\n    transitionDelay?: string\n    transitionTimingFn?: string\n    transitionStart?: string\n    transitionEnd?: string\n    transformOrigin?: string\n    animationDelay?: string\n  } = {}\n\n  /** @internal */\n  _platforms: string[] = []\n  _settings: any = {}\n\n  /**\n   * Returns if this app is using right-to-left language direction or not.\n   * We recommend the app's `index.html` file already has the correct `dir`\n   * attribute value set, such as `<html dir=\"ltr\">` or `<html dir=\"rtl\">`.\n   * [W3C: Structural markup and right-to-left text in HTML](http://www.w3.org/International/questions/qa-html-dir)\n   * @returns {boolean}\n   */\n  isRTL: boolean\n\n  private _win: Window\n  private _doc: HTMLDocument\n  private _versions: { [name: string]: PlatformVersion } = {}\n  private _dir: DocumentDirection\n  private _lang: string = ''\n  private _ua: string = ''\n  private _qp = new QueryParams() // init settings\n  private _nPlt: string = ''\n  private _readyPromise: Promise<any>\n  private _readyResolve: any\n  private _readyReject: any\n  // private _bbActions: BackButtonAction[] = [];\n  private _registry: { [name: string]: PlatformConfig } = {}\n  private _core: string = ''\n  private _pW = 0\n  private _pH = 0\n  private _lW = 0\n  private _lH = 0\n  private _isPortrait: boolean | null = null\n  private _uiEvtOpts = (registerListener as any)._uiEvtOpts\n\n  constructor(platformConfigs: PlatformConfigs) {\n    const doc = document\n    const win = doc.defaultView // read-only\n    const docElement = doc.documentElement\n    const dir = docElement.dir\n    const platform = win.navigator.platform\n    const userAgent = win.navigator.userAgent\n\n    this.setCore('core')\n    this._registry = platformConfigs || {} // all platform configs\n\n    // set values from \"document\"\n    this._doc = doc\n    this._dir = dir === 'rtl' ? 'rtl' : 'ltr'\n    this.isRTL = dir === 'rtl'\n    this.setLang(docElement.lang, false)\n\n    // set css properties\n    this.setCssProps(docElement)\n\n    // set values from \"window\"\n    this._win = win\n    this.setNavigatorPlatform(platform)\n    this.setUserAgent(userAgent)\n\n    // set location values\n    this.setQueryParams(win.location.href)\n\n    // ready promise\n    this._readyPromise = new Promise((res, rej) => {\n      this._readyResolve = res\n      this._readyReject = rej\n    })\n\n    this.init()\n  }\n\n  // Methods\n  // **********************************************\n\n  /**\n   * @returns {boolean} returns true/false based on platform.\n   * @description\n   * Depending on the platform the user is on, `is(platformName)` will\n   * return `true` or `false`. Note that the same app can return `true`\n   * for more than one platform name. For example, an app running from\n   * an iPad would return `true` for the platform names: `mobile`,\n   * `ios`, `ipad`, and `tablet`. Additionally, if the app was running\n   * from Cordova then `cordova` would be true, and if it was running\n   * from a web browser on the iPad then `web` would be `true`.\n   *\n   * ```\n   * import { setupPlatform } from 'tp-platform';\n   *\n   * const plt = setupPlatform({});\n   * plt.is('ios');  // true or false\n   * ```\n   *\n   * | Type  | Type Name   | Platform Name   | Description                        |\n   * |-------|-------------|-----------------|------------------------------------|\n   * | 0     | Base        | core            | base application.                  |\n   * | 1     | Platform    | mobile          | on a mobile platform.              |\n   * | 1     | Platform    | tablet          | on a tablet platform.              |\n   * | 1     | Platform    | desktop         | on a desktop platform.             |\n   * | 2     | System      | android         | on a device running Android System.|\n   * | 2     | System      | ios             | on a device running iOS System.    |\n   * | 2     | System      | linux           | on a device running Linux System.  |\n   * | 2     | System      | windows         | on a device running Windows System.|\n   * | 2     | System      | mac             | on a device running Mac OS.        |\n   * | 3     | Brand       | ipad            | on an iPad device.                 |\n   * | 3     | Brand       | iphone          | on an iPhone device.               |\n   * | 4     | Environment | cordova         | on a hybrid environment(cordova).  |\n   * | 4     | Environment | electron        | on a hybrid environment(electron). |\n   * | 4     | Environment | web             | on an ordinary web browser.        |\n   *\n   * @param {string} platformName\n   */\n  is(platformName: string): boolean {\n    return this._platforms.indexOf(platformName) > -1\n  }\n\n  /**\n   * @returns {array} the array of platforms\n   * @description\n   * Depending on what device you are on, `platforms` can return multiple values.\n   * Each possible value is a type of platforms. For example, on an iPhone,\n   * it would return `core`, `mobile`, `ios`, and `iphone`.\n   *\n   * ```\n   * import { setupPlatform } from 'tp-platform';\n   *\n   * const plt = setupPlatform({});\n   * plt.platforms();  // ['core', 'mobile', 'ios', 'iphone'].\n   * ```\n   */\n  platforms(): Array<string> {\n    return this._platforms\n  }\n\n  /**\n   * Returns an object containing version information about all of the platforms.\n   *\n   * ```\n   * import { setupPlatform } from 'tp-platform';\n   *\n   * const plt = setupPlatform({});\n   * plt.versions();  // {ios: {str: \"10.3.0\", num: 10.3, major: 10, minor: 3, patch: 0}}.\n   * ```\n   *\n   * @returns {object} An object containing all of the platforms and their versions.\n   */\n  versions(): { [name: string]: PlatformVersion } {\n    // get all the platforms that have a valid parsed version\n    return this._versions\n  }\n\n  /**\n   * Returns a promise when the platform is ready and native functionality\n   * can be called. If the app is running from within a web browser, then\n   * the promise will resolve when the DOM is ready. When the app is running\n   * from an hybrid application such as Cordova/Electron/Weichat/Alipay,\n   * then the promise will resolve when hybrid application execute the\n   * `triggerReady` function.\n   *\n   * The resolved value is the `readySource`, which states which platform\n   * ready was used. For example, when Cordova is ready, the resolved ready\n   * source is `cordova`. The default ready source value will be `dom`. The\n   * `readySource` is useful if different logic should run depending on the\n   * platform the app is running from. For example, only Cordova can execute\n   * the status bar plugin, so the web should not run status bar plugin logic.\n   *\n   * ```\n   * import { setupPlatform } from 'tp-platform';\n   *\n   * const plt = setupPlatform({});\n   * plt.ready().then(function (readySource) {\n   *    switch (readySource) {\n   *      case 'dom':\n   *        console.log('web env');\n   *        break;\n   *      case 'cordova':\n   *        console.log('cordova env');\n   *        break;\n   *      case 'electron':\n   *        console.log('electron env');\n   *        break;\n   *      case 'alipay':\n   *        console.log('alipay env');\n   *        break;\n   *      case 'dingtalk':\n   *        console.log('dingtalk env');\n   *        break;\n   *      case 'wechat':\n   *        console.log('wechat env');\n   *        break;\n   *      default:\n   *        console.log(readySource + ' not found!');\n   *    }\n   * }, function (reason) {\n   *   console.error('ready error', reason)\n   * });\n   * ```\n   * @returns {promise}\n   */\n  ready(): Promise<string> {\n    return this._readyPromise\n  }\n\n  /**\n   * @hidden\n   * This should be triggered by the engine when the platform is\n   * ready. If there was no custom prepareReady method from the engine,\n   * such as Cordova or Electron, then it uses the default DOM ready.\n   */\n  triggerReady(readySource: string) {\n    this._readyResolve(readySource)\n  }\n\n  triggerFail(reason: string) {\n    this._readyReject(reason)\n  }\n\n  /**\n   * @hidden\n   * This is the default prepareReady if it's not replaced by an hybrid app,\n   * such as Cordova or Electron. If there was no custom prepareReady\n   * method from an engine then it uses the method below, which triggers\n   * the platform ready on the DOM ready event, and the default resolved\n   * value is `dom`.\n   */\n  prepareReady() {\n    const self = this\n    /* istanbul ignore else */\n    if (self._doc.readyState === 'complete' || self._doc.readyState === 'interactive') {\n      self.triggerReady('dom')\n    } else {\n      self._doc.addEventListener('DOMContentLoaded', completed, false)\n      self._win.addEventListener('load', completed, false)\n    }\n\n    /* istanbul ignore next */\n    function completed() {\n      self._doc.removeEventListener('DOMContentLoaded', completed, false)\n      self._win.removeEventListener('load', completed, false)\n      self.triggerReady('dom')\n    }\n  }\n\n  /**\n   * Set the app's language direction, which will update the `dir` attribute\n   * on the app's root `<html>` element. We recommend the app's `index.html`\n   * file already has the correct `dir` attribute value set, such as\n   * `<html dir=\"ltr\">` or `<html dir=\"rtl\">`. This method is useful if the\n   * direction needs to be dynamically changed per user/session.\n   * [W3C: Structural markup and right-to-left text in HTML](http://www.w3.org/International/questions/qa-html-dir)\n   * @param {DocumentDirection} dir  Examples: `rtl`, `ltr`\n   * @param {boolean} updateDocument\n   */\n  setDir(dir: DocumentDirection, updateDocument: boolean) {\n    this._dir = dir\n    this.isRTL = dir === 'rtl'\n\n    if (updateDocument !== false) {\n      this._doc['documentElement'].setAttribute('dir', dir)\n    }\n  }\n\n  /**\n   * Returns app's language direction.\n   * We recommend the app's `index.html` file already has the correct `dir`\n   * attribute value set, such as `<html dir=\"ltr\">` or `<html dir=\"rtl\">`.\n   * [W3C: Structural markup and right-to-left text in HTML](http://www.w3.org/International/questions/qa-html-dir)\n   * @returns {DocumentDirection}\n   */\n  dir(): DocumentDirection {\n    return this._dir\n  }\n\n  /**\n   * Set the app's language and optionally the country code, which will update\n   * the `lang` attribute on the app's root `<html>` element.\n   * We recommend the app's `index.html` file already has the correct `lang`\n   * attribute value set, such as `<html lang=\"en\">`. This method is useful if\n   * the language needs to be dynamically changed per user/session.\n   * [W3C: Declaring language in HTML](http://www.w3.org/International/questions/qa-html-language-declarations)\n   * @param {string} language  Examples: `en-US`, `en-GB`, `ar`, `de`, `zh`, `es-MX`\n   * @param {boolean} updateDocument  Specifies whether the `lang` attribute of `<html>` should be updated\n   */\n  setLang(language: string, updateDocument: boolean) {\n    this._lang = language\n    if (updateDocument !== false) {\n      this._doc['documentElement'].setAttribute('lang', language)\n    }\n  }\n\n  /**\n   * Returns app's language and optional country code.\n   * We recommend the app's `index.html` file already has the correct `lang`\n   * attribute value set, such as `<html lang=\"en\">`.\n   * [W3C: Declaring language in HTML](http://www.w3.org/International/questions/qa-html-language-declarations)\n   * @returns {string}\n   */\n  lang(): string {\n    return this._lang\n  }\n\n  // Getter/Setter Methods\n  // **********************************************\n\n  /**\n   * @hidden\n   */\n  win() {\n    return this._win\n  }\n\n  /**\n   * @hidden\n   */\n  setWindow(win: Window) {\n    this._win = win\n  }\n\n  /**\n   * @hidden\n   */\n  doc() {\n    return this._doc\n  }\n\n  /**\n   * @hidden\n   */\n  setDocument(doc: HTMLDocument) {\n    this._doc = doc\n  }\n\n  /**\n   * @hidden\n   */\n  setCssProps(docElement: HTMLElement) {\n    this.Css = getCss(docElement)\n  }\n\n  /**\n   * Get the final configuration for the matching platform.\n   */\n  settings(): any {\n    return this._settings\n  }\n\n  /**\n   * @hidden\n   */\n  userAgent(): string {\n    return this._ua || ''\n  }\n\n  /**\n   * @hidden\n   */\n  setUserAgent(userAgent: string) {\n    this._ua = userAgent\n  }\n\n  /**\n   * @hidden\n   */\n  setQueryParams(url: string) {\n    this._qp.parseUrl(url)\n  }\n\n  /**\n   * Get the query string parameter\n   */\n  getQueryParam(key: string) {\n    return this._qp.get(key)\n  }\n\n  /**\n   * 获取带有私有前缀的url参数对象\n   * @private\n   */\n  getQueryData() {\n    const _raw = this._qp.data\n    const _res: any = {}\n    for (let keyName in _raw) {\n      let _testValue = decodeURIComponent(_raw[keyName])\n\n      if (/^vm/.test(keyName)) {\n        let _newKey = keyName.replace('vm', '')\n        let _tmpArr = _newKey.split('')\n        _tmpArr[0] = _tmpArr[0].toLowerCase()\n        _newKey = _tmpArr.join('')\n\n        if (_testValue === 'false') {\n          _res[_newKey] = false\n        } else if (_testValue === 'true') {\n          _res[_newKey] = true\n        } else if (parseInt(_testValue, 10).toString() === _testValue) {\n          // just for int\n          _res[_newKey] = parseInt(_testValue, 10)\n        } else {\n          // others\n          _res[_newKey] = _testValue\n        }\n      } else {\n        _res[keyName] = _testValue\n      }\n    }\n    return _res\n  }\n\n  /**\n   * Get the current url.\n   */\n  url() {\n    return this._win['location']['href']\n  }\n\n  /**\n   * @hidden\n   */\n  navigatorPlatform(): string {\n    return this._nPlt || ''\n  }\n\n  /**\n   * @hidden\n   */\n  setNavigatorPlatform(navigatorPlt: string) {\n    this._nPlt = navigatorPlt\n  }\n\n  /**\n   * Gets the width of the platform's viewport using `window.innerWidth`.\n   * Using this method is preferred since the dimension is a cached value,\n   * which reduces the chance of multiple and expensive DOM reads.\n   */\n  width(): number {\n    this._calcDim()\n    return this._isPortrait ? this._pW : this._lW\n  }\n\n  /**\n   * Gets the height of the platform's viewport using `window.innerHeight`.\n   * Using this method is preferred since the dimension is a cached value,\n   * which reduces the chance of multiple and expensive DOM reads.\n   */\n  height(): number {\n    this._calcDim()\n    return this._isPortrait ? this._pH : this._lH\n  }\n\n  /**\n   * Returns `true` if the app is in portait mode.\n   */\n  isPortrait(): boolean {\n    this._calcDim()\n    return this._isPortrait as boolean\n  }\n\n  /**\n   * Returns `true` if the app is in landscape mode.\n   */\n  isLandscape(): boolean {\n    return !this.isPortrait()\n  }\n\n  /**\n   * @hidden\n   */\n  windowLoad(callback: Function) {\n    const win = this._win\n    const doc = this._doc\n    let unreg: Function\n\n    /* istanbul ignore else */\n    if (doc.readyState === 'complete') {\n      callback(win, doc)\n    } else {\n      unreg = registerListener(\n        win,\n        'load',\n        () => {\n          unreg && unreg()\n          callback(win, doc)\n        },\n        {}\n      )\n    }\n  }\n\n  // Platform Registry\n  // **********************************************\n\n  /**\n   * @hidden\n   */\n  setPlatformConfigs(platformConfigs: PlatformConfigs) {\n    this._registry = platformConfigs || {}\n  }\n\n  /**\n   * @hidden\n   */\n  getPlatformConfig(platformName: string): PlatformConfig {\n    return this._registry[platformName] || {}\n  }\n\n  /**\n   * @hidden\n   */\n  registry() {\n    return this._registry\n  }\n\n  /**\n   * @hidden\n   */\n  setCore(platformName: string) {\n    this._core = platformName\n  }\n\n  /**\n   * @hidden\n   * separate by ';'\n   * @example core;ios;iphone -> ios\n   */\n  testQuery(queryValue: string, queryTestValue: string): boolean {\n    const valueSplit = queryValue.toLowerCase().split(';')\n    return valueSplit.indexOf(queryTestValue) > -1\n  }\n\n  /**\n   * @hidden\n   */\n  testNavigatorPlatform(navigatorPlatformExpression: string): boolean {\n    const rgx = new RegExp(navigatorPlatformExpression, 'i')\n    return rgx.test(this._nPlt)\n  }\n\n  /**\n   * @hidden\n   */\n  matchUserAgentVersion(userAgentExpression: RegExp): any {\n    if (this._ua && userAgentExpression) {\n      const val = this._ua.match(userAgentExpression)\n      if (val) {\n        return {\n          major: val[1],\n          minor: val[2],\n          patch: val[3]\n        }\n      }\n    }\n  }\n\n  testUserAgent(expression: string): boolean {\n    if (this._ua) {\n      const rgx = new RegExp(expression, 'i')\n      return rgx.test(this._ua)\n    }\n    return false\n  }\n\n  /**\n   * @hidden\n   */\n  isPlatformMatch(\n    queryStringName: string,\n    userAgentAtLeastHas?: string[],\n    userAgentMustNotHave: string[] = []\n  ): boolean {\n    const queryValue = this.getQueryParam('platform')\n    if (queryValue) {\n      return this.testQuery(queryValue, queryStringName)\n    }\n\n    userAgentAtLeastHas = userAgentAtLeastHas || [queryStringName]\n\n    for (let i = 0; i < userAgentAtLeastHas.length; i++) {\n      if (this.testUserAgent(userAgentAtLeastHas[i])) {\n        for (let j = 0; j < userAgentMustNotHave.length; j++) {\n          if (this.testUserAgent(userAgentMustNotHave[j])) {\n            return false\n          }\n        }\n        return true\n      }\n    }\n\n    return false\n  }\n\n  /* istanbul ignore next */\n  /**\n   * @hidden\n   */\n  loadScript(url: string, cb: Function) {\n    const _head: HTMLHeadElement = this.doc().getElementsByTagName('head')[0]\n    const _script: HTMLScriptElement = this.doc().createElement('script')\n    const startTime = new Date().getTime()\n    _script.setAttribute('type', 'text/javascript')\n    _script.setAttribute('src', url)\n    _head.appendChild(_script)\n    _script.onload = function() {\n      console.debug(`Script \"${url}\" loaded in ${new Date().getTime() - startTime}ms!`)\n      /* istanbul ignore next */\n      cb && cb.call(null)\n    }\n  }\n\n  /* istanbul ignore next */\n  /**\n   * @hidden\n   */\n  loadJsSDK(sdkInfo: SDKInfo, successCallback: Function, errorCallback: Function): void {\n    const { jsSDKUrl, jsSDKName, jsSDKEventName, timeout = 10000 } = sdkInfo\n\n    if (!jsSDKName) {\n      errorCallback(`Please input the name of JSSDK!`)\n      return\n    }\n    if (!jsSDKUrl) {\n      errorCallback(`JSSDK ${jsSDKName} loaded without jsSDKUrl params!`)\n      return\n    }\n    if (!jsSDKEventName) {\n      errorCallback(`JSSDK ${jsSDKName} loaded without jsSDKEventName params!`)\n      return\n    }\n\n    const win: any = this.win()\n    let timer = window.setTimeout(() => {\n      errorCallback(`JSSDK ${jsSDKName} loaded timeout!`)\n    }, timeout)\n\n    if (win[jsSDKName] !== undefined) {\n      successCallback(`JSSDK ${jsSDKName} already loaded!`)\n      timer && window.clearTimeout(timer)\n    } else {\n      this.loadScript(jsSDKUrl, () => {\n        function beforeBridgeReady() {\n          // 解除绑定\n          if (document.removeEventListener) {\n            document.removeEventListener(jsSDKEventName, beforeBridgeReady)\n          }\n\n          successCallback(`JSSDK ${jsSDKName} loaded by JsSDKLoader!`)\n          timer && window.clearTimeout(timer)\n        }\n\n        if (win[jsSDKName] === undefined) {\n          if (document.addEventListener) {\n            document.addEventListener(jsSDKEventName, beforeBridgeReady, false)\n          }\n        } else {\n          beforeBridgeReady()\n        }\n      })\n    }\n  }\n\n  /**\n   * @hidden\n   */\n  init() {\n    // 1. resize event init\n    this._initEvents()\n\n    let _platforms: { [key: string]: PlatformNode } = {}\n    this._platforms = []\n    this._versions = {}\n    this._settings = {}\n\n    for (let name in this._registry) {\n      let _tmp: PlatformNode = new PlatformNode(this._registry, name)\n\n      /* istanbul ignore if */\n      if (_tmp.type === undefined) {\n        console.warn('Each platform environment needs to pass in the specified \"type\" attribute')\n      }\n\n      if (_platforms[_tmp.type]) continue\n\n      if (_tmp.isMatch(this)) {\n        _platforms[_tmp.type] = _tmp\n        _platforms[_tmp.type].name = name\n      }\n    }\n\n    for (let name in _platforms) {\n      // 2. this._platforms\n      let _tmp: PlatformNode = _platforms[name]\n      this._platforms.push(_tmp.name)\n\n      // 3. this._versions\n      const version = _tmp.version(this)\n      if (version) {\n        this._versions[_tmp.name] = version\n      }\n\n      // 4. reduce settings\n      _tmp.reduceSettings(this._settings)\n\n      assign(this._settings, this.getQueryData())\n\n      // 5. initialize\n      _tmp.initialize(this)\n    }\n\n    // when normal web\n    if (Object.keys(_platforms).indexOf(`${Type.ENVIRONMENT}`) === -1) {\n      this._platforms.push('web')\n    }\n\n    // 6. prepareReady\n    this.prepareReady()\n  }\n\n  private _initEvents() {\n    // add the window resize event listener XXms after\n    /* istanbul ignore next */\n    window.setTimeout(() => {\n      let timerId: number\n      registerListener(\n        this._win,\n        'resize',\n        () => {\n          window.clearTimeout(timerId)\n          timerId = window.setTimeout(() => {\n            this._isPortrait = null\n            // TODO: resize\n            // this.resize.emit();\n          }, 200)\n        },\n        { passive: true }\n      )\n    }, 2000)\n  }\n\n  private _calcDim() {\n    if (\n      this._isPortrait === null ||\n      (this._isPortrait === false && this._win['innerWidth'] < this._win['innerHeight'])\n    ) {\n      let win = this._win\n      let innerWidth = win.screen.width\n      let innerHeight = win.screen.height\n      if (innerWidth > 0 && innerHeight > 0) {\n        /* istanbul ignore next  */\n        if (innerWidth < innerHeight) {\n          this._isPortrait = true\n          this._pW = innerWidth\n          this._pH = innerHeight\n        } else {\n          // the device is in landscape\n          this._isPortrait = false\n          this._lW = innerWidth\n          this._lH = innerHeight\n        }\n      }\n    }\n  }\n}\n\n/**\n * @name setupPlatform\n * @description\n * Setup platform with default platform configs.\n *\n * @param {PlatformConfigs} platformConfigs\n * @return {Platform}\n */\nexport function setupPlatform(platformConfigs: PlatformConfigs): Platform {\n  const _finalConf = mergeConfigs(PLATFORM_CONFIGS, platformConfigs)\n  return new Platform(_finalConf)\n}\n","'use strict'\n\nexport function getCss(docEle: HTMLElement) {\n  const css: {\n    transform?: string\n    transition?: string\n    transitionDuration?: string\n    transitionDelay?: string\n    transitionTimingFn?: string\n    transitionStart?: string\n    transitionEnd?: string\n    transformOrigin?: string\n    animationDelay?: string\n  } = {}\n\n  // transform\n  let i: number\n  let keys = ['webkitTransform', '-webkit-transform', 'webkit-transform', 'transform']\n\n  for (i = 0; i < keys.length; i++) {\n    if ((docEle.style as any)[keys[i]] !== undefined) {\n      css.transform = keys[i]\n      break\n    }\n  }\n\n  // transition\n  keys = ['webkitTransition', 'transition']\n  for (i = 0; i < keys.length; i++) {\n    if ((docEle.style as any)[keys[i]] !== undefined) {\n      css.transition = keys[i]\n      break\n    }\n  }\n\n  // The only prefix we care about is webkit for transitions.\n  if (css.transition) {\n    let isWebkit = css.transition.indexOf('webkit') > -1\n\n    // transition duration\n    css.transitionDuration = (isWebkit ? '-webkit-' : '') + 'transition-duration'\n\n    // transition timing function\n    css.transitionTimingFn = (isWebkit ? '-webkit-' : '') + 'transition-timing-function'\n\n    // transition delay\n    css.transitionDelay = (isWebkit ? '-webkit-' : '') + 'transition-delay'\n\n    // To be sure transitionend works everywhere, include *both* the webkit and non-webkit events\n    css.transitionEnd = (isWebkit ? 'webkitTransitionEnd ' : '') + 'transitionend'\n\n    // transform origin\n    css.transformOrigin = (isWebkit ? '-webkit-' : '') + 'transform-origin'\n\n    // animation delay\n    css.animationDelay = isWebkit ? 'webkitAnimationDelay' : 'animationDelay'\n  }\n\n  return css\n}\n\nexport const NON_TEXT_INPUT_REGEX = /^(radio|checkbox|range|file|submit|reset|color|image|button)$/i\n"]}