{"version":3,"file":"index.full.min.mjs","sources":["../../../packages/utils/config.ts","../../../packages/fx-front-framework/version.ts","../../../packages/fx-front-framework/make-installer.ts","../../../packages/utils/constants.ts","../../../packages/utils/with-install.ts","../../../node_modules/.pnpm/hongluan-hooks@1.2.1_vue@3.3.7/node_modules/hongluan-hooks/dist/es/use-echart/index.mjs","../../../node_modules/.pnpm/hongluan-hooks@1.2.1_vue@3.3.7/node_modules/hongluan-hooks/dist/es/use-hovering/index.mjs","../../../node_modules/.pnpm/hongluan-hooks@1.2.1_vue@3.3.7/node_modules/hongluan-hooks/dist/es/use-scroll-echart/index.mjs","../../../node_modules/.pnpm/hongluan-hooks@1.2.1_vue@3.3.7/node_modules/hongluan-hooks/dist/es/use-table-selection/index.mjs","../../../node_modules/.pnpm/hongluan-hooks@1.2.1_vue@3.3.7/node_modules/hongluan-hooks/dist/es/use-pagination/index.mjs","../../../node_modules/.pnpm/@hongluan-ui+icons@1.4.14/node_modules/@hongluan-ui/icons/dist/es/_virtual/plugin-vue_export-helper.mjs","../../../node_modules/.pnpm/@hongluan-ui+icons@1.4.14/node_modules/@hongluan-ui/icons/dist/es/twotones/Close.mjs","../../../node_modules/.pnpm/@hongluan-ui+icons@1.4.14/node_modules/@hongluan-ui/icons/dist/es/twotones/Filter.mjs","../../../node_modules/.pnpm/@hongluan-ui+icons@1.4.14/node_modules/@hongluan-ui/icons/dist/es/twotones/Upload.mjs","../../../node_modules/.pnpm/@hongluan-ui+icons@1.4.14/node_modules/@hongluan-ui/icons/dist/es/fill/Maximize2.mjs","../../../node_modules/.pnpm/@hongluan-ui+icons@1.4.14/node_modules/@hongluan-ui/icons/dist/es/fill/Minimize2.mjs","../../../build/plugin-vue:export-helper","../../../packages/components/page-table/src/page-table.vue","../../../packages/components/page-table/index.ts","../../../packages/components/page-table-v2/src/table-search.tsx","../../../packages/components/page-table-v2/src/utils.ts","../../../packages/components/page-table-v2/src/table-search-wrapper.vue","../../../packages/components/page-table-v2/src/search-tag.vue","../../../packages/components/page-table-v2/src/search-items.vue","../../../packages/components/page-table-v2/src/total-info.vue","../../../packages/components/page-table-v2/src/dropdown-button.vue","../../../packages/components/page-table-v2/src/empty-image.vue","../../../packages/components/page-table-v2/src/page-table-v2.vue","../../../packages/components/page-table-v2/index.ts","../../../packages/utils/echarts.ts","../../../packages/utils/loading.ts","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/helpers/bind.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/utils.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/helpers/buildURL.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/core/InterceptorManager.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/helpers/normalizeHeaderName.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/core/enhanceError.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/core/createError.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/core/settle.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/helpers/cookies.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/helpers/isAbsoluteURL.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/helpers/combineURLs.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/core/buildFullPath.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/helpers/parseHeaders.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/helpers/isURLSameOrigin.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/cancel/Cancel.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/adapters/xhr.js","../../../node_modules/.pnpm/follow-redirects@1.15.3/node_modules/follow-redirects/debug.js","../../../node_modules/.pnpm/follow-redirects@1.15.3/node_modules/follow-redirects/index.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/env/data.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/adapters/http.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/defaults.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/core/transformData.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/cancel/isCancel.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/core/dispatchRequest.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/core/mergeConfig.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/helpers/validator.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/core/Axios.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/cancel/CancelToken.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/helpers/spread.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/helpers/isAxiosError.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/lib/axios.js","../../../node_modules/.pnpm/axios@0.24.0/node_modules/axios/index.js","../../../node_modules/.pnpm/has-symbols@1.0.3/node_modules/has-symbols/shams.js","../../../node_modules/.pnpm/has-symbols@1.0.3/node_modules/has-symbols/index.js","../../../node_modules/.pnpm/has-proto@1.0.1/node_modules/has-proto/index.js","../../../node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/implementation.js","../../../node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/index.js","../../../node_modules/.pnpm/hasown@2.0.0/node_modules/hasown/index.js","../../../node_modules/.pnpm/get-intrinsic@1.2.2/node_modules/get-intrinsic/index.js","../../../node_modules/.pnpm/has-property-descriptors@1.0.1/node_modules/has-property-descriptors/index.js","../../../node_modules/.pnpm/gopd@1.0.1/node_modules/gopd/index.js","../../../node_modules/.pnpm/define-data-property@1.1.1/node_modules/define-data-property/index.js","../../../node_modules/.pnpm/set-function-length@1.1.1/node_modules/set-function-length/index.js","../../../node_modules/.pnpm/call-bind@1.0.5/node_modules/call-bind/index.js","../../../node_modules/.pnpm/call-bind@1.0.5/node_modules/call-bind/callBound.js","../../../node_modules/.pnpm/object-inspect@1.13.1/node_modules/object-inspect/util.inspect.js","../../../node_modules/.pnpm/object-inspect@1.13.1/node_modules/object-inspect/index.js","../../../node_modules/.pnpm/side-channel@1.0.4/node_modules/side-channel/index.js","../../../node_modules/.pnpm/qs@6.11.2/node_modules/qs/lib/formats.js","../../../node_modules/.pnpm/qs@6.11.2/node_modules/qs/lib/utils.js","../../../node_modules/.pnpm/qs@6.11.2/node_modules/qs/lib/stringify.js","../../../node_modules/.pnpm/qs@6.11.2/node_modules/qs/lib/parse.js","../../../node_modules/.pnpm/qs@6.11.2/node_modules/qs/lib/index.js","../../../node_modules/.pnpm/fx-front-ucenter@1.1.0_de4e7c96aefb041da606d07d0a07cc4d/node_modules/fx-front-ucenter/dist/es/apis/configApi.mjs","../../../node_modules/.pnpm/fx-front-ucenter@1.1.0_de4e7c96aefb041da606d07d0a07cc4d/node_modules/fx-front-ucenter/dist/es/apis/fetchApi.mjs","../../../node_modules/.pnpm/fx-front-utils@1.1.2_6642b7861972267505b84404bea3dcf2/node_modules/fx-front-utils/dist/es/cache.mjs","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_freeGlobal.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Symbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getRawTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_objectToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObjectLike.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSymbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/identity.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isFunction.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_coreJsData.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isMasked.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toSource.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNative.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getNative.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_WeakMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseCreate.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_apply.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_shortOut.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/constant.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_defineProperty.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSetToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEach.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/eq.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overRest.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseRest.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isLength.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLike.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIterateeCall.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createAssigner.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isPrototype.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTimes.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsArguments.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArguments.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubFalse.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isBuffer.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnary.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nodeUtil.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayLikeKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overArg.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKey.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeCreate.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Hash.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assocIndexOf.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_ListCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Map.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKeyable.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getMapData.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_MapCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/memoize.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_memoizeCapped.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stringToPath.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castPath.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toKey.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayPush.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isFlattenable.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFlatten.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flatten.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_flatRest.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getPrototype.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isPlainObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSlice.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Stack.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssign.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneBuffer.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayFilter.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbols.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbols.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbolsIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbolsIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetAllKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_DataView.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Promise.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Set.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Uint8Array.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneArrayBuffer.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneDataView.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneRegExp.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneSymbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneByTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseClone.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createBaseFor.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFor.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseForOwn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignMergeValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLikeObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_safeGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toPlainObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMergeDeep.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMerge.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/last.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castFunction.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forOwn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_parent.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isEmpty.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/merge.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnset.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_customOmitClone.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/omit.js","../../../node_modules/.pnpm/fx-front-ucenter@1.1.0_de4e7c96aefb041da606d07d0a07cc4d/node_modules/fx-front-ucenter/dist/es/apis/configHttp.mjs","../../../node_modules/.pnpm/fx-front-ucenter@1.1.0_de4e7c96aefb041da606d07d0a07cc4d/node_modules/fx-front-ucenter/dist/es/apis/modules/UserApi.mjs","../../../node_modules/.pnpm/vue-router@4.2.5_vue@3.3.7/node_modules/vue-router/dist/vue-router.mjs","../../../node_modules/.pnpm/fx-front-ucenter@1.1.0_de4e7c96aefb041da606d07d0a07cc4d/node_modules/fx-front-ucenter/dist/es/hooks/use-user.mjs","../../../node_modules/.pnpm/fx-front-ucenter@1.1.0_de4e7c96aefb041da606d07d0a07cc4d/node_modules/fx-front-ucenter/dist/es/router/token-hook.mjs","../../../packages/utils/request/fx-axios.ts","../../../node_modules/.pnpm/fx-front-utils@1.1.3_6642b7861972267505b84404bea3dcf2/node_modules/fx-front-utils/dist/es/cache.mjs","../../../node_modules/.pnpm/fx-front-utils@1.1.3_6642b7861972267505b84404bea3dcf2/node_modules/fx-front-utils/dist/es/format-empty.mjs","../../../node_modules/.pnpm/fx-front-utils@1.1.3_6642b7861972267505b84404bea3dcf2/node_modules/fx-front-utils/dist/es/utils.mjs","../../../packages/utils/request/request.ts","../../../packages/utils/request/mapper-helper.ts","../../../node_modules/.pnpm/hel-micro-core-wujie@4.8.5/node_modules/hel-micro-core-wujie/es/index.js","../../../node_modules/.pnpm/hel-html-parser@1.1.2/node_modules/hel-html-parser/es/index.js","../../../node_modules/.pnpm/hel-micro-wujie@4.8.10/node_modules/hel-micro-wujie/es/index.js","../../../node_modules/.pnpm/@vueuse+shared@9.13.0_vue@3.3.7/node_modules/@vueuse/shared/index.mjs","../../../packages/utils/hel-loader.ts","../../../packages/components/file-upload/src/file-upload.vue","../../../packages/components/file-upload/index.ts","../../../packages/components/page-detail/src/page-detail.vue","../../../packages/components/page-detail/index.ts","../../../packages/components/anim-page/src/index.vue","../../../packages/components/anim-page/index.ts","../../../packages/components/action-button/src/action-button.vue","../../../packages/components/action-button/index.ts","../../../packages/components/search-bar/src/search-bar.vue","../../../packages/components/search-bar/index.ts","../../../packages/components/tabs/src/tabs.vue","../../../packages/components/tabs/index.ts","../../../packages/components/visualized/panel/src/index.vue","../../../packages/components/visualized/panel/index.ts","../../../packages/components/visualized/modal/src/index.vue","../../../packages/components/visualized/modal/index.ts","../../../packages/hooks/use-render-chart/index.ts","../../../packages/hooks/use-global-config/index.ts","../../../packages/hooks/use-max-screen/index.ts","../../../packages/hooks/use-text-timer/index.ts","../../../packages/hooks/use-responsive-chart/index.ts","../../../packages/hooks/use-page-config/index.ts","../../../packages/hooks/use-previewer/index.ts","../../../packages/hooks/use-iframe/index.ts","../../../packages/components/visualized/charts/column-chart/src/index.vue","../../../packages/components/visualized/charts/column-chart/index.ts","../../../packages/components/visualized/charts/spire-column-chart/src/index.vue","../../../packages/components/visualized/charts/spire-column-chart/index.ts","../../../packages/components/visualized/charts/pie-chart/src/index.vue","../../../packages/components/visualized/charts/pie-chart/index.ts","../../../packages/components/visualized/charts/rose-pie-chart/src/index.vue","../../../packages/components/visualized/charts/rose-pie-chart/index.ts","../../../packages/components/visualized/charts/scrolling-bar-chart/src/index.vue","../../../packages/components/visualized/charts/scrolling-bar-chart/index.ts","../../../packages/components/visualized/charts/scrolling-list-chart/src/index.vue","../../../packages/components/visualized/charts/scrolling-list-chart/index.ts","../../../packages/components/visualized/charts/pyramid-chart/src/index.vue","../../../packages/components/visualized/charts/pyramid-chart/index.ts","../../../packages/components/visualized/charts/line-chart/src/index.vue","../../../packages/components/visualized/charts/line-chart/index.ts","../../../packages/components/visualized/charts/stacked-bar-chart/src/index.vue","../../../packages/components/visualized/charts/stacked-bar-chart/index.ts","../../../packages/components/visualized/charts/proportion-pie-chart/src/index.vue","../../../packages/components/visualized/charts/proportion-pie-chart/index.ts","../../../packages/fx-front-framework/component.ts","../../../packages/fx-front-framework/plugin.ts","../../../packages/fx-front-framework/defaults.ts","../../../packages/directives/focus/index.ts","../../../packages/fx-front-framework/index.ts"],"sourcesContent":["\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface InstallOptions {\n  visualized?: {\n    basicPX: number\n  }\n}\n\nlet $FX = {} as InstallOptions\n\nconst setConfig = (option: InstallOptions): void => {\n  $FX = option\n}\n\nconst getConfig = (key: keyof InstallOptions): unknown => {\n  return $FX[key]\n}\n\nconst getAllConfig = (): InstallOptions => {\n  return $FX\n}\n\nexport {\n  getConfig,\n  getAllConfig,\n  setConfig,\n}\n","export const version = '1.7.12'","import { setConfig } from '@fx-front-framework/utils/config'\nimport { version } from './version'\n\nimport type { App, Plugin } from 'vue'\nimport type { InstallOptions } from '@fx-front-framework/utils/config'\n\nconst makeInstaller = (components: Plugin[] = []) => {\n  const apps: App[] = []\n\n  const install = (app: App, opts: InstallOptions) => {\n    const defaultInstallOpt: InstallOptions = {\n      visualized: {\n        basicPX: 1,\n      },\n    }\n\n    const option = Object.assign(defaultInstallOpt, opts)\n    if (apps.includes(app)) return\n    apps.push(app)\n\n    components.forEach(c => {\n      app.use(c)\n    })\n\n    app.config.globalProperties.$FX = option\n    // app.provide() ? is this better? I think its not that flexible but worth implement\n    setConfig(option)\n  }\n\n  return {\n    version,\n    install,\n  }\n}\n\nexport default makeInstaller\n","/**\n * 系统常量\n */\nexport const PREFIX = 'Fx'\n\nconst Constants = {\n  // 风险等级配色\n  RISK_LEVEL_COLOR: {\n    LEVEL1_COLOR: 'rgba(253, 97, 97, 1)',\n    LEVEL1_BG_COLOR: 'rgba(253, 97, 97, 0.24)',\n    LEVEL2_COLOR: 'rgba(253, 137, 47, 1)',\n    LEVEL2_BG_COLOR: 'rgba(253, 137, 47, 0.24)',\n    LEVEL3_COLOR: 'rgba(255, 234, 68, 1)',\n    LEVEL3_BG_COLOR: 'rgba(255, 234, 68, 0.24)',\n    LEVEL4_COLOR: 'rgba(0, 158, 247, 1)',\n    LEVEL4_BG_COLOR: 'rgba(0, 158, 247, 0.24)',\n  },\n}\n\nexport { Constants }\n","import { PREFIX } from './constants'\n\nimport type { SFCWithInstall } from './types'\n\nexport const withInstall = <T, E extends Record<string, any>>(\n  main: T,\n  extra?: E,\n) => {\n  (main as SFCWithInstall<T>).install = (app): void => {\n    for (const comp of [main, ...Object.values(extra ?? {})]) {\n      app.component(PREFIX + comp.name, comp)\n    }\n  }\n\n  if (extra) {\n    for (const [key, comp] of Object.entries(extra)) {\n      (main as any)[key] = comp\n    }\n  }\n  return main as SFCWithInstall<T> & E\n}\n\n\nexport const withInstallFunction = <T>(fn: T, name: string) => {\n  (fn as SFCWithInstall<T>).install = app => {\n    app.config.globalProperties[name] = fn\n  }\n\n  return fn as SFCWithInstall<T>\n}\n\nexport const withNoopInstall = <T>(component: T) => {\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  (component as SFCWithInstall<T>).install = () => {}\n\n  return component as SFCWithInstall<T>\n}\n\n","import { shallowRef, ref, onMounted, onBeforeUnmount } from \"vue\";\nimport * as echarts from \"echarts/core\";\nfunction useEChart() {\n  const chartObj = shallowRef();\n  const chartContainer = ref();\n  const setChartOption = (chartOption) => {\n    var _a;\n    (_a = chartObj.value) == null ? void 0 : _a.setOption(chartOption);\n  };\n  const resizeChart = () => {\n    var _a;\n    (_a = chartObj.value) == null ? void 0 : _a.resize();\n  };\n  const clearChart = () => {\n    var _a;\n    (_a = chartObj.value) == null ? void 0 : _a.clear();\n  };\n  const getChartRect = () => {\n    var _a, _b;\n    return {\n      width: (_a = chartObj.value) == null ? void 0 : _a.getWidth(),\n      height: (_b = chartObj.value) == null ? void 0 : _b.getHeight()\n    };\n  };\n  const addChartEvent = (name, callback) => {\n    var _a;\n    (_a = chartObj.value) == null ? void 0 : _a.on(name, callback);\n    return () => {\n      var _a2;\n      (_a2 = chartObj.value) == null ? void 0 : _a2.off(name, callback);\n    };\n  };\n  const dispatchAction = (payload) => {\n    var _a;\n    (_a = chartObj.value) == null ? void 0 : _a.dispatchAction(payload);\n  };\n  onMounted(() => {\n    chartObj.value = echarts.init(chartContainer.value);\n    window.addEventListener(\"resize\", resizeChart);\n  });\n  onBeforeUnmount(() => {\n    window.removeEventListener(\"resize\", resizeChart);\n  });\n  return {\n    setChartOption,\n    resizeChart,\n    clearChart,\n    getChartRect,\n    addChartEvent,\n    chartContainer,\n    dispatchAction\n  };\n}\nexport { useEChart };\n","import { ref, onUnmounted } from \"vue\";\nconst DEFAULT_HOVERING_ID = \"$_id_$\";\nfunction useHovering(deplay = 100) {\n  const isHoveringData = ref({});\n  let isHoveringHanlder = {};\n  const enter = (id = DEFAULT_HOVERING_ID) => {\n    isHoveringHanlder[id] && window.clearTimeout(isHoveringHanlder[id]);\n    isHoveringData.value[id] = true;\n  };\n  const leave = (id = DEFAULT_HOVERING_ID) => {\n    isHoveringHanlder[id] = window.setTimeout(() => {\n      isHoveringData.value[id] = false;\n    }, deplay);\n  };\n  const isHovering = (id = DEFAULT_HOVERING_ID) => {\n    return isHoveringData.value[id];\n  };\n  onUnmounted(() => {\n    isHoveringData.value = {};\n    isHoveringHanlder = {};\n  });\n  return {\n    enter,\n    leave,\n    isHovering\n  };\n}\nexport { useHovering };\n","import { onBeforeUnmount } from \"vue\";\nfunction useScrollEChartData(options, cb) {\n  let timer = null;\n  let lastIdx = 0;\n  let curChartData = [];\n  const startScroll = () => {\n    if (options.showCount >= options.chartData.length) {\n      curChartData = options.chartData;\n      cb(curChartData);\n    } else {\n      if (!(curChartData == null ? void 0 : curChartData.length)) {\n        for (let i = 0; i < options.showCount; i++) {\n          curChartData.push(options.chartData[i]);\n        }\n        lastIdx = options.showCount;\n        cb(curChartData);\n      }\n      options.scrollCount > 0 && startTimer();\n    }\n  };\n  const startTimer = () => {\n    var _a;\n    timer = window.setInterval(() => {\n      if (!timer)\n        return;\n      curChartData.splice(0, options.scrollCount);\n      for (let i = lastIdx; i < lastIdx + options.scrollCount && i < options.chartData.length && curChartData.length < options.showCount; i++) {\n        curChartData.push(options.chartData[i]);\n      }\n      lastIdx = lastIdx + Math.min(options.scrollCount, options.showCount);\n      if (curChartData.length < options.showCount) {\n        if (options.seamless === false) {\n          lastIdx = 0;\n        } else {\n          lastIdx = options.showCount - curChartData.length;\n          for (let i = 0; i < lastIdx; i++) {\n            curChartData.push(options.chartData[i]);\n          }\n        }\n      }\n      cb(curChartData);\n    }, (_a = options.interval) != null ? _a : 1e4);\n  };\n  const stopScroll = () => {\n    timer && window.clearInterval(timer);\n    timer = null;\n  };\n  onBeforeUnmount(() => {\n    stopScroll();\n    lastIdx = 0;\n    curChartData = [];\n  });\n  return {\n    startScroll,\n    stopScroll\n  };\n}\nexport { useScrollEChartData };\n","import { ref, watch, onBeforeUnmount } from \"vue\";\nfunction useTableSelection(tableData, params) {\n  const option = Object.assign({ key: \"id\", cache: false }, params != null ? params : {});\n  const isSelectedAll = ref(false);\n  const isIndeterminate = ref(false);\n  const selectedRowKeys = ref([]);\n  const selectAll = () => {\n    if (isSelectedAll.value) {\n      if (option.cache) {\n        const ids = tableData.value.map((d) => d[option.key]).filter((k) => !selectedRowKeys.value.includes(k));\n        selectedRowKeys.value.push(...ids);\n      } else {\n        selectedRowKeys.value.splice(0, selectedRowKeys.value.length);\n        selectedRowKeys.value.push(...tableData.value.map((d) => d[option.key]));\n      }\n      isIndeterminate.value = false;\n    } else {\n      if (option.cache) {\n        tableData.value.forEach((d) => {\n          const idx = selectedRowKeys.value.indexOf(d[option.key]);\n          idx > -1 && selectedRowKeys.value.splice(idx, 1);\n        });\n      } else {\n        selectedRowKeys.value.splice(0, selectedRowKeys.value.length);\n      }\n    }\n  };\n  const selectRow = () => {\n    if (option.cache) {\n      doSelectionStatus();\n    } else {\n      isSelectedAll.value = selectedRowKeys.value.length === tableData.value.length;\n      if (selectedRowKeys.value.length > 0 && isSelectedAll.value == false) {\n        isIndeterminate.value = true;\n      } else {\n        isIndeterminate.value = false;\n      }\n    }\n  };\n  const doSelectionStatus = () => {\n    const selectedItems = tableData.value.filter((item) => selectedRowKeys.value.includes(item[option.key]));\n    if (selectedItems.length <= selectedRowKeys.value.length && selectedItems.length === tableData.value.length) {\n      isSelectedAll.value = true;\n      isIndeterminate.value = false;\n    } else if (selectedItems.length === 0) {\n      isSelectedAll.value = false;\n      isIndeterminate.value = false;\n    } else {\n      isSelectedAll.value = false;\n      isIndeterminate.value = true;\n    }\n  };\n  const watchHandler = watch(tableData, () => {\n    if (option.cache) {\n      doSelectionStatus();\n    } else {\n      selectedRowKeys.value.splice(0, selectedRowKeys.value.length);\n      isSelectedAll.value = false;\n      isIndeterminate.value = false;\n    }\n  });\n  onBeforeUnmount(() => {\n    watchHandler && watchHandler();\n  });\n  return {\n    isSelectedAll,\n    isIndeterminate,\n    selectedRowKeys,\n    selectAll,\n    selectRow\n  };\n}\nexport { useTableSelection };\n","import { ref } from \"vue\";\nconst DEFAULT_PAGE_SIZE = 10;\nconst DEFAULT_CURRENT_PAGE = 1;\nfunction usePagination(fetchDataCb, option = { pageSize: DEFAULT_PAGE_SIZE, total: 0, currentPage: DEFAULT_CURRENT_PAGE }) {\n  var _a, _b;\n  const pageSize = ref((_a = option.pageSize) != null ? _a : DEFAULT_PAGE_SIZE);\n  const currentPage = ref((_b = option.currentPage) != null ? _b : DEFAULT_CURRENT_PAGE);\n  const total = ref(option.total);\n  const setTotal = (all) => {\n    total.value = all;\n  };\n  const setCurrentPage = (cur) => {\n    currentPage.value = cur != null ? cur : DEFAULT_CURRENT_PAGE;\n    fetchDataCb();\n  };\n  const currentPageChange = (page) => {\n    currentPage.value = page;\n    fetchDataCb();\n  };\n  const pageSizeChange = (size) => {\n    pageSize.value = size;\n    currentPage.value = DEFAULT_CURRENT_PAGE;\n    fetchDataCb();\n  };\n  return {\n    pageSize,\n    currentPage,\n    total,\n    setTotal,\n    setCurrentPage,\n    currentPageChange,\n    pageSizeChange\n  };\n}\nexport { usePagination };\n","var _export_sfc = (sfc, props) => {\n  const target = sfc.__vccOpts || sfc;\n  for (const [key, val] of props) {\n    target[key] = val;\n  }\n  return target;\n};\n\nexport { _export_sfc as default };\n","import { defineComponent, openBlock, createElementBlock, normalizeStyle, createElementVNode, createCommentVNode } from 'vue';\nimport _export_sfc from '../_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n  name: \"TwoClose\",\n  props: {\n    gradient: {\n      type: Boolean\n    },\n    borderWidth: {\n      type: [Number, String],\n      default: \"1.5\"\n    },\n    opacity: {\n      type: [Number, String],\n      default: \"0.15\"\n    },\n    startColor: {\n      type: String,\n      default: \"\"\n    },\n    iconId: [String, Number]\n  }\n});\nconst _hoisted_1 = { key: 0 };\nconst _hoisted_2 = [\"id\"];\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"stop\", {\n  \"stop-color\": \"currentColor\",\n  offset: \"100%\"\n}, null, -1);\nconst _hoisted_4 = [\"stroke\"];\nconst _hoisted_5 = /* @__PURE__ */ createElementVNode(\"path\", { d: \"M4.70064453,4.70064453 L19.6339779,19.6339779 M4.70064453,19.6339779 L19.6339779,4.70064453\" }, null, -1);\nconst _hoisted_6 = [\n  _hoisted_5\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  return openBlock(), createElementBlock(\"svg\", {\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 24 24\",\n    \"aria-labelledby\": \"Close\",\n    role: \"presentation\",\n    class: \"icon-twotones\",\n    style: normalizeStyle(`--stroke-width: ${_ctx.borderWidth};--fill-opacity: ${_ctx.opacity};`)\n  }, [\n    _ctx.gradient ? (openBlock(), createElementBlock(\"defs\", _hoisted_1, [\n      createElementVNode(\"linearGradient\", {\n        id: `${_ctx.iconId}`,\n        x1: \"50%\",\n        y1: \"0%\",\n        x2: \"50%\",\n        y2: \"100%\",\n        gradientUnits: \"userSpaceOnUse\"\n      }, [\n        createElementVNode(\"stop\", {\n          style: normalizeStyle({\n            stopColor: _ctx.startColor ? _ctx.startColor : \"var(--icon-start-color)\"\n          }),\n          offset: \"0%\"\n        }, null, 4),\n        _hoisted_3\n      ], 8, _hoisted_2)\n    ])) : createCommentVNode(\"v-if\", true),\n    createElementVNode(\"g\", {\n      stroke: _ctx.gradient ? \"url(#\" + _ctx.iconId + \")\" : \"currentColor\",\n      style: { \"fill\": \"currentColor\", \"stroke-width\": \"var(--stroke-width)\", \"fill-opacity\": \"var(--fill-opacity)\", \"stroke-linecap\": \"round\", \"stroke-linejoin\": \"round\", \"fill-rule\": \"evenodd\" }\n    }, _hoisted_6, 8, _hoisted_4)\n  ], 4);\n}\nvar Close = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { Close as default };\n","import { defineComponent, openBlock, createElementBlock, normalizeStyle, createElementVNode, createCommentVNode } from 'vue';\nimport _export_sfc from '../_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n  name: \"TwoFilter\",\n  props: {\n    gradient: {\n      type: Boolean\n    },\n    borderWidth: {\n      type: [Number, String],\n      default: \"1.5\"\n    },\n    opacity: {\n      type: [Number, String],\n      default: \"0.15\"\n    },\n    startColor: {\n      type: String,\n      default: \"\"\n    },\n    iconId: [String, Number]\n  }\n});\nconst _hoisted_1 = { key: 0 };\nconst _hoisted_2 = [\"id\"];\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"stop\", {\n  \"stop-color\": \"currentColor\",\n  offset: \"100%\"\n}, null, -1);\nconst _hoisted_4 = [\"stroke\"];\nconst _hoisted_5 = /* @__PURE__ */ createElementVNode(\"path\", { d: \"M3.0021925,3.00435877 L9.79275344,11.7299807 C9.92938829,11.9055515 10.0035751,12.1216719 10.0035751,12.3441448 L10.0035751,22.0034337 L10.0035751,22.0034337 L14.0022757,20.0034337 L14.0022757,12.3439913 C14.0022757,12.1216125 14.0763999,11.905578 14.2129287,11.730044 L20.9996919,3.00435877 L20.9996919,3.00435877 L3.0021925,3.00435877 Z\" }, null, -1);\nconst _hoisted_6 = [\n  _hoisted_5\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  return openBlock(), createElementBlock(\"svg\", {\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 24 24\",\n    \"aria-labelledby\": \"Filter\",\n    role: \"presentation\",\n    class: \"icon-twotones\",\n    style: normalizeStyle(`--stroke-width: ${_ctx.borderWidth};--fill-opacity: ${_ctx.opacity};`)\n  }, [\n    _ctx.gradient ? (openBlock(), createElementBlock(\"defs\", _hoisted_1, [\n      createElementVNode(\"linearGradient\", {\n        id: `${_ctx.iconId}`,\n        x1: \"50%\",\n        y1: \"0%\",\n        x2: \"50%\",\n        y2: \"100%\",\n        gradientUnits: \"userSpaceOnUse\"\n      }, [\n        createElementVNode(\"stop\", {\n          style: normalizeStyle({\n            stopColor: _ctx.startColor ? _ctx.startColor : \"var(--icon-start-color)\"\n          }),\n          offset: \"0%\"\n        }, null, 4),\n        _hoisted_3\n      ], 8, _hoisted_2)\n    ])) : createCommentVNode(\"v-if\", true),\n    createElementVNode(\"g\", {\n      stroke: _ctx.gradient ? \"url(#\" + _ctx.iconId + \")\" : \"currentColor\",\n      style: { \"fill\": \"currentColor\", \"stroke-width\": \"var(--stroke-width)\", \"fill-opacity\": \"var(--fill-opacity)\", \"stroke-linecap\": \"round\", \"stroke-linejoin\": \"round\", \"fill-rule\": \"evenodd\" }\n    }, _hoisted_6, 8, _hoisted_4)\n  ], 4);\n}\nvar Filter = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { Filter as default };\n","import { defineComponent, openBlock, createElementBlock, normalizeStyle, createElementVNode, createCommentVNode } from 'vue';\nimport _export_sfc from '../_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n  name: \"TwoUpload\",\n  props: {\n    gradient: {\n      type: Boolean\n    },\n    borderWidth: {\n      type: [Number, String],\n      default: \"1.5\"\n    },\n    opacity: {\n      type: [Number, String],\n      default: \"0.15\"\n    },\n    startColor: {\n      type: String,\n      default: \"\"\n    },\n    iconId: [String, Number]\n  }\n});\nconst _hoisted_1 = { key: 0 };\nconst _hoisted_2 = [\"id\"];\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"stop\", {\n  \"stop-color\": \"currentColor\",\n  offset: \"100%\"\n}, null, -1);\nconst _hoisted_4 = [\"stroke\"];\nconst _hoisted_5 = /* @__PURE__ */ createElementVNode(\"path\", { d: \"M3,13.0036889 L3,20 C3,20.5522847 3.44771525,21 4,21 L20,21 C20.5522847,21 21,20.5522847 21,20 L21,13 L21,13 M12,3 L12,15 M8,7 L12,3 L16,7\" }, null, -1);\nconst _hoisted_6 = [\n  _hoisted_5\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  return openBlock(), createElementBlock(\"svg\", {\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 24 24\",\n    \"aria-labelledby\": \"Upload\",\n    role: \"presentation\",\n    class: \"icon-twotones\",\n    style: normalizeStyle(`--stroke-width: ${_ctx.borderWidth};--fill-opacity: ${_ctx.opacity};`)\n  }, [\n    _ctx.gradient ? (openBlock(), createElementBlock(\"defs\", _hoisted_1, [\n      createElementVNode(\"linearGradient\", {\n        id: `${_ctx.iconId}`,\n        x1: \"50%\",\n        y1: \"0%\",\n        x2: \"50%\",\n        y2: \"100%\",\n        gradientUnits: \"userSpaceOnUse\"\n      }, [\n        createElementVNode(\"stop\", {\n          style: normalizeStyle({\n            stopColor: _ctx.startColor ? _ctx.startColor : \"var(--icon-start-color)\"\n          }),\n          offset: \"0%\"\n        }, null, 4),\n        _hoisted_3\n      ], 8, _hoisted_2)\n    ])) : createCommentVNode(\"v-if\", true),\n    createElementVNode(\"g\", {\n      stroke: _ctx.gradient ? \"url(#\" + _ctx.iconId + \")\" : \"currentColor\",\n      style: { \"fill\": \"currentColor\", \"stroke-width\": \"var(--stroke-width)\", \"fill-opacity\": \"var(--fill-opacity)\", \"stroke-linecap\": \"round\", \"stroke-linejoin\": \"round\", \"fill-rule\": \"evenodd\" }\n    }, _hoisted_6, 8, _hoisted_4)\n  ], 4);\n}\nvar Upload = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { Upload as default };\n","import { defineComponent, openBlock, createElementBlock, normalizeStyle, createElementVNode, createCommentVNode } from 'vue';\nimport _export_sfc from '../_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n  name: \"FillMaximize2\",\n  props: {\n    gradient: {\n      type: Boolean\n    },\n    opacity: {\n      type: [Number, String],\n      default: \"0.35\"\n    },\n    startColor: {\n      type: String,\n      default: \"\"\n    },\n    iconId: [String, Number]\n  }\n});\nconst _hoisted_1 = { key: 0 };\nconst _hoisted_2 = [\"id\"];\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"stop\", {\n  \"stop-color\": \"currentColor\",\n  offset: \"100%\"\n}, null, -1);\nconst _hoisted_4 = [\"fill\"];\nconst _hoisted_5 = /* @__PURE__ */ createElementVNode(\"path\", { d: \"M21,3 C21.5522847,3 22,3.44771525 22,4 L22,11 L20,11 L20,5 L4,5 L4,19 L10,19 L10,21 L3,21 C2.44771525,21 2,20.5522847 2,20 L2,4 C2,3.44771525 2.44771525,3 3,3 L21,3 Z M11.5,7 L9.457,9.043 L11.707,11.293 L10.293,12.707 L8.043,10.457 L6,12.5 L6,7 L11.5,7 Z\" }, null, -1);\nconst _hoisted_6 = /* @__PURE__ */ createElementVNode(\"path\", {\n  d: \"M21,13 C21.5522847,13 22,13.4477153 22,14 L22,20 C22,20.5522847 21.5522847,21 21,21 L13,21 C12.4477153,21 12,20.5522847 12,20 L12,14 C12,13.4477153 12.4477153,13 13,13 L21,13 Z\",\n  style: { \"opacity\": \"var(--fill-opacity)\" }\n}, null, -1);\nconst _hoisted_7 = [\n  _hoisted_5,\n  _hoisted_6\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  return openBlock(), createElementBlock(\"svg\", {\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 24 24\",\n    \"aria-labelledby\": \"Maximize2\",\n    role: \"presentation\",\n    class: \"icon-fill\",\n    style: normalizeStyle(`--fill-opacity: ${_ctx.opacity};`),\n    fill: \"currentColor\"\n  }, [\n    _ctx.gradient ? (openBlock(), createElementBlock(\"defs\", _hoisted_1, [\n      createElementVNode(\"linearGradient\", {\n        id: `${_ctx.iconId}`,\n        x1: \"50%\",\n        y1: \"0%\",\n        x2: \"50%\",\n        y2: \"100%\",\n        gradientUnits: \"userSpaceOnUse\"\n      }, [\n        createElementVNode(\"stop\", {\n          style: normalizeStyle({\n            stopColor: _ctx.startColor ? _ctx.startColor : \"var(--icon-start-color)\"\n          }),\n          offset: \"0%\"\n        }, null, 4),\n        _hoisted_3\n      ], 8, _hoisted_2)\n    ])) : createCommentVNode(\"v-if\", true),\n    createElementVNode(\"g\", {\n      stroke: \"none\",\n      \"stroke-width\": \"1\",\n      fill: _ctx.gradient ? \"url(#\" + _ctx.iconId + \")\" : \"currentColor\",\n      \"fill-rule\": \"evenodd\"\n    }, _hoisted_7, 8, _hoisted_4)\n  ], 4);\n}\nvar Maximize2 = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { Maximize2 as default };\n","import { defineComponent, openBlock, createElementBlock, normalizeStyle, createElementVNode, createCommentVNode } from 'vue';\nimport _export_sfc from '../_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n  name: \"FillMinimize2\",\n  props: {\n    gradient: {\n      type: Boolean\n    },\n    opacity: {\n      type: [Number, String],\n      default: \"0.35\"\n    },\n    startColor: {\n      type: String,\n      default: \"\"\n    },\n    iconId: [String, Number]\n  }\n});\nconst _hoisted_1 = { key: 0 };\nconst _hoisted_2 = [\"id\"];\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"stop\", {\n  \"stop-color\": \"currentColor\",\n  offset: \"100%\"\n}, null, -1);\nconst _hoisted_4 = [\"fill\"];\nconst _hoisted_5 = /* @__PURE__ */ createElementVNode(\"path\", { d: \"M21,3 C21.5522847,3 22,3.42284218 22,3.94444444 L22,10.5555556 L20,10.5555556 L20,4.88888889 L4,4.88888889 L4,18.1111111 L10,18.1111111 L10,20 L3,20 C2.44771525,20 2,19.5771578 2,19.0555556 L2,3.94444444 C2,3.42284218 2.44771525,3 3,3 L21,3 Z M6.707,6.11005556 L8.957,8.23505556 L11,6.30555556 L11,11.5 L5.5,11.5 L7.543,9.5705 L5.293,7.4455 L6.707,6.11005556 Z\" }, null, -1);\nconst _hoisted_6 = /* @__PURE__ */ createElementVNode(\"path\", {\n  d: \"M21,12.4444444 C21.5522847,12.4444444 22,12.8672866 22,13.3888889 L22,19.0555556 C22,19.5771578 21.5522847,20 21,20 L13,20 C12.4477153,20 12,19.5771578 12,19.0555556 L12,13.3888889 C12,12.8672866 12.4477153,12.4444444 13,12.4444444 L21,12.4444444 Z\",\n  style: { \"opacity\": \"var(--fill-opacity)\" }\n}, null, -1);\nconst _hoisted_7 = [\n  _hoisted_5,\n  _hoisted_6\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  return openBlock(), createElementBlock(\"svg\", {\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 24 24\",\n    \"aria-labelledby\": \"Minimize2\",\n    role: \"presentation\",\n    class: \"icon-fill\",\n    style: normalizeStyle(`--fill-opacity: ${_ctx.opacity};`),\n    fill: \"currentColor\"\n  }, [\n    _ctx.gradient ? (openBlock(), createElementBlock(\"defs\", _hoisted_1, [\n      createElementVNode(\"linearGradient\", {\n        id: `${_ctx.iconId}`,\n        x1: \"50%\",\n        y1: \"0%\",\n        x2: \"50%\",\n        y2: \"100%\",\n        gradientUnits: \"userSpaceOnUse\"\n      }, [\n        createElementVNode(\"stop\", {\n          style: normalizeStyle({\n            stopColor: _ctx.startColor ? _ctx.startColor : \"var(--icon-start-color)\"\n          }),\n          offset: \"0%\"\n        }, null, 4),\n        _hoisted_3\n      ], 8, _hoisted_2)\n    ])) : createCommentVNode(\"v-if\", true),\n    createElementVNode(\"g\", {\n      stroke: \"none\",\n      \"stroke-width\": \"1\",\n      fill: _ctx.gradient ? \"url(#\" + _ctx.iconId + \")\" : \"currentColor\",\n      \"fill-rule\": \"evenodd\"\n    }, _hoisted_7, 8, _hoisted_4)\n  ], 4);\n}\nvar Minimize2 = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { Minimize2 as default };\n","\nexport default (sfc, props) => {\n  const target = sfc.__vccOpts || sfc;\n  for (const [key, val] of props) {\n    target[key] = val;\n  }\n  return target;\n}\n","<template>\n  <hb-simple-table-list\n    ref=\"simpleTableListRef\"\n    padding=\"var(--xl)\"\n    :class=\"['fx-page-table']\"\n    :cols=\"newCols\"\n    :table-data=\"tableData\"\n    :searchbar=\"searchbar\"\n    :toolbar=\"toolbar\"\n    :table-props=\"tableProps\"\n    :scrollbar-props=\"scrollbarProps\"\n    :pagination=\"pagination\"\n    @searchbar-change=\"searchBarChanged\"\n    @size-change=\"pageSizeChange\"\n    @current-change=\"currentPageChange\"\n    @sort-change=\"(...args) => $emit('sort-change', ...args)\"\n  >\n    <!-- searchbar右边的高级搜索， 搜索条件超过4个会显示在右边 -->\n    <template v-if=\"searchPlacement ? searchPlacement === 'right' : searchItems.length > 4\" #searchbar-suffix>\n      <hb-data-filter\n        :items=\"searchItems\"\n        icon-position=\"left\"\n        gap=\"var(--xs)\"\n        max-height=\"500px\"\n        class=\"static\"\n        @search=\"searchChanged\"\n        @remove-selected-item=\"removeSelectedItem\"\n      >\n        <template #icon>\n          <hl-icon><two-filter /></hl-icon>\n        </template>\n        <template #default>\n          高级搜索\n        </template>\n      </hb-data-filter>\n    </template>\n\n    <!-- 行多选 -->\n    <template #selectionCol>\n      <hl-checkbox\n        v-model=\"isSelectedAll\"\n        :indeterminate=\"isIndeterminate\"\n        :show-label=\"false\"\n        @change=\"selectAll\"\n      />\n    </template>\n    <template #tableSelection=\"{ row }\">\n      <hl-checkbox\n        v-model=\"selectedRowKeys\"\n        :label=\"row.id\"\n        :show-label=\"false\"\n        @change=\"selectRow\"\n        @click.stop\n      />\n    </template>\n    <!-- 展开行插槽 -->\n    <template #customExpand=\"{ row }\">\n      <slot name=\"customExpand\" :row=\"row\"></slot>\n    </template>\n    <!-- 序号插槽 -->\n    <template #tableIndex=\"{ rowIndex }\">\n      <span>{{ rowIndex + 1 }}</span>\n    </template>\n\n    <!-- 行操作 -->\n    <template #action=\"{ row }\">\n      <hl-group gap=\"var(--xxs)\">\n        <slot name=\"action\" :row=\"row\"></slot>\n      </hl-group>\n    </template>\n    <!-- 无数据 -->\n    <template #empty>\n      <hb-empty description=\"暂无数据\" image-size=\"10vw\" :image=\"noDataImage\" />\n    </template>\n    <!-- 搜索框前面 -->\n    <template #searchbar-prefix>\n      <slot name=\"searchbar-prefix\"></slot>\n    </template>\n    <!-- 操作左 -->\n    <template #toolbar-extra-before>\n      <slot name=\"toolbar-extra-before\"></slot>\n    </template>\n    <!-- 操作右  -->\n    <template #toolbar-extra-after>\n      <slot name=\"toolbar-extra-after\"></slot>\n    </template>\n\n    <!-- 自定义搜索条件插槽 -->\n    <template v-for=\"search in searchSlotList\" #[search.slotName]=\"searchData\" :key=\"search.slotName\">\n      <slot :name=\"search.slotName\" v-bind=\"searchData\"></slot>\n    </template>\n\n    <!-- 完全自定义插槽，需要把保留用的去掉 -->\n    <template v-for=\"col in slotCols\" #[col.slotName]=\"colData\" :key=\"col.slotName\">\n      <slot :name=\"col.slotName\" v-bind=\"colData\"> </slot>\n    </template>\n  </hb-simple-table-list>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, reactive, watch, onMounted, PropType, toRef, computed } from 'vue'\nimport { HlGroup, HlCheckbox, HlIcon } from 'hongluan-ui'\nimport { HbSimpleTableList, HbDataFilter, HbEmpty } from 'hongluan-business-ui'\nimport { useTableSelection, usePagination } from 'hongluan-hooks'\nimport { TwoFilter } from '@hongluan-ui/icons'\n\nexport default defineComponent({\n  name: 'PageTable',\n  components: { HlGroup, HlCheckbox, HlIcon, HbSimpleTableList, HbDataFilter, TwoFilter, HbEmpty },\n  props: {\n    // 自定义表格属性穿透给hl-simple-table\n    tableProps: {\n      type: Object,\n      default: () => ({}),\n    },\n    scrollbarProps: {\n      type: Object,\n      default: () => ({}),\n    },\n    // 表头\n    cols: {\n      type: Array,\n      default: () => [],\n    },\n    // 表数据\n    tableData: {\n      type: Array as PropType<Record<string, unknown>[]>,\n      default: () => [],\n    },\n    // 列表查询回调\n    dataFetcher: {\n      type: Function as PropType<(...args: any) => Promise<any>>,\n      default: () => ({}),\n    },\n    // 搜索条件\n    searchItems: {\n      type: Array,\n      default: () => [],\n    },\n    //searchbar中的输入框属性\n    searcher: {\n      type: Object,\n      default: () => {\n        return {\n          show: true,\n          name: 'searchName',\n          placeholder: '请输入搜索条件',\n        }\n      },\n    },\n    // 搜索条件位置， top/right, 不传的话根据搜索条件searchItems个数，不超过4个在顶部，超过4个在右侧。\n    searchPlacement: {\n      type: String,\n      default: '',\n    },\n\n    // 多选操作\n    selectionActions: {\n      type: Array,\n      default: () => [],\n    },\n\n    // 默认分页数据\n    defaultPagination: {\n      type: Object,\n      default: () => {\n        return { pageSize: 10, currentPage: 1, total: 0 }\n      },\n    },\n\n    // 没有数据的默认图片\n    noDataImage: {\n      type: String,\n      default: '',\n    },\n\n    // toolbar->showColConfig\n    showColConfig: {\n      type: Boolean,\n      default: true,\n    },\n\n    // 配合searchPlacement: top 使用\n    selectorColCount: {\n      type: String,\n      default: 'count-xl-2 count-lg-2 count-md-1',\n    },\n\n    // 是否显示搜索\n    showSearchBar: {\n      type: Boolean,\n      default: true,\n    },\n  },\n  emits: ['selectedRowKeys', 'sort-change'],\n  setup (props, { emit }) {\n    const newCols = computed(() => {\n      return props.cols.map((col: any) => {\n        if (['tableIndex', 'tableSelection'].includes(col.slotName) && !col.width) {\n          col.width = '6em'\n        }\n        return col\n      })\n    })\n    const searchbar = reactive({\n      show: props.showSearchBar,\n      searcher: props.searcher,\n      selector: {\n        colCount: props.selectorColCount,\n        items: props.searchPlacement ? (props.searchPlacement === 'top' ? [...props.searchItems] : [])\n          : (props.searchItems.length > 4 ? [] : [...props.searchItems]),\n      },\n    })\n\n    // SearchBar自定义插槽搜索条件\n    const searchSlotList = ref([])\n    // 额外加入条件时\n    watch(() => props.searchItems.length, () => {\n      searchbar.selector.items = []\n      searchbar.selector.items.push(...props.searchItems)\n    })\n\n    // 处理搜索自定义插槽\n    props.searchItems.forEach((item: { type: string; [key: string]: any; }) => {\n      if(item.type === 'slot')searchSlotList.value.push(item)\n    })\n\n    const simpleTableListRef = ref()\n\n    // 列表操作工具-多选操作\n    const toolbar = reactive({\n      showSelectionText: true,\n      showColConfig: props.showColConfig,\n      selectionCount: 0,\n      action: {\n        show: false,\n        showCount: 2,\n        actions: props.selectionActions,\n      },\n    })\n\n    // 搜索总条件\n    const params = ref({})\n    // searchBar条件\n    const searchParams = ref({})\n    // 右侧高级搜索条件\n    const searchAdvanceParams = ref({})\n    // searchBar自定义插槽条件\n    const searchSlotParams = ref({})\n\n    const searchBarChanged = (urlParams: string, mapParams: any, originalParams: any) => {\n      searchParams.value = mapParams\n      params.value = { ...searchParams.value, ...searchAdvanceParams.value, ...searchSlotParams.value }\n      setCurrentPage(1)\n    }\n\n    const searchChanged = (urlParams: string, mapParams: any, originalParams: any) => {\n      searchAdvanceParams.value = mapParams\n      params.value = { ...searchParams.value, ...searchAdvanceParams.value, ...searchSlotParams.value }\n      setCurrentPage(1)\n    }\n\n    // 搜索条件自定义回调\n    const searchSlotChanged = (mapParams: any) => {\n      searchSlotParams.value = mapParams\n      params.value = { ...searchParams.value, ...searchAdvanceParams.value, ...searchSlotParams.value }\n      setCurrentPage(1)\n    }\n\n    // 清空条件\n    const resetFields = () => {\n      console.log('我要清空条件')\n      searchParams.value = {}\n      searchAdvanceParams.value = {}\n      searchSlotParams.value = {}\n      simpleTableListRef.value?.searchbarRef.resetFields()\n    }\n\n    // TODO\n    const removeSelectedItem = (item: any) => { console.log(item) }\n\n    const {\n      isSelectedAll,\n      isIndeterminate,\n      selectedRowKeys,\n      selectAll,\n      selectRow,\n    } = useTableSelection(toRef(props, 'tableData'))\n\n    // 表格多选\n    watch(() => selectedRowKeys.value.length, (len: number) => {\n      toolbar.action.show = len > 0\n      toolbar.selectionCount = len\n      emit('selectedRowKeys', selectedRowKeys.value)\n    })\n\n    const {\n      pageSize,\n      currentPage,\n      total,\n      setTotal,\n      setCurrentPage,\n      currentPageChange,\n      pageSizeChange,\n    } = usePagination(fetchData, { pageSize:props.defaultPagination.pageSize, currentPage:props.defaultPagination.currentPage, total: props.defaultPagination.total })\n    const pagination = reactive({\n      show: true,\n      currentPage: currentPage,\n      pageSize: pageSize,\n      total: total,\n    })\n\n    // 查询表格数据\n    async function fetchData () {\n      await props.dataFetcher({\n        pageSize: pagination.pageSize,\n        currentPage: pagination.currentPage,\n        params: params.value,\n        setTotal: setAllTotal,\n      })\n    }\n\n    // 设置总数\n    const setAllTotal = (newTotal: number) => {\n      setTotal(newTotal)\n      pagination.total = newTotal\n    }\n\n    // 初始化查询表格数据\n    onMounted( () => {\n      fetchData()\n    })\n\n    const getSlotNames = (cols: any, result: any[]) => {\n      cols.forEach(col => {\n        if (col.slotName && !reservedSlotName.includes(col.slotName)) {\n          result.push(col)\n        }\n        if (col.children && Array.isArray(col.children)) {\n          getSlotNames(col.children, result)\n        }\n      })\n    }\n    // 过滤几个已使用的保留插槽['sear,chbar-suffix', 'selectionCol', 'tableSelection', 'customExpand', 'tableIndex', 'action']\n    const reservedSlotName = ['searchbar-suffix','searchbar-prefix', 'toolbar-extra-before','toolbar-extra-after','selectionCol', 'tableSelection', 'customExpand', 'tableIndex', 'action']\n    const slotCols = computed(() => {\n      const result: any[] = []\n      getSlotNames(props.cols, result)\n      return result\n    })\n\n    /**\n     * 重新刷新接口数据,一般用于多选或其他操作\n     * @param auto 在当前页没有数据时，是否自动向前翻页。默认false\n     */\n    const refresh = async (auto = false) => {\n      await fetchData()\n      if (auto && props.tableData.length === 0 && pagination.total > 0 && pagination.currentPage > 1) {\n        pagination.currentPage -= 1\n        await fetchData()\n      }\n      selectedRowKeys.value = []\n      isSelectedAll.value = false\n    }\n\n    // 重置当前数据\n    const reset = () => {\n      pagination.currentPage = 1\n      fetchData()\n    }\n\n    return {\n      newCols,\n      slotCols,\n\n      searchbar,\n      searchBarChanged,\n      searchSlotList,\n\n      toolbar,\n      searchChanged,\n      removeSelectedItem,\n\n      searchSlotChanged,\n\n      isSelectedAll,\n      selectedRowKeys,\n      selectAll,\n      selectRow,\n      isIndeterminate,\n\n      pagination,\n      pageSize,\n      currentPage,\n      total,\n      setTotal,\n      currentPageChange,\n      pageSizeChange,\n\n      refresh,\n      reset,\n      resetFields,\n      simpleTableListRef,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport PageTable from './src/page-table.vue'\n\nexport const FxPageTable = withInstall(PageTable)\nexport default FxPageTable\n\nexport * from './src/types'\n","import {\n  defineComponent,\n  reactive,\n  nextTick,\n  getCurrentInstance,\n  onMounted,\n  onBeforeUnmount,\n  onBeforeMount,\n  computed,\n} from 'vue'\nimport { HlForm, HlButton, HlGroup, HlSelect, HlOption } from 'hongluan-ui'\nimport { TagItem } from './types'\n\nexport interface DataInterface {\n  myObserver: null | ResizeObserver\n  simpleOptions: Array<any>\n  btnOpen: number\n  searchForm: object\n  searchType: number\n  simpleOptionVal: string\n  componentOptions: Array<any>\n}\n\nexport default defineComponent({\n  name: 'TableSearch',\n  components: { HlForm, HlButton, HlGroup, HlSelect, HlOption },\n  props: {\n    searchSlots: {\n      type: Function,\n      default: null,\n    },\n    hideHeaderLine: {\n      type: Boolean,\n      default: false,\n    },\n    // 是否显示搜索\n    showSearchBar: {\n      type: Boolean,\n      default: true,\n    },\n    showAdvSearch: {\n      type: Boolean,\n      default: true,\n    },\n    showResetAtSimpleMode: Boolean,\n  },\n  emits: ['search', 'reset', 'changeHeight'],\n  setup(props, ctx) {\n    const { slots, emit } = ctx\n\n    const data: DataInterface = reactive({\n      myObserver: null,\n      simpleOptions: [],\n      btnOpen: 0, // 0 不显示  1 底部  2 右侧\n      searchForm: {},\n      searchType: 1, // 1 简单搜索  2 高级搜索\n      simpleOptionVal: '',\n      componentOptions: [],\n    })\n\n    const searchEnabled = computed(() => {\n      const val = data.searchForm[data.simpleOptionVal]\n      return Array.isArray(val) ? val.length : (val || val === 0)\n    })\n\n    let currentInstance: any\n    onBeforeMount(() => {\n      init()\n    })\n    onMounted(() => {\n      currentInstance = getCurrentInstance()\n      runResizeObserver()\n    })\n\n    onBeforeUnmount(() => {\n      data.myObserver && data.myObserver.disconnect()\n    })\n\n    const runResizeObserver = () => {\n      data.myObserver = new ResizeObserver(entries => {\n        // 注意，entres是个数组，数组项为每个需要监听的DOM节点\n        entries.forEach(entry => {\n          // console.log('大小位置 contentRect', entry.contentRect)\n          // console.log('监听的DOM target', entry.target)\n          if (entry.target.className.indexOf('list-page_header') !== -1) {\n            // 执行内容区的高度变动\n            setListContentHeight(entry.contentRect.height)\n          }\n        })\n      })\n      if (currentInstance) {\n        data.myObserver.observe(currentInstance.refs['root'] as Element)\n      }\n    }\n\n    const setListContentHeight = (val: number) => {\n      emit('changeHeight', val)\n    }\n\n    const resetSearch = (isEmitting = false) => {\n      Object.keys(data.searchForm).forEach(k => {\n        data.searchForm[k] = Array.isArray(data.searchForm[k]) ? [] : ''\n      })\n      if (data.simpleOptions[0]) {\n        data.simpleOptionVal = data.simpleOptionVal || data.simpleOptions[0].value\n      }\n      isEmitting && emit('reset', data.searchForm)\n    }\n    const runSearch = () => {\n      const arr: Array<TagItem> = []\n      Object.keys(data.searchForm).forEach(k => {\n        let getIt = false\n        if (data.searchType === 1) {\n          if (data.simpleOptionVal !== k) {\n            data.searchForm[k] = ''\n          } else if (data.searchForm[k] !== '') {\n            getIt = true\n          }\n        } else {\n          if (data.searchForm[k] !== '') {\n            // 有值\n            getIt = true\n          }\n        }\n\n        if (getIt) {\n          arr.push({\n            key: k,\n            valueName: '',\n            value: data.searchForm[k],\n            label: getSearchLabel(k),\n          })\n        }\n      })\n      emit('search', arr, data.searchType)\n\n      if (arr.length) {\n        resetSearch()\n      }\n    }\n\n    const getSearchLabel = (key: string) => {\n      let str = ''\n      data.simpleOptions.forEach(item => {\n        if (item.value === key) {\n          str = item.label\n        }\n      })\n      return str\n    }\n\n    const setSearchType = () => {\n      data.searchType = data.searchType === 1 ? 2 : 1\n      resetSearch()\n\n      data.btnOpen = 0\n      nextTick(() => {\n        setBtnsPosition()\n      })\n    }\n\n    const setBtnsPosition = () => {\n      if (!currentInstance) return\n\n      if ((currentInstance.refs['root'] as HTMLElement).offsetWidth - currentInstance.refs['form-box'].$el.offsetWidth > 400) {\n        data.btnOpen = 2\n      } else {\n        data.btnOpen = 1\n      }\n    }\n\n    const simpleOptionChange = (val: string) => {\n      Object.keys(data.searchForm).forEach(k => {\n        if (k !== val) {\n          data.searchForm[k] = ''\n        }\n      })\n    }\n\n    const init = () => {\n      data.simpleOptions.length = 0\n      if (slots.default instanceof Function) {\n        // 直接作用域插槽传递\n        data.componentOptions = (slots.default(data.searchForm)?.[0]?.children || []) as any[]\n      } else if (props.searchSlots instanceof Function) {\n        // 通过 props 传递\n        data.componentOptions = props.searchSlots(data.searchForm)\n      } else {\n        return\n      }\n\n      data.componentOptions.forEach(item => {\n        if (item.props) {\n          const i = {\n            value: item.props.prop,\n            label: item.props.label,\n          }\n          data.simpleOptions.push(i)\n        }\n      })\n      if (data.simpleOptions[0] && !data.simpleOptionVal) {\n        data.simpleOptionVal = data.simpleOptions[0].value\n      }\n    }\n\n    const simpleOptionRender = () => {\n      return (\n        <hl-select\n          v-model={data.simpleOptionVal}\n          style=\"width: 168px; margin-right: 8px;\"\n          onChange={simpleOptionChange}\n          placeholder=\"请选择\"\n        >\n          {data.simpleOptions.map(i => {\n            return <hl-option key={i.value} label={i.label} value={i.value}></hl-option>\n          })}\n        </hl-select>\n      )\n    }\n\n    const allItemsRender = i => {\n      return <div class=\"search-form-field\">{i}</div>\n    }\n\n    const simpleItemRender = i => {\n      if (i.children.default) {\n        return (\n          <div v-show={i.props.prop === data.simpleOptionVal} class=\"search-form-field-1\">\n            {i.children.default()[0]}\n          </div>\n        )\n      } else {\n        return ''\n      }\n    }\n\n    return () => {\n      return (\n        <div class={{ 'list-page_header': true, 'no-search-bar': !props.showSearchBar, 'border-top border-primary': !props.hideHeaderLine && props.showSearchBar }} ref=\"root\">\n          <div class=\"search-form-wrap\" v-show={props.showSearchBar}>\n            <hl-form class=\"search-form-box\" ref=\"form-box\">\n              <hl-group>\n                {data.searchType === 1 ? simpleOptionRender() : ''}\n                <span v-show={data.searchType === 1}>\n                  {data.componentOptions.map(i => {\n                    return simpleItemRender(i)\n                  })}\n                </span>\n                <div v-show={data.searchType === 2}>\n                  {data.componentOptions.map(i => {\n                    return allItemsRender(i)\n                  })}\n                </div>\n              </hl-group>\n              <div\n                v-show={data.searchType === 1}\n                class={{\n                  'search-btns-box': true,\n                }}\n              >\n                <hl-button type=\"main\" onClick={runSearch} disabled={!searchEnabled.value}>\n                  查询\n                </hl-button>\n                <hl-button v-show={props.showResetAtSimpleMode} class=\"simple reset-btn ordinary\" onClick={() => resetSearch(true)}>\n                  重置\n                </hl-button>\n                <span class=\"search-type\" onClick={setSearchType} v-show={props.showAdvSearch}>\n                高级搜索\n                </span>\n              </div>\n            </hl-form>\n            <div\n              v-show={data.searchType === 2}\n              class={{\n                'search-btns-box-1': data.btnOpen === 1,\n                'search-btns-box-2': data.btnOpen === 2,\n              }}\n            >\n              <hl-button class=\"reset-btn ordinary\" onClick={resetSearch}>\n              重置\n              </hl-button>\n              <hl-button type=\"main\" onClick={runSearch}>\n              查询\n              </hl-button>\n              <span class=\"search-type\" onClick={setSearchType}>\n              简易搜索\n              </span>\n            </div>\n          </div>\n        </div>\n      )\n    }\n  },\n})\n\n","import type { SelectorItem, SelectorItemOption } from 'hongluan-business-ui'\nimport type { TagItem } from './types'\n\nexport interface DisplayItem {\n  display: string\n  value: unknown\n  name: string\n  type: string\n}\n\nconst Utils = {\n  getKey(item: SelectorItem, opt: SelectorItemOption) {\n    return item.prop ? opt[item.prop.value] : opt.value\n  },\n  getLabel(item: SelectorItem, opt: SelectorItemOption) {\n    return item.prop ? opt[item.prop.label] : opt.label\n  },\n  getSelectedOptionLabels(item: SelectorItem) {\n    const result = [] as unknown[]\n    (item.value as Array<unknown>).forEach(v => {\n      result.push(this.getSelectedOptionLabel(item, v))\n    })\n    return result\n  },\n  getSelectedOptionLabel(item: SelectorItem, val: unknown) {\n    const valOpt = item.options.find(opt => this.getKey(item, opt) === val)\n    return valOpt ? this.getLabel(item, valOpt) : ''\n  },\n  getSelectedOptionsLabel(item: SelectorItem, vals: unknown[]) {\n    return vals.map(val => this.getSelectedOptionLabel(item, val))\n  },\n  getDisplayStr(display: unknown, separator = '-') {\n    let val = ''\n    if (typeof display === 'string') {\n      val = display\n    } else if (Array.isArray(display)) {\n      val = display.join(separator)\n    } else {\n      val = JSON.stringify(display)\n    }\n    return val\n  },\n  getSearchTags(searchArr: TagItem[], searchItems: SelectorItem[]) {\n    const result = [] as TagItem[]\n    searchArr\n      .filter(i => Array.isArray(i.value) ? i.value.length : (i.value || i.value === 0))\n      .forEach(item => {\n        const searchItem = searchItems.find(si => si.name === item.key)\n        if (/range|dates/.test(searchItem.type) || searchItem['is-range']) {\n          result.push({\n            ...item,\n            valueName: typeof searchItem.display === 'function' ? searchItem.display.call(null, item) : this.getDisplayStr(item.value),\n            type: searchItem.type,\n          })\n        } else if (searchItem.type === 'select') {\n          let valueName: string\n          if (Array.isArray(item.value)) {\n            valueName = this.getDisplayStr(this.getSelectedOptionsLabel(searchItem, item.value), '，')\n          } else {\n            valueName = this.getSelectedOptionLabel(searchItem, item.value) as string\n          }\n          result.push({\n            ...item,\n            valueName,\n            type: searchItem.type,\n          })\n        } else {\n          result.push({\n            ...item,\n            valueName: typeof searchItem.display === 'function' ? searchItem.display.call(null, item) : this.getDisplayStr(item.value),\n            type: searchItem.type,\n          })\n        }\n      })\n    return result\n  },\n  getSearchParams(searchArr: TagItem[]) {\n    const mapParams: Record<string, unknown> = {}\n    const originalParams: Record<string, unknown> = {}\n    searchArr\n      .filter(item => (Array.isArray(item.value) ? item.value.length : (item.value || item.value === 0)))\n      .forEach(item => {\n        if (/range|dates/.test(item.type) || item['is-range']) {\n          mapParams[item.key + 'Start'] = item.value[0]\n          mapParams[item.key + 'End'] = item.value[1]\n        } else {\n          mapParams[item.key] = item.value\n        }\n        originalParams[item.key] = item.value\n      })\n\n    return { mapParams, originalParams }\n  },\n\n}\n\nexport { Utils }\n","<template>\n  <table-search\n    v-if=\"reloaded\"\n    :show-search-bar=\"searchItems.length > 0\"\n    :show-adv-search=\"showAdvSearch\"\n    :hide-header-line=\"hideHeaderLine\"\n    :show-reset-at-simple-mode=\"showResetAtSimpleMode\"\n    @search=\"searchBarChanged\"\n    @reset=\"(...args) => $emit('reset', ...args)\"\n    @change-height=\"setContentHeight\"\n  >\n    <template #default=\"searchForm\">\n      <hl-form-item\n        v-for=\"item in searchItems\"\n        :key=\"item.name\"\n        :label=\"item.label\"\n        :prop=\"item.name\"\n      >\n        <hl-time-picker\n          v-if=\"item.type === 'timepicker'\"\n          v-model=\"searchForm[item.name]\"\n          v-bind=\"getDateTimeProps(item)\"\n        />\n        <hl-date-picker\n          v-else-if=\"isDatePicker(item.type)\"\n          v-model=\"searchForm[item.name]\"\n          :type=\"item.type\"\n          v-bind=\"getDateTimeProps(item)\"\n        />\n        <hl-input\n          v-else-if=\"item.type === 'input'\"\n          v-model=\"searchForm[item.name]\"\n          v-bind=\"getInputProps(item)\"\n        />\n        <template v-else-if=\"item.type === 'slot'\">\n          <slot\n            :name=\"item.slotName\"\n            :value=\"searchForm[item.name]\"\n            :item=\"item\"\n            :search-form=\"searchForm\"\n          >\n          </slot>\n        </template>\n        <hl-select\n          v-else-if=\"item.type === 'select' || !item.type\"\n          v-model=\"searchForm[item.name]\"\n          v-bind=\"getSelectProps(item)\"\n        >\n          <hl-option\n            v-for=\"opt in item.options\"\n            :key=\"getKey(item, opt)\"\n            :label=\"getLabel(item, opt)\"\n            :value=\"getKey(item, opt)\"\n          />\n        </hl-select>\n      </hl-form-item>\n    </template>\n  </table-search>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, onMounted, PropType, watch, ref, nextTick } from 'vue'\nimport { HlFormItem, HlDatePicker, HlTimePicker, HlInput, HlSelect, HlOption } from 'hongluan-ui'\nimport { SelectorItem } from 'hongluan-business-ui'\nimport TableSearch from './table-search'\nimport { Utils } from './utils'\nimport { TagItem } from './types'\n\nexport default defineComponent({\n  components: { HlFormItem, HlDatePicker, HlTimePicker, HlInput, HlSelect, HlOption, TableSearch },\n  props: {\n    showAdvSearch: {\n      type: Boolean,\n      default: true,\n    },\n    // 搜索条件\n    searchItems: {\n      type: Array as PropType<SelectorItem[]>,\n      default: () => [],\n    },\n    hideHeaderLine: {\n      type: Boolean,\n      default: false,\n    },\n    showResetAtSimpleMode: Boolean,\n  },\n  emits: ['search', 'reset', 'change-height'],\n  setup(props, { emit }) {\n    const reloaded = ref(true)\n    const { getKey, getLabel } = Utils\n\n    const isDatePicker = (type: string) => {\n      return 'year/month/date/dates/week/datetime/datetimerange/daterange/monthrange'.indexOf(type) !== -1\n    }\n    const dateRangePopperProps = (type: string) => {\n      const singleList = ['year', 'month', 'date', 'dates', 'week', 'datetime']\n      const rangeList = ['datetimerange', 'daterange', 'monthrange']\n      let obj = {}\n      if (rangeList.includes(type)) {\n        obj = {\n          popperClass: 'custom-date-range-picker-popper',\n          popperOptions: {\n            modifiers: [\n              {\n                name: 'offset',\n                options: {\n                  offset: [-50, 0],\n                },\n              },\n              {\n                name: 'flip',\n                options: {\n                  fallbackPlacements: ['bottom'],\n                  allowedAutoPlacements: ['bottom'],\n                },\n              },\n            ],\n          },\n        }\n      } else if (singleList.includes(type)) {\n        obj = {\n          popperOptions: {\n            modifiers: [\n              {\n                name: 'flip',\n                options: {\n                  fallbackPlacements: ['bottom'],\n                  allowedAutoPlacements: ['bottom'],\n                },\n              },\n            ],\n          },\n        }\n      }\n      return obj\n    }\n    const getDateTimeProps = (item: SelectorItem) => {\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      const { span: _, value: __, ...others } = item\n      return {\n        ...others,\n        ...dateRangePopperProps(item.type),\n      }\n    }\n    const getInputProps = (item: SelectorItem) => {\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      const { span: _, value: __, ...others } = item\n      return others\n    }\n    const getSelectProps = (item: SelectorItem) => {\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      const { options: _, value: __, prop: ___, ...others } = item\n      return others\n    }\n\n    const searchBarChanged = (searchArr: TagItem[], searchType: number) => {\n      const result = Utils.getSearchTags(searchArr, props.searchItems)\n      emit('search', result, searchType)\n    }\n    const setContentHeight = (val: number) => {\n      emit('change-height', val)\n    }\n\n    const initChange = () => {\n      const searchArr = props.searchItems.filter(si => Array.isArray(si.value) ? si.value.length : (si.value || si.value === 0)).map(si => ({\n        key: si.name,\n        label: si.label,\n        value: si.value,\n        valueName: '',\n      }))\n      searchBarChanged(searchArr as TagItem[], 2)\n    }\n\n    watch(() => props.searchItems, async () => {\n      reloaded.value = false\n      await nextTick()\n      reloaded.value = true\n      initChange()\n    }, {\n      deep: true,\n    })\n\n    onMounted(() => {\n      initChange()\n    })\n\n    return {\n      reloaded,\n      getKey,\n      getLabel,\n      isDatePicker,\n      getDateTimeProps,\n      getInputProps,\n      getSelectProps,\n      setContentHeight,\n      searchBarChanged,\n    }\n  },\n})\n</script>\n","<template>\n  <div ref=\"root\" class=\"search-page-tag_wrap max-w-100\" :class=\"{ 'search-page-tag_wrap-hide': data.showHide }\">\n    <div\n      v-for=\"item in tags\"\n      :key=\"item.key\"\n      :class=\"{\n        'max-w-100': true,\n        'search-tag': true,\n        'search-tag-all': showType === 'all'\n      }\"\n    >\n      <span class=\"text-ellipsis self-full\">{{ item.label + '：' + item.valueName }}</span>\n      <div class=\"white-line\"></div>\n      <hl-icon class=\"tag-close\" @click=\"clear(item)\">\n        <SystemClose />\n      </hl-icon>\n    </div>\n    <div\n      v-if=\"tags.length\"\n      class=\"clear-all\"\n      :class=\"{ 'clear-all-bottom': showType === 'all' }\"\n      @click=\"clear('all')\"\n    >\n      清空\n    </div>\n  </div>\n</template>\n<script lang=\"ts\">\nimport {\n  defineComponent,\n  reactive,\n  watch,\n  nextTick,\n  onMounted,\n  onBeforeUnmount,\n  getCurrentInstance,\n  ComponentInternalInstance,\n  PropType,\n} from 'vue'\nimport { HlIcon, SystemClose } from 'hongluan-ui'\n\n\nimport { TagItem } from './types'\n\nexport interface DataInterface {\n  showHide: boolean\n  timer: null | ReturnType<typeof setTimeout>\n}\n\nexport default defineComponent({\n  components: { HlIcon, SystemClose },\n  props: {\n    showType: {\n      type: String, // 未设置默认值，为 undefined\n      default: 'limit',\n    },\n    tags: {\n      type: Array as PropType<TagItem[]>,\n      default: () => [],\n    },\n    boxWidth: {\n      type: Number,\n      default: 0,\n    },\n  },\n  emits: ['hideIt', 'clearEvent'],\n  setup(props, { emit }) {\n    const data: DataInterface = reactive({\n      showHide: false,\n      timer: null,\n    })\n    let currentInstance: ComponentInternalInstance | null\n\n    watch(\n      () => props.boxWidth,\n      () => {\n        if (data.timer) {\n          clearTimeout(data.timer)\n        }\n        data.timer = setTimeout(() => {\n          nextTick(() => {\n            computedWidth()\n            data.timer = null\n          })\n        }, 50)\n      },\n    )\n    watch(\n      () => props.tags,\n      () => {\n        nextTick(() => {\n          computedWidth()\n        })\n      },\n      { deep: true, immediate: true },\n    )\n    // 对比自己的宽度\n    let computedWidth = () => {\n      if (!currentInstance || !currentInstance.refs['root']) return\n      let $el: any = currentInstance.refs['root']\n      data.showHide = $el.parentNode.offsetWidth - $el.offsetWidth <= 48 && props.showType === 'limit'\n      emit('hideIt', data.showHide)\n    }\n    let clear = (item: TagItem | string) => {\n      emit('clearEvent', item)\n    }\n\n    onMounted(() => {\n      currentInstance = getCurrentInstance()\n    })\n    onBeforeUnmount(() => {\n      data.timer && clearTimeout(data.timer)\n    })\n\n    return {\n      data,\n      clear,\n    }\n  },\n})\n</script>\n","<template>\n  <div ref=\"root\" class=\"table-toolbar w-full\">\n    <hl-group align=\"items-middle\" gap=\"var(--lg)\" full=\"full-x\" class=\"w-full toolbar-header\">\n      <div class=\"static\">\n        <slot name=\"content-header-left\"></slot>\n      </div>\n      <!--搜索项显示区1-->\n      <div ref=\"search-tags\" class=\"toolbar-tags-wrap\">\n        <search-tag :tags=\"tags\" :show-type=\"'limit'\" :box-width=\"data.searchTagsW\" @hideIt=\"judgeSearchTagHide\" @clearEvent=\"clearSearchTag\" />\n      </div>\n      <div class=\"static\">\n        <slot name=\"content-header-right\"></slot>\n      </div>\n    </hl-group>\n    <!--搜索项显示区2-->\n    <search-tag v-if=\"data.searchTagHide\" :tags=\"tags\" :show-type=\"'all'\" @clearEvent=\"clearSearchTag\" />\n  </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, reactive, onMounted, onBeforeUnmount, getCurrentInstance, ComponentInternalInstance, PropType } from 'vue'\nimport { HlGroup } from 'hongluan-ui'\nimport SearchTag from './search-tag.vue'\nimport { TagItem } from './types'\n\nexport interface DataInterface {\n  searchTagHide: boolean\n  myObserver: null | ResizeObserver\n  searchTagsW: number\n}\n\nexport default defineComponent({\n  components: { SearchTag, HlGroup },\n  props: {\n    tags: {\n      type: Array as PropType<TagItem[]>,\n      default: () => [],\n    },\n  },\n  emits: ['tagBoxHeight', 'clearTags'],\n  setup(props, { emit }) {\n    const data: DataInterface = reactive({\n      searchTagHide: false,\n      myObserver: null,\n      searchTagsW: 0,\n    })\n\n    let currentInstance: ComponentInternalInstance | null\n\n    let runResizeObserver = () => {\n      data.myObserver = new ResizeObserver(entries => {\n        // 注意，entres是个数组，数组项为每个需要监听的DOM节点\n        entries.forEach(entry => {\n          // console.log('大小位置 contentRect', entry.contentRect)\n          // console.log('监听的DOM target', entry.target)\n          if (entry.target.className.indexOf('toolbar-tags-wrap') !== -1) {\n            data.searchTagsW = entry.contentRect.width\n          } else if (entry.target.className.indexOf('table-toolbar') !== -1) {\n            emit('tagBoxHeight', entry.contentRect.height)\n          }\n        })\n      })\n      if (currentInstance) {\n        data.myObserver.observe(currentInstance.refs['search-tags'] as Element)\n        data.myObserver.observe(currentInstance.refs['root'] as Element)\n      }\n    }\n\n    let judgeSearchTagHide = (val: boolean) => {\n      data.searchTagHide = val\n    }\n    let clearSearchTag = (val: string | Array<any>) => {\n      // 关闭的搜素标签\n      if (val === 'all') {\n        emit('clearTags', props.tags)\n      } else {\n        emit('clearTags', [val])\n      }\n    }\n\n    onMounted(() => {\n      currentInstance = getCurrentInstance()\n      runResizeObserver()\n    })\n\n    onBeforeUnmount(() => {\n      data.myObserver && data.myObserver.disconnect()\n    })\n\n    return {\n      data,\n      judgeSearchTagHide,\n      clearSearchTag,\n    }\n  },\n})\n</script>\n","<template>\n  <hl-group align=\"items-middle\" class=\"list-total\" :class=\"cls\">\n    <hl-icon size=\"xs\" class=\"m-r-xs\">\n      <svg viewBox=\"0 0 16 16\" version=\"1.1\">\n        <g stroke=\"none\" stroke-width=\"1\" fill=\"currentColor\" fill-rule=\"evenodd\">\n          <path v-if=\"checked\" d=\"M13.6042969,0.533576817 L13.6039805,10.4732904 C13.6016137,11.571218 13.5756715,11.9976489 13.4670821,12.4320064 C13.1222747,13.811236 12.0205792,14.9129315 10.5724932,15.3265953 L10.3848437,15.3682458 C10.0344432,15.4359598 9.48802787,15.4578615 8.69782901,15.4626044 L7.52718642,15.4634938 C6.42925875,15.4611269 5.76850445,15.4351847 5.33414696,15.3265953 C3.95491738,14.9817879 2.85322188,13.8800924 2.43955807,12.4320064 C2.34648147,12.0597 2.31412522,11.6932172 2.30528941,10.9045261 L2.30265932,10.473015 L2.30234327,0.533576817 L13.6042969,0.533576817 Z M12.0103356,2.12624349 L3.8946766,2.12624349 L3.89640829,10.6234012 C3.89941141,11.3690094 3.91678164,11.6798536 3.98418345,11.9162068 L4.02612424,12.0399047 C4.20905335,12.8935739 4.87744549,13.5448278 5.79720622,13.8076916 L5.88459097,13.8261272 C6.01033628,13.847997 6.18213956,13.859419 6.50954571,13.8651455 L7.56684713,13.8703682 L8.81547999,13.8684046 C9.56203454,13.8615113 9.94201049,13.8336443 10.1803915,13.7400291 C11.0340607,13.5571 11.6853145,12.8887079 11.9481784,11.9689471 L11.9713789,11.8563876 C11.9999583,11.6786626 12.0082477,11.4035708 12.0103356,10.6181765 L12.0103356,2.12624349 Z M8.79666667,4.40497253 L8.79666667,7.99830585 L7.20333333,7.99830585 L7.20333333,4.40497253 L8.79666667,4.40497253 Z\" fill-rule=\"nonzero\" />\n          <path v-else d=\"M7.22131097,1.02302406 C10.8188214,1.02302406 13.735239,3.93945118 13.735239,7.53698247 C13.735239,8.73345423 13.4119411,9.8820658 12.8110967,10.8833651 L12.6977811,11.0629204 L15.317794,13.6834353 C15.5686156,13.934044 15.6142196,14.3123975 15.4546218,14.6094429 L15.3938225,14.7051599 L15.3178232,14.7931334 C15.1686702,14.9422864 14.9696377,15.0230241 14.7629735,15.0230241 C14.5976551,15.0230241 14.4372114,14.9713523 14.3032601,14.8743056 L14.2081017,14.7931113 L11.689463,12.2734855 L11.5432093,12.4107512 C10.5101724,13.3278538 9.21415349,13.8957738 7.82290275,14.0234241 L7.52338109,14.0440057 L7.22131097,14.0509105 C3.62377968,14.0509105 0.707352557,11.1344929 0.707352557,7.53698247 C0.707352557,3.93944641 3.62377491,1.02302406 7.22131097,1.02302406 Z M7.22131097,2.59250469 C4.49498666,2.59250469 2.27683319,4.81066278 2.27683319,7.53698247 C2.27683319,10.263284 4.49499887,12.4814451 7.22131097,12.4814451 C9.9476049,12.4814451 12.1657736,10.2632718 12.1657736,7.53698247 C12.1657736,4.81067566 9.94760259,2.59250469 7.22131097,2.59250469 Z\" fill-rule=\"nonzero\" />\n        </g>\n      </svg>\n    </hl-icon>\n    {{ text.tip }}<span class=\"text-link\">{{ text.info }}</span><span v-show=\"text.info\">条数据</span>\n  </hl-group>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed } from 'vue'\nimport { HlGroup, HlIcon } from 'hongluan-ui'\n\nexport default defineComponent({\n  components: { HlGroup, HlIcon },\n  props: {\n    total: {\n      type: Number,\n      default: 0,\n    },\n    search: {\n      type: Boolean,\n      default: false,\n    },\n    checked: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup(props) {\n    const cls = computed(() => {\n      if (props.checked && props.total > 0) return 'is-checked'\n      if (props.search) return 'is-search'\n      return 'default'\n    })\n    const text = computed(() => {\n      if (props.checked && props.total > 0) {\n        return {\n          tip: '已选',\n          info: `${props.total}`,\n        }\n      }\n      if (props.search) {\n        if (props.total > 0) {\n          return {\n            tip: '查询结果',\n            info: `${props.total}`,\n          }\n        }\n        return {\n          tip: '暂无查询结果',\n          info: ``,\n        }\n      }\n      if (props.total > 0) {\n        return {\n          tip: '共计',\n          info: `${props.total}`,\n        }\n      } else {\n        return {\n          tip: '暂无数据',\n          info: ``,\n        }\n      }\n    })\n\n    return {\n      cls,\n      text,\n    }\n  },\n})\n</script>\n","<template>\n  <hl-dropdown @visible-change=\"data.isShowdropdown = !data.isShowdropdown\">\n    <hl-button :disabled=\"disabled\" class=\"btn-more-action\" icon-position=\"left\">\n      {{ text }}\n      <template #icon>\n        <hl-icon class=\"m-r-xs\">\n          <svg\n            width=\"16px\"\n            height=\"16px\"\n            viewBox=\"0 0 16 16\"\n            version=\"1.1\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n          >\n            <title>切片</title>\n            <g id=\"v4.19.0\" stroke=\"none\" stroke-width=\"1\" fill=\"currentColor\" fill-rule=\"evenodd\">\n              <g id=\"知识管理-知识发布\" transform=\"translate(-1582.000000, -256.000000)\">\n                <g id=\"编组-4\" transform=\"translate(276.000000, 232.000000)\">\n                  <g id=\"button/sec备份\" transform=\"translate(1298.000000, 16.000000)\">\n                    <g id=\"更多操作\" transform=\"translate(8.000000, 8.000000)\">\n                      <rect\n                        id=\"矩形\"\n                        fill-opacity=\"0.01\"\n                        fill=\"currentColor\"\n                        transform=\"translate(8.000000, 8.000000) scale(1, -1) translate(-8.000000, -8.000000) \"\n                        x=\"0\"\n                        y=\"0\"\n                        width=\"16\"\n                        height=\"16\"\n                      />\n                      <g id=\"icon/下载\">\n                        <rect\n                          id=\"矩形\"\n                          fill-opacity=\"0.01\"\n                          fill=\"currentColor\"\n                          transform=\"translate(8.000000, 8.000000) scale(1, -1) translate(-8.000000, -8.000000) \"\n                          x=\"0\"\n                          y=\"0\"\n                          width=\"16\"\n                          height=\"16\"\n                        />\n                        <g id=\"solt\" transform=\"translate(2.000000, 3.000000)\" fill=\"currentColor\" fill-rule=\"nonzero\">\n                          <g id=\"编组\">\n                            <path id=\"形状\" d=\"M0,8.23529412 L4.11764706,8.23529412 L4.11764706,9.63529412 L0,9.63529412 L0,8.23529412 Z M0,4.11764706 L5.29411765,4.11764706 L5.29411765,5.51764706 L0,5.51764706 L0,4.11764706 Z M0,0 L11.7647059,0 L11.7647059,1.4 L0,1.4 L0,0 Z M10.9847059,5.30888235 L11.6647647,5.07882353 L12.253,6.09764706 L11.7141176,6.57123529 C11.7472941,6.72858824 11.7647059,6.89164706 11.7647059,7.05882353 C11.7647059,7.226 11.7472941,7.38905882 11.7141176,7.54641176 L12.253,8.02 L11.6647647,9.03882353 L10.9847059,8.80876471 C10.7432353,9.02594118 10.4566471,9.19382353 10.1406471,9.29670588 L10,10 L8.82352941,10 L8.68288235,9.29670588 C8.36688235,9.19382353 8.08029412,9.02594118 7.83882353,8.80876471 L7.15876471,9.03882353 L6.57052941,8.02 L7.10941176,7.54641176 C7.07623529,7.38905882 7.05882353,7.226 7.05882353,7.05882353 C7.05882353,6.89164706 7.07623529,6.72858824 7.10941176,6.57123529 L6.57052941,6.09764706 L7.15876471,5.07882353 L7.83882353,5.30888235 C8.08029412,5.09170588 8.36688235,4.92382353 8.68288235,4.82094118 L8.82352941,4.11764706 L10,4.11764706 L10.1406471,4.82094118 C10.4566471,4.92382353 10.7432353,5.09170588 10.9847059,5.30888235 Z M9.41176471,7.64705882 C9.73664706,7.64705882 10,7.38370588 10,7.05882353 C10,6.73394118 9.73664706,6.47058824 9.41176471,6.47058824 C9.08688235,6.47058824 8.82352941,6.73394118 8.82352941,7.05882353 C8.82352941,7.38370588 9.08688235,7.64705882 9.41176471,7.64705882 Z\" />\n                          </g>\n                        </g>\n                      </g>\n                    </g>\n                  </g>\n                </g>\n              </g>\n            </g>\n          </svg>\n        </hl-icon>\n      </template>\n    </hl-button>\n    <template #dropdown>\n      <hl-dropdown-menu class=\"more-action-dropdown-menu\">\n        <hl-dropdown-item v-for=\"(item, idx) in options\" :key=\"idx\" v-bind=\"item\">\n          {{ item.label }}\n        </hl-dropdown-item>\n      </hl-dropdown-menu>\n    </template>\n  </hl-dropdown>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, reactive } from 'vue'\nimport { HlDropdown, HlDropdownItem, HlDropdownMenu, HlButton, HlIcon } from 'hongluan-ui'\n\nexport default defineComponent({\n  components: { HlDropdown, HlDropdownItem, HlDropdownMenu, HlButton, HlIcon },\n  props: {\n    options: {\n      type: Array,\n      defualt: () => [],\n    },\n    disabled: Boolean,\n    text: {\n      type: String,\n      default: '更多操作',\n    },\n  },\n  setup() {\n    const data = reactive({\n      isShowdropdown: false,\n    })\n    return {\n      data,\n    }\n  },\n})\n\n\n</script>\n\n","<template>\n  <hl-icon width=\"120px\" height=\"120px\">\n    <svg\n      width=\"120px\"\n      height=\"120px\"\n      viewBox=\"0 0 120 120\"\n      version=\"1.1\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n    >\n      <title>编组 4备份 2</title>\n      <defs>\n        <path id=\"path-1\" d=\"M29.5949851,99 C25.1767071,99 21.5949851,95.418278 21.5949851,91 L21.5952009,90.9412324 L21.918,47 L98.5,47 L98.5,91 C98.5,95.418278 94.918278,99 90.5,99 L29.5949851,99 Z\" />\n        <filter\n          id=\"filter-2\"\n          x=\"-44.2%\"\n          y=\"-50.0%\"\n          width=\"188.4%\"\n          height=\"230.8%\"\n          filterUnits=\"objectBoundingBox\"\n        >\n          <feOffset dx=\"0\" dy=\"8\" in=\"SourceAlpha\" result=\"shadowOffsetOuter1\" />\n          <feGaussianBlur stdDeviation=\"10\" in=\"shadowOffsetOuter1\" result=\"shadowBlurOuter1\" />\n          <feColorMatrix values=\"0 0 0 0 0.396078431   0 0 0 0 0.478431373   0 0 0 0 0.576470588  0 0 0 0.2 0\" type=\"matrix\" in=\"shadowBlurOuter1\" />\n        </filter>\n        <path id=\"path-3\" d=\"M-5.68434189e-14,0 L16.4093628,0 C17.5139323,-4.2495073e-16 18.4093628,0.8954305 18.4093628,2 L18.4093628,44 C18.4093628,48.418278 14.8276408,52 10.4093628,52 L-5.68434189e-14,52 L-5.68434189e-14,52 L-5.68434189e-14,0 Z\" />\n        <linearGradient id=\"linearGradient-5\" x1=\"49.9684134%\" y1=\"-2.3164557%\" x2=\"49.9684134%\" y2=\"100.703737%\">\n          <stop stop-color=\"#FFFFFF\" offset=\"0%\" />\n          <stop stop-color=\"#F9FBFF\" offset=\"100%\" />\n        </linearGradient>\n        <path id=\"path-6\" d=\"M0.382,0 L58.5546372,0 L58.5546372,52 L8.05898509,52 C3.64070709,52 0.0589850918,48.418278 0.0589850918,44 C0.0589850918,43.9804106 0.059057044,43.9608212 0.0592009469,43.9412324 L0.382,0 L0.382,0 Z\" />\n        <linearGradient id=\"linearGradient-8\" x1=\"49.9684134%\" y1=\"-2.3164557%\" x2=\"49.9684134%\" y2=\"100.703737%\">\n          <stop stop-color=\"#FFFFFF\" offset=\"0%\" />\n          <stop stop-color=\"#F9FBFF\" offset=\"100%\" />\n        </linearGradient>\n      </defs>\n      <g id=\"通用基础模版\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"缺省图规范\" transform=\"translate(-985.000000, -3288.000000)\">\n          <g id=\"编组-4备份-2\" transform=\"translate(985.000000, 3288.000000)\">\n            <g id=\"bg_1\" transform=\"translate(0.000000, 9.000000)\">\n              <path id=\"Path\" d=\"M60,104 C87.6094276,104 110,81.6271186 110,54 C110,26.3728814 87.6094276,4 60,4 C32.3905724,4 10,26.3728814 10,54 C10,81.6271186 32.3905724,104 60,104 Z\" fill=\"#E9EDF5\" fill-rule=\"nonzero\" />\n              <g id=\"编组-4备份\">\n                <g id=\"+2\" transform=\"translate(92.071068, 0.000000)\" fill=\"#989FB0\">\n                  <path id=\"形状结合\" d=\"M5,0 C5.82842712,-1.52179594e-16 6.5,0.671572875 6.5,1.5 L6.5,3.5 L8.5,3.5 C9.32842712,3.5 10,4.17157288 10,5 C10,5.82842712 9.32842712,6.5 8.5,6.5 L6.5,6.5 L6.5,8.5 C6.5,9.32842712 5.82842712,10 5,10 C4.17157288,10 3.5,9.32842712 3.5,8.5 L3.5,6.499 L1.5,6.5 C0.671572875,6.5 0,5.82842712 0,5 C0,4.17157288 0.671572875,3.5 1.5,3.5 L3.5,3.499 L3.5,1.5 C3.5,0.671572875 4.17157288,1.52179594e-16 5,0 Z\" />\n                </g>\n                <g id=\"+3\" transform=\"translate(0.000000, 5.928932)\" fill=\"#EAEEF9\">\n                  <g id=\"形状结合备份-2\" transform=\"translate(0.000000, 0.000000)\">\n                    <path d=\"M7.07106781,2.07106781 C7.89949494,2.07106781 8.57106781,2.74264069 8.57106781,3.57106781 L8.57106781,5.57106781 L10.5710678,5.57106781 C11.3994949,5.57106781 12.0710678,6.24264069 12.0710678,7.07106781 C12.0710678,7.89949494 11.3994949,8.57106781 10.5710678,8.57106781 L8.57106781,8.57106781 L8.57106781,10.5710678 C8.57106781,11.3994949 7.89949494,12.0710678 7.07106781,12.0710678 C6.24264069,12.0710678 5.57106781,11.3994949 5.57106781,10.5710678 L5.57106781,8.57006781 L3.57106781,8.57106781 C2.74264069,8.57106781 2.07106781,7.89949494 2.07106781,7.07106781 C2.07106781,6.24264069 2.74264069,5.57106781 3.57106781,5.57106781 L5.57106781,5.57006781 L5.57106781,3.57106781 C5.57106781,2.74264069 6.24264069,2.07106781 7.07106781,2.07106781 Z\" transform=\"translate(7.071068, 7.071068) rotate(-45.000000) translate(-7.071068, -7.071068) \" />\n                  </g>\n                </g>\n                <g id=\"+4\" transform=\"translate(107.947343, 81.876276)\" fill=\"#EAEEF9\">\n                  <path id=\"形状结合备份-3\" d=\"M6.12372436,1.12372436 C6.95215148,1.12372436 7.62372436,1.79529723 7.62372436,2.62372436 L7.62372436,4.62372436 L9.62372436,4.62372436 C10.4521515,4.62372436 11.1237244,5.29529723 11.1237244,6.12372436 C11.1237244,6.95215148 10.4521515,7.62372436 9.62372436,7.62372436 L7.62372436,7.62372436 L7.62372436,9.62372436 C7.62372436,10.4521515 6.95215148,11.1237244 6.12372436,11.1237244 C5.29529723,11.1237244 4.62372436,10.4521515 4.62372436,9.62372436 L4.62372436,7.62272436 L2.62372436,7.62372436 C1.79529723,7.62372436 1.12372436,6.95215148 1.12372436,6.12372436 C1.12372436,5.29529723 1.79529723,4.62372436 2.62372436,4.62372436 L4.62372436,4.62272436 L4.62372436,2.62372436 C4.62372436,1.79529723 5.29529723,1.12372436 6.12372436,1.12372436 Z\" transform=\"translate(6.123724, 6.123724) rotate(-105.000000) translate(-6.123724, -6.123724) \" />\n                </g>\n                <g id=\"+1\" transform=\"translate(2.240941, 92.169873)\" fill=\"#989FB0\">\n                  <path id=\"形状结合备份\" d=\"M6.83012702,1.83012702 C7.65855414,1.83012702 8.33012702,2.50169989 8.33012702,3.33012702 L8.33012702,5.33012702 L10.330127,5.33012702 C11.1585541,5.33012702 11.830127,6.00169989 11.830127,6.83012702 C11.830127,7.65855414 11.1585541,8.33012702 10.330127,8.33012702 L8.33012702,8.33012702 L8.33012702,10.330127 C8.33012702,11.1585541 7.65855414,11.830127 6.83012702,11.830127 C6.00169989,11.830127 5.33012702,11.1585541 5.33012702,10.330127 L5.33012702,8.32912702 L3.33012702,8.33012702 C2.50169989,8.33012702 1.83012702,7.65855414 1.83012702,6.83012702 C1.83012702,6.00169989 2.50169989,5.33012702 3.33012702,5.33012702 L5.33012702,5.32912702 L5.33012702,3.33012702 C5.33012702,2.50169989 6.00169989,1.83012702 6.83012702,1.83012702 Z\" transform=\"translate(6.830127, 6.830127) rotate(-30.000000) translate(-6.830127, -6.830127) \" />\n                </g>\n              </g>\n            </g>\n            <g id=\"形状结合\" fill-rule=\"nonzero\">\n              <use fill=\"black\" fill-opacity=\"1\" filter=\"url(#filter-2)\" xlink:href=\"#path-1\" />\n              <use fill=\"#DAE1ED\" xlink:href=\"#path-1\" />\n            </g>\n            <g id=\"编组-3\" transform=\"translate(9.536000, 47.000000)\">\n              <g id=\"矩形备份-52\" transform=\"translate(70.554637, 0.000000)\">\n                <mask id=\"mask-4\" fill=\"white\">\n                  <use xlink:href=\"#path-3\" />\n                </mask>\n                <use id=\"蒙版\" fill=\"#D3D8E4\" fill-rule=\"nonzero\" xlink:href=\"#path-3\" />\n                <path d=\"M-0.054637207,-4.54747351e-13 L18.4093628,-4.54747351e-13 L21.5592283,20.699116 C21.7254019,21.7911142 20.9748728,22.811064 19.8828746,22.9772377 C19.7832962,22.9923909 19.6827154,23 19.5819906,23 L5.16403934,23 C4.17565839,23 3.33549566,22.278016 3.18680166,21.300884 L-0.054637207,-4.54747351e-13 L-0.054637207,-4.54747351e-13 Z\" fill=\"#8E97A8\" fill-rule=\"nonzero\" mask=\"url(#mask-4)\" />\n              </g>\n              <path id=\"矩形备份-52\" d=\"M70.5546372,0 L88.964,0 L98.6266599,15.9643946 C99.198609,16.9093539 98.8962244,18.1390511 97.9512651,18.7110002 C97.6389137,18.900055 97.2807695,19 96.9156598,19 L84.2601321,19 C82.8575809,19 81.5574893,18.2654053 80.8337747,17.0639949 L70.5546372,0 L70.5546372,0 Z\" fill=\"#C7CEDC\" fill-rule=\"nonzero\" />\n              <g id=\"矩形备份-51\" transform=\"translate(12.000000, 0.000000)\">\n                <mask id=\"mask-7\" fill=\"white\">\n                  <use xlink:href=\"#path-6\" />\n                </mask>\n                <use id=\"蒙版\" fill=\"url(#linearGradient-5)\" fill-rule=\"nonzero\" xlink:href=\"#path-6\" />\n                <path d=\"M-6.48370246e-14,0 L58.464,0 L55.5192838,21.2742198 C55.3823646,22.2633978 54.5367811,23 53.5381721,23 L-0.887691113,23 C-1.99226061,23 -2.88769111,22.1045695 -2.88769111,21 C-2.88769111,20.9082684 -2.88138011,20.8166455 -2.8688028,20.7257802 L-6.48370246e-14,0 L-6.48370246e-14,0 Z\" fill=\"#EAEEF9\" fill-rule=\"nonzero\" mask=\"url(#mask-7)\" />\n              </g>\n              <path id=\"矩形\" d=\"M12,0 L70.464,0 L59.6412809,17.135972 C58.9084009,18.2963652 57.6317776,19 56.2593253,19 L3.62865316,19 C2.52408366,19 1.62865316,18.1045695 1.62865316,17 C1.62865316,16.6219533 1.73580105,16.2516483 1.93767536,15.932014 L12,0 L12,0 Z\" fill=\"url(#linearGradient-8)\" fill-rule=\"nonzero\" />\n            </g>\n            <path\n              id=\"路径\"\n              d=\"M58.8133186,5.76487732 C64.6852585,6.79192617 71.9280486,11.68367 73.4496155,15.1322861 C74.9711823,18.5809021 74.312064,24.0745392 73.4496155,27.2528076 C72.587167,30.431076 68.5767722,34.2348633 65.0828,34.2348633 C61.5888278,34.2348633 55.8802643,32.1007233 55.8802643,26.5093079 C55.8802643,20.9178925 60.1872351,18 62.417923,18 C64.6486109,18 68.5898132,17.7476807 70.9679108,21.1613922 C73.3460083,24.5751038 74.7350604,29.7684021 74.361618,34.9916687 C74.1533201,37.9050928 73.2724303,42.0073696 72.0349672,45.5653776\"\n              stroke=\"#C9D4E2\"\n              stroke-width=\"2\"\n              stroke-linecap=\"round\"\n              stroke-dasharray=\"4\"\n              transform=\"translate(65.151090, 25.665127) rotate(30.000000) translate(-65.151090, -25.665127) \"\n            />\n          </g>\n        </g>\n      </g>\n    </svg>\n  </hl-icon>\n</template>\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nimport { HlIcon } from 'hongluan-ui'\n\nexport default defineComponent({\n  name: 'EmptyImage',\n  components: { HlIcon },\n})\n</script>\n","<template>\n  <hl-group full class=\"full-page fx-page-table-v2\" gap=\"var(--lg)\">\n    <hl-panel v-if=\"$slots.tree\" v-show=\"showTree\" class=\"table-panel h-full static left-section-tree\" full-body borderless>\n      <slot name=\"tree\"></slot>\n    </hl-panel>\n\n    <hl-panel class=\"w-xxl bg-transparent\" full-body borderless padding=\"0\" header-class=\"flex-wrap\">\n      <template v-if=\"tabs.length || searchItems.length\" #header>\n        <hl-tabs\n          v-if=\"tabs.length\"\n          v-model=\"activeTab\"\n          type=\"line\"\n          :show-pane=\"false\"\n          class=\"w-full table-tabs\"\n          style=\"background:var(--bg-element)\"\n          nav-height=\"var(--nav-height)\"\n          v-bind=\"tabsProps\"\n          @tab-change=\"$emit('tab-change', activeTab)\"\n        >\n          <hl-tab-pane v-for=\"t in tabs\" :key=\"t.name\" :label=\"t.label\" :name=\"t.name\" />\n        </hl-tabs>\n        <table-search-wrapper\n          :show-search-bar=\"searchItems.length > 0\"\n          :search-items=\"searchItems\"\n          :show-adv-search=\"showAdvSearch\"\n          :hide-header-line=\"!!tabs?.length\"\n          :show-reset-at-simple-mode=\"showResetAtSimpleMode\"\n          @search=\"searchBarChanged\"\n          @change-height=\"setContentHeight\"\n        >\n          <template v-for=\"s in searchItemsSlots\" #[s]=\"itemData\">\n            <slot :name=\"s\" v-bind=\"itemData\"></slot>\n          </template>\n        </table-search-wrapper>\n      </template>\n      <slot name=\"header-top\"></slot>\n      <slot :name=\"activeTab && tabs.length ? activeTab : 'default'\">\n        <hl-panel\n          ref=\"tableContentRef\"\n          class=\"h-full table-page\"\n          header-class=\"border-transparent\"\n          footer-class=\"border-transparent\"\n          full-body\n        >\n          <template #header>\n            <search-items if=\"showToolBar\" :tags=\"currentSearchTags\" @tag-box-height=\"setTagBoxHeight\" @clear-tags=\"clearTags\">\n              <template #content-header-left>\n                <total-info v-bind=\"totalInfoData\" />\n                <slot name=\"total-info-toolbar-extra-after\"></slot>\n              </template>\n              <template #content-header-right>\n                <slot name=\"toolbar-extra-before\"></slot>\n                <dropdown-button v-if=\"selectionActions.length > 0\" :options=\"selectionActions\" :disabled=\"selectedRowKeys.length <= 0\" />\n                <slot name=\"toolbar-extra-after\"></slot>\n              </template>\n            </search-items>\n          </template>\n          <hl-scrollbar style=\"margin: 0 var(--panel-padding)\">\n            <slot name=\"custom-table\" :data=\"tableData\">\n              <hl-simple-table\n                :cols=\"newCols\"\n                :data=\"tableData\"\n                border=\"border-x\"\n                padding=\"var(--sm)\"\n                fixed-header\n                v-bind=\"tableProps\"\n                @sort-change=\"(...args) => $emit('sort-change', ...args)\"\n                @row-click=\"(...args) => $emit('row-click', ...args)\"\n                @cell-click=\"(...args) => $emit('cell-click', ...args)\"\n              >\n                <template #tableIndex=\"{ rowIndex }\">\n                  <span class=\"table-index\">{{ rowIndex + 1 }}</span>\n                </template>\n                <!-- 行多选 -->\n                <template #selectionCol>\n                  <hl-checkbox\n                    v-if=\"isMultipleSelect\"\n                    v-model=\"isSelectedAll\"\n                    :indeterminate=\"isIndeterminate\"\n                    :show-label=\"false\"\n                    @change=\"selectAll\"\n                  />\n                </template>\n                <template #tableSelection=\"{ row }\">\n                  <hl-checkbox\n                    v-if=\"isMultipleSelect\"\n                    v-model=\"selectedRowKeys\"\n                    :label=\"row.id\"\n                    :show-label=\"false\"\n                    @change=\"selectRow\"\n                    @click.stop\n                  />\n                  <hl-radio\n                    v-else\n                    v-model=\"selectedRadioKey\"\n                    :label=\"row.id\"\n                    :show-label=\"false\"\n                    @change=\"handleRadioChange\"\n                    @click.stop\n                  />\n                </template>\n                <!-- 行操作 -->\n                <template #action=\"{ row }\">\n                  <hl-group gap=\"var(--xxs)\">\n                    <slot name=\"action\" :row=\"row\"></slot>\n                  </hl-group>\n                </template>\n                <!-- 展开行插槽 -->\n                <template #customExpand=\"{ row }\">\n                  <slot name=\"customExpand\" :row=\"row\"></slot>\n                </template>\n                <!-- 无数据 -->\n                <template #empty>\n                  <hb-empty description=\"暂无数据\" image-size=\"10vw\" :image=\"noDataImage\">\n                    <template #image>\n                      <empty-image />\n                    </template>\n                  </hb-empty>\n                </template>\n                <template v-for=\"col in slotCols\" #[col.slotName]=\"colData\" :key=\"col.slotName\">\n                  <slot :name=\"col.slotName\" v-bind=\"colData\"> </slot>\n                </template>\n                <template v-for=\"filter in filterSlots\" #[filter.slotName]=\"close\" :key=\"filter.slotName\">\n                  <slot :name=\"filter.slotName\" v-bind=\"close\"> </slot>\n                </template>\n              </hl-simple-table>\n            </slot>\n          </hl-scrollbar>\n          <template v-if=\"pagination.show\" #footer>\n            <div class=\"footer-action\">\n              <slot name=\"footer-action\"></slot>\n            </div>\n            <hl-pagination\n              v-if=\"tableData?.length > 0\"\n              ref=\"paginationRef\"\n              :page-size=\"pagination.pageSize\"\n              :current-page=\"pagination.currentPage\"\n              :total=\"pagination.total\"\n              align=\"items-right\"\n              class=\"full\"\n              layout=\"total, slot, prev, pager, next, jumper\"\n              @current-change=\"currentPageChange\"\n              @size-change=\"pageSizeChange\"\n            >\n              <hl-group align=\"items-middle\" gap-x=\"var(--xs)\">\n                <hl-select v-model=\"pagination.pageSize\" style=\"width: calc(var(--xxs) * 25);\" @change=\"pageSizeChange\">\n                  <hl-option\n                    v-for=\"item in [10, 20, 30, 40, 50, 100]\"\n                    :key=\"item\"\n                    :label=\"`${item}条/页`\"\n                    :value=\"item\"\n                  />\n                </hl-select>\n              </hl-group>\n            </hl-pagination>\n          </template>\n        </hl-panel>\n      </slot>\n    </hl-panel>\n  </hl-group>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, reactive, watch, onMounted, PropType, toRef, computed, onBeforeUnmount } from 'vue'\nimport { HlSimpleTable, HlGroup, HlCheckbox, HlRadio, HlPanel, HlTabs, HlTabPane, HlScrollbar, HlPagination, HlSelect, HlOption } from 'hongluan-ui'\nimport { HbEmpty } from 'hongluan-business-ui'\nimport { useTableSelection, usePagination } from 'hongluan-hooks'\nimport TableSearchWrapper from './table-search-wrapper.vue'\nimport SearchItems from './search-items.vue'\nimport TotalInfo from './total-info.vue'\nimport DropdownButton from './dropdown-button.vue'\nimport EmptyImage from './empty-image.vue'\nimport { TagItem } from './types'\nimport { Utils } from './utils'\n\nexport default defineComponent({\n  name: 'PageTableV2',\n  components: { HlSimpleTable, HlGroup, HlCheckbox, HlRadio, HlPanel, HbEmpty, HlScrollbar, HlTabs, HlTabPane, HlPagination, TableSearchWrapper, SearchItems, TotalInfo, DropdownButton, HlSelect, HlOption, EmptyImage },\n  props: {\n    // 自定义表格属性穿透给hl-simple-table\n    tableProps: {\n      type: Object,\n      default: () => ({}),\n    },\n    // 表头\n    cols: {\n      type: Array,\n      default: () => [],\n    },\n    // 表数据\n    tableData: {\n      type: Array as PropType<Record<string, unknown>[]>,\n      default: () => [],\n    },\n    // 列表查询回调\n    dataFetcher: {\n      type: Function as PropType<(...args: any) => Promise<any>>,\n      default: () => ({}),\n    },\n    showTree: Boolean,\n    showAdvSearch: {\n      type: Boolean,\n      default: true,\n    },\n    showResetAtSimpleMode: Boolean,\n    // 搜索条件\n    searchItems: {\n      type: Array as PropType<any[]>,\n      default: () => [],\n    },\n\n    // 多选操作\n    selectionActions: {\n      type: Array,\n      default: () => [],\n    },\n    defaultPagination: {\n      type: Object,\n      default: () => {\n        return { pageSize: 10, currentPage: 1, total: 0 }\n      },\n    },\n    noDataImage: {\n      type: String,\n      default: '',\n    },\n    showToolBar: {\n      type: Boolean,\n      default: true,\n    },\n    tabs: {\n      type: Array as PropType<{ label: string; name: string; default?: boolean; }[]>,\n      default: () => [],\n    },\n    tabsProps: {\n      type: Object,\n      default: () => ({}),\n    },\n    isMultipleSelect: {\n      type: Boolean,\n      default: true,\n    },\n  },\n  emits: ['selectedRowKeys', 'sort-change', 'row-click', 'cell-click', 'tab-change', 'clear-tags'],\n  setup (props, { emit }) {\n    const activeTab = ref('')\n    const simpleTableListRef = ref()\n    const tableContentRef = ref()\n    const tableContentHeight = ref('')\n    let tagsHeight = 0\n    // 搜索总条件\n    const searchParams = ref({})\n    const currentSearchTags = ref<TagItem[]>([])\n    const totalInfoData = reactive({ search: true, checked: false, total: 0 })\n    const tableStyle = ref<Record<string, any>>({})\n\n    const newCols = computed(() => {\n      return props.cols.map((col: any) => {\n        if (['tableIndex', 'tableSelection'].includes(col.slotName) && !col.width) {\n          col.width = '6em'\n        }\n        return col\n      })\n    })\n\n    const searchBarChanged = (searchArr: TagItem[], searchType: number) => {\n      if (searchType === 1) { // 简单搜索，只有一个搜索项\n        const idx = currentSearchTags.value.findIndex(st => st.key === searchArr[0].key)\n        if (idx > -1) {\n          currentSearchTags.value[idx] = searchArr[0]\n        } else {\n          currentSearchTags.value.push(searchArr[0])\n        }\n      } else { // 高级搜索\n        currentSearchTags.value = searchArr\n      }\n      searchParams.value = { ...Utils.getSearchParams(currentSearchTags.value).mapParams }\n      setCurrentPage(1)\n    }\n    const setTableHeight = (val: number) => {\n      tableStyle.value = {\n        height: (val - tagsHeight) + 'px',\n        overflow: 'auto',\n      }\n    }\n    const setContentHeight = (val: number) => {\n      tableContentHeight.value = `calc(100% - ${val + 16}px)`\n    }\n\n    const setTagBoxHeight = (val: number) => {\n      if (tableContentRef.value) {\n        let num: number = tableContentRef.value.offsetHeight - val - 76\n        tagsHeight = val\n        setTableHeight(num)\n      }\n    }\n    const clearTags = (val: Array<TagItem>) => {\n      emit('clear-tags', val)\n      currentSearchTags.value = currentSearchTags.value.filter(c => !val.find(v => v.key === c.key))\n      searchParams.value = { ...Utils.getSearchParams(currentSearchTags.value).mapParams }\n      setCurrentPage(1)\n    }\n\n    const {\n      isSelectedAll,\n      isIndeterminate,\n      selectedRowKeys,\n      selectAll,\n      selectRow,\n    } = useTableSelection(toRef(props, 'tableData'))\n\n    const selectedRadioKey = ref()\n\n    const selectChange = (len = 1) => {\n      Object.assign(totalInfoData, { search: len <= 0, checked: len > 0, total: len > 0 ? len : total.value })\n      emit('selectedRowKeys', selectedRowKeys.value)\n    }\n\n    if (props.isMultipleSelect) {\n      // 表格多选\n      watch(() => selectedRowKeys.value.length, (len: number) => {\n        selectChange(len)\n      })\n    } else {\n      // 表格单选\n      watch(() => selectedRowKeys.value, () => {\n        selectChange()\n      })\n    }\n\n    const {\n      pageSize,\n      currentPage,\n      total,\n      setTotal,\n      setCurrentPage,\n      currentPageChange,\n      pageSizeChange,\n    } = usePagination(fetchData, { pageSize:props.defaultPagination.pageSize, currentPage:props.defaultPagination.currentPage, total: props.defaultPagination.total })\n    const pagination = reactive({\n      show: true,\n      currentPage: currentPage,\n      pageSize: pageSize,\n      total: total,\n    })\n\n    // 查询表格数据\n    async function fetchData () {\n      await props.dataFetcher({\n        pageSize: pagination.pageSize,\n        currentPage: pagination.currentPage,\n        params: searchParams.value,\n        setTotal: setAllTotal,\n      })\n      Object.assign(totalInfoData, { search: true, checked: false, total: total.value })\n    }\n\n    // 设置总数\n    const setAllTotal = (newTotal: number) => {\n      setTotal(newTotal)\n      pagination.total = newTotal\n    }\n\n    const getSlotNames = (cols: any, result: any[]) => {\n      cols.forEach(col => {\n        if (col.slotName && !reservedSlotName.includes(col.slotName)) {\n          result.push(col)\n        }\n        if (col.children && Array.isArray(col.children)) {\n          getSlotNames(col.children, result)\n        }\n      })\n    }\n    // 过滤几个已使用的保留插槽\n    const reservedSlotName = ['total-info-toolbar-extra-after', 'toolbar-extra-before','toolbar-extra-after','selectionCol', 'tableSelection', 'customExpand', 'tableIndex', 'action']\n    const slotCols = computed(() => {\n      const result: any[] = []\n      getSlotNames(props.cols, result)\n      return result\n    })\n    const searchItemsSlots = computed(() => {\n      const result: string[] = []\n      props.searchItems.forEach(si => {\n        if (si.type === 'slot' && si.slotName) {\n          result.push(si.slotName)\n        }\n      })\n      return result\n    })\n\n    const filterSlots = computed(() => {\n      const result: string[] = []\n      props.cols.forEach((item: any) => {\n        if (item.filter && item.filter.slotName && !reservedSlotName.includes(item.filter.slotName)) {\n          result.push(item.filter)\n        }\n      })\n      return result\n    })\n\n    /**\n     * 重新刷新接口数据，重置多选，一般用于多选或其他操作\n     * @param auto 在当前页没有数据时，是否自动向前翻页。默认false\n     */\n    const refresh = async (auto = false) => {\n      await fetchData()\n      if (auto && props.tableData.length === 0 && pagination.total > 0 && pagination.currentPage > 1) {\n        pagination.currentPage -= 1\n        await fetchData()\n      }\n      selectedRowKeys.value = []\n      isSelectedAll.value = false\n    }\n\n    /**\n     * 设置数据回到第一页，保留搜索以及多选等条件\n     */\n    const reset = () => {\n      setCurrentPage(1)\n    }\n\n    /**\n     * 重置搜索，重置多选等，并且设置数据回到第一页，\n     */\n    const resetAll = () => {\n      selectedRowKeys.value = []\n      isSelectedAll.value = false\n      clearTags([])\n    }\n\n    /**\n     * 重置搜索，重置多选\n     */\n    const clearAll = () => {\n      selectedRowKeys.value = []\n      isSelectedAll.value = false\n      currentSearchTags.value = []\n      searchParams.value = {}\n    }\n\n    // 手动设置行选中状态，用于把表格作为选择工具时，回显已选的数据\n    const setSeletedRowKeys = (keys: string[]) => {\n      selectedRowKeys.value = keys\n      // 单选时还需要设置 selectedRadioKey 才能让 radio 回显选中状态\n      if (!props.isMultipleSelect) {\n        selectedRadioKey.value = keys[0]\n      }\n    }\n\n    const tableContentObserver = new ResizeObserver(entries => {\n      // 注意，entres是个数组，数组项为每个需要监听的DOM节点\n      entries.forEach(entry => {\n        // console.log('大小位置 contentRect', entry.contentRect)\n        // console.log('监听的DOM target', entry.target)\n        if (entry.target.className.indexOf('tree-page-content') !== -1) {\n          // 执行内容区的高度变动\n          setTableHeight(entry.contentRect.height)\n        }\n      })\n    })\n\n    const handleRadioChange = (id: string | number) => {\n      selectedRowKeys.value = [id]\n      selectRow()\n    }\n\n    watch(() => props.tabs, () => {\n      if (props.tabs?.length) {\n        const defaultTab = props.tabs.find(t => t.default)\n        activeTab.value = defaultTab?.name ?? props.tabs[0].name\n      }\n    }, {\n      immediate: true,\n      deep: true,\n    })\n\n    // 初始化查询表格数据\n    onMounted(async () => {\n      // tableContentObserver.observe(tableContentRef.value as Element)\n      if (props.searchItems.length <= 0) {\n        setCurrentPage(1)\n      }\n    })\n    onBeforeUnmount(() => {\n      tableContentObserver && tableContentObserver.disconnect()\n    })\n\n    return {\n      activeTab,\n      tableContentHeight,\n      currentSearchTags,\n      totalInfoData,\n      newCols,\n      slotCols,\n      filterSlots,\n      tableStyle,\n\n      searchItemsSlots,\n      searchBarChanged,\n      setContentHeight,\n\n      setTagBoxHeight,\n      clearTags,\n\n      isSelectedAll,\n      selectedRowKeys,\n      selectAll,\n      selectRow,\n      isIndeterminate,\n\n      pagination,\n      pageSize,\n      currentPage,\n      total,\n      setTotal,\n      currentPageChange,\n      pageSizeChange,\n\n      refresh,\n      reset,\n      resetAll,\n      clearAll,\n      setSeletedRowKeys,\n      simpleTableListRef,\n      tableContentRef,\n      handleRadioChange,\n      selectedRadioKey,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport PageTableV2 from './src/page-table-v2.vue'\n\nexport const FxPageTableV2 = withInstall(PageTableV2)\nexport default FxPageTableV2\n\nexport * from './src/types'\n","function echartsFontSize(res: number, basisHeight: number) {\n  const clientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight\n  if (!clientHeight) return\n  const fontSize = clientHeight / basisHeight\n  return res * fontSize\n}\n\nconst EChartUtils = {\n  echartsFontSize,\n}\n\nexport { EChartUtils }\n","import { HlLoading, LoadingOptions, LoadingInstance, HlMessage } from 'hongluan-ui'\n\nlet loading: LoadingInstance\nlet needLoadingRequestCount = 0\n\nfunction startLoading (args: LoadingOptions | undefined) {\n  loading = HlLoading.service({ lock: true,\n    text: '加载中……',\n    background: 'rgba(0, 0, 0, 0.05)',\n    ...args })\n}\n\nfunction tryCloseLoading () {\n  loading.close()\n}\n\nfunction preventShakeHandle (fn: { (): void; (): void; }, wait: number) {\n  let timer: NodeJS.Timeout\n  let startTime = 0\n\n  return function run () {\n    const nowTime = new Date().getTime()\n    if (nowTime - startTime < wait) {\n      // 触发时间\n      clearTimeout(timer)\n      startTime = nowTime\n      timer = setTimeout(() => {\n        fn()\n      }, wait)\n    } else {\n      startTime = nowTime\n      timer = setTimeout(() => {\n        fn()\n      }, wait)\n    }\n  }\n}\n\nconst Loading = {\n  showFullScreenLoading (args = {}) {\n    if (needLoadingRequestCount === 0) {\n      startLoading(args)\n    }\n    needLoadingRequestCount++\n  },\n  tryHideFullScreenLoading () {\n    if (needLoadingRequestCount <= 0) return\n    needLoadingRequestCount--\n    if (needLoadingRequestCount === 0) {\n      preventShakeHandle(tryCloseLoading, 300)()\n    }\n  },\n  showMessageTip(code: number, txt: string) {\n    switch (code) {\n      case 1:\n        // 成功\n        HlMessage({\n          grouping: true,\n          showClose: true,\n          message: `${txt}`,\n          type: 'success',\n        })\n        break\n      case 2:\n        // 轻微级别\n        HlMessage({\n          grouping: true,\n          showClose: true,\n          message: `${txt}`,\n          type: 'warning',\n        })\n        break\n      case 3:\n        // 一般级别\n        HlMessage({\n          grouping: true,\n          showClose: true,\n          message: `${txt}`,\n          type: 'info',\n        })\n        break\n      case 4:\n      case 5:\n        // 严重\n        HlMessage({\n          grouping: true,\n          showClose: true,\n          message: `${txt}`,\n          type: 'error',\n        })\n        break\n      default:\n        console.error('code error!')\n        break\n    }\n  },\n}\n\nexport { Loading }\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n  return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n  return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n  if (toString.call(val) !== '[object Object]') {\n    return false;\n  }\n\n  var prototype = Object.getPrototypeOf(val);\n  return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n  return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n  return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n  return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n                                           navigator.product === 'NativeScript' ||\n                                           navigator.product === 'NS')) {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (isPlainObject(result[key]) && isPlainObject(val)) {\n      result[key] = merge(result[key], val);\n    } else if (isPlainObject(val)) {\n      result[key] = merge({}, val);\n    } else if (isArray(val)) {\n      result[key] = val.slice();\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n  if (content.charCodeAt(0) === 0xFEFF) {\n    content = content.slice(1);\n  }\n  return content;\n}\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isPlainObject: isPlainObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  extend: extend,\n  trim: trim,\n  stripBOM: stripBOM\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    var hashmarkIndex = url.indexOf('#');\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected,\n    synchronous: options ? options.synchronous : false,\n    runWhen: options ? options.runWhen : null\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n  error.config = config;\n  if (code) {\n    error.code = code;\n  }\n\n  error.request = request;\n  error.response = response;\n  error.isAxiosError = true;\n\n  error.toJSON = function toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: this.config,\n      code: this.code,\n      status: this.response && this.response.status ? this.response.status : null\n    };\n  };\n  return error;\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n  var error = new Error(message);\n  return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(createError(\n      'Request failed with status code ' + response.status,\n      response.config,\n      null,\n      response.request,\n      response\n    ));\n  }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n    (function standardBrowserEnv() {\n      return {\n        write: function write(name, value, expires, path, domain, secure) {\n          var cookie = [];\n          cookie.push(name + '=' + encodeURIComponent(value));\n\n          if (utils.isNumber(expires)) {\n            cookie.push('expires=' + new Date(expires).toGMTString());\n          }\n\n          if (utils.isString(path)) {\n            cookie.push('path=' + path);\n          }\n\n          if (utils.isString(domain)) {\n            cookie.push('domain=' + domain);\n          }\n\n          if (secure === true) {\n            cookie.push('secure');\n          }\n\n          document.cookie = cookie.join('; ');\n        },\n\n        read: function read(name) {\n          var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n          return (match ? decodeURIComponent(match[3]) : null);\n        },\n\n        remove: function remove(name) {\n          this.write(name, '', Date.now() - 86400000);\n        }\n      };\n    })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return {\n        write: function write() {},\n        read: function read() { return null; },\n        remove: function remove() {}\n      };\n    })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n  if (baseURL && !isAbsoluteURL(requestedURL)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n    (function standardBrowserEnv() {\n      var msie = /(msie|trident)/i.test(navigator.userAgent);\n      var urlParsingNode = document.createElement('a');\n      var originURL;\n\n      /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n      function resolveURL(url) {\n        var href = url;\n\n        if (msie) {\n        // IE needs attribute set twice to normalize properties\n          urlParsingNode.setAttribute('href', href);\n          href = urlParsingNode.href;\n        }\n\n        urlParsingNode.setAttribute('href', href);\n\n        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n        return {\n          href: urlParsingNode.href,\n          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n          host: urlParsingNode.host,\n          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n          hostname: urlParsingNode.hostname,\n          port: urlParsingNode.port,\n          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n            urlParsingNode.pathname :\n            '/' + urlParsingNode.pathname\n        };\n      }\n\n      originURL = resolveURL(window.location.href);\n\n      /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n      return function isURLSameOrigin(requestURL) {\n        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n        return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n      };\n    })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return function isURLSameOrigin() {\n        return true;\n      };\n    })()\n);\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n  this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n  return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n    var responseType = config.responseType;\n    var onCanceled;\n    function done() {\n      if (config.cancelToken) {\n        config.cancelToken.unsubscribe(onCanceled);\n      }\n\n      if (config.signal) {\n        config.signal.removeEventListener('abort', onCanceled);\n      }\n    }\n\n    if (utils.isFormData(requestData)) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    var fullPath = buildFullPath(config.baseURL, config.url);\n    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !responseType || responseType === 'text' ||  responseType === 'json' ?\n        request.responseText : request.response;\n      var response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(function _resolve(value) {\n        resolve(value);\n        done();\n      }, function _reject(err) {\n        reject(err);\n        done();\n      }, response);\n\n      // Clean up request\n      request = null;\n    }\n\n    if ('onloadend' in request) {\n      // Use onloadend if available\n      request.onloadend = onloadend;\n    } else {\n      // Listen for ready state to emulate onloadend\n      request.onreadystatechange = function handleLoad() {\n        if (!request || request.readyState !== 4) {\n          return;\n        }\n\n        // The request errored out and we didn't get a response, this will be\n        // handled by onerror instead\n        // With one exception: request that using file: protocol, most browsers\n        // will return status as 0 even though it's a successful request\n        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n          return;\n        }\n        // readystate handler is calling before onerror or ontimeout handlers,\n        // so we should call onloadend on the next 'tick'\n        setTimeout(onloadend);\n      };\n    }\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(createError('Network Error', config, null, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n      var transitional = config.transitional || defaults.transitional;\n      if (config.timeoutErrorMessage) {\n        timeoutErrorMessage = config.timeoutErrorMessage;\n      }\n      reject(createError(\n        timeoutErrorMessage,\n        config,\n        transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n        cookies.read(config.xsrfCookieName) :\n        undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(config.withCredentials)) {\n      request.withCredentials = !!config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (responseType && responseType !== 'json') {\n      request.responseType = config.responseType;\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken || config.signal) {\n      // Handle cancellation\n      // eslint-disable-next-line func-names\n      onCanceled = function(cancel) {\n        if (!request) {\n          return;\n        }\n        reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);\n        request.abort();\n        request = null;\n      };\n\n      config.cancelToken && config.cancelToken.subscribe(onCanceled);\n      if (config.signal) {\n        config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n      }\n    }\n\n    if (!requestData) {\n      requestData = null;\n    }\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n","var debug;\n\nmodule.exports = function () {\n  if (!debug) {\n    try {\n      /* eslint global-require: off */\n      debug = require(\"debug\")(\"follow-redirects\");\n    }\n    catch (error) { /* */ }\n    if (typeof debug !== \"function\") {\n      debug = function () { /* */ };\n    }\n  }\n  debug.apply(null, arguments);\n};\n","var url = require(\"url\");\nvar URL = url.URL;\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar Writable = require(\"stream\").Writable;\nvar assert = require(\"assert\");\nvar debug = require(\"./debug\");\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n  eventHandlers[event] = function (arg1, arg2, arg3) {\n    this._redirectable.emit(event, arg1, arg2, arg3);\n  };\n});\n\nvar InvalidUrlError = createErrorType(\n  \"ERR_INVALID_URL\",\n  \"Invalid URL\",\n  TypeError\n);\n// Error types with codes\nvar RedirectionError = createErrorType(\n  \"ERR_FR_REDIRECTION_FAILURE\",\n  \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n  \"ERR_FR_TOO_MANY_REDIRECTS\",\n  \"Maximum number of redirects exceeded\"\n);\nvar MaxBodyLengthExceededError = createErrorType(\n  \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n  \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n  \"ERR_STREAM_WRITE_AFTER_END\",\n  \"write after end\"\n);\n\n// istanbul ignore next\nvar destroy = Writable.prototype.destroy || noop;\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n  // Initialize the request\n  Writable.call(this);\n  this._sanitizeOptions(options);\n  this._options = options;\n  this._ended = false;\n  this._ending = false;\n  this._redirectCount = 0;\n  this._redirects = [];\n  this._requestBodyLength = 0;\n  this._requestBodyBuffers = [];\n\n  // Attach a callback if passed\n  if (responseCallback) {\n    this.on(\"response\", responseCallback);\n  }\n\n  // React to responses of native requests\n  var self = this;\n  this._onNativeResponse = function (response) {\n    self._processResponse(response);\n  };\n\n  // Perform the first request\n  this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n  destroyRequest(this._currentRequest);\n  this._currentRequest.abort();\n  this.emit(\"abort\");\n};\n\nRedirectableRequest.prototype.destroy = function (error) {\n  destroyRequest(this._currentRequest, error);\n  destroy.call(this, error);\n  return this;\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n  // Writing is not allowed if end has been called\n  if (this._ending) {\n    throw new WriteAfterEndError();\n  }\n\n  // Validate input and shift parameters if necessary\n  if (!isString(data) && !isBuffer(data)) {\n    throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n  }\n  if (isFunction(encoding)) {\n    callback = encoding;\n    encoding = null;\n  }\n\n  // Ignore empty buffers, since writing them doesn't invoke the callback\n  // https://github.com/nodejs/node/issues/22066\n  if (data.length === 0) {\n    if (callback) {\n      callback();\n    }\n    return;\n  }\n  // Only write when we don't exceed the maximum body length\n  if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n    this._requestBodyLength += data.length;\n    this._requestBodyBuffers.push({ data: data, encoding: encoding });\n    this._currentRequest.write(data, encoding, callback);\n  }\n  // Error when we exceed the maximum body length\n  else {\n    this.emit(\"error\", new MaxBodyLengthExceededError());\n    this.abort();\n  }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n  // Shift parameters if necessary\n  if (isFunction(data)) {\n    callback = data;\n    data = encoding = null;\n  }\n  else if (isFunction(encoding)) {\n    callback = encoding;\n    encoding = null;\n  }\n\n  // Write data if needed and end\n  if (!data) {\n    this._ended = this._ending = true;\n    this._currentRequest.end(null, null, callback);\n  }\n  else {\n    var self = this;\n    var currentRequest = this._currentRequest;\n    this.write(data, encoding, function () {\n      self._ended = true;\n      currentRequest.end(null, null, callback);\n    });\n    this._ending = true;\n  }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n  this._options.headers[name] = value;\n  this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n  delete this._options.headers[name];\n  this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n  var self = this;\n\n  // Destroys the socket on timeout\n  function destroyOnTimeout(socket) {\n    socket.setTimeout(msecs);\n    socket.removeListener(\"timeout\", socket.destroy);\n    socket.addListener(\"timeout\", socket.destroy);\n  }\n\n  // Sets up a timer to trigger a timeout event\n  function startTimer(socket) {\n    if (self._timeout) {\n      clearTimeout(self._timeout);\n    }\n    self._timeout = setTimeout(function () {\n      self.emit(\"timeout\");\n      clearTimer();\n    }, msecs);\n    destroyOnTimeout(socket);\n  }\n\n  // Stops a timeout from triggering\n  function clearTimer() {\n    // Clear the timeout\n    if (self._timeout) {\n      clearTimeout(self._timeout);\n      self._timeout = null;\n    }\n\n    // Clean up all attached listeners\n    self.removeListener(\"abort\", clearTimer);\n    self.removeListener(\"error\", clearTimer);\n    self.removeListener(\"response\", clearTimer);\n    self.removeListener(\"close\", clearTimer);\n    if (callback) {\n      self.removeListener(\"timeout\", callback);\n    }\n    if (!self.socket) {\n      self._currentRequest.removeListener(\"socket\", startTimer);\n    }\n  }\n\n  // Attach callback if passed\n  if (callback) {\n    this.on(\"timeout\", callback);\n  }\n\n  // Start the timer if or when the socket is opened\n  if (this.socket) {\n    startTimer(this.socket);\n  }\n  else {\n    this._currentRequest.once(\"socket\", startTimer);\n  }\n\n  // Clean up on events\n  this.on(\"socket\", destroyOnTimeout);\n  this.on(\"abort\", clearTimer);\n  this.on(\"error\", clearTimer);\n  this.on(\"response\", clearTimer);\n  this.on(\"close\", clearTimer);\n\n  return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n  \"flushHeaders\", \"getHeader\",\n  \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n  RedirectableRequest.prototype[method] = function (a, b) {\n    return this._currentRequest[method](a, b);\n  };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n  Object.defineProperty(RedirectableRequest.prototype, property, {\n    get: function () { return this._currentRequest[property]; },\n  });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n  // Ensure headers are always present\n  if (!options.headers) {\n    options.headers = {};\n  }\n\n  // Since http.request treats host as an alias of hostname,\n  // but the url module interprets host as hostname plus port,\n  // eliminate the host property to avoid confusion.\n  if (options.host) {\n    // Use hostname if set, because it has precedence\n    if (!options.hostname) {\n      options.hostname = options.host;\n    }\n    delete options.host;\n  }\n\n  // Complete the URL object when necessary\n  if (!options.pathname && options.path) {\n    var searchPos = options.path.indexOf(\"?\");\n    if (searchPos < 0) {\n      options.pathname = options.path;\n    }\n    else {\n      options.pathname = options.path.substring(0, searchPos);\n      options.search = options.path.substring(searchPos);\n    }\n  }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n  // Load the native protocol\n  var protocol = this._options.protocol;\n  var nativeProtocol = this._options.nativeProtocols[protocol];\n  if (!nativeProtocol) {\n    this.emit(\"error\", new TypeError(\"Unsupported protocol \" + protocol));\n    return;\n  }\n\n  // If specified, use the agent corresponding to the protocol\n  // (HTTP and HTTPS use different types of agents)\n  if (this._options.agents) {\n    var scheme = protocol.slice(0, -1);\n    this._options.agent = this._options.agents[scheme];\n  }\n\n  // Create the native request and set up its event handlers\n  var request = this._currentRequest =\n        nativeProtocol.request(this._options, this._onNativeResponse);\n  request._redirectable = this;\n  for (var event of events) {\n    request.on(event, eventHandlers[event]);\n  }\n\n  // RFC7230§5.3.1: When making a request directly to an origin server, […]\n  // a client MUST send only the absolute path […] as the request-target.\n  this._currentUrl = /^\\//.test(this._options.path) ?\n    url.format(this._options) :\n    // When making a request to a proxy, […]\n    // a client MUST send the target URI in absolute-form […].\n    this._options.path;\n\n  // End a redirected request\n  // (The first request must be ended explicitly with RedirectableRequest#end)\n  if (this._isRedirect) {\n    // Write the request entity and end\n    var i = 0;\n    var self = this;\n    var buffers = this._requestBodyBuffers;\n    (function writeNext(error) {\n      // Only write if this request has not been redirected yet\n      /* istanbul ignore else */\n      if (request === self._currentRequest) {\n        // Report any write errors\n        /* istanbul ignore if */\n        if (error) {\n          self.emit(\"error\", error);\n        }\n        // Write the next buffer if there are still left\n        else if (i < buffers.length) {\n          var buffer = buffers[i++];\n          /* istanbul ignore else */\n          if (!request.finished) {\n            request.write(buffer.data, buffer.encoding, writeNext);\n          }\n        }\n        // End the request if `end` has been called on us\n        else if (self._ended) {\n          request.end();\n        }\n      }\n    }());\n  }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n  // Store the redirected response\n  var statusCode = response.statusCode;\n  if (this._options.trackRedirects) {\n    this._redirects.push({\n      url: this._currentUrl,\n      headers: response.headers,\n      statusCode: statusCode,\n    });\n  }\n\n  // RFC7231§6.4: The 3xx (Redirection) class of status code indicates\n  // that further action needs to be taken by the user agent in order to\n  // fulfill the request. If a Location header field is provided,\n  // the user agent MAY automatically redirect its request to the URI\n  // referenced by the Location field value,\n  // even if the specific status code is not understood.\n\n  // If the response is not a redirect; return it as-is\n  var location = response.headers.location;\n  if (!location || this._options.followRedirects === false ||\n      statusCode < 300 || statusCode >= 400) {\n    response.responseUrl = this._currentUrl;\n    response.redirects = this._redirects;\n    this.emit(\"response\", response);\n\n    // Clean up\n    this._requestBodyBuffers = [];\n    return;\n  }\n\n  // The response is a redirect, so abort the current request\n  destroyRequest(this._currentRequest);\n  // Discard the remainder of the response to avoid waiting for data\n  response.destroy();\n\n  // RFC7231§6.4: A client SHOULD detect and intervene\n  // in cyclical redirections (i.e., \"infinite\" redirection loops).\n  if (++this._redirectCount > this._options.maxRedirects) {\n    this.emit(\"error\", new TooManyRedirectsError());\n    return;\n  }\n\n  // Store the request headers if applicable\n  var requestHeaders;\n  var beforeRedirect = this._options.beforeRedirect;\n  if (beforeRedirect) {\n    requestHeaders = Object.assign({\n      // The Host header was set by nativeProtocol.request\n      Host: response.req.getHeader(\"host\"),\n    }, this._options.headers);\n  }\n\n  // RFC7231§6.4: Automatic redirection needs to done with\n  // care for methods not known to be safe, […]\n  // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change\n  // the request method from POST to GET for the subsequent request.\n  var method = this._options.method;\n  if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n      // RFC7231§6.4.4: The 303 (See Other) status code indicates that\n      // the server is redirecting the user agent to a different resource […]\n      // A user agent can perform a retrieval request targeting that URI\n      // (a GET or HEAD request if using HTTP) […]\n      (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n    this._options.method = \"GET\";\n    // Drop a possible entity and headers related to it\n    this._requestBodyBuffers = [];\n    removeMatchingHeaders(/^content-/i, this._options.headers);\n  }\n\n  // Drop the Host header, as the redirect might lead to a different host\n  var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n  // If the redirect is relative, carry over the host of the last request\n  var currentUrlParts = url.parse(this._currentUrl);\n  var currentHost = currentHostHeader || currentUrlParts.host;\n  var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n    url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n  // Determine the URL of the redirection\n  var redirectUrl;\n  try {\n    redirectUrl = url.resolve(currentUrl, location);\n  }\n  catch (cause) {\n    this.emit(\"error\", new RedirectionError({ cause: cause }));\n    return;\n  }\n\n  // Create the redirected request\n  debug(\"redirecting to\", redirectUrl);\n  this._isRedirect = true;\n  var redirectUrlParts = url.parse(redirectUrl);\n  Object.assign(this._options, redirectUrlParts);\n\n  // Drop confidential headers when redirecting to a less secure protocol\n  // or to a different domain that is not a superdomain\n  if (redirectUrlParts.protocol !== currentUrlParts.protocol &&\n     redirectUrlParts.protocol !== \"https:\" ||\n     redirectUrlParts.host !== currentHost &&\n     !isSubdomain(redirectUrlParts.host, currentHost)) {\n    removeMatchingHeaders(/^(?:authorization|cookie)$/i, this._options.headers);\n  }\n\n  // Evaluate the beforeRedirect callback\n  if (isFunction(beforeRedirect)) {\n    var responseDetails = {\n      headers: response.headers,\n      statusCode: statusCode,\n    };\n    var requestDetails = {\n      url: currentUrl,\n      method: method,\n      headers: requestHeaders,\n    };\n    try {\n      beforeRedirect(this._options, responseDetails, requestDetails);\n    }\n    catch (err) {\n      this.emit(\"error\", err);\n      return;\n    }\n    this._sanitizeOptions(this._options);\n  }\n\n  // Perform the redirected request\n  try {\n    this._performRequest();\n  }\n  catch (cause) {\n    this.emit(\"error\", new RedirectionError({ cause: cause }));\n  }\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n  // Default settings\n  var exports = {\n    maxRedirects: 21,\n    maxBodyLength: 10 * 1024 * 1024,\n  };\n\n  // Wrap each protocol\n  var nativeProtocols = {};\n  Object.keys(protocols).forEach(function (scheme) {\n    var protocol = scheme + \":\";\n    var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n    var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n    // Executes a request, following redirects\n    function request(input, options, callback) {\n      // Parse parameters\n      if (isString(input)) {\n        var parsed;\n        try {\n          parsed = urlToOptions(new URL(input));\n        }\n        catch (err) {\n          /* istanbul ignore next */\n          parsed = url.parse(input);\n        }\n        if (!isString(parsed.protocol)) {\n          throw new InvalidUrlError({ input });\n        }\n        input = parsed;\n      }\n      else if (URL && (input instanceof URL)) {\n        input = urlToOptions(input);\n      }\n      else {\n        callback = options;\n        options = input;\n        input = { protocol: protocol };\n      }\n      if (isFunction(options)) {\n        callback = options;\n        options = null;\n      }\n\n      // Set defaults\n      options = Object.assign({\n        maxRedirects: exports.maxRedirects,\n        maxBodyLength: exports.maxBodyLength,\n      }, input, options);\n      options.nativeProtocols = nativeProtocols;\n      if (!isString(options.host) && !isString(options.hostname)) {\n        options.hostname = \"::1\";\n      }\n\n      assert.equal(options.protocol, protocol, \"protocol mismatch\");\n      debug(\"options\", options);\n      return new RedirectableRequest(options, callback);\n    }\n\n    // Executes a GET request, following redirects\n    function get(input, options, callback) {\n      var wrappedRequest = wrappedProtocol.request(input, options, callback);\n      wrappedRequest.end();\n      return wrappedRequest;\n    }\n\n    // Expose the properties on the wrapped protocol\n    Object.defineProperties(wrappedProtocol, {\n      request: { value: request, configurable: true, enumerable: true, writable: true },\n      get: { value: get, configurable: true, enumerable: true, writable: true },\n    });\n  });\n  return exports;\n}\n\n/* istanbul ignore next */\nfunction noop() { /* empty */ }\n\n// from https://github.com/nodejs/node/blob/master/lib/internal/url.js\nfunction urlToOptions(urlObject) {\n  var options = {\n    protocol: urlObject.protocol,\n    hostname: urlObject.hostname.startsWith(\"[\") ?\n      /* istanbul ignore next */\n      urlObject.hostname.slice(1, -1) :\n      urlObject.hostname,\n    hash: urlObject.hash,\n    search: urlObject.search,\n    pathname: urlObject.pathname,\n    path: urlObject.pathname + urlObject.search,\n    href: urlObject.href,\n  };\n  if (urlObject.port !== \"\") {\n    options.port = Number(urlObject.port);\n  }\n  return options;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n  var lastValue;\n  for (var header in headers) {\n    if (regex.test(header)) {\n      lastValue = headers[header];\n      delete headers[header];\n    }\n  }\n  return (lastValue === null || typeof lastValue === \"undefined\") ?\n    undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, message, baseClass) {\n  // Create constructor\n  function CustomError(properties) {\n    Error.captureStackTrace(this, this.constructor);\n    Object.assign(this, properties || {});\n    this.code = code;\n    this.message = this.cause ? message + \": \" + this.cause.message : message;\n  }\n\n  // Attach constructor and set default properties\n  CustomError.prototype = new (baseClass || Error)();\n  CustomError.prototype.constructor = CustomError;\n  CustomError.prototype.name = \"Error [\" + code + \"]\";\n  return CustomError;\n}\n\nfunction destroyRequest(request, error) {\n  for (var event of events) {\n    request.removeListener(event, eventHandlers[event]);\n  }\n  request.on(\"error\", noop);\n  request.destroy(error);\n}\n\nfunction isSubdomain(subdomain, domain) {\n  assert(isString(subdomain) && isString(domain));\n  var dot = subdomain.length - domain.length - 1;\n  return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\nfunction isString(value) {\n  return typeof value === \"string\" || value instanceof String;\n}\n\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\n\nfunction isBuffer(value) {\n  return typeof value === \"object\" && (\"length\" in value);\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n","module.exports = {\n  \"version\": \"0.24.0\"\n};","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildFullPath = require('../core/buildFullPath');\nvar buildURL = require('./../helpers/buildURL');\nvar http = require('http');\nvar https = require('https');\nvar httpFollow = require('follow-redirects').http;\nvar httpsFollow = require('follow-redirects').https;\nvar url = require('url');\nvar zlib = require('zlib');\nvar VERSION = require('./../env/data').version;\nvar createError = require('../core/createError');\nvar enhanceError = require('../core/enhanceError');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\nvar isHttps = /https:?/;\n\n/**\n *\n * @param {http.ClientRequestArgs} options\n * @param {AxiosProxyConfig} proxy\n * @param {string} location\n */\nfunction setProxy(options, proxy, location) {\n  options.hostname = proxy.host;\n  options.host = proxy.host;\n  options.port = proxy.port;\n  options.path = location;\n\n  // Basic proxy authorization\n  if (proxy.auth) {\n    var base64 = Buffer.from(proxy.auth.username + ':' + proxy.auth.password, 'utf8').toString('base64');\n    options.headers['Proxy-Authorization'] = 'Basic ' + base64;\n  }\n\n  // If a proxy is used, any redirects must also pass through the proxy\n  options.beforeRedirect = function beforeRedirect(redirection) {\n    redirection.headers.host = redirection.host;\n    setProxy(redirection, proxy, redirection.href);\n  };\n}\n\n/*eslint consistent-return:0*/\nmodule.exports = function httpAdapter(config) {\n  return new Promise(function dispatchHttpRequest(resolvePromise, rejectPromise) {\n    var onCanceled;\n    function done() {\n      if (config.cancelToken) {\n        config.cancelToken.unsubscribe(onCanceled);\n      }\n\n      if (config.signal) {\n        config.signal.removeEventListener('abort', onCanceled);\n      }\n    }\n    var resolve = function resolve(value) {\n      done();\n      resolvePromise(value);\n    };\n    var reject = function reject(value) {\n      done();\n      rejectPromise(value);\n    };\n    var data = config.data;\n    var headers = config.headers;\n    var headerNames = {};\n\n    Object.keys(headers).forEach(function storeLowerName(name) {\n      headerNames[name.toLowerCase()] = name;\n    });\n\n    // Set User-Agent (required by some servers)\n    // See https://github.com/axios/axios/issues/69\n    if ('user-agent' in headerNames) {\n      // User-Agent is specified; handle case where no UA header is desired\n      if (!headers[headerNames['user-agent']]) {\n        delete headers[headerNames['user-agent']];\n      }\n      // Otherwise, use specified value\n    } else {\n      // Only set header if it hasn't been set in config\n      headers['User-Agent'] = 'axios/' + VERSION;\n    }\n\n    if (data && !utils.isStream(data)) {\n      if (Buffer.isBuffer(data)) {\n        // Nothing to do...\n      } else if (utils.isArrayBuffer(data)) {\n        data = Buffer.from(new Uint8Array(data));\n      } else if (utils.isString(data)) {\n        data = Buffer.from(data, 'utf-8');\n      } else {\n        return reject(createError(\n          'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',\n          config\n        ));\n      }\n\n      // Add Content-Length header if data exists\n      if (!headerNames['content-length']) {\n        headers['Content-Length'] = data.length;\n      }\n    }\n\n    // HTTP basic authentication\n    var auth = undefined;\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password || '';\n      auth = username + ':' + password;\n    }\n\n    // Parse url\n    var fullPath = buildFullPath(config.baseURL, config.url);\n    var parsed = url.parse(fullPath);\n    var protocol = parsed.protocol || 'http:';\n\n    if (!auth && parsed.auth) {\n      var urlAuth = parsed.auth.split(':');\n      var urlUsername = urlAuth[0] || '';\n      var urlPassword = urlAuth[1] || '';\n      auth = urlUsername + ':' + urlPassword;\n    }\n\n    if (auth && headerNames.authorization) {\n      delete headers[headerNames.authorization];\n    }\n\n    var isHttpsRequest = isHttps.test(protocol);\n    var agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;\n\n    var options = {\n      path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\\?/, ''),\n      method: config.method.toUpperCase(),\n      headers: headers,\n      agent: agent,\n      agents: { http: config.httpAgent, https: config.httpsAgent },\n      auth: auth\n    };\n\n    if (config.socketPath) {\n      options.socketPath = config.socketPath;\n    } else {\n      options.hostname = parsed.hostname;\n      options.port = parsed.port;\n    }\n\n    var proxy = config.proxy;\n    if (!proxy && proxy !== false) {\n      var proxyEnv = protocol.slice(0, -1) + '_proxy';\n      var proxyUrl = process.env[proxyEnv] || process.env[proxyEnv.toUpperCase()];\n      if (proxyUrl) {\n        var parsedProxyUrl = url.parse(proxyUrl);\n        var noProxyEnv = process.env.no_proxy || process.env.NO_PROXY;\n        var shouldProxy = true;\n\n        if (noProxyEnv) {\n          var noProxy = noProxyEnv.split(',').map(function trim(s) {\n            return s.trim();\n          });\n\n          shouldProxy = !noProxy.some(function proxyMatch(proxyElement) {\n            if (!proxyElement) {\n              return false;\n            }\n            if (proxyElement === '*') {\n              return true;\n            }\n            if (proxyElement[0] === '.' &&\n                parsed.hostname.substr(parsed.hostname.length - proxyElement.length) === proxyElement) {\n              return true;\n            }\n\n            return parsed.hostname === proxyElement;\n          });\n        }\n\n        if (shouldProxy) {\n          proxy = {\n            host: parsedProxyUrl.hostname,\n            port: parsedProxyUrl.port,\n            protocol: parsedProxyUrl.protocol\n          };\n\n          if (parsedProxyUrl.auth) {\n            var proxyUrlAuth = parsedProxyUrl.auth.split(':');\n            proxy.auth = {\n              username: proxyUrlAuth[0],\n              password: proxyUrlAuth[1]\n            };\n          }\n        }\n      }\n    }\n\n    if (proxy) {\n      options.headers.host = parsed.hostname + (parsed.port ? ':' + parsed.port : '');\n      setProxy(options, proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);\n    }\n\n    var transport;\n    var isHttpsProxy = isHttpsRequest && (proxy ? isHttps.test(proxy.protocol) : true);\n    if (config.transport) {\n      transport = config.transport;\n    } else if (config.maxRedirects === 0) {\n      transport = isHttpsProxy ? https : http;\n    } else {\n      if (config.maxRedirects) {\n        options.maxRedirects = config.maxRedirects;\n      }\n      transport = isHttpsProxy ? httpsFollow : httpFollow;\n    }\n\n    if (config.maxBodyLength > -1) {\n      options.maxBodyLength = config.maxBodyLength;\n    }\n\n    if (config.insecureHTTPParser) {\n      options.insecureHTTPParser = config.insecureHTTPParser;\n    }\n\n    // Create the request\n    var req = transport.request(options, function handleResponse(res) {\n      if (req.aborted) return;\n\n      // uncompress the response body transparently if required\n      var stream = res;\n\n      // return the last request in case of redirects\n      var lastRequest = res.req || req;\n\n\n      // if no content, is HEAD request or decompress disabled we should not decompress\n      if (res.statusCode !== 204 && lastRequest.method !== 'HEAD' && config.decompress !== false) {\n        switch (res.headers['content-encoding']) {\n        /*eslint default-case:0*/\n        case 'gzip':\n        case 'compress':\n        case 'deflate':\n        // add the unzipper to the body stream processing pipeline\n          stream = stream.pipe(zlib.createUnzip());\n\n          // remove the content-encoding in order to not confuse downstream operations\n          delete res.headers['content-encoding'];\n          break;\n        }\n      }\n\n      var response = {\n        status: res.statusCode,\n        statusText: res.statusMessage,\n        headers: res.headers,\n        config: config,\n        request: lastRequest\n      };\n\n      if (config.responseType === 'stream') {\n        response.data = stream;\n        settle(resolve, reject, response);\n      } else {\n        var responseBuffer = [];\n        var totalResponseBytes = 0;\n        stream.on('data', function handleStreamData(chunk) {\n          responseBuffer.push(chunk);\n          totalResponseBytes += chunk.length;\n\n          // make sure the content length is not over the maxContentLength if specified\n          if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {\n            stream.destroy();\n            reject(createError('maxContentLength size of ' + config.maxContentLength + ' exceeded',\n              config, null, lastRequest));\n          }\n        });\n\n        stream.on('error', function handleStreamError(err) {\n          if (req.aborted) return;\n          reject(enhanceError(err, config, null, lastRequest));\n        });\n\n        stream.on('end', function handleStreamEnd() {\n          var responseData = Buffer.concat(responseBuffer);\n          if (config.responseType !== 'arraybuffer') {\n            responseData = responseData.toString(config.responseEncoding);\n            if (!config.responseEncoding || config.responseEncoding === 'utf8') {\n              responseData = utils.stripBOM(responseData);\n            }\n          }\n\n          response.data = responseData;\n          settle(resolve, reject, response);\n        });\n      }\n    });\n\n    // Handle errors\n    req.on('error', function handleRequestError(err) {\n      if (req.aborted && err.code !== 'ERR_FR_TOO_MANY_REDIRECTS') return;\n      reject(enhanceError(err, config, null, req));\n    });\n\n    // Handle request timeout\n    if (config.timeout) {\n      // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.\n      var timeout = parseInt(config.timeout, 10);\n\n      if (isNaN(timeout)) {\n        reject(createError(\n          'error trying to parse `config.timeout` to int',\n          config,\n          'ERR_PARSE_TIMEOUT',\n          req\n        ));\n\n        return;\n      }\n\n      // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.\n      // And timer callback will be fired, and abort() will be invoked before connection, then get \"socket hang up\" and code ECONNRESET.\n      // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.\n      // And then these socket which be hang up will devoring CPU little by little.\n      // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.\n      req.setTimeout(timeout, function handleRequestTimeout() {\n        req.abort();\n        var transitional = config.transitional || defaults.transitional;\n        reject(createError(\n          'timeout of ' + timeout + 'ms exceeded',\n          config,\n          transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n          req\n        ));\n      });\n    }\n\n    if (config.cancelToken || config.signal) {\n      // Handle cancellation\n      // eslint-disable-next-line func-names\n      onCanceled = function(cancel) {\n        if (req.aborted) return;\n\n        req.abort();\n        reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);\n      };\n\n      config.cancelToken && config.cancelToken.subscribe(onCanceled);\n      if (config.signal) {\n        config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n      }\n    }\n\n\n    // Send the request\n    if (utils.isStream(data)) {\n      data.on('error', function handleStreamError(err) {\n        reject(enhanceError(err, config, null, req));\n      }).pipe(req);\n    } else {\n      req.end(data);\n    }\n  });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\nvar enhanceError = require('./core/enhanceError');\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = require('./adapters/xhr');\n  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n    // For node use HTTP adapter\n    adapter = require('./adapters/http');\n  }\n  return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n  transitional: {\n    silentJSONParsing: true,\n    forcedJSONParsing: true,\n    clarifyTimeoutError: false\n  },\n\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Accept');\n    normalizeHeaderName(headers, 'Content-Type');\n\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n    if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n      setContentTypeIfUnset(headers, 'application/json');\n      return stringifySafely(data);\n    }\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    var transitional = this.transitional || defaults.transitional;\n    var silentJSONParsing = transitional && transitional.silentJSONParsing;\n    var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n    var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n    if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n      try {\n        return JSON.parse(data);\n      } catch (e) {\n        if (strictJSONParsing) {\n          if (e.name === 'SyntaxError') {\n            throw enhanceError(e, this, 'E_JSON_PARSE');\n          }\n          throw e;\n        }\n      }\n    }\n\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      'Accept': 'application/json, text/plain, */*'\n    }\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('./../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  var context = this || defaults;\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(context, data, headers);\n  });\n\n  return data;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new Cancel('canceled');\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData.call(\n    config,\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData.call(\n      config,\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData.call(\n          config,\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  var config = {};\n\n  function getMergedValue(target, source) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge(target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDeepProperties(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(config1[prop], config2[prop]);\n    } else if (!utils.isUndefined(config1[prop])) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(undefined, config2[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(undefined, config2[prop]);\n    } else if (!utils.isUndefined(config1[prop])) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(prop) {\n    if (prop in config2) {\n      return getMergedValue(config1[prop], config2[prop]);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  var mergeMap = {\n    'url': valueFromConfig2,\n    'method': valueFromConfig2,\n    'data': valueFromConfig2,\n    'baseURL': defaultToConfig2,\n    'transformRequest': defaultToConfig2,\n    'transformResponse': defaultToConfig2,\n    'paramsSerializer': defaultToConfig2,\n    'timeout': defaultToConfig2,\n    'timeoutMessage': defaultToConfig2,\n    'withCredentials': defaultToConfig2,\n    'adapter': defaultToConfig2,\n    'responseType': defaultToConfig2,\n    'xsrfCookieName': defaultToConfig2,\n    'xsrfHeaderName': defaultToConfig2,\n    'onUploadProgress': defaultToConfig2,\n    'onDownloadProgress': defaultToConfig2,\n    'decompress': defaultToConfig2,\n    'maxContentLength': defaultToConfig2,\n    'maxBodyLength': defaultToConfig2,\n    'transport': defaultToConfig2,\n    'httpAgent': defaultToConfig2,\n    'httpsAgent': defaultToConfig2,\n    'cancelToken': defaultToConfig2,\n    'socketPath': defaultToConfig2,\n    'responseEncoding': defaultToConfig2,\n    'validateStatus': mergeDirectKeys\n  };\n\n  utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n    var merge = mergeMap[prop] || mergeDeepProperties;\n    var configValue = merge(prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  return config;\n};\n","'use strict';\n\nvar VERSION = require('../env/data').version;\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n  }\n\n  // eslint-disable-next-line func-names\n  return function(value, opt, opts) {\n    if (validator === false) {\n      throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new TypeError('options must be an object');\n  }\n  var keys = Object.keys(options);\n  var i = keys.length;\n  while (i-- > 0) {\n    var opt = keys[i];\n    var validator = schema[opt];\n    if (validator) {\n      var value = options[opt];\n      var result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new TypeError('option ' + opt + ' must be ' + result);\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw Error('Unknown option ' + opt);\n    }\n  }\n}\n\nmodule.exports = {\n  assertOptions: assertOptions,\n  validators: validators\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof config === 'string') {\n    config = arguments[1] || {};\n    config.url = arguments[0];\n  } else {\n    config = config || {};\n  }\n\n  config = mergeConfig(this.defaults, config);\n\n  // Set config.method\n  if (config.method) {\n    config.method = config.method.toLowerCase();\n  } else if (this.defaults.method) {\n    config.method = this.defaults.method.toLowerCase();\n  } else {\n    config.method = 'get';\n  }\n\n  var transitional = config.transitional;\n\n  if (transitional !== undefined) {\n    validator.assertOptions(transitional, {\n      silentJSONParsing: validators.transitional(validators.boolean),\n      forcedJSONParsing: validators.transitional(validators.boolean),\n      clarifyTimeoutError: validators.transitional(validators.boolean)\n    }, false);\n  }\n\n  // filter out skipped interceptors\n  var requestInterceptorChain = [];\n  var synchronousRequestInterceptors = true;\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n      return;\n    }\n\n    synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n    requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  var responseInterceptorChain = [];\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  var promise;\n\n  if (!synchronousRequestInterceptors) {\n    var chain = [dispatchRequest, undefined];\n\n    Array.prototype.unshift.apply(chain, requestInterceptorChain);\n    chain = chain.concat(responseInterceptorChain);\n\n    promise = Promise.resolve(config);\n    while (chain.length) {\n      promise = promise.then(chain.shift(), chain.shift());\n    }\n\n    return promise;\n  }\n\n\n  var newConfig = config;\n  while (requestInterceptorChain.length) {\n    var onFulfilled = requestInterceptorChain.shift();\n    var onRejected = requestInterceptorChain.shift();\n    try {\n      newConfig = onFulfilled(newConfig);\n    } catch (error) {\n      onRejected(error);\n      break;\n    }\n  }\n\n  try {\n    promise = dispatchRequest(newConfig);\n  } catch (error) {\n    return Promise.reject(error);\n  }\n\n  while (responseInterceptorChain.length) {\n    promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n  }\n\n  return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n  config = mergeConfig(this.defaults, config);\n  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(mergeConfig(config || {}, {\n      method: method,\n      url: url,\n      data: (config || {}).data\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, data, config) {\n    return this.request(mergeConfig(config || {}, {\n      method: method,\n      url: url,\n      data: data\n    }));\n  };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n\n  // eslint-disable-next-line func-names\n  this.promise.then(function(cancel) {\n    if (!token._listeners) return;\n\n    var i;\n    var l = token._listeners.length;\n\n    for (i = 0; i < l; i++) {\n      token._listeners[i](cancel);\n    }\n    token._listeners = null;\n  });\n\n  // eslint-disable-next-line func-names\n  this.promise.then = function(onfulfilled) {\n    var _resolve;\n    // eslint-disable-next-line func-names\n    var promise = new Promise(function(resolve) {\n      token.subscribe(resolve);\n      _resolve = resolve;\n    }).then(onfulfilled);\n\n    promise.cancel = function reject() {\n      token.unsubscribe(_resolve);\n    };\n\n    return promise;\n  };\n\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new Cancel(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n  if (this.reason) {\n    listener(this.reason);\n    return;\n  }\n\n  if (this._listeners) {\n    this._listeners.push(listener);\n  } else {\n    this._listeners = [listener];\n  }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n  if (!this._listeners) {\n    return;\n  }\n  var index = this._listeners.indexOf(listener);\n  if (index !== -1) {\n    this._listeners.splice(index, 1);\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n","'use strict';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n  return (typeof payload === 'object') && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","module.exports = require('./lib/axios');","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\nvar test = {\n\tfoo: {}\n};\n\nvar $Object = Object;\n\nmodule.exports = function hasProto() {\n\treturn { __proto__: test }.foo === test.foo && !({ __proto__: null } instanceof $Object);\n};\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n    var arr = [];\n\n    for (var i = 0; i < a.length; i += 1) {\n        arr[i] = a[i];\n    }\n    for (var j = 0; j < b.length; j += 1) {\n        arr[j + a.length] = b[j];\n    }\n\n    return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n    var arr = [];\n    for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n        arr[j] = arrLike[i];\n    }\n    return arr;\n};\n\nvar joiny = function (arr, joiner) {\n    var str = '';\n    for (var i = 0; i < arr.length; i += 1) {\n        str += arr[i];\n        if (i + 1 < arr.length) {\n            str += joiner;\n        }\n    }\n    return str;\n};\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slicy(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                concatty(args, arguments)\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        }\n        return target.apply(\n            that,\n            concatty(args, arguments)\n        );\n\n    };\n\n    var boundLength = max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs[i] = '$' + i;\n    }\n\n    bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {(o: {}, p: PropertyKey) => p is keyof o} */\nmodule.exports = bind.call(call, $hasOwn);\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\nvar hasProto = require('has-proto')();\n\nvar getProto = Object.getPrototypeOf || (\n\thasProto\n\t\t? function (x) { return x.__proto__; } // eslint-disable-line no-proto\n\t\t: null\n);\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\nvar hasPropertyDescriptors = require('has-property-descriptors')();\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = hasPropertyDescriptors && GetIntrinsic('%Object.defineProperty%', true);\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar gopd = require('gopd');\n\n/** @type {(obj: Record<PropertyKey, unknown>, property: PropertyKey, value: unknown, nonEnumerable?: boolean | null, nonWritable?: boolean | null, nonConfigurable?: boolean | null, loose?: boolean) => void} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor<unknown>} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $floor = GetIntrinsic('%Math.floor%');\n\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(fn, 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(fn, 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\nvar setFunctionLength = require('set-function-length');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tif (typeof originalFunction !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\tvar func = $reflectApply(bind, $call, arguments);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\t1 + $max(0, originalFunction.length - (arguments.length - 1)),\n\t\ttrue\n\t);\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","module.exports = require('util').inspect;\n","var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n    ? Symbol.toStringTag\n    : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n    [].__proto__ === Array.prototype // eslint-disable-line no-proto\n        ? function (O) {\n            return O.__proto__; // eslint-disable-line no-proto\n        }\n        : null\n);\n\nfunction addNumericSeparator(num, str) {\n    if (\n        num === Infinity\n        || num === -Infinity\n        || num !== num\n        || (num && num > -1000 && num < 1000)\n        || $test.call(/e/, str)\n    ) {\n        return str;\n    }\n    var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n    if (typeof num === 'number') {\n        var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n        if (int !== num) {\n            var intStr = String(int);\n            var dec = $slice.call(str, intStr.length + 1);\n            return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n        }\n    }\n    return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n    var opts = options || {};\n\n    if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n        throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n    }\n    if (\n        has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n            ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n            : opts.maxStringLength !== null\n        )\n    ) {\n        throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n    }\n    var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n    if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n        throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n    }\n\n    if (\n        has(opts, 'indent')\n        && opts.indent !== null\n        && opts.indent !== '\\t'\n        && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n    ) {\n        throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n    }\n    if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n        throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n    }\n    var numericSeparator = opts.numericSeparator;\n\n    if (typeof obj === 'undefined') {\n        return 'undefined';\n    }\n    if (obj === null) {\n        return 'null';\n    }\n    if (typeof obj === 'boolean') {\n        return obj ? 'true' : 'false';\n    }\n\n    if (typeof obj === 'string') {\n        return inspectString(obj, opts);\n    }\n    if (typeof obj === 'number') {\n        if (obj === 0) {\n            return Infinity / obj > 0 ? '0' : '-0';\n        }\n        var str = String(obj);\n        return numericSeparator ? addNumericSeparator(obj, str) : str;\n    }\n    if (typeof obj === 'bigint') {\n        var bigIntStr = String(obj) + 'n';\n        return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n    }\n\n    var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n    if (typeof depth === 'undefined') { depth = 0; }\n    if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n        return isArray(obj) ? '[Array]' : '[Object]';\n    }\n\n    var indent = getIndent(opts, depth);\n\n    if (typeof seen === 'undefined') {\n        seen = [];\n    } else if (indexOf(seen, obj) >= 0) {\n        return '[Circular]';\n    }\n\n    function inspect(value, from, noIndent) {\n        if (from) {\n            seen = $arrSlice.call(seen);\n            seen.push(from);\n        }\n        if (noIndent) {\n            var newOpts = {\n                depth: opts.depth\n            };\n            if (has(opts, 'quoteStyle')) {\n                newOpts.quoteStyle = opts.quoteStyle;\n            }\n            return inspect_(value, newOpts, depth + 1, seen);\n        }\n        return inspect_(value, opts, depth + 1, seen);\n    }\n\n    if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n        var name = nameOf(obj);\n        var keys = arrObjKeys(obj, inspect);\n        return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n    }\n    if (isSymbol(obj)) {\n        var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n        return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n    }\n    if (isElement(obj)) {\n        var s = '<' + $toLowerCase.call(String(obj.nodeName));\n        var attrs = obj.attributes || [];\n        for (var i = 0; i < attrs.length; i++) {\n            s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n        }\n        s += '>';\n        if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n        s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';\n        return s;\n    }\n    if (isArray(obj)) {\n        if (obj.length === 0) { return '[]'; }\n        var xs = arrObjKeys(obj, inspect);\n        if (indent && !singleLineValues(xs)) {\n            return '[' + indentedJoin(xs, indent) + ']';\n        }\n        return '[ ' + $join.call(xs, ', ') + ' ]';\n    }\n    if (isError(obj)) {\n        var parts = arrObjKeys(obj, inspect);\n        if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n            return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n        }\n        if (parts.length === 0) { return '[' + String(obj) + ']'; }\n        return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n    }\n    if (typeof obj === 'object' && customInspect) {\n        if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n            return utilInspect(obj, { depth: maxDepth - depth });\n        } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n            return obj.inspect();\n        }\n    }\n    if (isMap(obj)) {\n        var mapParts = [];\n        if (mapForEach) {\n            mapForEach.call(obj, function (value, key) {\n                mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n            });\n        }\n        return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n    }\n    if (isSet(obj)) {\n        var setParts = [];\n        if (setForEach) {\n            setForEach.call(obj, function (value) {\n                setParts.push(inspect(value, obj));\n            });\n        }\n        return collectionOf('Set', setSize.call(obj), setParts, indent);\n    }\n    if (isWeakMap(obj)) {\n        return weakCollectionOf('WeakMap');\n    }\n    if (isWeakSet(obj)) {\n        return weakCollectionOf('WeakSet');\n    }\n    if (isWeakRef(obj)) {\n        return weakCollectionOf('WeakRef');\n    }\n    if (isNumber(obj)) {\n        return markBoxed(inspect(Number(obj)));\n    }\n    if (isBigInt(obj)) {\n        return markBoxed(inspect(bigIntValueOf.call(obj)));\n    }\n    if (isBoolean(obj)) {\n        return markBoxed(booleanValueOf.call(obj));\n    }\n    if (isString(obj)) {\n        return markBoxed(inspect(String(obj)));\n    }\n    // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other\n    /* eslint-env browser */\n    if (typeof window !== 'undefined' && obj === window) {\n        return '{ [object Window] }';\n    }\n    if (obj === global) {\n        return '{ [object globalThis] }';\n    }\n    if (!isDate(obj) && !isRegExp(obj)) {\n        var ys = arrObjKeys(obj, inspect);\n        var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n        var protoTag = obj instanceof Object ? '' : 'null prototype';\n        var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n        var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n        var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n        if (ys.length === 0) { return tag + '{}'; }\n        if (indent) {\n            return tag + '{' + indentedJoin(ys, indent) + '}';\n        }\n        return tag + '{ ' + $join.call(ys, ', ') + ' }';\n    }\n    return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n    var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n    return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n    return $replace.call(String(s), /\"/g, '&quot;');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n    if (hasShammedSymbols) {\n        return obj && typeof obj === 'object' && obj instanceof Symbol;\n    }\n    if (typeof obj === 'symbol') {\n        return true;\n    }\n    if (!obj || typeof obj !== 'object' || !symToString) {\n        return false;\n    }\n    try {\n        symToString.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isBigInt(obj) {\n    if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n        return false;\n    }\n    try {\n        bigIntValueOf.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n    return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n    return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n    if (f.name) { return f.name; }\n    var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n    if (m) { return m[1]; }\n    return null;\n}\n\nfunction indexOf(xs, x) {\n    if (xs.indexOf) { return xs.indexOf(x); }\n    for (var i = 0, l = xs.length; i < l; i++) {\n        if (xs[i] === x) { return i; }\n    }\n    return -1;\n}\n\nfunction isMap(x) {\n    if (!mapSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        mapSize.call(x);\n        try {\n            setSize.call(x);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof Map; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakMap(x) {\n    if (!weakMapHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakMapHas.call(x, weakMapHas);\n        try {\n            weakSetHas.call(x, weakSetHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakRef(x) {\n    if (!weakRefDeref || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakRefDeref.call(x);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isSet(x) {\n    if (!setSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        setSize.call(x);\n        try {\n            mapSize.call(x);\n        } catch (m) {\n            return true;\n        }\n        return x instanceof Set; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakSet(x) {\n    if (!weakSetHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakSetHas.call(x, weakSetHas);\n        try {\n            weakMapHas.call(x, weakMapHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isElement(x) {\n    if (!x || typeof x !== 'object') { return false; }\n    if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n        return true;\n    }\n    return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n    if (str.length > opts.maxStringLength) {\n        var remaining = str.length - opts.maxStringLength;\n        var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n        return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n    }\n    // eslint-disable-next-line no-control-regex\n    var s = $replace.call($replace.call(str, /(['\\\\])/g, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n    return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n    var n = c.charCodeAt(0);\n    var x = {\n        8: 'b',\n        9: 't',\n        10: 'n',\n        12: 'f',\n        13: 'r'\n    }[n];\n    if (x) { return '\\\\' + x; }\n    return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n    return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n    return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n    var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n    return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n    for (var i = 0; i < xs.length; i++) {\n        if (indexOf(xs[i], '\\n') >= 0) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction getIndent(opts, depth) {\n    var baseIndent;\n    if (opts.indent === '\\t') {\n        baseIndent = '\\t';\n    } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n        baseIndent = $join.call(Array(opts.indent + 1), ' ');\n    } else {\n        return null;\n    }\n    return {\n        base: baseIndent,\n        prev: $join.call(Array(depth + 1), baseIndent)\n    };\n}\n\nfunction indentedJoin(xs, indent) {\n    if (xs.length === 0) { return ''; }\n    var lineJoiner = '\\n' + indent.prev + indent.base;\n    return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n    var isArr = isArray(obj);\n    var xs = [];\n    if (isArr) {\n        xs.length = obj.length;\n        for (var i = 0; i < obj.length; i++) {\n            xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n        }\n    }\n    var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n    var symMap;\n    if (hasShammedSymbols) {\n        symMap = {};\n        for (var k = 0; k < syms.length; k++) {\n            symMap['$' + syms[k]] = syms[k];\n        }\n    }\n\n    for (var key in obj) { // eslint-disable-line no-restricted-syntax\n        if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n            // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n            continue; // eslint-disable-line no-restricted-syntax, no-continue\n        } else if ($test.call(/[^\\w$]/, key)) {\n            xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n        } else {\n            xs.push(key + ': ' + inspect(obj[key], obj));\n        }\n    }\n    if (typeof gOPS === 'function') {\n        for (var j = 0; j < syms.length; j++) {\n            if (isEnumerable.call(obj, syms[j])) {\n                xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n            }\n        }\n    }\n    return xs;\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n    RFC1738: 'RFC1738',\n    RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n    'default': Format.RFC3986,\n    formatters: {\n        RFC1738: function (value) {\n            return replace.call(value, percentTwenties, '+');\n        },\n        RFC3986: function (value) {\n            return String(value);\n        }\n    },\n    RFC1738: Format.RFC1738,\n    RFC3986: Format.RFC3986\n};\n","'use strict';\n\nvar formats = require('./formats');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n    var array = [];\n    for (var i = 0; i < 256; ++i) {\n        array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n    }\n\n    return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n    while (queue.length > 1) {\n        var item = queue.pop();\n        var obj = item.obj[item.prop];\n\n        if (isArray(obj)) {\n            var compacted = [];\n\n            for (var j = 0; j < obj.length; ++j) {\n                if (typeof obj[j] !== 'undefined') {\n                    compacted.push(obj[j]);\n                }\n            }\n\n            item.obj[item.prop] = compacted;\n        }\n    }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n    var obj = options && options.plainObjects ? Object.create(null) : {};\n    for (var i = 0; i < source.length; ++i) {\n        if (typeof source[i] !== 'undefined') {\n            obj[i] = source[i];\n        }\n    }\n\n    return obj;\n};\n\nvar merge = function merge(target, source, options) {\n    /* eslint no-param-reassign: 0 */\n    if (!source) {\n        return target;\n    }\n\n    if (typeof source !== 'object') {\n        if (isArray(target)) {\n            target.push(source);\n        } else if (target && typeof target === 'object') {\n            if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n                target[source] = true;\n            }\n        } else {\n            return [target, source];\n        }\n\n        return target;\n    }\n\n    if (!target || typeof target !== 'object') {\n        return [target].concat(source);\n    }\n\n    var mergeTarget = target;\n    if (isArray(target) && !isArray(source)) {\n        mergeTarget = arrayToObject(target, options);\n    }\n\n    if (isArray(target) && isArray(source)) {\n        source.forEach(function (item, i) {\n            if (has.call(target, i)) {\n                var targetItem = target[i];\n                if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n                    target[i] = merge(targetItem, item, options);\n                } else {\n                    target.push(item);\n                }\n            } else {\n                target[i] = item;\n            }\n        });\n        return target;\n    }\n\n    return Object.keys(source).reduce(function (acc, key) {\n        var value = source[key];\n\n        if (has.call(acc, key)) {\n            acc[key] = merge(acc[key], value, options);\n        } else {\n            acc[key] = value;\n        }\n        return acc;\n    }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n    return Object.keys(source).reduce(function (acc, key) {\n        acc[key] = source[key];\n        return acc;\n    }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n    var strWithoutPlus = str.replace(/\\+/g, ' ');\n    if (charset === 'iso-8859-1') {\n        // unescape never throws, no try...catch needed:\n        return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n    }\n    // utf-8\n    try {\n        return decodeURIComponent(strWithoutPlus);\n    } catch (e) {\n        return strWithoutPlus;\n    }\n};\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n    // It has been adapted here for stricter adherence to RFC 3986\n    if (str.length === 0) {\n        return str;\n    }\n\n    var string = str;\n    if (typeof str === 'symbol') {\n        string = Symbol.prototype.toString.call(str);\n    } else if (typeof str !== 'string') {\n        string = String(str);\n    }\n\n    if (charset === 'iso-8859-1') {\n        return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n            return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n        });\n    }\n\n    var out = '';\n    for (var i = 0; i < string.length; ++i) {\n        var c = string.charCodeAt(i);\n\n        if (\n            c === 0x2D // -\n            || c === 0x2E // .\n            || c === 0x5F // _\n            || c === 0x7E // ~\n            || (c >= 0x30 && c <= 0x39) // 0-9\n            || (c >= 0x41 && c <= 0x5A) // a-z\n            || (c >= 0x61 && c <= 0x7A) // A-Z\n            || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n        ) {\n            out += string.charAt(i);\n            continue;\n        }\n\n        if (c < 0x80) {\n            out = out + hexTable[c];\n            continue;\n        }\n\n        if (c < 0x800) {\n            out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        if (c < 0xD800 || c >= 0xE000) {\n            out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        i += 1;\n        c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n        /* eslint operator-linebreak: [2, \"before\"] */\n        out += hexTable[0xF0 | (c >> 18)]\n            + hexTable[0x80 | ((c >> 12) & 0x3F)]\n            + hexTable[0x80 | ((c >> 6) & 0x3F)]\n            + hexTable[0x80 | (c & 0x3F)];\n    }\n\n    return out;\n};\n\nvar compact = function compact(value) {\n    var queue = [{ obj: { o: value }, prop: 'o' }];\n    var refs = [];\n\n    for (var i = 0; i < queue.length; ++i) {\n        var item = queue[i];\n        var obj = item.obj[item.prop];\n\n        var keys = Object.keys(obj);\n        for (var j = 0; j < keys.length; ++j) {\n            var key = keys[j];\n            var val = obj[key];\n            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n                queue.push({ obj: obj, prop: key });\n                refs.push(val);\n            }\n        }\n    }\n\n    compactQueue(queue);\n\n    return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n    if (!obj || typeof obj !== 'object') {\n        return false;\n    }\n\n    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n    return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n    if (isArray(val)) {\n        var mapped = [];\n        for (var i = 0; i < val.length; i += 1) {\n            mapped.push(fn(val[i]));\n        }\n        return mapped;\n    }\n    return fn(val);\n};\n\nmodule.exports = {\n    arrayToObject: arrayToObject,\n    assign: assign,\n    combine: combine,\n    compact: compact,\n    decode: decode,\n    encode: encode,\n    isBuffer: isBuffer,\n    isRegExp: isRegExp,\n    maybeMap: maybeMap,\n    merge: merge\n};\n","'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n    brackets: function brackets(prefix) {\n        return prefix + '[]';\n    },\n    comma: 'comma',\n    indices: function indices(prefix, key) {\n        return prefix + '[' + key + ']';\n    },\n    repeat: function repeat(prefix) {\n        return prefix;\n    }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n    push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n    addQueryPrefix: false,\n    allowDots: false,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    delimiter: '&',\n    encode: true,\n    encoder: utils.encode,\n    encodeValuesOnly: false,\n    format: defaultFormat,\n    formatter: formats.formatters[defaultFormat],\n    // deprecated\n    indices: false,\n    serializeDate: function serializeDate(date) {\n        return toISO.call(date);\n    },\n    skipNulls: false,\n    strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n    return typeof v === 'string'\n        || typeof v === 'number'\n        || typeof v === 'boolean'\n        || typeof v === 'symbol'\n        || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n    object,\n    prefix,\n    generateArrayPrefix,\n    commaRoundTrip,\n    strictNullHandling,\n    skipNulls,\n    encoder,\n    filter,\n    sort,\n    allowDots,\n    serializeDate,\n    format,\n    formatter,\n    encodeValuesOnly,\n    charset,\n    sideChannel\n) {\n    var obj = object;\n\n    var tmpSc = sideChannel;\n    var step = 0;\n    var findFlag = false;\n    while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n        // Where object last appeared in the ref tree\n        var pos = tmpSc.get(object);\n        step += 1;\n        if (typeof pos !== 'undefined') {\n            if (pos === step) {\n                throw new RangeError('Cyclic object value');\n            } else {\n                findFlag = true; // Break while\n            }\n        }\n        if (typeof tmpSc.get(sentinel) === 'undefined') {\n            step = 0;\n        }\n    }\n\n    if (typeof filter === 'function') {\n        obj = filter(prefix, obj);\n    } else if (obj instanceof Date) {\n        obj = serializeDate(obj);\n    } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        obj = utils.maybeMap(obj, function (value) {\n            if (value instanceof Date) {\n                return serializeDate(value);\n            }\n            return value;\n        });\n    }\n\n    if (obj === null) {\n        if (strictNullHandling) {\n            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n        }\n\n        obj = '';\n    }\n\n    if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n        if (encoder) {\n            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n        }\n        return [formatter(prefix) + '=' + formatter(String(obj))];\n    }\n\n    var values = [];\n\n    if (typeof obj === 'undefined') {\n        return values;\n    }\n\n    var objKeys;\n    if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        // we need to join elements in\n        if (encodeValuesOnly && encoder) {\n            obj = utils.maybeMap(obj, encoder);\n        }\n        objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n    } else if (isArray(filter)) {\n        objKeys = filter;\n    } else {\n        var keys = Object.keys(obj);\n        objKeys = sort ? keys.sort(sort) : keys;\n    }\n\n    var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? prefix + '[]' : prefix;\n\n    for (var j = 0; j < objKeys.length; ++j) {\n        var key = objKeys[j];\n        var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n\n        if (skipNulls && value === null) {\n            continue;\n        }\n\n        var keyPrefix = isArray(obj)\n            ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, key) : adjustedPrefix\n            : adjustedPrefix + (allowDots ? '.' + key : '[' + key + ']');\n\n        sideChannel.set(object, step);\n        var valueSideChannel = getSideChannel();\n        valueSideChannel.set(sentinel, sideChannel);\n        pushToArray(values, stringify(\n            value,\n            keyPrefix,\n            generateArrayPrefix,\n            commaRoundTrip,\n            strictNullHandling,\n            skipNulls,\n            generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n            filter,\n            sort,\n            allowDots,\n            serializeDate,\n            format,\n            formatter,\n            encodeValuesOnly,\n            charset,\n            valueSideChannel\n        ));\n    }\n\n    return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n        throw new TypeError('Encoder has to be a function.');\n    }\n\n    var charset = opts.charset || defaults.charset;\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n\n    var format = formats['default'];\n    if (typeof opts.format !== 'undefined') {\n        if (!has.call(formats.formatters, opts.format)) {\n            throw new TypeError('Unknown format option provided.');\n        }\n        format = opts.format;\n    }\n    var formatter = formats.formatters[format];\n\n    var filter = defaults.filter;\n    if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n        filter = opts.filter;\n    }\n\n    return {\n        addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n        allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n        encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n        encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n        encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n        filter: filter,\n        format: format,\n        formatter: formatter,\n        serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n        skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n        sort: typeof opts.sort === 'function' ? opts.sort : null,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (object, opts) {\n    var obj = object;\n    var options = normalizeStringifyOptions(opts);\n\n    var objKeys;\n    var filter;\n\n    if (typeof options.filter === 'function') {\n        filter = options.filter;\n        obj = filter('', obj);\n    } else if (isArray(options.filter)) {\n        filter = options.filter;\n        objKeys = filter;\n    }\n\n    var keys = [];\n\n    if (typeof obj !== 'object' || obj === null) {\n        return '';\n    }\n\n    var arrayFormat;\n    if (opts && opts.arrayFormat in arrayPrefixGenerators) {\n        arrayFormat = opts.arrayFormat;\n    } else if (opts && 'indices' in opts) {\n        arrayFormat = opts.indices ? 'indices' : 'repeat';\n    } else {\n        arrayFormat = 'indices';\n    }\n\n    var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n    if (opts && 'commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n        throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n    }\n    var commaRoundTrip = generateArrayPrefix === 'comma' && opts && opts.commaRoundTrip;\n\n    if (!objKeys) {\n        objKeys = Object.keys(obj);\n    }\n\n    if (options.sort) {\n        objKeys.sort(options.sort);\n    }\n\n    var sideChannel = getSideChannel();\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (options.skipNulls && obj[key] === null) {\n            continue;\n        }\n        pushToArray(keys, stringify(\n            obj[key],\n            key,\n            generateArrayPrefix,\n            commaRoundTrip,\n            options.strictNullHandling,\n            options.skipNulls,\n            options.encode ? options.encoder : null,\n            options.filter,\n            options.sort,\n            options.allowDots,\n            options.serializeDate,\n            options.format,\n            options.formatter,\n            options.encodeValuesOnly,\n            options.charset,\n            sideChannel\n        ));\n    }\n\n    var joined = keys.join(options.delimiter);\n    var prefix = options.addQueryPrefix === true ? '?' : '';\n\n    if (options.charsetSentinel) {\n        if (options.charset === 'iso-8859-1') {\n            // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n            prefix += 'utf8=%26%2310003%3B&';\n        } else {\n            // encodeURIComponent('✓')\n            prefix += 'utf8=%E2%9C%93&';\n        }\n    }\n\n    return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n    allowDots: false,\n    allowPrototypes: false,\n    allowSparse: false,\n    arrayLimit: 20,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    comma: false,\n    decoder: utils.decode,\n    delimiter: '&',\n    depth: 5,\n    ignoreQueryPrefix: false,\n    interpretNumericEntities: false,\n    parameterLimit: 1000,\n    parseArrays: true,\n    plainObjects: false,\n    strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n    return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n        return String.fromCharCode(parseInt(numberStr, 10));\n    });\n};\n\nvar parseArrayValue = function (val, options) {\n    if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n        return val.split(',');\n    }\n\n    return val;\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n    var obj = { __proto__: null };\n\n    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n    var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n    var parts = cleanStr.split(options.delimiter, limit);\n    var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n    var i;\n\n    var charset = options.charset;\n    if (options.charsetSentinel) {\n        for (i = 0; i < parts.length; ++i) {\n            if (parts[i].indexOf('utf8=') === 0) {\n                if (parts[i] === charsetSentinel) {\n                    charset = 'utf-8';\n                } else if (parts[i] === isoSentinel) {\n                    charset = 'iso-8859-1';\n                }\n                skipIndex = i;\n                i = parts.length; // The eslint settings do not allow break;\n            }\n        }\n    }\n\n    for (i = 0; i < parts.length; ++i) {\n        if (i === skipIndex) {\n            continue;\n        }\n        var part = parts[i];\n\n        var bracketEqualsPos = part.indexOf(']=');\n        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n        var key, val;\n        if (pos === -1) {\n            key = options.decoder(part, defaults.decoder, charset, 'key');\n            val = options.strictNullHandling ? null : '';\n        } else {\n            key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n            val = utils.maybeMap(\n                parseArrayValue(part.slice(pos + 1), options),\n                function (encodedVal) {\n                    return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n                }\n            );\n        }\n\n        if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n            val = interpretNumericEntities(val);\n        }\n\n        if (part.indexOf('[]=') > -1) {\n            val = isArray(val) ? [val] : val;\n        }\n\n        if (has.call(obj, key)) {\n            obj[key] = utils.combine(obj[key], val);\n        } else {\n            obj[key] = val;\n        }\n    }\n\n    return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n    var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n    for (var i = chain.length - 1; i >= 0; --i) {\n        var obj;\n        var root = chain[i];\n\n        if (root === '[]' && options.parseArrays) {\n            obj = [].concat(leaf);\n        } else {\n            obj = options.plainObjects ? Object.create(null) : {};\n            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n            var index = parseInt(cleanRoot, 10);\n            if (!options.parseArrays && cleanRoot === '') {\n                obj = { 0: leaf };\n            } else if (\n                !isNaN(index)\n                && root !== cleanRoot\n                && String(index) === cleanRoot\n                && index >= 0\n                && (options.parseArrays && index <= options.arrayLimit)\n            ) {\n                obj = [];\n                obj[index] = leaf;\n            } else if (cleanRoot !== '__proto__') {\n                obj[cleanRoot] = leaf;\n            }\n        }\n\n        leaf = obj;\n    }\n\n    return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n    if (!givenKey) {\n        return;\n    }\n\n    // Transform dot notation to bracket notation\n    var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n    // The regex chunks\n\n    var brackets = /(\\[[^[\\]]*])/;\n    var child = /(\\[[^[\\]]*])/g;\n\n    // Get the parent\n\n    var segment = options.depth > 0 && brackets.exec(key);\n    var parent = segment ? key.slice(0, segment.index) : key;\n\n    // Stash the parent if it exists\n\n    var keys = [];\n    if (parent) {\n        // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n        if (!options.plainObjects && has.call(Object.prototype, parent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        keys.push(parent);\n    }\n\n    // Loop through children appending to the array until we hit depth\n\n    var i = 0;\n    while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n        i += 1;\n        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n        keys.push(segment[1]);\n    }\n\n    // If there's a remainder, just add whatever is left\n\n    if (segment) {\n        keys.push('[' + key.slice(segment.index) + ']');\n    }\n\n    return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') {\n        throw new TypeError('Decoder has to be a function.');\n    }\n\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n    var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n    return {\n        allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n        allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n        allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n        arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n        decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n        delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n        // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n        depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n        ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n        interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n        parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n        parseArrays: opts.parseArrays !== false,\n        plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (str, opts) {\n    var options = normalizeParseOptions(opts);\n\n    if (str === '' || str === null || typeof str === 'undefined') {\n        return options.plainObjects ? Object.create(null) : {};\n    }\n\n    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n    var obj = options.plainObjects ? Object.create(null) : {};\n\n    // Iterate over the keys and setup the new object\n\n    var keys = Object.keys(tempObj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n        obj = utils.merge(obj, newObj, options);\n    }\n\n    if (options.allowSparse === true) {\n        return obj;\n    }\n\n    return utils.compact(obj);\n};\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n    formats: formats,\n    parse: parse,\n    stringify: stringify\n};\n","const apiConfig = {\n  loginBaseUrl: \"http://10.255.135.171:9110/permission\",\n  baseUrl: \"/permission\",\n  clientId: \"\",\n  callbackUrl: \"\"\n};\nconst configApi = (config) => {\n  Object.assign(apiConfig, config);\n};\nconst getConfig = () => {\n  return apiConfig;\n};\nconst mergeConfig = (...configs) => {\n  return Object.assign({}, apiConfig, ...configs);\n};\nexport { apiConfig, configApi, getConfig, mergeConfig };\n","async function request(url, data = {}, init = {}, method = \"GET\") {\n  const defaultConfig = {\n    method\n  };\n  const defaultHeaders = {\n    \"Accept\": \"application/json\",\n    \"Content-Type\": \"application/json\"\n  };\n  let response;\n  if (Object.prototype.hasOwnProperty.call(init, \"headers\")) {\n    init.headers = Object.assign(defaultHeaders, init.headers);\n  } else {\n    init.headers = defaultHeaders;\n  }\n  const options = {\n    ...defaultConfig,\n    ...init\n  };\n  if (method === \"GET\") {\n    let getUrl = \"\";\n    if (!Object.keys(data).length) {\n      getUrl = url;\n    } else {\n      getUrl = url + \"?\" + new URLSearchParams(data).toString();\n    }\n    response = await fetch(getUrl, options);\n  } else {\n    options.body = JSON.stringify(data);\n    response = await fetch(url, options);\n  }\n  const responseHeader = [...response.headers];\n  if (responseHeader[0][1] === \"text/html; charset=UTF-8\") {\n    const parser = new DOMParser();\n    try {\n      const json2 = await response.clone().json();\n      return Promise.resolve(json2);\n    } catch (err) {\n      try {\n        const xmlStr = await response.text();\n        const xmlDoc = parser.parseFromString(xmlStr, \"text/xml\");\n        return Promise.resolve(xmlDoc);\n      } catch (err2) {\n        return Promise.reject(err2);\n      }\n    }\n  }\n  const json = await response.json();\n  if (response.status === 200) {\n    return Promise.resolve(json);\n  }\n  return Promise.reject(response);\n}\nasync function get(url, data = {}, init = {}) {\n  return request(url, data, init, \"GET\");\n}\nasync function post(url, data = {}, init = {}) {\n  return request(url, data, init, \"POST\");\n}\nexport { get, post };\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass Cache {\n  constructor(domainKey = \"FX\") {\n    __publicField(this, \"prefixKey\");\n    this.prefixKey = domainKey;\n  }\n  set(key, value) {\n    localStorage.setItem(`${this.prefixKey}.${key}`, value);\n  }\n  get(key) {\n    return localStorage.getItem(`${this.prefixKey}.${key}`);\n  }\n  remove(key) {\n    localStorage.removeItem(`${this.prefixKey}.${key}`);\n  }\n}\nconst defaultCacheObj = new Cache();\nexport { Cache, defaultCacheObj };\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\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\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\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\nexport default 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\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\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\nexport default baseGetTag;\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\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or 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 a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nexport default arrayMap;\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\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\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\nexport default isObject;\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\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\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\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\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\nexport default isMasked;\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\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\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\nexport default 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\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\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\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nexport default baseCreate;\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\nexport default apply;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nexport default copyArray;\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\nexport default shortOut;\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\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\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\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\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\nexport default setToString;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nexport default arrayEach;\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\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\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\nexport default 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\nexport default eq;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\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\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\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\nexport default copyObject;\n","import apply from './_apply.js';\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\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\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\nexport default 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\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\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\nexport default isArrayLike;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\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\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\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\nexport default 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\nexport default 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\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default isArguments;\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\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\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\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default 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\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\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    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\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\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\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\nexport default 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\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\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\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\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\nexport default keys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\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 `_.keysIn` 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 baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\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 * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\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 * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\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 * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nexport default baseFlatten;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\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 infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\nexport default baseSlice;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import root from './_root.js';\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    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nexport default cloneBuffer;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nexport default getSymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nexport default getTag;\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 * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\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/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\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 map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\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 set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\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    genTag = '[object GeneratorFunction]',\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    symbolTag = '[object Symbol]',\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 supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nexport default baseClone;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\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 assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignMergeValue;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an 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 an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\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 safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nexport default safeGet;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nexport default baseMerge;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n  return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n","import baseForOwn from './_baseForOwn.js';\nimport castFunction from './_castFunction.js';\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n  return object && baseForOwn(object, castFunction(iteratee));\n}\n\nexport default forOwn;\n","import baseGet from './_baseGet.js';\nimport baseSlice from './_baseSlice.js';\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nexport default parent;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\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 * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\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 empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n  if (value == null) {\n    return true;\n  }\n  if (isArrayLike(value) &&\n      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n        isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n    return !value.length;\n  }\n  var tag = getTag(value);\n  if (tag == mapTag || tag == setTag) {\n    return !value.size;\n  }\n  if (isPrototype(value)) {\n    return !baseKeys(value).length;\n  }\n  for (var key in value) {\n    if (hasOwnProperty.call(value, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport default isEmpty;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n  path = castPath(path, object);\n  object = parent(object, path);\n  return object == null || delete object[toKey(last(path))];\n}\n\nexport default baseUnset;\n","import isPlainObject from './isPlainObject.js';\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n  return isPlainObject(value) ? undefined : value;\n}\n\nexport default customOmitClone;\n","import arrayMap from './_arrayMap.js';\nimport baseClone from './_baseClone.js';\nimport baseUnset from './_baseUnset.js';\nimport castPath from './_castPath.js';\nimport copyObject from './_copyObject.js';\nimport customOmitClone from './_customOmitClone.js';\nimport flatRest from './_flatRest.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n  var result = {};\n  if (object == null) {\n    return result;\n  }\n  var isDeep = false;\n  paths = arrayMap(paths, function(path) {\n    path = castPath(path, object);\n    isDeep || (isDeep = path.length > 1);\n    return path;\n  });\n  copyObject(object, getAllKeysIn(object), result);\n  if (isDeep) {\n    result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n  }\n  var length = paths.length;\n  while (length--) {\n    baseUnset(result, paths[length]);\n  }\n  return result;\n});\n\nexport default omit;\n","import { get as get$1, post as post$1 } from \"./fetchApi.mjs\";\nimport { CommonUtils } from \"fx-front-utils\";\nlet axiosInst;\nconst configAxios = (inst) => {\n  axiosInst = inst;\n};\nasync function get(url, data = {}, init = {}) {\n  if (axiosInst) {\n    let getUrl = \"\";\n    if (!Object.keys(data).length) {\n      getUrl = url;\n    } else {\n      getUrl = url + \"?\" + new URLSearchParams(data).toString();\n    }\n    return new Promise((resolve, reject) => {\n      axiosInst.request({\n        url: getUrl,\n        method: \"GET\",\n        data: null,\n        ...init\n      }).then((response) => {\n        if (response.data instanceof ArrayBuffer) {\n          CommonUtils.handleFileBuffer(response);\n          resolve({ code: 0, data: true, desc: \"\\u4E0B\\u8F7D\\u6210\\u529F\" });\n        } else {\n          resolve(response.data);\n        }\n      }, (err) => {\n        reject(err);\n      });\n    });\n  } else {\n    return get$1(url, data, init);\n  }\n}\nasync function post(url, data, init = {}) {\n  if (axiosInst) {\n    return new Promise((resolve, reject) => {\n      axiosInst.request({\n        url,\n        method: \"POST\",\n        data,\n        ...init\n      }).then((response) => {\n        resolve(response.data);\n      }, (err) => {\n        reject(err);\n      });\n    });\n  } else {\n    return post$1(url, data, init);\n  }\n}\nexport { configAxios, get, post };\n","import { mergeConfig } from \"../configApi.mjs\";\nimport { post } from \"../configHttp.mjs\";\nconst UserApi = {\n  config: {},\n  urls: {\n    authorize: \"/oauth2/authorize\",\n    logout: \"/api/oauth2/logout\",\n    userInfo: \"/v1/user/getLoginUserInfo\"\n  },\n  getUserCenterUrl(redirectUrl) {\n    const { loginBaseUrl, clientId, callbackUrl } = mergeConfig(UserApi.config);\n    const currentUrl = encodeURIComponent(window.location.href);\n    return `${loginBaseUrl}${UserApi.urls.authorize}?response_type=code&client_id=${clientId}&redirect_uri=${callbackUrl}&scope=openid&state=${redirectUrl || currentUrl}`;\n  },\n  logout(token, redirectUri) {\n    const { loginBaseUrl } = mergeConfig(UserApi.config);\n    return `${loginBaseUrl}${UserApi.urls.logout}?idToken=${token}&redirectUri=${redirectUri}`;\n  },\n  logoutByRequest(token, redirectUri) {\n    const { baseUrl } = mergeConfig(UserApi.config);\n    const logoutUrl = `${baseUrl}/logout?post_logout_redirect_uri=${redirectUri}&token=${token}`;\n    return logoutUrl;\n  },\n  async getUserInfo(token) {\n    const { baseUrl } = mergeConfig(UserApi.config);\n    const authorization = token;\n    if (!authorization) {\n      console.warn(\"\\u672A\\u63D0\\u4F9B token \\u4FE1\\u606F\\uFF0C\\u8BF7\\u68C0\\u67E5\\u7528\\u6237\\u767B\\u5F55\\u72B6\\u6001\");\n      return Promise.reject(false);\n    } else {\n      const res = await post(`${baseUrl}${UserApi.urls.userInfo}`, {}, {\n        headers: {\n          authorization\n        }\n      });\n      res.code = \"0\";\n      return Promise.resolve(res);\n    }\n  }\n};\nexport { UserApi };\n","/*!\n  * vue-router v4.2.5\n  * (c) 2023 Eduardo San Martin Morote\n  * @license MIT\n  */\nimport { getCurrentInstance, inject, onUnmounted, onDeactivated, onActivated, computed, unref, watchEffect, defineComponent, reactive, h, provide, ref, watch, shallowRef, shallowReactive, nextTick } from 'vue';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\nconst isBrowser = typeof window !== 'undefined';\n\nfunction isESModule(obj) {\n    return obj.__esModule || obj[Symbol.toStringTag] === 'Module';\n}\nconst assign = Object.assign;\nfunction applyToParams(fn, params) {\n    const newParams = {};\n    for (const key in params) {\n        const value = params[key];\n        newParams[key] = isArray(value)\n            ? value.map(fn)\n            : fn(value);\n    }\n    return newParams;\n}\nconst noop = () => { };\n/**\n * Typesafe alternative to Array.isArray\n * https://github.com/microsoft/TypeScript/pull/48228\n */\nconst isArray = Array.isArray;\n\nfunction warn(msg) {\n    // avoid using ...args as it breaks in older Edge builds\n    const args = Array.from(arguments).slice(1);\n    console.warn.apply(console, ['[Vue Router warn]: ' + msg].concat(args));\n}\n\nconst TRAILING_SLASH_RE = /\\/$/;\nconst removeTrailingSlash = (path) => path.replace(TRAILING_SLASH_RE, '');\n/**\n * Transforms a URI into a normalized history location\n *\n * @param parseQuery\n * @param location - URI to normalize\n * @param currentLocation - current absolute location. Allows resolving relative\n * paths. Must start with `/`. Defaults to `/`\n * @returns a normalized history location\n */\nfunction parseURL(parseQuery, location, currentLocation = '/') {\n    let path, query = {}, searchString = '', hash = '';\n    // Could use URL and URLSearchParams but IE 11 doesn't support it\n    // TODO: move to new URL()\n    const hashPos = location.indexOf('#');\n    let searchPos = location.indexOf('?');\n    // the hash appears before the search, so it's not part of the search string\n    if (hashPos < searchPos && hashPos >= 0) {\n        searchPos = -1;\n    }\n    if (searchPos > -1) {\n        path = location.slice(0, searchPos);\n        searchString = location.slice(searchPos + 1, hashPos > -1 ? hashPos : location.length);\n        query = parseQuery(searchString);\n    }\n    if (hashPos > -1) {\n        path = path || location.slice(0, hashPos);\n        // keep the # character\n        hash = location.slice(hashPos, location.length);\n    }\n    // no search and no query\n    path = resolveRelativePath(path != null ? path : location, currentLocation);\n    // empty path means a relative query or hash `?foo=f`, `#thing`\n    return {\n        fullPath: path + (searchString && '?') + searchString + hash,\n        path,\n        query,\n        hash,\n    };\n}\n/**\n * Stringifies a URL object\n *\n * @param stringifyQuery\n * @param location\n */\nfunction stringifyURL(stringifyQuery, location) {\n    const query = location.query ? stringifyQuery(location.query) : '';\n    return location.path + (query && '?') + query + (location.hash || '');\n}\n/**\n * Strips off the base from the beginning of a location.pathname in a non-case-sensitive way.\n *\n * @param pathname - location.pathname\n * @param base - base to strip off\n */\nfunction stripBase(pathname, base) {\n    // no base or base is not found at the beginning\n    if (!base || !pathname.toLowerCase().startsWith(base.toLowerCase()))\n        return pathname;\n    return pathname.slice(base.length) || '/';\n}\n/**\n * Checks if two RouteLocation are equal. This means that both locations are\n * pointing towards the same {@link RouteRecord} and that all `params`, `query`\n * parameters and `hash` are the same\n *\n * @param stringifyQuery - A function that takes a query object of type LocationQueryRaw and returns a string representation of it.\n * @param a - first {@link RouteLocation}\n * @param b - second {@link RouteLocation}\n */\nfunction isSameRouteLocation(stringifyQuery, a, b) {\n    const aLastIndex = a.matched.length - 1;\n    const bLastIndex = b.matched.length - 1;\n    return (aLastIndex > -1 &&\n        aLastIndex === bLastIndex &&\n        isSameRouteRecord(a.matched[aLastIndex], b.matched[bLastIndex]) &&\n        isSameRouteLocationParams(a.params, b.params) &&\n        stringifyQuery(a.query) === stringifyQuery(b.query) &&\n        a.hash === b.hash);\n}\n/**\n * Check if two `RouteRecords` are equal. Takes into account aliases: they are\n * considered equal to the `RouteRecord` they are aliasing.\n *\n * @param a - first {@link RouteRecord}\n * @param b - second {@link RouteRecord}\n */\nfunction isSameRouteRecord(a, b) {\n    // since the original record has an undefined value for aliasOf\n    // but all aliases point to the original record, this will always compare\n    // the original record\n    return (a.aliasOf || a) === (b.aliasOf || b);\n}\nfunction isSameRouteLocationParams(a, b) {\n    if (Object.keys(a).length !== Object.keys(b).length)\n        return false;\n    for (const key in a) {\n        if (!isSameRouteLocationParamsValue(a[key], b[key]))\n            return false;\n    }\n    return true;\n}\nfunction isSameRouteLocationParamsValue(a, b) {\n    return isArray(a)\n        ? isEquivalentArray(a, b)\n        : isArray(b)\n            ? isEquivalentArray(b, a)\n            : a === b;\n}\n/**\n * Check if two arrays are the same or if an array with one single entry is the\n * same as another primitive value. Used to check query and parameters\n *\n * @param a - array of values\n * @param b - array of values or a single value\n */\nfunction isEquivalentArray(a, b) {\n    return isArray(b)\n        ? a.length === b.length && a.every((value, i) => value === b[i])\n        : a.length === 1 && a[0] === b;\n}\n/**\n * Resolves a relative path that starts with `.`.\n *\n * @param to - path location we are resolving\n * @param from - currentLocation.path, should start with `/`\n */\nfunction resolveRelativePath(to, from) {\n    if (to.startsWith('/'))\n        return to;\n    if ((process.env.NODE_ENV !== 'production') && !from.startsWith('/')) {\n        warn(`Cannot resolve a relative location without an absolute path. Trying to resolve \"${to}\" from \"${from}\". It should look like \"/${from}\".`);\n        return to;\n    }\n    if (!to)\n        return from;\n    const fromSegments = from.split('/');\n    const toSegments = to.split('/');\n    const lastToSegment = toSegments[toSegments.length - 1];\n    // make . and ./ the same (../ === .., ../../ === ../..)\n    // this is the same behavior as new URL()\n    if (lastToSegment === '..' || lastToSegment === '.') {\n        toSegments.push('');\n    }\n    let position = fromSegments.length - 1;\n    let toPosition;\n    let segment;\n    for (toPosition = 0; toPosition < toSegments.length; toPosition++) {\n        segment = toSegments[toPosition];\n        // we stay on the same position\n        if (segment === '.')\n            continue;\n        // go up in the from array\n        if (segment === '..') {\n            // we can't go below zero, but we still need to increment toPosition\n            if (position > 1)\n                position--;\n            // continue\n        }\n        // we reached a non-relative path, we stop here\n        else\n            break;\n    }\n    return (fromSegments.slice(0, position).join('/') +\n        '/' +\n        toSegments\n            // ensure we use at least the last element in the toSegments\n            .slice(toPosition - (toPosition === toSegments.length ? 1 : 0))\n            .join('/'));\n}\n\nvar NavigationType;\n(function (NavigationType) {\n    NavigationType[\"pop\"] = \"pop\";\n    NavigationType[\"push\"] = \"push\";\n})(NavigationType || (NavigationType = {}));\nvar NavigationDirection;\n(function (NavigationDirection) {\n    NavigationDirection[\"back\"] = \"back\";\n    NavigationDirection[\"forward\"] = \"forward\";\n    NavigationDirection[\"unknown\"] = \"\";\n})(NavigationDirection || (NavigationDirection = {}));\n/**\n * Starting location for Histories\n */\nconst START = '';\n// Generic utils\n/**\n * Normalizes a base by removing any trailing slash and reading the base tag if\n * present.\n *\n * @param base - base to normalize\n */\nfunction normalizeBase(base) {\n    if (!base) {\n        if (isBrowser) {\n            // respect <base> tag\n            const baseEl = document.querySelector('base');\n            base = (baseEl && baseEl.getAttribute('href')) || '/';\n            // strip full URL origin\n            base = base.replace(/^\\w+:\\/\\/[^\\/]+/, '');\n        }\n        else {\n            base = '/';\n        }\n    }\n    // ensure leading slash when it was removed by the regex above avoid leading\n    // slash with hash because the file could be read from the disk like file://\n    // and the leading slash would cause problems\n    if (base[0] !== '/' && base[0] !== '#')\n        base = '/' + base;\n    // remove the trailing slash so all other method can just do `base + fullPath`\n    // to build an href\n    return removeTrailingSlash(base);\n}\n// remove any character before the hash\nconst BEFORE_HASH_RE = /^[^#]+#/;\nfunction createHref(base, location) {\n    return base.replace(BEFORE_HASH_RE, '#') + location;\n}\n\nfunction getElementPosition(el, offset) {\n    const docRect = document.documentElement.getBoundingClientRect();\n    const elRect = el.getBoundingClientRect();\n    return {\n        behavior: offset.behavior,\n        left: elRect.left - docRect.left - (offset.left || 0),\n        top: elRect.top - docRect.top - (offset.top || 0),\n    };\n}\nconst computeScrollPosition = () => ({\n    left: window.pageXOffset,\n    top: window.pageYOffset,\n});\nfunction scrollToPosition(position) {\n    let scrollToOptions;\n    if ('el' in position) {\n        const positionEl = position.el;\n        const isIdSelector = typeof positionEl === 'string' && positionEl.startsWith('#');\n        /**\n         * `id`s can accept pretty much any characters, including CSS combinators\n         * like `>` or `~`. It's still possible to retrieve elements using\n         * `document.getElementById('~')` but it needs to be escaped when using\n         * `document.querySelector('#\\\\~')` for it to be valid. The only\n         * requirements for `id`s are them to be unique on the page and to not be\n         * empty (`id=\"\"`). Because of that, when passing an id selector, it should\n         * be properly escaped for it to work with `querySelector`. We could check\n         * for the id selector to be simple (no CSS combinators `+ >~`) but that\n         * would make things inconsistent since they are valid characters for an\n         * `id` but would need to be escaped when using `querySelector`, breaking\n         * their usage and ending up in no selector returned. Selectors need to be\n         * escaped:\n         *\n         * - `#1-thing` becomes `#\\31 -thing`\n         * - `#with~symbols` becomes `#with\\\\~symbols`\n         *\n         * - More information about  the topic can be found at\n         *   https://mathiasbynens.be/notes/html5-id-class.\n         * - Practical example: https://mathiasbynens.be/demo/html5-id\n         */\n        if ((process.env.NODE_ENV !== 'production') && typeof position.el === 'string') {\n            if (!isIdSelector || !document.getElementById(position.el.slice(1))) {\n                try {\n                    const foundEl = document.querySelector(position.el);\n                    if (isIdSelector && foundEl) {\n                        warn(`The selector \"${position.el}\" should be passed as \"el: document.querySelector('${position.el}')\" because it starts with \"#\".`);\n                        // return to avoid other warnings\n                        return;\n                    }\n                }\n                catch (err) {\n                    warn(`The selector \"${position.el}\" is invalid. If you are using an id selector, make sure to escape it. You can find more information about escaping characters in selectors at https://mathiasbynens.be/notes/css-escapes or use CSS.escape (https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape).`);\n                    // return to avoid other warnings\n                    return;\n                }\n            }\n        }\n        const el = typeof positionEl === 'string'\n            ? isIdSelector\n                ? document.getElementById(positionEl.slice(1))\n                : document.querySelector(positionEl)\n            : positionEl;\n        if (!el) {\n            (process.env.NODE_ENV !== 'production') &&\n                warn(`Couldn't find element using selector \"${position.el}\" returned by scrollBehavior.`);\n            return;\n        }\n        scrollToOptions = getElementPosition(el, position);\n    }\n    else {\n        scrollToOptions = position;\n    }\n    if ('scrollBehavior' in document.documentElement.style)\n        window.scrollTo(scrollToOptions);\n    else {\n        window.scrollTo(scrollToOptions.left != null ? scrollToOptions.left : window.pageXOffset, scrollToOptions.top != null ? scrollToOptions.top : window.pageYOffset);\n    }\n}\nfunction getScrollKey(path, delta) {\n    const position = history.state ? history.state.position - delta : -1;\n    return position + path;\n}\nconst scrollPositions = new Map();\nfunction saveScrollPosition(key, scrollPosition) {\n    scrollPositions.set(key, scrollPosition);\n}\nfunction getSavedScrollPosition(key) {\n    const scroll = scrollPositions.get(key);\n    // consume it so it's not used again\n    scrollPositions.delete(key);\n    return scroll;\n}\n// TODO: RFC about how to save scroll position\n/**\n * ScrollBehavior instance used by the router to compute and restore the scroll\n * position when navigating.\n */\n// export interface ScrollHandler<ScrollPositionEntry extends HistoryStateValue, ScrollPosition extends ScrollPositionEntry> {\n//   // returns a scroll position that can be saved in history\n//   compute(): ScrollPositionEntry\n//   // can take an extended ScrollPositionEntry\n//   scroll(position: ScrollPosition): void\n// }\n// export const scrollHandler: ScrollHandler<ScrollPosition> = {\n//   compute: computeScroll,\n//   scroll: scrollToPosition,\n// }\n\nlet createBaseLocation = () => location.protocol + '//' + location.host;\n/**\n * Creates a normalized history location from a window.location object\n * @param base - The base path\n * @param location - The window.location object\n */\nfunction createCurrentLocation(base, location) {\n    const { pathname, search, hash } = location;\n    // allows hash bases like #, /#, #/, #!, #!/, /#!/, or even /folder#end\n    const hashPos = base.indexOf('#');\n    if (hashPos > -1) {\n        let slicePos = hash.includes(base.slice(hashPos))\n            ? base.slice(hashPos).length\n            : 1;\n        let pathFromHash = hash.slice(slicePos);\n        // prepend the starting slash to hash so the url starts with /#\n        if (pathFromHash[0] !== '/')\n            pathFromHash = '/' + pathFromHash;\n        return stripBase(pathFromHash, '');\n    }\n    const path = stripBase(pathname, base);\n    return path + search + hash;\n}\nfunction useHistoryListeners(base, historyState, currentLocation, replace) {\n    let listeners = [];\n    let teardowns = [];\n    // TODO: should it be a stack? a Dict. Check if the popstate listener\n    // can trigger twice\n    let pauseState = null;\n    const popStateHandler = ({ state, }) => {\n        const to = createCurrentLocation(base, location);\n        const from = currentLocation.value;\n        const fromState = historyState.value;\n        let delta = 0;\n        if (state) {\n            currentLocation.value = to;\n            historyState.value = state;\n            // ignore the popstate and reset the pauseState\n            if (pauseState && pauseState === from) {\n                pauseState = null;\n                return;\n            }\n            delta = fromState ? state.position - fromState.position : 0;\n        }\n        else {\n            replace(to);\n        }\n        // Here we could also revert the navigation by calling history.go(-delta)\n        // this listener will have to be adapted to not trigger again and to wait for the url\n        // to be updated before triggering the listeners. Some kind of validation function would also\n        // need to be passed to the listeners so the navigation can be accepted\n        // call all listeners\n        listeners.forEach(listener => {\n            listener(currentLocation.value, from, {\n                delta,\n                type: NavigationType.pop,\n                direction: delta\n                    ? delta > 0\n                        ? NavigationDirection.forward\n                        : NavigationDirection.back\n                    : NavigationDirection.unknown,\n            });\n        });\n    };\n    function pauseListeners() {\n        pauseState = currentLocation.value;\n    }\n    function listen(callback) {\n        // set up the listener and prepare teardown callbacks\n        listeners.push(callback);\n        const teardown = () => {\n            const index = listeners.indexOf(callback);\n            if (index > -1)\n                listeners.splice(index, 1);\n        };\n        teardowns.push(teardown);\n        return teardown;\n    }\n    function beforeUnloadListener() {\n        const { history } = window;\n        if (!history.state)\n            return;\n        history.replaceState(assign({}, history.state, { scroll: computeScrollPosition() }), '');\n    }\n    function destroy() {\n        for (const teardown of teardowns)\n            teardown();\n        teardowns = [];\n        window.removeEventListener('popstate', popStateHandler);\n        window.removeEventListener('beforeunload', beforeUnloadListener);\n    }\n    // set up the listeners and prepare teardown callbacks\n    window.addEventListener('popstate', popStateHandler);\n    // TODO: could we use 'pagehide' or 'visibilitychange' instead?\n    // https://developer.chrome.com/blog/page-lifecycle-api/\n    window.addEventListener('beforeunload', beforeUnloadListener, {\n        passive: true,\n    });\n    return {\n        pauseListeners,\n        listen,\n        destroy,\n    };\n}\n/**\n * Creates a state object\n */\nfunction buildState(back, current, forward, replaced = false, computeScroll = false) {\n    return {\n        back,\n        current,\n        forward,\n        replaced,\n        position: window.history.length,\n        scroll: computeScroll ? computeScrollPosition() : null,\n    };\n}\nfunction useHistoryStateNavigation(base) {\n    const { history, location } = window;\n    // private variables\n    const currentLocation = {\n        value: createCurrentLocation(base, location),\n    };\n    const historyState = { value: history.state };\n    // build current history entry as this is a fresh navigation\n    if (!historyState.value) {\n        changeLocation(currentLocation.value, {\n            back: null,\n            current: currentLocation.value,\n            forward: null,\n            // the length is off by one, we need to decrease it\n            position: history.length - 1,\n            replaced: true,\n            // don't add a scroll as the user may have an anchor, and we want\n            // scrollBehavior to be triggered without a saved position\n            scroll: null,\n        }, true);\n    }\n    function changeLocation(to, state, replace) {\n        /**\n         * if a base tag is provided, and we are on a normal domain, we have to\n         * respect the provided `base` attribute because pushState() will use it and\n         * potentially erase anything before the `#` like at\n         * https://github.com/vuejs/router/issues/685 where a base of\n         * `/folder/#` but a base of `/` would erase the `/folder/` section. If\n         * there is no host, the `<base>` tag makes no sense and if there isn't a\n         * base tag we can just use everything after the `#`.\n         */\n        const hashIndex = base.indexOf('#');\n        const url = hashIndex > -1\n            ? (location.host && document.querySelector('base')\n                ? base\n                : base.slice(hashIndex)) + to\n            : createBaseLocation() + base + to;\n        try {\n            // BROWSER QUIRK\n            // NOTE: Safari throws a SecurityError when calling this function 100 times in 30 seconds\n            history[replace ? 'replaceState' : 'pushState'](state, '', url);\n            historyState.value = state;\n        }\n        catch (err) {\n            if ((process.env.NODE_ENV !== 'production')) {\n                warn('Error with push/replace State', err);\n            }\n            else {\n                console.error(err);\n            }\n            // Force the navigation, this also resets the call count\n            location[replace ? 'replace' : 'assign'](url);\n        }\n    }\n    function replace(to, data) {\n        const state = assign({}, history.state, buildState(historyState.value.back, \n        // keep back and forward entries but override current position\n        to, historyState.value.forward, true), data, { position: historyState.value.position });\n        changeLocation(to, state, true);\n        currentLocation.value = to;\n    }\n    function push(to, data) {\n        // Add to current entry the information of where we are going\n        // as well as saving the current position\n        const currentState = assign({}, \n        // use current history state to gracefully handle a wrong call to\n        // history.replaceState\n        // https://github.com/vuejs/router/issues/366\n        historyState.value, history.state, {\n            forward: to,\n            scroll: computeScrollPosition(),\n        });\n        if ((process.env.NODE_ENV !== 'production') && !history.state) {\n            warn(`history.state seems to have been manually replaced without preserving the necessary values. Make sure to preserve existing history state if you are manually calling history.replaceState:\\n\\n` +\n                `history.replaceState(history.state, '', url)\\n\\n` +\n                `You can find more information at https://next.router.vuejs.org/guide/migration/#usage-of-history-state.`);\n        }\n        changeLocation(currentState.current, currentState, true);\n        const state = assign({}, buildState(currentLocation.value, to, null), { position: currentState.position + 1 }, data);\n        changeLocation(to, state, false);\n        currentLocation.value = to;\n    }\n    return {\n        location: currentLocation,\n        state: historyState,\n        push,\n        replace,\n    };\n}\n/**\n * Creates an HTML5 history. Most common history for single page applications.\n *\n * @param base -\n */\nfunction createWebHistory(base) {\n    base = normalizeBase(base);\n    const historyNavigation = useHistoryStateNavigation(base);\n    const historyListeners = useHistoryListeners(base, historyNavigation.state, historyNavigation.location, historyNavigation.replace);\n    function go(delta, triggerListeners = true) {\n        if (!triggerListeners)\n            historyListeners.pauseListeners();\n        history.go(delta);\n    }\n    const routerHistory = assign({\n        // it's overridden right after\n        location: '',\n        base,\n        go,\n        createHref: createHref.bind(null, base),\n    }, historyNavigation, historyListeners);\n    Object.defineProperty(routerHistory, 'location', {\n        enumerable: true,\n        get: () => historyNavigation.location.value,\n    });\n    Object.defineProperty(routerHistory, 'state', {\n        enumerable: true,\n        get: () => historyNavigation.state.value,\n    });\n    return routerHistory;\n}\n\n/**\n * Creates an in-memory based history. The main purpose of this history is to handle SSR. It starts in a special location that is nowhere.\n * It's up to the user to replace that location with the starter location by either calling `router.push` or `router.replace`.\n *\n * @param base - Base applied to all urls, defaults to '/'\n * @returns a history object that can be passed to the router constructor\n */\nfunction createMemoryHistory(base = '') {\n    let listeners = [];\n    let queue = [START];\n    let position = 0;\n    base = normalizeBase(base);\n    function setLocation(location) {\n        position++;\n        if (position !== queue.length) {\n            // we are in the middle, we remove everything from here in the queue\n            queue.splice(position);\n        }\n        queue.push(location);\n    }\n    function triggerListeners(to, from, { direction, delta }) {\n        const info = {\n            direction,\n            delta,\n            type: NavigationType.pop,\n        };\n        for (const callback of listeners) {\n            callback(to, from, info);\n        }\n    }\n    const routerHistory = {\n        // rewritten by Object.defineProperty\n        location: START,\n        // TODO: should be kept in queue\n        state: {},\n        base,\n        createHref: createHref.bind(null, base),\n        replace(to) {\n            // remove current entry and decrement position\n            queue.splice(position--, 1);\n            setLocation(to);\n        },\n        push(to, data) {\n            setLocation(to);\n        },\n        listen(callback) {\n            listeners.push(callback);\n            return () => {\n                const index = listeners.indexOf(callback);\n                if (index > -1)\n                    listeners.splice(index, 1);\n            };\n        },\n        destroy() {\n            listeners = [];\n            queue = [START];\n            position = 0;\n        },\n        go(delta, shouldTrigger = true) {\n            const from = this.location;\n            const direction = \n            // we are considering delta === 0 going forward, but in abstract mode\n            // using 0 for the delta doesn't make sense like it does in html5 where\n            // it reloads the page\n            delta < 0 ? NavigationDirection.back : NavigationDirection.forward;\n            position = Math.max(0, Math.min(position + delta, queue.length - 1));\n            if (shouldTrigger) {\n                triggerListeners(this.location, from, {\n                    direction,\n                    delta,\n                });\n            }\n        },\n    };\n    Object.defineProperty(routerHistory, 'location', {\n        enumerable: true,\n        get: () => queue[position],\n    });\n    return routerHistory;\n}\n\n/**\n * Creates a hash history. Useful for web applications with no host (e.g. `file://`) or when configuring a server to\n * handle any URL is not possible.\n *\n * @param base - optional base to provide. Defaults to `location.pathname + location.search` If there is a `<base>` tag\n * in the `head`, its value will be ignored in favor of this parameter **but note it affects all the history.pushState()\n * calls**, meaning that if you use a `<base>` tag, it's `href` value **has to match this parameter** (ignoring anything\n * after the `#`).\n *\n * @example\n * ```js\n * // at https://example.com/folder\n * createWebHashHistory() // gives a url of `https://example.com/folder#`\n * createWebHashHistory('/folder/') // gives a url of `https://example.com/folder/#`\n * // if the `#` is provided in the base, it won't be added by `createWebHashHistory`\n * createWebHashHistory('/folder/#/app/') // gives a url of `https://example.com/folder/#/app/`\n * // you should avoid doing this because it changes the original url and breaks copying urls\n * createWebHashHistory('/other-folder/') // gives a url of `https://example.com/other-folder/#`\n *\n * // at file:///usr/etc/folder/index.html\n * // for locations with no `host`, the base is ignored\n * createWebHashHistory('/iAmIgnored') // gives a url of `file:///usr/etc/folder/index.html#`\n * ```\n */\nfunction createWebHashHistory(base) {\n    // Make sure this implementation is fine in terms of encoding, specially for IE11\n    // for `file://`, directly use the pathname and ignore the base\n    // location.pathname contains an initial `/` even at the root: `https://example.com`\n    base = location.host ? base || location.pathname + location.search : '';\n    // allow the user to provide a `#` in the middle: `/base/#/app`\n    if (!base.includes('#'))\n        base += '#';\n    if ((process.env.NODE_ENV !== 'production') && !base.endsWith('#/') && !base.endsWith('#')) {\n        warn(`A hash base must end with a \"#\":\\n\"${base}\" should be \"${base.replace(/#.*$/, '#')}\".`);\n    }\n    return createWebHistory(base);\n}\n\nfunction isRouteLocation(route) {\n    return typeof route === 'string' || (route && typeof route === 'object');\n}\nfunction isRouteName(name) {\n    return typeof name === 'string' || typeof name === 'symbol';\n}\n\n/**\n * Initial route location where the router is. Can be used in navigation guards\n * to differentiate the initial navigation.\n *\n * @example\n * ```js\n * import { START_LOCATION } from 'vue-router'\n *\n * router.beforeEach((to, from) => {\n *   if (from === START_LOCATION) {\n *     // initial navigation\n *   }\n * })\n * ```\n */\nconst START_LOCATION_NORMALIZED = {\n    path: '/',\n    name: undefined,\n    params: {},\n    query: {},\n    hash: '',\n    fullPath: '/',\n    matched: [],\n    meta: {},\n    redirectedFrom: undefined,\n};\n\nconst NavigationFailureSymbol = Symbol((process.env.NODE_ENV !== 'production') ? 'navigation failure' : '');\n/**\n * Enumeration with all possible types for navigation failures. Can be passed to\n * {@link isNavigationFailure} to check for specific failures.\n */\nvar NavigationFailureType;\n(function (NavigationFailureType) {\n    /**\n     * An aborted navigation is a navigation that failed because a navigation\n     * guard returned `false` or called `next(false)`\n     */\n    NavigationFailureType[NavigationFailureType[\"aborted\"] = 4] = \"aborted\";\n    /**\n     * A cancelled navigation is a navigation that failed because a more recent\n     * navigation finished started (not necessarily finished).\n     */\n    NavigationFailureType[NavigationFailureType[\"cancelled\"] = 8] = \"cancelled\";\n    /**\n     * A duplicated navigation is a navigation that failed because it was\n     * initiated while already being at the exact same location.\n     */\n    NavigationFailureType[NavigationFailureType[\"duplicated\"] = 16] = \"duplicated\";\n})(NavigationFailureType || (NavigationFailureType = {}));\n// DEV only debug messages\nconst ErrorTypeMessages = {\n    [1 /* ErrorTypes.MATCHER_NOT_FOUND */]({ location, currentLocation }) {\n        return `No match for\\n ${JSON.stringify(location)}${currentLocation\n            ? '\\nwhile being at\\n' + JSON.stringify(currentLocation)\n            : ''}`;\n    },\n    [2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */]({ from, to, }) {\n        return `Redirected from \"${from.fullPath}\" to \"${stringifyRoute(to)}\" via a navigation guard.`;\n    },\n    [4 /* ErrorTypes.NAVIGATION_ABORTED */]({ from, to }) {\n        return `Navigation aborted from \"${from.fullPath}\" to \"${to.fullPath}\" via a navigation guard.`;\n    },\n    [8 /* ErrorTypes.NAVIGATION_CANCELLED */]({ from, to }) {\n        return `Navigation cancelled from \"${from.fullPath}\" to \"${to.fullPath}\" with a new navigation.`;\n    },\n    [16 /* ErrorTypes.NAVIGATION_DUPLICATED */]({ from, to }) {\n        return `Avoided redundant navigation to current location: \"${from.fullPath}\".`;\n    },\n};\nfunction createRouterError(type, params) {\n    // keep full error messages in cjs versions\n    if ((process.env.NODE_ENV !== 'production') || !true) {\n        return assign(new Error(ErrorTypeMessages[type](params)), {\n            type,\n            [NavigationFailureSymbol]: true,\n        }, params);\n    }\n    else {\n        return assign(new Error(), {\n            type,\n            [NavigationFailureSymbol]: true,\n        }, params);\n    }\n}\nfunction isNavigationFailure(error, type) {\n    return (error instanceof Error &&\n        NavigationFailureSymbol in error &&\n        (type == null || !!(error.type & type)));\n}\nconst propertiesToLog = ['params', 'query', 'hash'];\nfunction stringifyRoute(to) {\n    if (typeof to === 'string')\n        return to;\n    if ('path' in to)\n        return to.path;\n    const location = {};\n    for (const key of propertiesToLog) {\n        if (key in to)\n            location[key] = to[key];\n    }\n    return JSON.stringify(location, null, 2);\n}\n\n// default pattern for a param: non-greedy everything but /\nconst BASE_PARAM_PATTERN = '[^/]+?';\nconst BASE_PATH_PARSER_OPTIONS = {\n    sensitive: false,\n    strict: false,\n    start: true,\n    end: true,\n};\n// Special Regex characters that must be escaped in static tokens\nconst REGEX_CHARS_RE = /[.+*?^${}()[\\]/\\\\]/g;\n/**\n * Creates a path parser from an array of Segments (a segment is an array of Tokens)\n *\n * @param segments - array of segments returned by tokenizePath\n * @param extraOptions - optional options for the regexp\n * @returns a PathParser\n */\nfunction tokensToParser(segments, extraOptions) {\n    const options = assign({}, BASE_PATH_PARSER_OPTIONS, extraOptions);\n    // the amount of scores is the same as the length of segments except for the root segment \"/\"\n    const score = [];\n    // the regexp as a string\n    let pattern = options.start ? '^' : '';\n    // extracted keys\n    const keys = [];\n    for (const segment of segments) {\n        // the root segment needs special treatment\n        const segmentScores = segment.length ? [] : [90 /* PathScore.Root */];\n        // allow trailing slash\n        if (options.strict && !segment.length)\n            pattern += '/';\n        for (let tokenIndex = 0; tokenIndex < segment.length; tokenIndex++) {\n            const token = segment[tokenIndex];\n            // resets the score if we are inside a sub-segment /:a-other-:b\n            let subSegmentScore = 40 /* PathScore.Segment */ +\n                (options.sensitive ? 0.25 /* PathScore.BonusCaseSensitive */ : 0);\n            if (token.type === 0 /* TokenType.Static */) {\n                // prepend the slash if we are starting a new segment\n                if (!tokenIndex)\n                    pattern += '/';\n                pattern += token.value.replace(REGEX_CHARS_RE, '\\\\$&');\n                subSegmentScore += 40 /* PathScore.Static */;\n            }\n            else if (token.type === 1 /* TokenType.Param */) {\n                const { value, repeatable, optional, regexp } = token;\n                keys.push({\n                    name: value,\n                    repeatable,\n                    optional,\n                });\n                const re = regexp ? regexp : BASE_PARAM_PATTERN;\n                // the user provided a custom regexp /:id(\\\\d+)\n                if (re !== BASE_PARAM_PATTERN) {\n                    subSegmentScore += 10 /* PathScore.BonusCustomRegExp */;\n                    // make sure the regexp is valid before using it\n                    try {\n                        new RegExp(`(${re})`);\n                    }\n                    catch (err) {\n                        throw new Error(`Invalid custom RegExp for param \"${value}\" (${re}): ` +\n                            err.message);\n                    }\n                }\n                // when we repeat we must take care of the repeating leading slash\n                let subPattern = repeatable ? `((?:${re})(?:/(?:${re}))*)` : `(${re})`;\n                // prepend the slash if we are starting a new segment\n                if (!tokenIndex)\n                    subPattern =\n                        // avoid an optional / if there are more segments e.g. /:p?-static\n                        // or /:p?-:p2\n                        optional && segment.length < 2\n                            ? `(?:/${subPattern})`\n                            : '/' + subPattern;\n                if (optional)\n                    subPattern += '?';\n                pattern += subPattern;\n                subSegmentScore += 20 /* PathScore.Dynamic */;\n                if (optional)\n                    subSegmentScore += -8 /* PathScore.BonusOptional */;\n                if (repeatable)\n                    subSegmentScore += -20 /* PathScore.BonusRepeatable */;\n                if (re === '.*')\n                    subSegmentScore += -50 /* PathScore.BonusWildcard */;\n            }\n            segmentScores.push(subSegmentScore);\n        }\n        // an empty array like /home/ -> [[{home}], []]\n        // if (!segment.length) pattern += '/'\n        score.push(segmentScores);\n    }\n    // only apply the strict bonus to the last score\n    if (options.strict && options.end) {\n        const i = score.length - 1;\n        score[i][score[i].length - 1] += 0.7000000000000001 /* PathScore.BonusStrict */;\n    }\n    // TODO: dev only warn double trailing slash\n    if (!options.strict)\n        pattern += '/?';\n    if (options.end)\n        pattern += '$';\n    // allow paths like /dynamic to only match dynamic or dynamic/... but not dynamic_something_else\n    else if (options.strict)\n        pattern += '(?:/|$)';\n    const re = new RegExp(pattern, options.sensitive ? '' : 'i');\n    function parse(path) {\n        const match = path.match(re);\n        const params = {};\n        if (!match)\n            return null;\n        for (let i = 1; i < match.length; i++) {\n            const value = match[i] || '';\n            const key = keys[i - 1];\n            params[key.name] = value && key.repeatable ? value.split('/') : value;\n        }\n        return params;\n    }\n    function stringify(params) {\n        let path = '';\n        // for optional parameters to allow to be empty\n        let avoidDuplicatedSlash = false;\n        for (const segment of segments) {\n            if (!avoidDuplicatedSlash || !path.endsWith('/'))\n                path += '/';\n            avoidDuplicatedSlash = false;\n            for (const token of segment) {\n                if (token.type === 0 /* TokenType.Static */) {\n                    path += token.value;\n                }\n                else if (token.type === 1 /* TokenType.Param */) {\n                    const { value, repeatable, optional } = token;\n                    const param = value in params ? params[value] : '';\n                    if (isArray(param) && !repeatable) {\n                        throw new Error(`Provided param \"${value}\" is an array but it is not repeatable (* or + modifiers)`);\n                    }\n                    const text = isArray(param)\n                        ? param.join('/')\n                        : param;\n                    if (!text) {\n                        if (optional) {\n                            // if we have more than one optional param like /:a?-static we don't need to care about the optional param\n                            if (segment.length < 2) {\n                                // remove the last slash as we could be at the end\n                                if (path.endsWith('/'))\n                                    path = path.slice(0, -1);\n                                // do not append a slash on the next iteration\n                                else\n                                    avoidDuplicatedSlash = true;\n                            }\n                        }\n                        else\n                            throw new Error(`Missing required param \"${value}\"`);\n                    }\n                    path += text;\n                }\n            }\n        }\n        // avoid empty path when we have multiple optional params\n        return path || '/';\n    }\n    return {\n        re,\n        score,\n        keys,\n        parse,\n        stringify,\n    };\n}\n/**\n * Compares an array of numbers as used in PathParser.score and returns a\n * number. This function can be used to `sort` an array\n *\n * @param a - first array of numbers\n * @param b - second array of numbers\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\n * should be sorted first\n */\nfunction compareScoreArray(a, b) {\n    let i = 0;\n    while (i < a.length && i < b.length) {\n        const diff = b[i] - a[i];\n        // only keep going if diff === 0\n        if (diff)\n            return diff;\n        i++;\n    }\n    // if the last subsegment was Static, the shorter segments should be sorted first\n    // otherwise sort the longest segment first\n    if (a.length < b.length) {\n        return a.length === 1 && a[0] === 40 /* PathScore.Static */ + 40 /* PathScore.Segment */\n            ? -1\n            : 1;\n    }\n    else if (a.length > b.length) {\n        return b.length === 1 && b[0] === 40 /* PathScore.Static */ + 40 /* PathScore.Segment */\n            ? 1\n            : -1;\n    }\n    return 0;\n}\n/**\n * Compare function that can be used with `sort` to sort an array of PathParser\n *\n * @param a - first PathParser\n * @param b - second PathParser\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\n */\nfunction comparePathParserScore(a, b) {\n    let i = 0;\n    const aScore = a.score;\n    const bScore = b.score;\n    while (i < aScore.length && i < bScore.length) {\n        const comp = compareScoreArray(aScore[i], bScore[i]);\n        // do not return if both are equal\n        if (comp)\n            return comp;\n        i++;\n    }\n    if (Math.abs(bScore.length - aScore.length) === 1) {\n        if (isLastScoreNegative(aScore))\n            return 1;\n        if (isLastScoreNegative(bScore))\n            return -1;\n    }\n    // if a and b share the same score entries but b has more, sort b first\n    return bScore.length - aScore.length;\n    // this is the ternary version\n    // return aScore.length < bScore.length\n    //   ? 1\n    //   : aScore.length > bScore.length\n    //   ? -1\n    //   : 0\n}\n/**\n * This allows detecting splats at the end of a path: /home/:id(.*)*\n *\n * @param score - score to check\n * @returns true if the last entry is negative\n */\nfunction isLastScoreNegative(score) {\n    const last = score[score.length - 1];\n    return score.length > 0 && last[last.length - 1] < 0;\n}\n\nconst ROOT_TOKEN = {\n    type: 0 /* TokenType.Static */,\n    value: '',\n};\nconst VALID_PARAM_RE = /[a-zA-Z0-9_]/;\n// After some profiling, the cache seems to be unnecessary because tokenizePath\n// (the slowest part of adding a route) is very fast\n// const tokenCache = new Map<string, Token[][]>()\nfunction tokenizePath(path) {\n    if (!path)\n        return [[]];\n    if (path === '/')\n        return [[ROOT_TOKEN]];\n    if (!path.startsWith('/')) {\n        throw new Error((process.env.NODE_ENV !== 'production')\n            ? `Route paths should start with a \"/\": \"${path}\" should be \"/${path}\".`\n            : `Invalid path \"${path}\"`);\n    }\n    // if (tokenCache.has(path)) return tokenCache.get(path)!\n    function crash(message) {\n        throw new Error(`ERR (${state})/\"${buffer}\": ${message}`);\n    }\n    let state = 0 /* TokenizerState.Static */;\n    let previousState = state;\n    const tokens = [];\n    // the segment will always be valid because we get into the initial state\n    // with the leading /\n    let segment;\n    function finalizeSegment() {\n        if (segment)\n            tokens.push(segment);\n        segment = [];\n    }\n    // index on the path\n    let i = 0;\n    // char at index\n    let char;\n    // buffer of the value read\n    let buffer = '';\n    // custom regexp for a param\n    let customRe = '';\n    function consumeBuffer() {\n        if (!buffer)\n            return;\n        if (state === 0 /* TokenizerState.Static */) {\n            segment.push({\n                type: 0 /* TokenType.Static */,\n                value: buffer,\n            });\n        }\n        else if (state === 1 /* TokenizerState.Param */ ||\n            state === 2 /* TokenizerState.ParamRegExp */ ||\n            state === 3 /* TokenizerState.ParamRegExpEnd */) {\n            if (segment.length > 1 && (char === '*' || char === '+'))\n                crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);\n            segment.push({\n                type: 1 /* TokenType.Param */,\n                value: buffer,\n                regexp: customRe,\n                repeatable: char === '*' || char === '+',\n                optional: char === '*' || char === '?',\n            });\n        }\n        else {\n            crash('Invalid state to consume buffer');\n        }\n        buffer = '';\n    }\n    function addCharToBuffer() {\n        buffer += char;\n    }\n    while (i < path.length) {\n        char = path[i++];\n        if (char === '\\\\' && state !== 2 /* TokenizerState.ParamRegExp */) {\n            previousState = state;\n            state = 4 /* TokenizerState.EscapeNext */;\n            continue;\n        }\n        switch (state) {\n            case 0 /* TokenizerState.Static */:\n                if (char === '/') {\n                    if (buffer) {\n                        consumeBuffer();\n                    }\n                    finalizeSegment();\n                }\n                else if (char === ':') {\n                    consumeBuffer();\n                    state = 1 /* TokenizerState.Param */;\n                }\n                else {\n                    addCharToBuffer();\n                }\n                break;\n            case 4 /* TokenizerState.EscapeNext */:\n                addCharToBuffer();\n                state = previousState;\n                break;\n            case 1 /* TokenizerState.Param */:\n                if (char === '(') {\n                    state = 2 /* TokenizerState.ParamRegExp */;\n                }\n                else if (VALID_PARAM_RE.test(char)) {\n                    addCharToBuffer();\n                }\n                else {\n                    consumeBuffer();\n                    state = 0 /* TokenizerState.Static */;\n                    // go back one character if we were not modifying\n                    if (char !== '*' && char !== '?' && char !== '+')\n                        i--;\n                }\n                break;\n            case 2 /* TokenizerState.ParamRegExp */:\n                // TODO: is it worth handling nested regexp? like :p(?:prefix_([^/]+)_suffix)\n                // it already works by escaping the closing )\n                // https://paths.esm.dev/?p=AAMeJbiAwQEcDKbAoAAkP60PG2R6QAvgNaA6AFACM2ABuQBB#\n                // is this really something people need since you can also write\n                // /prefix_:p()_suffix\n                if (char === ')') {\n                    // handle the escaped )\n                    if (customRe[customRe.length - 1] == '\\\\')\n                        customRe = customRe.slice(0, -1) + char;\n                    else\n                        state = 3 /* TokenizerState.ParamRegExpEnd */;\n                }\n                else {\n                    customRe += char;\n                }\n                break;\n            case 3 /* TokenizerState.ParamRegExpEnd */:\n                // same as finalizing a param\n                consumeBuffer();\n                state = 0 /* TokenizerState.Static */;\n                // go back one character if we were not modifying\n                if (char !== '*' && char !== '?' && char !== '+')\n                    i--;\n                customRe = '';\n                break;\n            default:\n                crash('Unknown state');\n                break;\n        }\n    }\n    if (state === 2 /* TokenizerState.ParamRegExp */)\n        crash(`Unfinished custom RegExp for param \"${buffer}\"`);\n    consumeBuffer();\n    finalizeSegment();\n    // tokenCache.set(path, tokens)\n    return tokens;\n}\n\nfunction createRouteRecordMatcher(record, parent, options) {\n    const parser = tokensToParser(tokenizePath(record.path), options);\n    // warn against params with the same name\n    if ((process.env.NODE_ENV !== 'production')) {\n        const existingKeys = new Set();\n        for (const key of parser.keys) {\n            if (existingKeys.has(key.name))\n                warn(`Found duplicated params with name \"${key.name}\" for path \"${record.path}\". Only the last one will be available on \"$route.params\".`);\n            existingKeys.add(key.name);\n        }\n    }\n    const matcher = assign(parser, {\n        record,\n        parent,\n        // these needs to be populated by the parent\n        children: [],\n        alias: [],\n    });\n    if (parent) {\n        // both are aliases or both are not aliases\n        // we don't want to mix them because the order is used when\n        // passing originalRecord in Matcher.addRoute\n        if (!matcher.record.aliasOf === !parent.record.aliasOf)\n            parent.children.push(matcher);\n    }\n    return matcher;\n}\n\n/**\n * Creates a Router Matcher.\n *\n * @internal\n * @param routes - array of initial routes\n * @param globalOptions - global route options\n */\nfunction createRouterMatcher(routes, globalOptions) {\n    // normalized ordered array of matchers\n    const matchers = [];\n    const matcherMap = new Map();\n    globalOptions = mergeOptions({ strict: false, end: true, sensitive: false }, globalOptions);\n    function getRecordMatcher(name) {\n        return matcherMap.get(name);\n    }\n    function addRoute(record, parent, originalRecord) {\n        // used later on to remove by name\n        const isRootAdd = !originalRecord;\n        const mainNormalizedRecord = normalizeRouteRecord(record);\n        if ((process.env.NODE_ENV !== 'production')) {\n            checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent);\n        }\n        // we might be the child of an alias\n        mainNormalizedRecord.aliasOf = originalRecord && originalRecord.record;\n        const options = mergeOptions(globalOptions, record);\n        // generate an array of records to correctly handle aliases\n        const normalizedRecords = [\n            mainNormalizedRecord,\n        ];\n        if ('alias' in record) {\n            const aliases = typeof record.alias === 'string' ? [record.alias] : record.alias;\n            for (const alias of aliases) {\n                normalizedRecords.push(assign({}, mainNormalizedRecord, {\n                    // this allows us to hold a copy of the `components` option\n                    // so that async components cache is hold on the original record\n                    components: originalRecord\n                        ? originalRecord.record.components\n                        : mainNormalizedRecord.components,\n                    path: alias,\n                    // we might be the child of an alias\n                    aliasOf: originalRecord\n                        ? originalRecord.record\n                        : mainNormalizedRecord,\n                    // the aliases are always of the same kind as the original since they\n                    // are defined on the same record\n                }));\n            }\n        }\n        let matcher;\n        let originalMatcher;\n        for (const normalizedRecord of normalizedRecords) {\n            const { path } = normalizedRecord;\n            // Build up the path for nested routes if the child isn't an absolute\n            // route. Only add the / delimiter if the child path isn't empty and if the\n            // parent path doesn't have a trailing slash\n            if (parent && path[0] !== '/') {\n                const parentPath = parent.record.path;\n                const connectingSlash = parentPath[parentPath.length - 1] === '/' ? '' : '/';\n                normalizedRecord.path =\n                    parent.record.path + (path && connectingSlash + path);\n            }\n            if ((process.env.NODE_ENV !== 'production') && normalizedRecord.path === '*') {\n                throw new Error('Catch all routes (\"*\") must now be defined using a param with a custom regexp.\\n' +\n                    'See more at https://next.router.vuejs.org/guide/migration/#removed-star-or-catch-all-routes.');\n            }\n            // create the object beforehand, so it can be passed to children\n            matcher = createRouteRecordMatcher(normalizedRecord, parent, options);\n            if ((process.env.NODE_ENV !== 'production') && parent && path[0] === '/')\n                checkMissingParamsInAbsolutePath(matcher, parent);\n            // if we are an alias we must tell the original record that we exist,\n            // so we can be removed\n            if (originalRecord) {\n                originalRecord.alias.push(matcher);\n                if ((process.env.NODE_ENV !== 'production')) {\n                    checkSameParams(originalRecord, matcher);\n                }\n            }\n            else {\n                // otherwise, the first record is the original and others are aliases\n                originalMatcher = originalMatcher || matcher;\n                if (originalMatcher !== matcher)\n                    originalMatcher.alias.push(matcher);\n                // remove the route if named and only for the top record (avoid in nested calls)\n                // this works because the original record is the first one\n                if (isRootAdd && record.name && !isAliasRecord(matcher))\n                    removeRoute(record.name);\n            }\n            if (mainNormalizedRecord.children) {\n                const children = mainNormalizedRecord.children;\n                for (let i = 0; i < children.length; i++) {\n                    addRoute(children[i], matcher, originalRecord && originalRecord.children[i]);\n                }\n            }\n            // if there was no original record, then the first one was not an alias and all\n            // other aliases (if any) need to reference this record when adding children\n            originalRecord = originalRecord || matcher;\n            // TODO: add normalized records for more flexibility\n            // if (parent && isAliasRecord(originalRecord)) {\n            //   parent.children.push(originalRecord)\n            // }\n            // Avoid adding a record that doesn't display anything. This allows passing through records without a component to\n            // not be reached and pass through the catch all route\n            if ((matcher.record.components &&\n                Object.keys(matcher.record.components).length) ||\n                matcher.record.name ||\n                matcher.record.redirect) {\n                insertMatcher(matcher);\n            }\n        }\n        return originalMatcher\n            ? () => {\n                // since other matchers are aliases, they should be removed by the original matcher\n                removeRoute(originalMatcher);\n            }\n            : noop;\n    }\n    function removeRoute(matcherRef) {\n        if (isRouteName(matcherRef)) {\n            const matcher = matcherMap.get(matcherRef);\n            if (matcher) {\n                matcherMap.delete(matcherRef);\n                matchers.splice(matchers.indexOf(matcher), 1);\n                matcher.children.forEach(removeRoute);\n                matcher.alias.forEach(removeRoute);\n            }\n        }\n        else {\n            const index = matchers.indexOf(matcherRef);\n            if (index > -1) {\n                matchers.splice(index, 1);\n                if (matcherRef.record.name)\n                    matcherMap.delete(matcherRef.record.name);\n                matcherRef.children.forEach(removeRoute);\n                matcherRef.alias.forEach(removeRoute);\n            }\n        }\n    }\n    function getRoutes() {\n        return matchers;\n    }\n    function insertMatcher(matcher) {\n        let i = 0;\n        while (i < matchers.length &&\n            comparePathParserScore(matcher, matchers[i]) >= 0 &&\n            // Adding children with empty path should still appear before the parent\n            // https://github.com/vuejs/router/issues/1124\n            (matcher.record.path !== matchers[i].record.path ||\n                !isRecordChildOf(matcher, matchers[i])))\n            i++;\n        matchers.splice(i, 0, matcher);\n        // only add the original record to the name map\n        if (matcher.record.name && !isAliasRecord(matcher))\n            matcherMap.set(matcher.record.name, matcher);\n    }\n    function resolve(location, currentLocation) {\n        let matcher;\n        let params = {};\n        let path;\n        let name;\n        if ('name' in location && location.name) {\n            matcher = matcherMap.get(location.name);\n            if (!matcher)\n                throw createRouterError(1 /* ErrorTypes.MATCHER_NOT_FOUND */, {\n                    location,\n                });\n            // warn if the user is passing invalid params so they can debug it better when they get removed\n            if ((process.env.NODE_ENV !== 'production')) {\n                const invalidParams = Object.keys(location.params || {}).filter(paramName => !matcher.keys.find(k => k.name === paramName));\n                if (invalidParams.length) {\n                    warn(`Discarded invalid param(s) \"${invalidParams.join('\", \"')}\" when navigating. See https://github.com/vuejs/router/blob/main/packages/router/CHANGELOG.md#414-2022-08-22 for more details.`);\n                }\n            }\n            name = matcher.record.name;\n            params = assign(\n            // paramsFromLocation is a new object\n            paramsFromLocation(currentLocation.params, \n            // only keep params that exist in the resolved location\n            // TODO: only keep optional params coming from a parent record\n            matcher.keys.filter(k => !k.optional).map(k => k.name)), \n            // discard any existing params in the current location that do not exist here\n            // #1497 this ensures better active/exact matching\n            location.params &&\n                paramsFromLocation(location.params, matcher.keys.map(k => k.name)));\n            // throws if cannot be stringified\n            path = matcher.stringify(params);\n        }\n        else if ('path' in location) {\n            // no need to resolve the path with the matcher as it was provided\n            // this also allows the user to control the encoding\n            path = location.path;\n            if ((process.env.NODE_ENV !== 'production') && !path.startsWith('/')) {\n                warn(`The Matcher cannot resolve relative paths but received \"${path}\". Unless you directly called \\`matcher.resolve(\"${path}\")\\`, this is probably a bug in vue-router. Please open an issue at https://github.com/vuejs/router/issues/new/choose.`);\n            }\n            matcher = matchers.find(m => m.re.test(path));\n            // matcher should have a value after the loop\n            if (matcher) {\n                // we know the matcher works because we tested the regexp\n                params = matcher.parse(path);\n                name = matcher.record.name;\n            }\n            // location is a relative path\n        }\n        else {\n            // match by name or path of current route\n            matcher = currentLocation.name\n                ? matcherMap.get(currentLocation.name)\n                : matchers.find(m => m.re.test(currentLocation.path));\n            if (!matcher)\n                throw createRouterError(1 /* ErrorTypes.MATCHER_NOT_FOUND */, {\n                    location,\n                    currentLocation,\n                });\n            name = matcher.record.name;\n            // since we are navigating to the same location, we don't need to pick the\n            // params like when `name` is provided\n            params = assign({}, currentLocation.params, location.params);\n            path = matcher.stringify(params);\n        }\n        const matched = [];\n        let parentMatcher = matcher;\n        while (parentMatcher) {\n            // reversed order so parents are at the beginning\n            matched.unshift(parentMatcher.record);\n            parentMatcher = parentMatcher.parent;\n        }\n        return {\n            name,\n            path,\n            params,\n            matched,\n            meta: mergeMetaFields(matched),\n        };\n    }\n    // add initial routes\n    routes.forEach(route => addRoute(route));\n    return { addRoute, resolve, removeRoute, getRoutes, getRecordMatcher };\n}\nfunction paramsFromLocation(params, keys) {\n    const newParams = {};\n    for (const key of keys) {\n        if (key in params)\n            newParams[key] = params[key];\n    }\n    return newParams;\n}\n/**\n * Normalizes a RouteRecordRaw. Creates a copy\n *\n * @param record\n * @returns the normalized version\n */\nfunction normalizeRouteRecord(record) {\n    return {\n        path: record.path,\n        redirect: record.redirect,\n        name: record.name,\n        meta: record.meta || {},\n        aliasOf: undefined,\n        beforeEnter: record.beforeEnter,\n        props: normalizeRecordProps(record),\n        children: record.children || [],\n        instances: {},\n        leaveGuards: new Set(),\n        updateGuards: new Set(),\n        enterCallbacks: {},\n        components: 'components' in record\n            ? record.components || null\n            : record.component && { default: record.component },\n    };\n}\n/**\n * Normalize the optional `props` in a record to always be an object similar to\n * components. Also accept a boolean for components.\n * @param record\n */\nfunction normalizeRecordProps(record) {\n    const propsObject = {};\n    // props does not exist on redirect records, but we can set false directly\n    const props = record.props || false;\n    if ('component' in record) {\n        propsObject.default = props;\n    }\n    else {\n        // NOTE: we could also allow a function to be applied to every component.\n        // Would need user feedback for use cases\n        for (const name in record.components)\n            propsObject[name] = typeof props === 'object' ? props[name] : props;\n    }\n    return propsObject;\n}\n/**\n * Checks if a record or any of its parent is an alias\n * @param record\n */\nfunction isAliasRecord(record) {\n    while (record) {\n        if (record.record.aliasOf)\n            return true;\n        record = record.parent;\n    }\n    return false;\n}\n/**\n * Merge meta fields of an array of records\n *\n * @param matched - array of matched records\n */\nfunction mergeMetaFields(matched) {\n    return matched.reduce((meta, record) => assign(meta, record.meta), {});\n}\nfunction mergeOptions(defaults, partialOptions) {\n    const options = {};\n    for (const key in defaults) {\n        options[key] = key in partialOptions ? partialOptions[key] : defaults[key];\n    }\n    return options;\n}\nfunction isSameParam(a, b) {\n    return (a.name === b.name &&\n        a.optional === b.optional &&\n        a.repeatable === b.repeatable);\n}\n/**\n * Check if a path and its alias have the same required params\n *\n * @param a - original record\n * @param b - alias record\n */\nfunction checkSameParams(a, b) {\n    for (const key of a.keys) {\n        if (!key.optional && !b.keys.find(isSameParam.bind(null, key)))\n            return warn(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\n    }\n    for (const key of b.keys) {\n        if (!key.optional && !a.keys.find(isSameParam.bind(null, key)))\n            return warn(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\n    }\n}\n/**\n * A route with a name and a child with an empty path without a name should warn when adding the route\n *\n * @param mainNormalizedRecord - RouteRecordNormalized\n * @param parent - RouteRecordMatcher\n */\nfunction checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent) {\n    if (parent &&\n        parent.record.name &&\n        !mainNormalizedRecord.name &&\n        !mainNormalizedRecord.path) {\n        warn(`The route named \"${String(parent.record.name)}\" has a child without a name and an empty path. Using that name won't render the empty path child so you probably want to move the name to the child instead. If this is intentional, add a name to the child route to remove the warning.`);\n    }\n}\nfunction checkMissingParamsInAbsolutePath(record, parent) {\n    for (const key of parent.keys) {\n        if (!record.keys.find(isSameParam.bind(null, key)))\n            return warn(`Absolute path \"${record.record.path}\" must have the exact same param named \"${key.name}\" as its parent \"${parent.record.path}\".`);\n    }\n}\nfunction isRecordChildOf(record, parent) {\n    return parent.children.some(child => child === record || isRecordChildOf(record, child));\n}\n\n/**\n * Encoding Rules ␣ = Space Path: ␣ \" < > # ? { } Query: ␣ \" < > # & = Hash: ␣ \"\n * < > `\n *\n * On top of that, the RFC3986 (https://tools.ietf.org/html/rfc3986#section-2.2)\n * defines some extra characters to be encoded. Most browsers do not encode them\n * in encodeURI https://github.com/whatwg/url/issues/369, so it may be safer to\n * also encode `!'()*`. Leaving un-encoded only ASCII alphanumeric(`a-zA-Z0-9`)\n * plus `-._~`. This extra safety should be applied to query by patching the\n * string returned by encodeURIComponent encodeURI also encodes `[\\]^`. `\\`\n * should be encoded to avoid ambiguity. Browsers (IE, FF, C) transform a `\\`\n * into a `/` if directly typed in. The _backtick_ (`````) should also be\n * encoded everywhere because some browsers like FF encode it when directly\n * written while others don't. Safari and IE don't encode ``\"<>{}``` in hash.\n */\n// const EXTRA_RESERVED_RE = /[!'()*]/g\n// const encodeReservedReplacer = (c: string) => '%' + c.charCodeAt(0).toString(16)\nconst HASH_RE = /#/g; // %23\nconst AMPERSAND_RE = /&/g; // %26\nconst SLASH_RE = /\\//g; // %2F\nconst EQUAL_RE = /=/g; // %3D\nconst IM_RE = /\\?/g; // %3F\nconst PLUS_RE = /\\+/g; // %2B\n/**\n * NOTE: It's not clear to me if we should encode the + symbol in queries, it\n * seems to be less flexible than not doing so and I can't find out the legacy\n * systems requiring this for regular requests like text/html. In the standard,\n * the encoding of the plus character is only mentioned for\n * application/x-www-form-urlencoded\n * (https://url.spec.whatwg.org/#urlencoded-parsing) and most browsers seems lo\n * leave the plus character as is in queries. To be more flexible, we allow the\n * plus character on the query, but it can also be manually encoded by the user.\n *\n * Resources:\n * - https://url.spec.whatwg.org/#urlencoded-parsing\n * - https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20\n */\nconst ENC_BRACKET_OPEN_RE = /%5B/g; // [\nconst ENC_BRACKET_CLOSE_RE = /%5D/g; // ]\nconst ENC_CARET_RE = /%5E/g; // ^\nconst ENC_BACKTICK_RE = /%60/g; // `\nconst ENC_CURLY_OPEN_RE = /%7B/g; // {\nconst ENC_PIPE_RE = /%7C/g; // |\nconst ENC_CURLY_CLOSE_RE = /%7D/g; // }\nconst ENC_SPACE_RE = /%20/g; // }\n/**\n * Encode characters that need to be encoded on the path, search and hash\n * sections of the URL.\n *\n * @internal\n * @param text - string to encode\n * @returns encoded string\n */\nfunction commonEncode(text) {\n    return encodeURI('' + text)\n        .replace(ENC_PIPE_RE, '|')\n        .replace(ENC_BRACKET_OPEN_RE, '[')\n        .replace(ENC_BRACKET_CLOSE_RE, ']');\n}\n/**\n * Encode characters that need to be encoded on the hash section of the URL.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodeHash(text) {\n    return commonEncode(text)\n        .replace(ENC_CURLY_OPEN_RE, '{')\n        .replace(ENC_CURLY_CLOSE_RE, '}')\n        .replace(ENC_CARET_RE, '^');\n}\n/**\n * Encode characters that need to be encoded query values on the query\n * section of the URL.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodeQueryValue(text) {\n    return (commonEncode(text)\n        // Encode the space as +, encode the + to differentiate it from the space\n        .replace(PLUS_RE, '%2B')\n        .replace(ENC_SPACE_RE, '+')\n        .replace(HASH_RE, '%23')\n        .replace(AMPERSAND_RE, '%26')\n        .replace(ENC_BACKTICK_RE, '`')\n        .replace(ENC_CURLY_OPEN_RE, '{')\n        .replace(ENC_CURLY_CLOSE_RE, '}')\n        .replace(ENC_CARET_RE, '^'));\n}\n/**\n * Like `encodeQueryValue` but also encodes the `=` character.\n *\n * @param text - string to encode\n */\nfunction encodeQueryKey(text) {\n    return encodeQueryValue(text).replace(EQUAL_RE, '%3D');\n}\n/**\n * Encode characters that need to be encoded on the path section of the URL.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodePath(text) {\n    return commonEncode(text).replace(HASH_RE, '%23').replace(IM_RE, '%3F');\n}\n/**\n * Encode characters that need to be encoded on the path section of the URL as a\n * param. This function encodes everything {@link encodePath} does plus the\n * slash (`/`) character. If `text` is `null` or `undefined`, returns an empty\n * string instead.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodeParam(text) {\n    return text == null ? '' : encodePath(text).replace(SLASH_RE, '%2F');\n}\n/**\n * Decode text using `decodeURIComponent`. Returns the original text if it\n * fails.\n *\n * @param text - string to decode\n * @returns decoded string\n */\nfunction decode(text) {\n    try {\n        return decodeURIComponent('' + text);\n    }\n    catch (err) {\n        (process.env.NODE_ENV !== 'production') && warn(`Error decoding \"${text}\". Using original value`);\n    }\n    return '' + text;\n}\n\n/**\n * Transforms a queryString into a {@link LocationQuery} object. Accept both, a\n * version with the leading `?` and without Should work as URLSearchParams\n\n * @internal\n *\n * @param search - search string to parse\n * @returns a query object\n */\nfunction parseQuery(search) {\n    const query = {};\n    // avoid creating an object with an empty key and empty value\n    // because of split('&')\n    if (search === '' || search === '?')\n        return query;\n    const hasLeadingIM = search[0] === '?';\n    const searchParams = (hasLeadingIM ? search.slice(1) : search).split('&');\n    for (let i = 0; i < searchParams.length; ++i) {\n        // pre decode the + into space\n        const searchParam = searchParams[i].replace(PLUS_RE, ' ');\n        // allow the = character\n        const eqPos = searchParam.indexOf('=');\n        const key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));\n        const value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));\n        if (key in query) {\n            // an extra variable for ts types\n            let currentValue = query[key];\n            if (!isArray(currentValue)) {\n                currentValue = query[key] = [currentValue];\n            }\n            currentValue.push(value);\n        }\n        else {\n            query[key] = value;\n        }\n    }\n    return query;\n}\n/**\n * Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it\n * doesn't prepend a `?`\n *\n * @internal\n *\n * @param query - query object to stringify\n * @returns string version of the query without the leading `?`\n */\nfunction stringifyQuery(query) {\n    let search = '';\n    for (let key in query) {\n        const value = query[key];\n        key = encodeQueryKey(key);\n        if (value == null) {\n            // only null adds the value\n            if (value !== undefined) {\n                search += (search.length ? '&' : '') + key;\n            }\n            continue;\n        }\n        // keep null values\n        const values = isArray(value)\n            ? value.map(v => v && encodeQueryValue(v))\n            : [value && encodeQueryValue(value)];\n        values.forEach(value => {\n            // skip undefined values in arrays as if they were not present\n            // smaller code than using filter\n            if (value !== undefined) {\n                // only append & with non-empty search\n                search += (search.length ? '&' : '') + key;\n                if (value != null)\n                    search += '=' + value;\n            }\n        });\n    }\n    return search;\n}\n/**\n * Transforms a {@link LocationQueryRaw} into a {@link LocationQuery} by casting\n * numbers into strings, removing keys with an undefined value and replacing\n * undefined with null in arrays\n *\n * @param query - query object to normalize\n * @returns a normalized query object\n */\nfunction normalizeQuery(query) {\n    const normalizedQuery = {};\n    for (const key in query) {\n        const value = query[key];\n        if (value !== undefined) {\n            normalizedQuery[key] = isArray(value)\n                ? value.map(v => (v == null ? null : '' + v))\n                : value == null\n                    ? value\n                    : '' + value;\n        }\n    }\n    return normalizedQuery;\n}\n\n/**\n * RouteRecord being rendered by the closest ancestor Router View. Used for\n * `onBeforeRouteUpdate` and `onBeforeRouteLeave`. rvlm stands for Router View\n * Location Matched\n *\n * @internal\n */\nconst matchedRouteKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router view location matched' : '');\n/**\n * Allows overriding the router view depth to control which component in\n * `matched` is rendered. rvd stands for Router View Depth\n *\n * @internal\n */\nconst viewDepthKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router view depth' : '');\n/**\n * Allows overriding the router instance returned by `useRouter` in tests. r\n * stands for router\n *\n * @internal\n */\nconst routerKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router' : '');\n/**\n * Allows overriding the current route returned by `useRoute` in tests. rl\n * stands for route location\n *\n * @internal\n */\nconst routeLocationKey = Symbol((process.env.NODE_ENV !== 'production') ? 'route location' : '');\n/**\n * Allows overriding the current route used by router-view. Internally this is\n * used when the `route` prop is passed.\n *\n * @internal\n */\nconst routerViewLocationKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router view location' : '');\n\n/**\n * Create a list of callbacks that can be reset. Used to create before and after navigation guards list\n */\nfunction useCallbacks() {\n    let handlers = [];\n    function add(handler) {\n        handlers.push(handler);\n        return () => {\n            const i = handlers.indexOf(handler);\n            if (i > -1)\n                handlers.splice(i, 1);\n        };\n    }\n    function reset() {\n        handlers = [];\n    }\n    return {\n        add,\n        list: () => handlers.slice(),\n        reset,\n    };\n}\n\nfunction registerGuard(record, name, guard) {\n    const removeFromList = () => {\n        record[name].delete(guard);\n    };\n    onUnmounted(removeFromList);\n    onDeactivated(removeFromList);\n    onActivated(() => {\n        record[name].add(guard);\n    });\n    record[name].add(guard);\n}\n/**\n * Add a navigation guard that triggers whenever the component for the current\n * location is about to be left. Similar to {@link beforeRouteLeave} but can be\n * used in any component. The guard is removed when the component is unmounted.\n *\n * @param leaveGuard - {@link NavigationGuard}\n */\nfunction onBeforeRouteLeave(leaveGuard) {\n    if ((process.env.NODE_ENV !== 'production') && !getCurrentInstance()) {\n        warn('getCurrentInstance() returned null. onBeforeRouteLeave() must be called at the top of a setup function');\n        return;\n    }\n    const activeRecord = inject(matchedRouteKey, \n    // to avoid warning\n    {}).value;\n    if (!activeRecord) {\n        (process.env.NODE_ENV !== 'production') &&\n            warn('No active route record was found when calling `onBeforeRouteLeave()`. Make sure you call this function inside a component child of <router-view>. Maybe you called it inside of App.vue?');\n        return;\n    }\n    registerGuard(activeRecord, 'leaveGuards', leaveGuard);\n}\n/**\n * Add a navigation guard that triggers whenever the current location is about\n * to be updated. Similar to {@link beforeRouteUpdate} but can be used in any\n * component. The guard is removed when the component is unmounted.\n *\n * @param updateGuard - {@link NavigationGuard}\n */\nfunction onBeforeRouteUpdate(updateGuard) {\n    if ((process.env.NODE_ENV !== 'production') && !getCurrentInstance()) {\n        warn('getCurrentInstance() returned null. onBeforeRouteUpdate() must be called at the top of a setup function');\n        return;\n    }\n    const activeRecord = inject(matchedRouteKey, \n    // to avoid warning\n    {}).value;\n    if (!activeRecord) {\n        (process.env.NODE_ENV !== 'production') &&\n            warn('No active route record was found when calling `onBeforeRouteUpdate()`. Make sure you call this function inside a component child of <router-view>. Maybe you called it inside of App.vue?');\n        return;\n    }\n    registerGuard(activeRecord, 'updateGuards', updateGuard);\n}\nfunction guardToPromiseFn(guard, to, from, record, name) {\n    // keep a reference to the enterCallbackArray to prevent pushing callbacks if a new navigation took place\n    const enterCallbackArray = record &&\n        // name is defined if record is because of the function overload\n        (record.enterCallbacks[name] = record.enterCallbacks[name] || []);\n    return () => new Promise((resolve, reject) => {\n        const next = (valid) => {\n            if (valid === false) {\n                reject(createRouterError(4 /* ErrorTypes.NAVIGATION_ABORTED */, {\n                    from,\n                    to,\n                }));\n            }\n            else if (valid instanceof Error) {\n                reject(valid);\n            }\n            else if (isRouteLocation(valid)) {\n                reject(createRouterError(2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */, {\n                    from: to,\n                    to: valid,\n                }));\n            }\n            else {\n                if (enterCallbackArray &&\n                    // since enterCallbackArray is truthy, both record and name also are\n                    record.enterCallbacks[name] === enterCallbackArray &&\n                    typeof valid === 'function') {\n                    enterCallbackArray.push(valid);\n                }\n                resolve();\n            }\n        };\n        // wrapping with Promise.resolve allows it to work with both async and sync guards\n        const guardReturn = guard.call(record && record.instances[name], to, from, (process.env.NODE_ENV !== 'production') ? canOnlyBeCalledOnce(next, to, from) : next);\n        let guardCall = Promise.resolve(guardReturn);\n        if (guard.length < 3)\n            guardCall = guardCall.then(next);\n        if ((process.env.NODE_ENV !== 'production') && guard.length > 2) {\n            const message = `The \"next\" callback was never called inside of ${guard.name ? '\"' + guard.name + '\"' : ''}:\\n${guard.toString()}\\n. If you are returning a value instead of calling \"next\", make sure to remove the \"next\" parameter from your function.`;\n            if (typeof guardReturn === 'object' && 'then' in guardReturn) {\n                guardCall = guardCall.then(resolvedValue => {\n                    // @ts-expect-error: _called is added at canOnlyBeCalledOnce\n                    if (!next._called) {\n                        warn(message);\n                        return Promise.reject(new Error('Invalid navigation guard'));\n                    }\n                    return resolvedValue;\n                });\n            }\n            else if (guardReturn !== undefined) {\n                // @ts-expect-error: _called is added at canOnlyBeCalledOnce\n                if (!next._called) {\n                    warn(message);\n                    reject(new Error('Invalid navigation guard'));\n                    return;\n                }\n            }\n        }\n        guardCall.catch(err => reject(err));\n    });\n}\nfunction canOnlyBeCalledOnce(next, to, from) {\n    let called = 0;\n    return function () {\n        if (called++ === 1)\n            warn(`The \"next\" callback was called more than once in one navigation guard when going from \"${from.fullPath}\" to \"${to.fullPath}\". It should be called exactly one time in each navigation guard. This will fail in production.`);\n        // @ts-expect-error: we put it in the original one because it's easier to check\n        next._called = true;\n        if (called === 1)\n            next.apply(null, arguments);\n    };\n}\nfunction extractComponentsGuards(matched, guardType, to, from) {\n    const guards = [];\n    for (const record of matched) {\n        if ((process.env.NODE_ENV !== 'production') && !record.components && !record.children.length) {\n            warn(`Record with path \"${record.path}\" is either missing a \"component(s)\"` +\n                ` or \"children\" property.`);\n        }\n        for (const name in record.components) {\n            let rawComponent = record.components[name];\n            if ((process.env.NODE_ENV !== 'production')) {\n                if (!rawComponent ||\n                    (typeof rawComponent !== 'object' &&\n                        typeof rawComponent !== 'function')) {\n                    warn(`Component \"${name}\" in record with path \"${record.path}\" is not` +\n                        ` a valid component. Received \"${String(rawComponent)}\".`);\n                    // throw to ensure we stop here but warn to ensure the message isn't\n                    // missed by the user\n                    throw new Error('Invalid route component');\n                }\n                else if ('then' in rawComponent) {\n                    // warn if user wrote import('/component.vue') instead of () =>\n                    // import('./component.vue')\n                    warn(`Component \"${name}\" in record with path \"${record.path}\" is a ` +\n                        `Promise instead of a function that returns a Promise. Did you ` +\n                        `write \"import('./MyPage.vue')\" instead of ` +\n                        `\"() => import('./MyPage.vue')\" ? This will break in ` +\n                        `production if not fixed.`);\n                    const promise = rawComponent;\n                    rawComponent = () => promise;\n                }\n                else if (rawComponent.__asyncLoader &&\n                    // warn only once per component\n                    !rawComponent.__warnedDefineAsync) {\n                    rawComponent.__warnedDefineAsync = true;\n                    warn(`Component \"${name}\" in record with path \"${record.path}\" is defined ` +\n                        `using \"defineAsyncComponent()\". ` +\n                        `Write \"() => import('./MyPage.vue')\" instead of ` +\n                        `\"defineAsyncComponent(() => import('./MyPage.vue'))\".`);\n                }\n            }\n            // skip update and leave guards if the route component is not mounted\n            if (guardType !== 'beforeRouteEnter' && !record.instances[name])\n                continue;\n            if (isRouteComponent(rawComponent)) {\n                // __vccOpts is added by vue-class-component and contain the regular options\n                const options = rawComponent.__vccOpts || rawComponent;\n                const guard = options[guardType];\n                guard && guards.push(guardToPromiseFn(guard, to, from, record, name));\n            }\n            else {\n                // start requesting the chunk already\n                let componentPromise = rawComponent();\n                if ((process.env.NODE_ENV !== 'production') && !('catch' in componentPromise)) {\n                    warn(`Component \"${name}\" in record with path \"${record.path}\" is a function that does not return a Promise. If you were passing a functional component, make sure to add a \"displayName\" to the component. This will break in production if not fixed.`);\n                    componentPromise = Promise.resolve(componentPromise);\n                }\n                guards.push(() => componentPromise.then(resolved => {\n                    if (!resolved)\n                        return Promise.reject(new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\"`));\n                    const resolvedComponent = isESModule(resolved)\n                        ? resolved.default\n                        : resolved;\n                    // replace the function with the resolved component\n                    // cannot be null or undefined because we went into the for loop\n                    record.components[name] = resolvedComponent;\n                    // __vccOpts is added by vue-class-component and contain the regular options\n                    const options = resolvedComponent.__vccOpts || resolvedComponent;\n                    const guard = options[guardType];\n                    return guard && guardToPromiseFn(guard, to, from, record, name)();\n                }));\n            }\n        }\n    }\n    return guards;\n}\n/**\n * Allows differentiating lazy components from functional components and vue-class-component\n * @internal\n *\n * @param component\n */\nfunction isRouteComponent(component) {\n    return (typeof component === 'object' ||\n        'displayName' in component ||\n        'props' in component ||\n        '__vccOpts' in component);\n}\n/**\n * Ensures a route is loaded, so it can be passed as o prop to `<RouterView>`.\n *\n * @param route - resolved route to load\n */\nfunction loadRouteLocation(route) {\n    return route.matched.every(record => record.redirect)\n        ? Promise.reject(new Error('Cannot load a route that redirects.'))\n        : Promise.all(route.matched.map(record => record.components &&\n            Promise.all(Object.keys(record.components).reduce((promises, name) => {\n                const rawComponent = record.components[name];\n                if (typeof rawComponent === 'function' &&\n                    !('displayName' in rawComponent)) {\n                    promises.push(rawComponent().then(resolved => {\n                        if (!resolved)\n                            return Promise.reject(new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\". Ensure you passed a function that returns a promise.`));\n                        const resolvedComponent = isESModule(resolved)\n                            ? resolved.default\n                            : resolved;\n                        // replace the function with the resolved component\n                        // cannot be null or undefined because we went into the for loop\n                        record.components[name] = resolvedComponent;\n                        return;\n                    }));\n                }\n                return promises;\n            }, [])))).then(() => route);\n}\n\n// TODO: we could allow currentRoute as a prop to expose `isActive` and\n// `isExactActive` behavior should go through an RFC\nfunction useLink(props) {\n    const router = inject(routerKey);\n    const currentRoute = inject(routeLocationKey);\n    const route = computed(() => router.resolve(unref(props.to)));\n    const activeRecordIndex = computed(() => {\n        const { matched } = route.value;\n        const { length } = matched;\n        const routeMatched = matched[length - 1];\n        const currentMatched = currentRoute.matched;\n        if (!routeMatched || !currentMatched.length)\n            return -1;\n        const index = currentMatched.findIndex(isSameRouteRecord.bind(null, routeMatched));\n        if (index > -1)\n            return index;\n        // possible parent record\n        const parentRecordPath = getOriginalPath(matched[length - 2]);\n        return (\n        // we are dealing with nested routes\n        length > 1 &&\n            // if the parent and matched route have the same path, this link is\n            // referring to the empty child. Or we currently are on a different\n            // child of the same parent\n            getOriginalPath(routeMatched) === parentRecordPath &&\n            // avoid comparing the child with its parent\n            currentMatched[currentMatched.length - 1].path !== parentRecordPath\n            ? currentMatched.findIndex(isSameRouteRecord.bind(null, matched[length - 2]))\n            : index);\n    });\n    const isActive = computed(() => activeRecordIndex.value > -1 &&\n        includesParams(currentRoute.params, route.value.params));\n    const isExactActive = computed(() => activeRecordIndex.value > -1 &&\n        activeRecordIndex.value === currentRoute.matched.length - 1 &&\n        isSameRouteLocationParams(currentRoute.params, route.value.params));\n    function navigate(e = {}) {\n        if (guardEvent(e)) {\n            return router[unref(props.replace) ? 'replace' : 'push'](unref(props.to)\n            // avoid uncaught errors are they are logged anyway\n            ).catch(noop);\n        }\n        return Promise.resolve();\n    }\n    // devtools only\n    if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && isBrowser) {\n        const instance = getCurrentInstance();\n        if (instance) {\n            const linkContextDevtools = {\n                route: route.value,\n                isActive: isActive.value,\n                isExactActive: isExactActive.value,\n            };\n            // @ts-expect-error: this is internal\n            instance.__vrl_devtools = instance.__vrl_devtools || [];\n            // @ts-expect-error: this is internal\n            instance.__vrl_devtools.push(linkContextDevtools);\n            watchEffect(() => {\n                linkContextDevtools.route = route.value;\n                linkContextDevtools.isActive = isActive.value;\n                linkContextDevtools.isExactActive = isExactActive.value;\n            }, { flush: 'post' });\n        }\n    }\n    /**\n     * NOTE: update {@link _RouterLinkI}'s `$slots` type when updating this\n     */\n    return {\n        route,\n        href: computed(() => route.value.href),\n        isActive,\n        isExactActive,\n        navigate,\n    };\n}\nconst RouterLinkImpl = /*#__PURE__*/ defineComponent({\n    name: 'RouterLink',\n    compatConfig: { MODE: 3 },\n    props: {\n        to: {\n            type: [String, Object],\n            required: true,\n        },\n        replace: Boolean,\n        activeClass: String,\n        // inactiveClass: String,\n        exactActiveClass: String,\n        custom: Boolean,\n        ariaCurrentValue: {\n            type: String,\n            default: 'page',\n        },\n    },\n    useLink,\n    setup(props, { slots }) {\n        const link = reactive(useLink(props));\n        const { options } = inject(routerKey);\n        const elClass = computed(() => ({\n            [getLinkClass(props.activeClass, options.linkActiveClass, 'router-link-active')]: link.isActive,\n            // [getLinkClass(\n            //   props.inactiveClass,\n            //   options.linkInactiveClass,\n            //   'router-link-inactive'\n            // )]: !link.isExactActive,\n            [getLinkClass(props.exactActiveClass, options.linkExactActiveClass, 'router-link-exact-active')]: link.isExactActive,\n        }));\n        return () => {\n            const children = slots.default && slots.default(link);\n            return props.custom\n                ? children\n                : h('a', {\n                    'aria-current': link.isExactActive\n                        ? props.ariaCurrentValue\n                        : null,\n                    href: link.href,\n                    // this would override user added attrs but Vue will still add\n                    // the listener, so we end up triggering both\n                    onClick: link.navigate,\n                    class: elClass.value,\n                }, children);\n        };\n    },\n});\n// export the public type for h/tsx inference\n// also to avoid inline import() in generated d.ts files\n/**\n * Component to render a link that triggers a navigation on click.\n */\nconst RouterLink = RouterLinkImpl;\nfunction guardEvent(e) {\n    // don't redirect with control keys\n    if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n        return;\n    // don't redirect when preventDefault called\n    if (e.defaultPrevented)\n        return;\n    // don't redirect on right click\n    if (e.button !== undefined && e.button !== 0)\n        return;\n    // don't redirect if `target=\"_blank\"`\n    // @ts-expect-error getAttribute does exist\n    if (e.currentTarget && e.currentTarget.getAttribute) {\n        // @ts-expect-error getAttribute exists\n        const target = e.currentTarget.getAttribute('target');\n        if (/\\b_blank\\b/i.test(target))\n            return;\n    }\n    // this may be a Weex event which doesn't have this method\n    if (e.preventDefault)\n        e.preventDefault();\n    return true;\n}\nfunction includesParams(outer, inner) {\n    for (const key in inner) {\n        const innerValue = inner[key];\n        const outerValue = outer[key];\n        if (typeof innerValue === 'string') {\n            if (innerValue !== outerValue)\n                return false;\n        }\n        else {\n            if (!isArray(outerValue) ||\n                outerValue.length !== innerValue.length ||\n                innerValue.some((value, i) => value !== outerValue[i]))\n                return false;\n        }\n    }\n    return true;\n}\n/**\n * Get the original path value of a record by following its aliasOf\n * @param record\n */\nfunction getOriginalPath(record) {\n    return record ? (record.aliasOf ? record.aliasOf.path : record.path) : '';\n}\n/**\n * Utility class to get the active class based on defaults.\n * @param propClass\n * @param globalClass\n * @param defaultClass\n */\nconst getLinkClass = (propClass, globalClass, defaultClass) => propClass != null\n    ? propClass\n    : globalClass != null\n        ? globalClass\n        : defaultClass;\n\nconst RouterViewImpl = /*#__PURE__*/ defineComponent({\n    name: 'RouterView',\n    // #674 we manually inherit them\n    inheritAttrs: false,\n    props: {\n        name: {\n            type: String,\n            default: 'default',\n        },\n        route: Object,\n    },\n    // Better compat for @vue/compat users\n    // https://github.com/vuejs/router/issues/1315\n    compatConfig: { MODE: 3 },\n    setup(props, { attrs, slots }) {\n        (process.env.NODE_ENV !== 'production') && warnDeprecatedUsage();\n        const injectedRoute = inject(routerViewLocationKey);\n        const routeToDisplay = computed(() => props.route || injectedRoute.value);\n        const injectedDepth = inject(viewDepthKey, 0);\n        // The depth changes based on empty components option, which allows passthrough routes e.g. routes with children\n        // that are used to reuse the `path` property\n        const depth = computed(() => {\n            let initialDepth = unref(injectedDepth);\n            const { matched } = routeToDisplay.value;\n            let matchedRoute;\n            while ((matchedRoute = matched[initialDepth]) &&\n                !matchedRoute.components) {\n                initialDepth++;\n            }\n            return initialDepth;\n        });\n        const matchedRouteRef = computed(() => routeToDisplay.value.matched[depth.value]);\n        provide(viewDepthKey, computed(() => depth.value + 1));\n        provide(matchedRouteKey, matchedRouteRef);\n        provide(routerViewLocationKey, routeToDisplay);\n        const viewRef = ref();\n        // watch at the same time the component instance, the route record we are\n        // rendering, and the name\n        watch(() => [viewRef.value, matchedRouteRef.value, props.name], ([instance, to, name], [oldInstance, from, oldName]) => {\n            // copy reused instances\n            if (to) {\n                // this will update the instance for new instances as well as reused\n                // instances when navigating to a new route\n                to.instances[name] = instance;\n                // the component instance is reused for a different route or name, so\n                // we copy any saved update or leave guards. With async setup, the\n                // mounting component will mount before the matchedRoute changes,\n                // making instance === oldInstance, so we check if guards have been\n                // added before. This works because we remove guards when\n                // unmounting/deactivating components\n                if (from && from !== to && instance && instance === oldInstance) {\n                    if (!to.leaveGuards.size) {\n                        to.leaveGuards = from.leaveGuards;\n                    }\n                    if (!to.updateGuards.size) {\n                        to.updateGuards = from.updateGuards;\n                    }\n                }\n            }\n            // trigger beforeRouteEnter next callbacks\n            if (instance &&\n                to &&\n                // if there is no instance but to and from are the same this might be\n                // the first visit\n                (!from || !isSameRouteRecord(to, from) || !oldInstance)) {\n                (to.enterCallbacks[name] || []).forEach(callback => callback(instance));\n            }\n        }, { flush: 'post' });\n        return () => {\n            const route = routeToDisplay.value;\n            // we need the value at the time we render because when we unmount, we\n            // navigated to a different location so the value is different\n            const currentName = props.name;\n            const matchedRoute = matchedRouteRef.value;\n            const ViewComponent = matchedRoute && matchedRoute.components[currentName];\n            if (!ViewComponent) {\n                return normalizeSlot(slots.default, { Component: ViewComponent, route });\n            }\n            // props from route configuration\n            const routePropsOption = matchedRoute.props[currentName];\n            const routeProps = routePropsOption\n                ? routePropsOption === true\n                    ? route.params\n                    : typeof routePropsOption === 'function'\n                        ? routePropsOption(route)\n                        : routePropsOption\n                : null;\n            const onVnodeUnmounted = vnode => {\n                // remove the instance reference to prevent leak\n                if (vnode.component.isUnmounted) {\n                    matchedRoute.instances[currentName] = null;\n                }\n            };\n            const component = h(ViewComponent, assign({}, routeProps, attrs, {\n                onVnodeUnmounted,\n                ref: viewRef,\n            }));\n            if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) &&\n                isBrowser &&\n                component.ref) {\n                // TODO: can display if it's an alias, its props\n                const info = {\n                    depth: depth.value,\n                    name: matchedRoute.name,\n                    path: matchedRoute.path,\n                    meta: matchedRoute.meta,\n                };\n                const internalInstances = isArray(component.ref)\n                    ? component.ref.map(r => r.i)\n                    : [component.ref.i];\n                internalInstances.forEach(instance => {\n                    // @ts-expect-error\n                    instance.__vrv_devtools = info;\n                });\n            }\n            return (\n            // pass the vnode to the slot as a prop.\n            // h and <component :is=\"...\"> both accept vnodes\n            normalizeSlot(slots.default, { Component: component, route }) ||\n                component);\n        };\n    },\n});\nfunction normalizeSlot(slot, data) {\n    if (!slot)\n        return null;\n    const slotContent = slot(data);\n    return slotContent.length === 1 ? slotContent[0] : slotContent;\n}\n// export the public type for h/tsx inference\n// also to avoid inline import() in generated d.ts files\n/**\n * Component to display the current route the user is at.\n */\nconst RouterView = RouterViewImpl;\n// warn against deprecated usage with <transition> & <keep-alive>\n// due to functional component being no longer eager in Vue 3\nfunction warnDeprecatedUsage() {\n    const instance = getCurrentInstance();\n    const parentName = instance.parent && instance.parent.type.name;\n    const parentSubTreeType = instance.parent && instance.parent.subTree && instance.parent.subTree.type;\n    if (parentName &&\n        (parentName === 'KeepAlive' || parentName.includes('Transition')) &&\n        typeof parentSubTreeType === 'object' &&\n        parentSubTreeType.name === 'RouterView') {\n        const comp = parentName === 'KeepAlive' ? 'keep-alive' : 'transition';\n        warn(`<router-view> can no longer be used directly inside <transition> or <keep-alive>.\\n` +\n            `Use slot props instead:\\n\\n` +\n            `<router-view v-slot=\"{ Component }\">\\n` +\n            `  <${comp}>\\n` +\n            `    <component :is=\"Component\" />\\n` +\n            `  </${comp}>\\n` +\n            `</router-view>`);\n    }\n}\n\n/**\n * Copies a route location and removes any problematic properties that cannot be shown in devtools (e.g. Vue instances).\n *\n * @param routeLocation - routeLocation to format\n * @param tooltip - optional tooltip\n * @returns a copy of the routeLocation\n */\nfunction formatRouteLocation(routeLocation, tooltip) {\n    const copy = assign({}, routeLocation, {\n        // remove variables that can contain vue instances\n        matched: routeLocation.matched.map(matched => omit(matched, ['instances', 'children', 'aliasOf'])),\n    });\n    return {\n        _custom: {\n            type: null,\n            readOnly: true,\n            display: routeLocation.fullPath,\n            tooltip,\n            value: copy,\n        },\n    };\n}\nfunction formatDisplay(display) {\n    return {\n        _custom: {\n            display,\n        },\n    };\n}\n// to support multiple router instances\nlet routerId = 0;\nfunction addDevtools(app, router, matcher) {\n    // Take over router.beforeEach and afterEach\n    // make sure we are not registering the devtool twice\n    if (router.__hasDevtools)\n        return;\n    router.__hasDevtools = true;\n    // increment to support multiple router instances\n    const id = routerId++;\n    setupDevtoolsPlugin({\n        id: 'org.vuejs.router' + (id ? '.' + id : ''),\n        label: 'Vue Router',\n        packageName: 'vue-router',\n        homepage: 'https://router.vuejs.org',\n        logo: 'https://router.vuejs.org/logo.png',\n        componentStateTypes: ['Routing'],\n        app,\n    }, api => {\n        if (typeof api.now !== 'function') {\n            console.warn('[Vue Router]: You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.');\n        }\n        // display state added by the router\n        api.on.inspectComponent((payload, ctx) => {\n            if (payload.instanceData) {\n                payload.instanceData.state.push({\n                    type: 'Routing',\n                    key: '$route',\n                    editable: false,\n                    value: formatRouteLocation(router.currentRoute.value, 'Current Route'),\n                });\n            }\n        });\n        // mark router-link as active and display tags on router views\n        api.on.visitComponentTree(({ treeNode: node, componentInstance }) => {\n            if (componentInstance.__vrv_devtools) {\n                const info = componentInstance.__vrv_devtools;\n                node.tags.push({\n                    label: (info.name ? `${info.name.toString()}: ` : '') + info.path,\n                    textColor: 0,\n                    tooltip: 'This component is rendered by &lt;router-view&gt;',\n                    backgroundColor: PINK_500,\n                });\n            }\n            // if multiple useLink are used\n            if (isArray(componentInstance.__vrl_devtools)) {\n                componentInstance.__devtoolsApi = api;\n                componentInstance.__vrl_devtools.forEach(devtoolsData => {\n                    let backgroundColor = ORANGE_400;\n                    let tooltip = '';\n                    if (devtoolsData.isExactActive) {\n                        backgroundColor = LIME_500;\n                        tooltip = 'This is exactly active';\n                    }\n                    else if (devtoolsData.isActive) {\n                        backgroundColor = BLUE_600;\n                        tooltip = 'This link is active';\n                    }\n                    node.tags.push({\n                        label: devtoolsData.route.path,\n                        textColor: 0,\n                        tooltip,\n                        backgroundColor,\n                    });\n                });\n            }\n        });\n        watch(router.currentRoute, () => {\n            // refresh active state\n            refreshRoutesView();\n            api.notifyComponentUpdate();\n            api.sendInspectorTree(routerInspectorId);\n            api.sendInspectorState(routerInspectorId);\n        });\n        const navigationsLayerId = 'router:navigations:' + id;\n        api.addTimelineLayer({\n            id: navigationsLayerId,\n            label: `Router${id ? ' ' + id : ''} Navigations`,\n            color: 0x40a8c4,\n        });\n        // const errorsLayerId = 'router:errors'\n        // api.addTimelineLayer({\n        //   id: errorsLayerId,\n        //   label: 'Router Errors',\n        //   color: 0xea5455,\n        // })\n        router.onError((error, to) => {\n            api.addTimelineEvent({\n                layerId: navigationsLayerId,\n                event: {\n                    title: 'Error during Navigation',\n                    subtitle: to.fullPath,\n                    logType: 'error',\n                    time: api.now(),\n                    data: { error },\n                    groupId: to.meta.__navigationId,\n                },\n            });\n        });\n        // attached to `meta` and used to group events\n        let navigationId = 0;\n        router.beforeEach((to, from) => {\n            const data = {\n                guard: formatDisplay('beforeEach'),\n                from: formatRouteLocation(from, 'Current Location during this navigation'),\n                to: formatRouteLocation(to, 'Target location'),\n            };\n            // Used to group navigations together, hide from devtools\n            Object.defineProperty(to.meta, '__navigationId', {\n                value: navigationId++,\n            });\n            api.addTimelineEvent({\n                layerId: navigationsLayerId,\n                event: {\n                    time: api.now(),\n                    title: 'Start of navigation',\n                    subtitle: to.fullPath,\n                    data,\n                    groupId: to.meta.__navigationId,\n                },\n            });\n        });\n        router.afterEach((to, from, failure) => {\n            const data = {\n                guard: formatDisplay('afterEach'),\n            };\n            if (failure) {\n                data.failure = {\n                    _custom: {\n                        type: Error,\n                        readOnly: true,\n                        display: failure ? failure.message : '',\n                        tooltip: 'Navigation Failure',\n                        value: failure,\n                    },\n                };\n                data.status = formatDisplay('❌');\n            }\n            else {\n                data.status = formatDisplay('✅');\n            }\n            // we set here to have the right order\n            data.from = formatRouteLocation(from, 'Current Location during this navigation');\n            data.to = formatRouteLocation(to, 'Target location');\n            api.addTimelineEvent({\n                layerId: navigationsLayerId,\n                event: {\n                    title: 'End of navigation',\n                    subtitle: to.fullPath,\n                    time: api.now(),\n                    data,\n                    logType: failure ? 'warning' : 'default',\n                    groupId: to.meta.__navigationId,\n                },\n            });\n        });\n        /**\n         * Inspector of Existing routes\n         */\n        const routerInspectorId = 'router-inspector:' + id;\n        api.addInspector({\n            id: routerInspectorId,\n            label: 'Routes' + (id ? ' ' + id : ''),\n            icon: 'book',\n            treeFilterPlaceholder: 'Search routes',\n        });\n        function refreshRoutesView() {\n            // the routes view isn't active\n            if (!activeRoutesPayload)\n                return;\n            const payload = activeRoutesPayload;\n            // children routes will appear as nested\n            let routes = matcher.getRoutes().filter(route => !route.parent ||\n                // these routes have a parent with no component which will not appear in the view\n                // therefore we still need to include them\n                !route.parent.record.components);\n            // reset match state to false\n            routes.forEach(resetMatchStateOnRouteRecord);\n            // apply a match state if there is a payload\n            if (payload.filter) {\n                routes = routes.filter(route => \n                // save matches state based on the payload\n                isRouteMatching(route, payload.filter.toLowerCase()));\n            }\n            // mark active routes\n            routes.forEach(route => markRouteRecordActive(route, router.currentRoute.value));\n            payload.rootNodes = routes.map(formatRouteRecordForInspector);\n        }\n        let activeRoutesPayload;\n        api.on.getInspectorTree(payload => {\n            activeRoutesPayload = payload;\n            if (payload.app === app && payload.inspectorId === routerInspectorId) {\n                refreshRoutesView();\n            }\n        });\n        /**\n         * Display information about the currently selected route record\n         */\n        api.on.getInspectorState(payload => {\n            if (payload.app === app && payload.inspectorId === routerInspectorId) {\n                const routes = matcher.getRoutes();\n                const route = routes.find(route => route.record.__vd_id === payload.nodeId);\n                if (route) {\n                    payload.state = {\n                        options: formatRouteRecordMatcherForStateInspector(route),\n                    };\n                }\n            }\n        });\n        api.sendInspectorTree(routerInspectorId);\n        api.sendInspectorState(routerInspectorId);\n    });\n}\nfunction modifierForKey(key) {\n    if (key.optional) {\n        return key.repeatable ? '*' : '?';\n    }\n    else {\n        return key.repeatable ? '+' : '';\n    }\n}\nfunction formatRouteRecordMatcherForStateInspector(route) {\n    const { record } = route;\n    const fields = [\n        { editable: false, key: 'path', value: record.path },\n    ];\n    if (record.name != null) {\n        fields.push({\n            editable: false,\n            key: 'name',\n            value: record.name,\n        });\n    }\n    fields.push({ editable: false, key: 'regexp', value: route.re });\n    if (route.keys.length) {\n        fields.push({\n            editable: false,\n            key: 'keys',\n            value: {\n                _custom: {\n                    type: null,\n                    readOnly: true,\n                    display: route.keys\n                        .map(key => `${key.name}${modifierForKey(key)}`)\n                        .join(' '),\n                    tooltip: 'Param keys',\n                    value: route.keys,\n                },\n            },\n        });\n    }\n    if (record.redirect != null) {\n        fields.push({\n            editable: false,\n            key: 'redirect',\n            value: record.redirect,\n        });\n    }\n    if (route.alias.length) {\n        fields.push({\n            editable: false,\n            key: 'aliases',\n            value: route.alias.map(alias => alias.record.path),\n        });\n    }\n    if (Object.keys(route.record.meta).length) {\n        fields.push({\n            editable: false,\n            key: 'meta',\n            value: route.record.meta,\n        });\n    }\n    fields.push({\n        key: 'score',\n        editable: false,\n        value: {\n            _custom: {\n                type: null,\n                readOnly: true,\n                display: route.score.map(score => score.join(', ')).join(' | '),\n                tooltip: 'Score used to sort routes',\n                value: route.score,\n            },\n        },\n    });\n    return fields;\n}\n/**\n * Extracted from tailwind palette\n */\nconst PINK_500 = 0xec4899;\nconst BLUE_600 = 0x2563eb;\nconst LIME_500 = 0x84cc16;\nconst CYAN_400 = 0x22d3ee;\nconst ORANGE_400 = 0xfb923c;\n// const GRAY_100 = 0xf4f4f5\nconst DARK = 0x666666;\nfunction formatRouteRecordForInspector(route) {\n    const tags = [];\n    const { record } = route;\n    if (record.name != null) {\n        tags.push({\n            label: String(record.name),\n            textColor: 0,\n            backgroundColor: CYAN_400,\n        });\n    }\n    if (record.aliasOf) {\n        tags.push({\n            label: 'alias',\n            textColor: 0,\n            backgroundColor: ORANGE_400,\n        });\n    }\n    if (route.__vd_match) {\n        tags.push({\n            label: 'matches',\n            textColor: 0,\n            backgroundColor: PINK_500,\n        });\n    }\n    if (route.__vd_exactActive) {\n        tags.push({\n            label: 'exact',\n            textColor: 0,\n            backgroundColor: LIME_500,\n        });\n    }\n    if (route.__vd_active) {\n        tags.push({\n            label: 'active',\n            textColor: 0,\n            backgroundColor: BLUE_600,\n        });\n    }\n    if (record.redirect) {\n        tags.push({\n            label: typeof record.redirect === 'string'\n                ? `redirect: ${record.redirect}`\n                : 'redirects',\n            textColor: 0xffffff,\n            backgroundColor: DARK,\n        });\n    }\n    // add an id to be able to select it. Using the `path` is not possible because\n    // empty path children would collide with their parents\n    let id = record.__vd_id;\n    if (id == null) {\n        id = String(routeRecordId++);\n        record.__vd_id = id;\n    }\n    return {\n        id,\n        label: record.path,\n        tags,\n        children: route.children.map(formatRouteRecordForInspector),\n    };\n}\n//  incremental id for route records and inspector state\nlet routeRecordId = 0;\nconst EXTRACT_REGEXP_RE = /^\\/(.*)\\/([a-z]*)$/;\nfunction markRouteRecordActive(route, currentRoute) {\n    // no route will be active if matched is empty\n    // reset the matching state\n    const isExactActive = currentRoute.matched.length &&\n        isSameRouteRecord(currentRoute.matched[currentRoute.matched.length - 1], route.record);\n    route.__vd_exactActive = route.__vd_active = isExactActive;\n    if (!isExactActive) {\n        route.__vd_active = currentRoute.matched.some(match => isSameRouteRecord(match, route.record));\n    }\n    route.children.forEach(childRoute => markRouteRecordActive(childRoute, currentRoute));\n}\nfunction resetMatchStateOnRouteRecord(route) {\n    route.__vd_match = false;\n    route.children.forEach(resetMatchStateOnRouteRecord);\n}\nfunction isRouteMatching(route, filter) {\n    const found = String(route.re).match(EXTRACT_REGEXP_RE);\n    route.__vd_match = false;\n    if (!found || found.length < 3) {\n        return false;\n    }\n    // use a regexp without $ at the end to match nested routes better\n    const nonEndingRE = new RegExp(found[1].replace(/\\$$/, ''), found[2]);\n    if (nonEndingRE.test(filter)) {\n        // mark children as matches\n        route.children.forEach(child => isRouteMatching(child, filter));\n        // exception case: `/`\n        if (route.record.path !== '/' || filter === '/') {\n            route.__vd_match = route.re.test(filter);\n            return true;\n        }\n        // hide the / route\n        return false;\n    }\n    const path = route.record.path.toLowerCase();\n    const decodedPath = decode(path);\n    // also allow partial matching on the path\n    if (!filter.startsWith('/') &&\n        (decodedPath.includes(filter) || path.includes(filter)))\n        return true;\n    if (decodedPath.startsWith(filter) || path.startsWith(filter))\n        return true;\n    if (route.record.name && String(route.record.name).includes(filter))\n        return true;\n    return route.children.some(child => isRouteMatching(child, filter));\n}\nfunction omit(obj, keys) {\n    const ret = {};\n    for (const key in obj) {\n        if (!keys.includes(key)) {\n            // @ts-expect-error\n            ret[key] = obj[key];\n        }\n    }\n    return ret;\n}\n\n/**\n * Creates a Router instance that can be used by a Vue app.\n *\n * @param options - {@link RouterOptions}\n */\nfunction createRouter(options) {\n    const matcher = createRouterMatcher(options.routes, options);\n    const parseQuery$1 = options.parseQuery || parseQuery;\n    const stringifyQuery$1 = options.stringifyQuery || stringifyQuery;\n    const routerHistory = options.history;\n    if ((process.env.NODE_ENV !== 'production') && !routerHistory)\n        throw new Error('Provide the \"history\" option when calling \"createRouter()\":' +\n            ' https://next.router.vuejs.org/api/#history.');\n    const beforeGuards = useCallbacks();\n    const beforeResolveGuards = useCallbacks();\n    const afterGuards = useCallbacks();\n    const currentRoute = shallowRef(START_LOCATION_NORMALIZED);\n    let pendingLocation = START_LOCATION_NORMALIZED;\n    // leave the scrollRestoration if no scrollBehavior is provided\n    if (isBrowser && options.scrollBehavior && 'scrollRestoration' in history) {\n        history.scrollRestoration = 'manual';\n    }\n    const normalizeParams = applyToParams.bind(null, paramValue => '' + paramValue);\n    const encodeParams = applyToParams.bind(null, encodeParam);\n    const decodeParams = \n    // @ts-expect-error: intentionally avoid the type check\n    applyToParams.bind(null, decode);\n    function addRoute(parentOrRoute, route) {\n        let parent;\n        let record;\n        if (isRouteName(parentOrRoute)) {\n            parent = matcher.getRecordMatcher(parentOrRoute);\n            record = route;\n        }\n        else {\n            record = parentOrRoute;\n        }\n        return matcher.addRoute(record, parent);\n    }\n    function removeRoute(name) {\n        const recordMatcher = matcher.getRecordMatcher(name);\n        if (recordMatcher) {\n            matcher.removeRoute(recordMatcher);\n        }\n        else if ((process.env.NODE_ENV !== 'production')) {\n            warn(`Cannot remove non-existent route \"${String(name)}\"`);\n        }\n    }\n    function getRoutes() {\n        return matcher.getRoutes().map(routeMatcher => routeMatcher.record);\n    }\n    function hasRoute(name) {\n        return !!matcher.getRecordMatcher(name);\n    }\n    function resolve(rawLocation, currentLocation) {\n        // const objectLocation = routerLocationAsObject(rawLocation)\n        // we create a copy to modify it later\n        currentLocation = assign({}, currentLocation || currentRoute.value);\n        if (typeof rawLocation === 'string') {\n            const locationNormalized = parseURL(parseQuery$1, rawLocation, currentLocation.path);\n            const matchedRoute = matcher.resolve({ path: locationNormalized.path }, currentLocation);\n            const href = routerHistory.createHref(locationNormalized.fullPath);\n            if ((process.env.NODE_ENV !== 'production')) {\n                if (href.startsWith('//'))\n                    warn(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\n                else if (!matchedRoute.matched.length) {\n                    warn(`No match found for location with path \"${rawLocation}\"`);\n                }\n            }\n            // locationNormalized is always a new object\n            return assign(locationNormalized, matchedRoute, {\n                params: decodeParams(matchedRoute.params),\n                hash: decode(locationNormalized.hash),\n                redirectedFrom: undefined,\n                href,\n            });\n        }\n        let matcherLocation;\n        // path could be relative in object as well\n        if ('path' in rawLocation) {\n            if ((process.env.NODE_ENV !== 'production') &&\n                'params' in rawLocation &&\n                !('name' in rawLocation) &&\n                // @ts-expect-error: the type is never\n                Object.keys(rawLocation.params).length) {\n                warn(`Path \"${rawLocation.path}\" was passed with params but they will be ignored. Use a named route alongside params instead.`);\n            }\n            matcherLocation = assign({}, rawLocation, {\n                path: parseURL(parseQuery$1, rawLocation.path, currentLocation.path).path,\n            });\n        }\n        else {\n            // remove any nullish param\n            const targetParams = assign({}, rawLocation.params);\n            for (const key in targetParams) {\n                if (targetParams[key] == null) {\n                    delete targetParams[key];\n                }\n            }\n            // pass encoded values to the matcher, so it can produce encoded path and fullPath\n            matcherLocation = assign({}, rawLocation, {\n                params: encodeParams(targetParams),\n            });\n            // current location params are decoded, we need to encode them in case the\n            // matcher merges the params\n            currentLocation.params = encodeParams(currentLocation.params);\n        }\n        const matchedRoute = matcher.resolve(matcherLocation, currentLocation);\n        const hash = rawLocation.hash || '';\n        if ((process.env.NODE_ENV !== 'production') && hash && !hash.startsWith('#')) {\n            warn(`A \\`hash\\` should always start with the character \"#\". Replace \"${hash}\" with \"#${hash}\".`);\n        }\n        // the matcher might have merged current location params, so\n        // we need to run the decoding again\n        matchedRoute.params = normalizeParams(decodeParams(matchedRoute.params));\n        const fullPath = stringifyURL(stringifyQuery$1, assign({}, rawLocation, {\n            hash: encodeHash(hash),\n            path: matchedRoute.path,\n        }));\n        const href = routerHistory.createHref(fullPath);\n        if ((process.env.NODE_ENV !== 'production')) {\n            if (href.startsWith('//')) {\n                warn(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\n            }\n            else if (!matchedRoute.matched.length) {\n                warn(`No match found for location with path \"${'path' in rawLocation ? rawLocation.path : rawLocation}\"`);\n            }\n        }\n        return assign({\n            fullPath,\n            // keep the hash encoded so fullPath is effectively path + encodedQuery +\n            // hash\n            hash,\n            query: \n            // if the user is using a custom query lib like qs, we might have\n            // nested objects, so we keep the query as is, meaning it can contain\n            // numbers at `$route.query`, but at the point, the user will have to\n            // use their own type anyway.\n            // https://github.com/vuejs/router/issues/328#issuecomment-649481567\n            stringifyQuery$1 === stringifyQuery\n                ? normalizeQuery(rawLocation.query)\n                : (rawLocation.query || {}),\n        }, matchedRoute, {\n            redirectedFrom: undefined,\n            href,\n        });\n    }\n    function locationAsObject(to) {\n        return typeof to === 'string'\n            ? parseURL(parseQuery$1, to, currentRoute.value.path)\n            : assign({}, to);\n    }\n    function checkCanceledNavigation(to, from) {\n        if (pendingLocation !== to) {\n            return createRouterError(8 /* ErrorTypes.NAVIGATION_CANCELLED */, {\n                from,\n                to,\n            });\n        }\n    }\n    function push(to) {\n        return pushWithRedirect(to);\n    }\n    function replace(to) {\n        return push(assign(locationAsObject(to), { replace: true }));\n    }\n    function handleRedirectRecord(to) {\n        const lastMatched = to.matched[to.matched.length - 1];\n        if (lastMatched && lastMatched.redirect) {\n            const { redirect } = lastMatched;\n            let newTargetLocation = typeof redirect === 'function' ? redirect(to) : redirect;\n            if (typeof newTargetLocation === 'string') {\n                newTargetLocation =\n                    newTargetLocation.includes('?') || newTargetLocation.includes('#')\n                        ? (newTargetLocation = locationAsObject(newTargetLocation))\n                        : // force empty params\n                            { path: newTargetLocation };\n                // @ts-expect-error: force empty params when a string is passed to let\n                // the router parse them again\n                newTargetLocation.params = {};\n            }\n            if ((process.env.NODE_ENV !== 'production') &&\n                !('path' in newTargetLocation) &&\n                !('name' in newTargetLocation)) {\n                warn(`Invalid redirect found:\\n${JSON.stringify(newTargetLocation, null, 2)}\\n when navigating to \"${to.fullPath}\". A redirect must contain a name or path. This will break in production.`);\n                throw new Error('Invalid redirect');\n            }\n            return assign({\n                query: to.query,\n                hash: to.hash,\n                // avoid transferring params if the redirect has a path\n                params: 'path' in newTargetLocation ? {} : to.params,\n            }, newTargetLocation);\n        }\n    }\n    function pushWithRedirect(to, redirectedFrom) {\n        const targetLocation = (pendingLocation = resolve(to));\n        const from = currentRoute.value;\n        const data = to.state;\n        const force = to.force;\n        // to could be a string where `replace` is a function\n        const replace = to.replace === true;\n        const shouldRedirect = handleRedirectRecord(targetLocation);\n        if (shouldRedirect)\n            return pushWithRedirect(assign(locationAsObject(shouldRedirect), {\n                state: typeof shouldRedirect === 'object'\n                    ? assign({}, data, shouldRedirect.state)\n                    : data,\n                force,\n                replace,\n            }), \n            // keep original redirectedFrom if it exists\n            redirectedFrom || targetLocation);\n        // if it was a redirect we already called `pushWithRedirect` above\n        const toLocation = targetLocation;\n        toLocation.redirectedFrom = redirectedFrom;\n        let failure;\n        if (!force && isSameRouteLocation(stringifyQuery$1, from, targetLocation)) {\n            failure = createRouterError(16 /* ErrorTypes.NAVIGATION_DUPLICATED */, { to: toLocation, from });\n            // trigger scroll to allow scrolling to the same anchor\n            handleScroll(from, from, \n            // this is a push, the only way for it to be triggered from a\n            // history.listen is with a redirect, which makes it become a push\n            true, \n            // This cannot be the first navigation because the initial location\n            // cannot be manually navigated to\n            false);\n        }\n        return (failure ? Promise.resolve(failure) : navigate(toLocation, from))\n            .catch((error) => isNavigationFailure(error)\n            ? // navigation redirects still mark the router as ready\n                isNavigationFailure(error, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)\n                    ? error\n                    : markAsReady(error) // also returns the error\n            : // reject any unknown error\n                triggerError(error, toLocation, from))\n            .then((failure) => {\n            if (failure) {\n                if (isNavigationFailure(failure, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)) {\n                    if ((process.env.NODE_ENV !== 'production') &&\n                        // we are redirecting to the same location we were already at\n                        isSameRouteLocation(stringifyQuery$1, resolve(failure.to), toLocation) &&\n                        // and we have done it a couple of times\n                        redirectedFrom &&\n                        // @ts-expect-error: added only in dev\n                        (redirectedFrom._count = redirectedFrom._count\n                            ? // @ts-expect-error\n                                redirectedFrom._count + 1\n                            : 1) > 30) {\n                        warn(`Detected a possibly infinite redirection in a navigation guard when going from \"${from.fullPath}\" to \"${toLocation.fullPath}\". Aborting to avoid a Stack Overflow.\\n Are you always returning a new location within a navigation guard? That would lead to this error. Only return when redirecting or aborting, that should fix this. This might break in production if not fixed.`);\n                        return Promise.reject(new Error('Infinite redirect in navigation guard'));\n                    }\n                    return pushWithRedirect(\n                    // keep options\n                    assign({\n                        // preserve an existing replacement but allow the redirect to override it\n                        replace,\n                    }, locationAsObject(failure.to), {\n                        state: typeof failure.to === 'object'\n                            ? assign({}, data, failure.to.state)\n                            : data,\n                        force,\n                    }), \n                    // preserve the original redirectedFrom if any\n                    redirectedFrom || toLocation);\n                }\n            }\n            else {\n                // if we fail we don't finalize the navigation\n                failure = finalizeNavigation(toLocation, from, true, replace, data);\n            }\n            triggerAfterEach(toLocation, from, failure);\n            return failure;\n        });\n    }\n    /**\n     * Helper to reject and skip all navigation guards if a new navigation happened\n     * @param to\n     * @param from\n     */\n    function checkCanceledNavigationAndReject(to, from) {\n        const error = checkCanceledNavigation(to, from);\n        return error ? Promise.reject(error) : Promise.resolve();\n    }\n    function runWithContext(fn) {\n        const app = installedApps.values().next().value;\n        // support Vue < 3.3\n        return app && typeof app.runWithContext === 'function'\n            ? app.runWithContext(fn)\n            : fn();\n    }\n    // TODO: refactor the whole before guards by internally using router.beforeEach\n    function navigate(to, from) {\n        let guards;\n        const [leavingRecords, updatingRecords, enteringRecords] = extractChangingRecords(to, from);\n        // all components here have been resolved once because we are leaving\n        guards = extractComponentsGuards(leavingRecords.reverse(), 'beforeRouteLeave', to, from);\n        // leavingRecords is already reversed\n        for (const record of leavingRecords) {\n            record.leaveGuards.forEach(guard => {\n                guards.push(guardToPromiseFn(guard, to, from));\n            });\n        }\n        const canceledNavigationCheck = checkCanceledNavigationAndReject.bind(null, to, from);\n        guards.push(canceledNavigationCheck);\n        // run the queue of per route beforeRouteLeave guards\n        return (runGuardQueue(guards)\n            .then(() => {\n            // check global guards beforeEach\n            guards = [];\n            for (const guard of beforeGuards.list()) {\n                guards.push(guardToPromiseFn(guard, to, from));\n            }\n            guards.push(canceledNavigationCheck);\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // check in components beforeRouteUpdate\n            guards = extractComponentsGuards(updatingRecords, 'beforeRouteUpdate', to, from);\n            for (const record of updatingRecords) {\n                record.updateGuards.forEach(guard => {\n                    guards.push(guardToPromiseFn(guard, to, from));\n                });\n            }\n            guards.push(canceledNavigationCheck);\n            // run the queue of per route beforeEnter guards\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // check the route beforeEnter\n            guards = [];\n            for (const record of enteringRecords) {\n                // do not trigger beforeEnter on reused views\n                if (record.beforeEnter) {\n                    if (isArray(record.beforeEnter)) {\n                        for (const beforeEnter of record.beforeEnter)\n                            guards.push(guardToPromiseFn(beforeEnter, to, from));\n                    }\n                    else {\n                        guards.push(guardToPromiseFn(record.beforeEnter, to, from));\n                    }\n                }\n            }\n            guards.push(canceledNavigationCheck);\n            // run the queue of per route beforeEnter guards\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // NOTE: at this point to.matched is normalized and does not contain any () => Promise<Component>\n            // clear existing enterCallbacks, these are added by extractComponentsGuards\n            to.matched.forEach(record => (record.enterCallbacks = {}));\n            // check in-component beforeRouteEnter\n            guards = extractComponentsGuards(enteringRecords, 'beforeRouteEnter', to, from);\n            guards.push(canceledNavigationCheck);\n            // run the queue of per route beforeEnter guards\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // check global guards beforeResolve\n            guards = [];\n            for (const guard of beforeResolveGuards.list()) {\n                guards.push(guardToPromiseFn(guard, to, from));\n            }\n            guards.push(canceledNavigationCheck);\n            return runGuardQueue(guards);\n        })\n            // catch any navigation canceled\n            .catch(err => isNavigationFailure(err, 8 /* ErrorTypes.NAVIGATION_CANCELLED */)\n            ? err\n            : Promise.reject(err)));\n    }\n    function triggerAfterEach(to, from, failure) {\n        // navigation is confirmed, call afterGuards\n        // TODO: wrap with error handlers\n        afterGuards\n            .list()\n            .forEach(guard => runWithContext(() => guard(to, from, failure)));\n    }\n    /**\n     * - Cleans up any navigation guards\n     * - Changes the url if necessary\n     * - Calls the scrollBehavior\n     */\n    function finalizeNavigation(toLocation, from, isPush, replace, data) {\n        // a more recent navigation took place\n        const error = checkCanceledNavigation(toLocation, from);\n        if (error)\n            return error;\n        // only consider as push if it's not the first navigation\n        const isFirstNavigation = from === START_LOCATION_NORMALIZED;\n        const state = !isBrowser ? {} : history.state;\n        // change URL only if the user did a push/replace and if it's not the initial navigation because\n        // it's just reflecting the url\n        if (isPush) {\n            // on the initial navigation, we want to reuse the scroll position from\n            // history state if it exists\n            if (replace || isFirstNavigation)\n                routerHistory.replace(toLocation.fullPath, assign({\n                    scroll: isFirstNavigation && state && state.scroll,\n                }, data));\n            else\n                routerHistory.push(toLocation.fullPath, data);\n        }\n        // accept current navigation\n        currentRoute.value = toLocation;\n        handleScroll(toLocation, from, isPush, isFirstNavigation);\n        markAsReady();\n    }\n    let removeHistoryListener;\n    // attach listener to history to trigger navigations\n    function setupListeners() {\n        // avoid setting up listeners twice due to an invalid first navigation\n        if (removeHistoryListener)\n            return;\n        removeHistoryListener = routerHistory.listen((to, _from, info) => {\n            if (!router.listening)\n                return;\n            // cannot be a redirect route because it was in history\n            const toLocation = resolve(to);\n            // due to dynamic routing, and to hash history with manual navigation\n            // (manually changing the url or calling history.hash = '#/somewhere'),\n            // there could be a redirect record in history\n            const shouldRedirect = handleRedirectRecord(toLocation);\n            if (shouldRedirect) {\n                pushWithRedirect(assign(shouldRedirect, { replace: true }), toLocation).catch(noop);\n                return;\n            }\n            pendingLocation = toLocation;\n            const from = currentRoute.value;\n            // TODO: should be moved to web history?\n            if (isBrowser) {\n                saveScrollPosition(getScrollKey(from.fullPath, info.delta), computeScrollPosition());\n            }\n            navigate(toLocation, from)\n                .catch((error) => {\n                if (isNavigationFailure(error, 4 /* ErrorTypes.NAVIGATION_ABORTED */ | 8 /* ErrorTypes.NAVIGATION_CANCELLED */)) {\n                    return error;\n                }\n                if (isNavigationFailure(error, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)) {\n                    // Here we could call if (info.delta) routerHistory.go(-info.delta,\n                    // false) but this is bug prone as we have no way to wait the\n                    // navigation to be finished before calling pushWithRedirect. Using\n                    // a setTimeout of 16ms seems to work but there is no guarantee for\n                    // it to work on every browser. So instead we do not restore the\n                    // history entry and trigger a new navigation as requested by the\n                    // navigation guard.\n                    // the error is already handled by router.push we just want to avoid\n                    // logging the error\n                    pushWithRedirect(error.to, toLocation\n                    // avoid an uncaught rejection, let push call triggerError\n                    )\n                        .then(failure => {\n                        // manual change in hash history #916 ending up in the URL not\n                        // changing, but it was changed by the manual url change, so we\n                        // need to manually change it ourselves\n                        if (isNavigationFailure(failure, 4 /* ErrorTypes.NAVIGATION_ABORTED */ |\n                            16 /* ErrorTypes.NAVIGATION_DUPLICATED */) &&\n                            !info.delta &&\n                            info.type === NavigationType.pop) {\n                            routerHistory.go(-1, false);\n                        }\n                    })\n                        .catch(noop);\n                    // avoid the then branch\n                    return Promise.reject();\n                }\n                // do not restore history on unknown direction\n                if (info.delta) {\n                    routerHistory.go(-info.delta, false);\n                }\n                // unrecognized error, transfer to the global handler\n                return triggerError(error, toLocation, from);\n            })\n                .then((failure) => {\n                failure =\n                    failure ||\n                        finalizeNavigation(\n                        // after navigation, all matched components are resolved\n                        toLocation, from, false);\n                // revert the navigation\n                if (failure) {\n                    if (info.delta &&\n                        // a new navigation has been triggered, so we do not want to revert, that will change the current history\n                        // entry while a different route is displayed\n                        !isNavigationFailure(failure, 8 /* ErrorTypes.NAVIGATION_CANCELLED */)) {\n                        routerHistory.go(-info.delta, false);\n                    }\n                    else if (info.type === NavigationType.pop &&\n                        isNavigationFailure(failure, 4 /* ErrorTypes.NAVIGATION_ABORTED */ | 16 /* ErrorTypes.NAVIGATION_DUPLICATED */)) {\n                        // manual change in hash history #916\n                        // it's like a push but lacks the information of the direction\n                        routerHistory.go(-1, false);\n                    }\n                }\n                triggerAfterEach(toLocation, from, failure);\n            })\n                // avoid warnings in the console about uncaught rejections, they are logged by triggerErrors\n                .catch(noop);\n        });\n    }\n    // Initialization and Errors\n    let readyHandlers = useCallbacks();\n    let errorListeners = useCallbacks();\n    let ready;\n    /**\n     * Trigger errorListeners added via onError and throws the error as well\n     *\n     * @param error - error to throw\n     * @param to - location we were navigating to when the error happened\n     * @param from - location we were navigating from when the error happened\n     * @returns the error as a rejected promise\n     */\n    function triggerError(error, to, from) {\n        markAsReady(error);\n        const list = errorListeners.list();\n        if (list.length) {\n            list.forEach(handler => handler(error, to, from));\n        }\n        else {\n            if ((process.env.NODE_ENV !== 'production')) {\n                warn('uncaught error during route navigation:');\n            }\n            console.error(error);\n        }\n        // reject the error no matter there were error listeners or not\n        return Promise.reject(error);\n    }\n    function isReady() {\n        if (ready && currentRoute.value !== START_LOCATION_NORMALIZED)\n            return Promise.resolve();\n        return new Promise((resolve, reject) => {\n            readyHandlers.add([resolve, reject]);\n        });\n    }\n    function markAsReady(err) {\n        if (!ready) {\n            // still not ready if an error happened\n            ready = !err;\n            setupListeners();\n            readyHandlers\n                .list()\n                .forEach(([resolve, reject]) => (err ? reject(err) : resolve()));\n            readyHandlers.reset();\n        }\n        return err;\n    }\n    // Scroll behavior\n    function handleScroll(to, from, isPush, isFirstNavigation) {\n        const { scrollBehavior } = options;\n        if (!isBrowser || !scrollBehavior)\n            return Promise.resolve();\n        const scrollPosition = (!isPush && getSavedScrollPosition(getScrollKey(to.fullPath, 0))) ||\n            ((isFirstNavigation || !isPush) &&\n                history.state &&\n                history.state.scroll) ||\n            null;\n        return nextTick()\n            .then(() => scrollBehavior(to, from, scrollPosition))\n            .then(position => position && scrollToPosition(position))\n            .catch(err => triggerError(err, to, from));\n    }\n    const go = (delta) => routerHistory.go(delta);\n    let started;\n    const installedApps = new Set();\n    const router = {\n        currentRoute,\n        listening: true,\n        addRoute,\n        removeRoute,\n        hasRoute,\n        getRoutes,\n        resolve,\n        options,\n        push,\n        replace,\n        go,\n        back: () => go(-1),\n        forward: () => go(1),\n        beforeEach: beforeGuards.add,\n        beforeResolve: beforeResolveGuards.add,\n        afterEach: afterGuards.add,\n        onError: errorListeners.add,\n        isReady,\n        install(app) {\n            const router = this;\n            app.component('RouterLink', RouterLink);\n            app.component('RouterView', RouterView);\n            app.config.globalProperties.$router = router;\n            Object.defineProperty(app.config.globalProperties, '$route', {\n                enumerable: true,\n                get: () => unref(currentRoute),\n            });\n            // this initial navigation is only necessary on client, on server it doesn't\n            // make sense because it will create an extra unnecessary navigation and could\n            // lead to problems\n            if (isBrowser &&\n                // used for the initial navigation client side to avoid pushing\n                // multiple times when the router is used in multiple apps\n                !started &&\n                currentRoute.value === START_LOCATION_NORMALIZED) {\n                // see above\n                started = true;\n                push(routerHistory.location).catch(err => {\n                    if ((process.env.NODE_ENV !== 'production'))\n                        warn('Unexpected error when starting the router:', err);\n                });\n            }\n            const reactiveRoute = {};\n            for (const key in START_LOCATION_NORMALIZED) {\n                Object.defineProperty(reactiveRoute, key, {\n                    get: () => currentRoute.value[key],\n                    enumerable: true,\n                });\n            }\n            app.provide(routerKey, router);\n            app.provide(routeLocationKey, shallowReactive(reactiveRoute));\n            app.provide(routerViewLocationKey, currentRoute);\n            const unmountApp = app.unmount;\n            installedApps.add(app);\n            app.unmount = function () {\n                installedApps.delete(app);\n                // the router is not attached to an app anymore\n                if (installedApps.size < 1) {\n                    // invalidate the current navigation\n                    pendingLocation = START_LOCATION_NORMALIZED;\n                    removeHistoryListener && removeHistoryListener();\n                    removeHistoryListener = null;\n                    currentRoute.value = START_LOCATION_NORMALIZED;\n                    started = false;\n                    ready = false;\n                }\n                unmountApp();\n            };\n            // TODO: this probably needs to be updated so it can be used by vue-termui\n            if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && isBrowser) {\n                addDevtools(app, router, matcher);\n            }\n        },\n    };\n    // TODO: type this as NavigationGuardReturn or similar instead of any\n    function runGuardQueue(guards) {\n        return guards.reduce((promise, guard) => promise.then(() => runWithContext(guard)), Promise.resolve());\n    }\n    return router;\n}\nfunction extractChangingRecords(to, from) {\n    const leavingRecords = [];\n    const updatingRecords = [];\n    const enteringRecords = [];\n    const len = Math.max(from.matched.length, to.matched.length);\n    for (let i = 0; i < len; i++) {\n        const recordFrom = from.matched[i];\n        if (recordFrom) {\n            if (to.matched.find(record => isSameRouteRecord(record, recordFrom)))\n                updatingRecords.push(recordFrom);\n            else\n                leavingRecords.push(recordFrom);\n        }\n        const recordTo = to.matched[i];\n        if (recordTo) {\n            // the type doesn't matter because we are comparing per reference\n            if (!from.matched.find(record => isSameRouteRecord(record, recordTo))) {\n                enteringRecords.push(recordTo);\n            }\n        }\n    }\n    return [leavingRecords, updatingRecords, enteringRecords];\n}\n\n/**\n * Returns the router instance. Equivalent to using `$router` inside\n * templates.\n */\nfunction useRouter() {\n    return inject(routerKey);\n}\n/**\n * Returns the current route location. Equivalent to using `$route` inside\n * templates.\n */\nfunction useRoute() {\n    return inject(routeLocationKey);\n}\n\nexport { NavigationFailureType, RouterLink, RouterView, START_LOCATION_NORMALIZED as START_LOCATION, createMemoryHistory, createRouter, createRouterMatcher, createWebHashHistory, createWebHistory, isNavigationFailure, loadRouteLocation, matchedRouteKey, onBeforeRouteLeave, onBeforeRouteUpdate, parseQuery, routeLocationKey, routerKey, routerViewLocationKey, stringifyQuery, useLink, useRoute, useRouter, viewDepthKey };\n","import { reactive } from \"vue\";\nimport { useRoute, useRouter } from \"vue-router\";\nimport { UserApi } from \"../apis/modules/UserApi.mjs\";\nimport \"fx-front-utils\";\nimport { isEmpty } from \"lodash-unified\";\nlet userInfo = reactive({});\nconst tokenKey = \"$UCENTER_TOKEN\";\nfunction useUser() {\n  const route = useRoute();\n  const router = useRouter();\n  const getToken = () => {\n    return localStorage.getItem(tokenKey);\n  };\n  const setToken = (token) => {\n    localStorage.setItem(tokenKey, token);\n  };\n  const removeToken = () => {\n    localStorage.removeItem(tokenKey);\n  };\n  const setUserInfo = async () => {\n    const token = getToken();\n    if (!token)\n      throw new Error(\"fx-front-ucenter[useUser]: Can not find token!\");\n    const res = await UserApi.getUserInfo(token);\n    userInfo = res == null ? void 0 : res.data;\n  };\n  const getUserInfo = async () => {\n    if (isEmpty(userInfo)) {\n      await setUserInfo();\n    }\n    return userInfo;\n  };\n  const logoutAndBackToCurrentPage = (host) => {\n    const url = router.resolve({\n      name: \"Login\",\n      query: {\n        redirect: String(route.name),\n        ...route.query\n      }\n    });\n    const loginUrl = encodeURIComponent((host != null ? host : document.location.origin) + url.href);\n    logout(loginUrl);\n  };\n  const logout = async (url) => {\n    const token = getToken();\n    removeToken();\n    const href = token ? UserApi.logout(token, url) : UserApi.getUserCenterUrl(url);\n    window.location.href = href;\n  };\n  const logoutByRequest = async (logoutUrl) => {\n    const token = getToken();\n    removeToken();\n    window.location.href = UserApi.logoutByRequest(token, logoutUrl);\n  };\n  return {\n    getToken,\n    setToken,\n    removeToken,\n    setUserInfo,\n    getUserInfo,\n    logout,\n    logoutByRequest,\n    logoutAndBackToCurrentPage\n  };\n}\nexport { useUser };\n","import { omit } from \"lodash-unified\";\nimport { useUser } from \"../hooks/use-user.mjs\";\nconst { setUserInfo, setToken, getToken } = useUser();\nconst handleTokenGuard = async (to, _, next) => {\n  if (to.name === \"Login\" || to.path === \"/\" || to.path === \"/login\")\n    next();\n  else {\n    if (to.query.token) {\n      if (!getToken()) {\n        setToken(to.query.token);\n        await setUserInfo();\n      }\n      next(Object.assign(to, { query: omit(to.query, [\"token\"]) }));\n    } else {\n      next();\n    }\n  }\n};\nexport { handleTokenGuard };\n","import axios, { AxiosRequestConfig, AxiosInstance, AxiosResponse } from 'axios'\nimport * as qs from 'qs'\nimport { Loading } from '../loading'\nimport { useUser, UserApi } from 'fx-front-ucenter'\n\nconst pending = new Map() // 声明一个数组用于存储每个ajax请求的取消函数和ajax标识\n\nconst { getToken } = useUser()\n\nexport interface FxAxiosConfig extends AxiosRequestConfig {\n  noLoadingUrls?: string[]\n  arrayBufferUrls?: string[]\n  formDataUrls?: string[]\n  hideErrorMessageCodes?: string[]\n  reloginCodes?: string[]\n  removeRepeatedUrl?: boolean\n  serverConfig?: Record<string, any>\n  axiosConfig?: any[]\n  headerConfig?: Map<string[], Record<string, any>>\n}\n\nexport class FxAxios {\n  service: AxiosInstance\n  constructor(axiosConfig = { timeout: 100000 } as FxAxiosConfig) {\n    if (axiosConfig.serverConfig && typeof axiosConfig.serverConfig === 'object') {\n      if (axiosConfig.serverConfig.swanUrl) {\n        const xhr = new XMLHttpRequest()\n        xhr.open('get', axiosConfig.serverConfig.swanUrl, false)\n        xhr.onreadystatechange = () => {\n          if (xhr.status === 200 && xhr.readyState === 4) {\n            const responseJson = JSON.parse(xhr.responseText)\n\n            responseJson.LOGO && setFavicon(responseJson.LOGO)\n            responseJson.TITLE && (document.title = responseJson.TITLE)\n\n            Object.keys(responseJson).forEach(k => {\n              if (['[', '{'].includes(responseJson[k][0]) && [']', '}'].includes(responseJson[k][responseJson[k].length - 1])) {\n                try {\n                  responseJson[k] = JSON.parse(responseJson[k])\n                } catch (e) {\n                  console.error('parse serverconfig error', e)\n                }\n              }\n            })\n\n            Object.assign(axiosConfig.serverConfig, responseJson)\n            localStorage.setItem('$SERVER_CONFIG', JSON.stringify(responseJson))\n          }\n        }\n        xhr.send()\n      }\n    }\n    this.service = axios.create(axiosConfig)\n    // 设置 post、put 默认 Content-Type\n    this.service.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'\n    this.service.defaults.headers.put['Content-Type'] = 'application/json;charset=UTF-8'\n\n    const noLoadingString = (axiosConfig.noLoadingUrls || []).join('|').replace(/\\//g, '\\\\/')\n    this.service.interceptors.request.use(\n      config => {\n        if (!config.url?.match(noLoadingString)) {\n          Loading.showFullScreenLoading()\n        }\n        setResponseTypeToBuffer(config, axiosConfig)\n        setHeaderToFormData(config, axiosConfig)\n        setHeaderConfig(config, axiosConfig)\n        const url = [config.method, config.url, qs.stringify(config.params), qs.stringify(config.data)].join('&')\n        config.cancelToken = config.cancelToken ||\n          new axios.CancelToken(cancel => {\n            if (!pending.has(url)) {\n              // 如果 pending 中不存在当前请求，则添加进去\n              pending.set(url, cancel)\n            }\n          })\n        this.handleRequestConfig(config)\n        return config\n      },\n      error => {\n        Loading.tryHideFullScreenLoading()\n        console.error(error) // for debug\n        return Promise.reject(error)\n      },\n    )\n\n    this.service.interceptors.response.use(\n      response => {\n        if (!response.config.url?.match(noLoadingString)) {\n          Loading.tryHideFullScreenLoading()\n        }\n        // removeRepeatUrl(response.config, axiosConfig); // 在一个ajax响应后再执行一下取消操作，把已经完成的请求从pending中移除\n        if (response.data instanceof ArrayBuffer) {\n          return response\n        }\n        const responseCode = response.data.code + ''\n        // 成功/登录异常不显示错误提示\n        if ((axiosConfig.hideErrorMessageCodes || ['0', '200010000', '1A0101', '3A0311']).every(c => c !== responseCode)) {\n          // 约定只要responseCode不等于0，就是异常状态\n          Loading.showMessageTip(2, response.data.desc || '系统异常')\n          console.warn(`响应信息:${response.data.desc}`)\n        }\n        if ((axiosConfig.reloginCodes || ['1A0101', '3A0311']).includes(responseCode)) {\n          if (window.parent !== window) {\n            window.parent.postMessage({ method: 'logout' }, '*')\n            ;(window as any).$wujie?.props?.method?.logout?.()\n          } else {\n            this.handleTokenExpired(response, axiosConfig)\n          }\n        }\n        return response\n      },\n      error => {\n        console.error(error.response) // for debug\n        Loading.tryHideFullScreenLoading()\n        // 可以根据后端返回的状态码进行不同的操作\n        if (error.response) {\n          const errorCode = error.response.status\n          switch (errorCode) {\n            case 400:\n              Loading.showMessageTip(5, '请求出现错误')\n              break\n            case 401:\n              Loading.showMessageTip(2, 'Token过期，请重新登录')\n              this.handleTokenExpired(error.response, axiosConfig)\n              break\n            case 403:\n              Loading.showMessageTip(2, '权限认证失效，请重新登录')\n              this.handleAuthFailed(error.response, axiosConfig)\n              break\n            case 404:\n              Loading.showMessageTip(5, '网络请求不存在')\n              break\n            case 500:\n              Loading.showMessageTip(5, '系统异常')\n              break\n            case 501:\n              Loading.showMessageTip(5, '请求还没有被实现')\n              break\n            case 502:\n              Loading.showMessageTip(5, '网关错误')\n              break\n            case 503:\n              Loading.showMessageTip(5, '服务暂时不可用')\n              break\n            case 505:\n              Loading.showMessageTip(5, '请求的 HTTP 版本不支持')\n              break\n            default:\n              break\n          }\n        }\n        return Promise.reject(error)\n      },\n    )\n  }\n  handleRequestConfig(config: AxiosRequestConfig) {\n    const token = getToken()\n    if (token) {\n      if (config.headers) config.headers.authorization = token\n    }\n  }\n  handleTokenExpired(_: AxiosResponse, axiosConfig: FxAxiosConfig) {\n    const loginUrl = encodeURIComponent(`${window.location.origin}/${axiosConfig.serverConfig?.PROD_PREFIX || ''}`)\n    const url = UserApi.getUserCenterUrl(loginUrl)\n\n    window.setTimeout(() => {\n      // 退出到总集登录页\n      window.location.href = url\n    }, 10)\n  }\n  handleAuthFailed(_: AxiosResponse, axiosConfig: FxAxiosConfig) {\n    this.handleTokenExpired(_, axiosConfig)\n  }\n}\n\nconst setHeaderToFormData = (config: AxiosRequestConfig, axiosConfig: FxAxiosConfig) => {\n  // 设置content-type特殊方式\n  const formDataFlag = (axiosConfig.formDataUrls || []).some(\n    (url: any) => config.url?.indexOf(url) !== -1,\n  )\n  if (formDataFlag) {\n    if (config.headers) config.headers['Content-Type'] = 'multipart/form-data'\n  }\n}\n\nconst setHeaderConfig = (config: AxiosRequestConfig, axiosConfig: FxAxiosConfig) => {\n  const headerConfig = axiosConfig?.headerConfig ?? new Map<string[], Record<string, any>>()\n  for(const entry of headerConfig.entries()) {\n    const flag = (entry[0] || []).some(url => config.url?.indexOf(url) !== -1)\n    if (flag && entry[1]) {\n      if (config.headers) Object.assign(config.headers, { ...entry[1] })\n    }\n  }\n}\n\n// 下载文件配置\nconst setResponseTypeToBuffer = (config: AxiosRequestConfig, axiosConfig: FxAxiosConfig) => {\n  const flag = (axiosConfig.arrayBufferUrls || []).some(item => config.url?.indexOf(item) !== -1)\n  if (flag) {\n    config.responseType = 'arraybuffer'\n  }\n}\n\nconst setFavicon = (url: string) => {\n  if (url) {\n    const favicon = (document.querySelector('link[rel*=\\'icon\\']') || document.createElement('link')) as HTMLLinkElement\n    favicon.type = 'image/x-icon'\n    favicon.rel = 'shortcut icon'\n    favicon.href = url\n    document.getElementsByTagName('head')[0].appendChild(favicon)\n  }\n}\n\n// const removeRepeatUrl = ever => {\n//   for (const p in pending) {\n//     if (pending[p].u === ever.url + '&' + ever.method) {\n//       //当当前请求在数组中存在时执行函数体\n//       pending[p].f() //执行取消操作\n//       pending.splice(p, 1) //把这条记录从数组中移除\n//     }\n//   }\n// }\n\nlet fxAxios: AxiosInstance\n\nconst getFxAxios = (config: {\n  serverConfig: Record<string, any> | undefined\n  arrayBufferUrls: string[]\n  noLoadingUrls: string[]\n  formDataUrls: string[]\n  hideErrorMessageCodes?: string[]\n  reloginCodes?: string[]\n  headerConfig?: Map<string[], Record<string, any>>\n}) => {\n  if (!fxAxios) {\n    fxAxios = new FxAxios(config).service\n  }\n  return fxAxios\n}\n\nexport { getFxAxios }\n\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass Cache {\n  constructor(domainKey = \"FX\") {\n    __publicField(this, \"prefixKey\");\n    this.prefixKey = domainKey;\n  }\n  set(key, value) {\n    localStorage.setItem(`${this.prefixKey}.${key}`, value);\n  }\n  get(key) {\n    return localStorage.getItem(`${this.prefixKey}.${key}`);\n  }\n  remove(key) {\n    localStorage.removeItem(`${this.prefixKey}.${key}`);\n  }\n}\nconst defaultCacheObj = new Cache();\nexport { Cache, defaultCacheObj };\n","const DEFAULT_TYPE = \"--\";\nconst NULL_UNDIFINED = [\"[object Undefined]\", \"[object Null]\"];\nfunction formatData(data, formatType = DEFAULT_TYPE) {\n  if (data !== 0 && data !== \"0\" && !data) {\n    return formatType;\n  }\n  if (Object.prototype.toString.call(data) === \"[object Array]\") {\n    return formatArray(data, formatType);\n  }\n  if (Object.prototype.toString.call(data) === \"[object Object]\") {\n    return formatObject(data, formatType);\n  }\n}\nfunction formatObject(data, formatType = DEFAULT_TYPE) {\n  const keys = Object.keys(data);\n  for (const key of keys) {\n    if (typeof data[key] === \"string\" && data[key] === \"\" || NULL_UNDIFINED.includes(Object.prototype.toString.call(data[key]))) {\n      data[key] = formatType;\n    }\n  }\n  return data;\n}\nfunction formatArray(data, formatType = DEFAULT_TYPE) {\n  return data.map((item) => formatObject(item, formatType));\n}\nconst EmptyUtils = {\n  DEFAULT_TYPE,\n  formatData,\n  formatObject,\n  formatArray\n};\nexport { EmptyUtils };\n","import { forOwn } from \"lodash-unified\";\nlet _id_ = 0;\nconst flattenTree = (data, keys, level = 0, pid = 0, childrenKey = \"child\") => data.reduce((arr, x) => [\n  ...arr,\n  keys.reduce((o, k) => (o[k] = x[k], o), { level, pid }),\n  ...flattenTree(x[childrenKey] || [], keys, level + 1, x.id, childrenKey)\n], []);\nconst findTreeNode = (data, target, options = { key: \"id\", children: \"children\" }) => {\n  let result = null;\n  const find = (data2) => {\n    var _a;\n    for (let i = 0; i < data2.length; i++) {\n      if (data2[i][options.key] === target) {\n        result = data2[i];\n      }\n      if ((_a = data2[i][options.children]) == null ? void 0 : _a.length) {\n        find(data2[i][options.children]);\n      }\n    }\n  };\n  find(data);\n  return result;\n};\nfunction splitPromises(promises, groupNum = Number.MAX_SAFE_INTEGER) {\n  const chunks = promises.reduce((previous, current, index) => {\n    const remainder = index % groupNum;\n    if (!previous[remainder]) {\n      previous.push([]);\n    }\n    previous[remainder].push(current);\n    return previous;\n  }, []);\n  return chunks;\n}\nfunction handleDownloadFile(originalName, url) {\n  const link = document.createElement(\"a\");\n  link.style.display = \"none\";\n  link.href = url;\n  link.setAttribute(\"download\", originalName);\n  document.body.appendChild(link);\n  link.click();\n  document.body.removeChild(link);\n}\nfunction handleFileBuffer(response, defaultFileName = \"file.dat\") {\n  var _a;\n  let filename = response.headers[\"attachment-name\"];\n  if (!filename) {\n    filename = ((_a = response.headers[\"content-disposition\"]) == null ? void 0 : _a.split(\"filename=\")[1]) || defaultFileName;\n  }\n  const url = window.URL.createObjectURL(new Blob([response.data]));\n  handleDownloadFile(decodeURIComponent(filename), url);\n}\nconst downloadFile = (filename, url) => {\n  const xhr = new XMLHttpRequest();\n  xhr.open(\"GET\", url, true);\n  xhr.responseType = \"blob\";\n  xhr.onload = function() {\n    const urlCreator = window.URL || window.webkitURL;\n    const imageUrl = urlCreator.createObjectURL(this.response);\n    const tag = document.createElement(\"a\");\n    tag.href = imageUrl;\n    tag.target = \"_blank\";\n    tag.download = filename;\n    document.body.appendChild(tag);\n    tag.click();\n    document.body.removeChild(tag);\n  };\n  xhr.onerror = (err) => {\n    alert(\"Failed to download file:\" + err);\n  };\n  xhr.send();\n};\nfunction echartsFontSize(res, basisHeight) {\n  const clientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\n  if (!clientHeight)\n    return;\n  const fontSize = clientHeight / basisHeight;\n  return res * fontSize;\n}\nfunction toQuery(obj) {\n  const results = [];\n  forOwn(obj, (value, key) => {\n    if (Array.isArray(value)) {\n      forOwn(value, (val) => {\n        results.push(`${key}=${val}`);\n      });\n    } else {\n      results.push(`${key}=${value}`);\n    }\n  });\n  return results.join(\"&\");\n}\nfunction random() {\n  return String(Math.random());\n}\nfunction seqID() {\n  return _id_++;\n}\nconst disableFutureDate = (time) => {\n  const d2 = new Date();\n  return time.getTime() > d2.getTime();\n};\nconst CommonUtils = {\n  handleFileBuffer,\n  handleDownloadFile,\n  downloadFile,\n  splitPromises,\n  flattenTree,\n  findTreeNode,\n  echartsFontSize,\n  toQuery,\n  random,\n  seqID,\n  disableFutureDate\n};\nexport { CommonUtils };\n","import { AxiosInstance, AxiosResponse, AxiosRequestConfig, Method } from 'axios'\nimport { HlLoading } from 'hongluan-ui'\nimport { CommonUtils, Indexable, EmptyUtils } from 'fx-front-utils'\nimport { Loading } from '../loading'\n\n/**\n * 返回类型基础类\n */\n\nexport interface EmptyResponseData {\n  [key: string]: any\n}\n\nexport interface ResponseData {\n  code: number | string\n  desc?: string\n  tips?: string\n  data: unknown\n}\n\nexport interface MockResponseData {\n  code?: number | string\n  data: ResponseData\n  message: string\n  meta: any\n  success: boolean\n}\n\nexport interface TableList {\n  list: Indexable<any>[]\n}\n/**\n * api 调用辅助类\n */\nexport class RequestAxios {\n  private serverObj: AxiosInstance\n  private arrayBufferUrls: string[]\n  private notTranslateEmpty: string[]\n  private showMsgUrls: string[]\n  private successCodes: string[]\n  private ifGetFileNameFromHeader: (url: string) => boolean\n  constructor(config: any) {\n    this.serverObj = config.serverObj\n    this.arrayBufferUrls = config.arrayBufferUrls\n    this.notTranslateEmpty = config.notTranslateEmpty\n    this.showMsgUrls = config.showMsgUrls\n    this.successCodes = config.successCodes || ['0']\n    this.ifGetFileNameFromHeader = config.ifGetFileNameFromHeader || (() => false)\n  }\n\n  post(url: string, data: unknown = null, headers: Record<string, any> = {}) {\n    return this.http(url, data, 'POST', headers)\n  }\n  put(url: string, data: unknown = null, headers: Record<string, any> = {}) {\n    return this.http(url, data, 'PUT', headers)\n  }\n  get(url: string, headers: Record<string, any> = {}) {\n    return this.http(url, null, 'GET', headers)\n  }\n  delete(url: string, headers: Record<string, any> = {}) {\n    return this.http(url, null, 'DELETE', headers)\n  }\n\n  http(url: string, data: unknown, method: Method, headers: Record<string, any> = {}) {\n    return new Promise<ResponseData>((resolve, reject) => {\n      const config: AxiosRequestConfig = {\n        url,\n        method,\n        headers,\n        data,\n      }\n      const showDownloading = this.arrayBufferUrls.some(item => config.url?.indexOf(item) !== -1)\n      const tableNotTranslateEmpty = this.notTranslateEmpty.some(item => config.url?.indexOf(item) !== -1)\n      let loadingInstance: any = null\n      if (showDownloading) {\n        loadingInstance = HlLoading.service({\n          lock: true,\n          text: '下载中',\n          spinner: 'fw-icon-loading',\n          background: 'rgba(1, 1, 1, 0.1)',\n        })\n      }\n      this.serverObj.request(config).then(\n        (response: AxiosResponse) => {\n          const respData: ResponseData = response.data\n          if (respData instanceof ArrayBuffer) {\n            const fileName = this.ifGetFileNameFromHeader(config.url) ? response.headers['content-disposition']?.split('filename*=utf-8\\'\\'')[1] : 'file.dat'\n            CommonUtils.handleFileBuffer(response, fileName)\n            loadingInstance && loadingInstance.close()\n            resolve({ code: 0, data: true, desc: '下载成功' })\n          } else {\n            const respCode = respData.code + ''\n            const isInShowMsgUrls = this.showMsgUrls.some(item => config.url?.indexOf(item) !== -1)\n            if (isInShowMsgUrls && this.successCodes.includes(respCode)) {\n              Loading.showMessageTip(1, respData.desc || '操作成功')\n              resolve(respData)\n            } else {\n              // 格式化表格中的空属性\n              if (this.successCodes.includes(respCode) && respData.data && (respData.data as TableList)?.list && !tableNotTranslateEmpty) {\n                (respData.data as TableList).list = EmptyUtils.formatArray((respData.data as TableList).list)\n              }\n              this.successCodes.includes(respCode) ? resolve(respData) : reject(`[FX]Request(${config.url}): response code is not successful. Response Data: ` + JSON.stringify(respData))\n            }\n          }\n        },\n        (err: unknown) => {\n          loadingInstance && loadingInstance.close()\n          reject(err)\n        },\n      )\n    })\n  }\n}\n\nlet axiosRequestSingle: RequestAxios\n\nconst getRequest = (config: {\n  showMsgUrls: string[]\n  arrayBufferUrls: string[]\n  notTranslateEmpty: string[]\n  successCodes?: string[]\n  ifGetFileNameFromHeader?: (url: string) => boolean\n  serverObj: AxiosInstance\n}) => {\n  if (!axiosRequestSingle) {\n    axiosRequestSingle = new RequestAxios(config)\n  }\n  return axiosRequestSingle\n}\n\nexport { getRequest }\n","import { EmptyResponseData, ResponseData, RequestAxios } from './request'\n\n// 是否自动过滤 get 请求中的空参数值\nlet isFilterEmptyParams = true\nlet axiosRequestSingle = null\n\nconst setMapperHelper = ({\n  enableFilterEmptyUrl,\n  axiosRequest,\n}: {\n  enableFilterEmptyUrl?: boolean\n  axiosRequest: RequestAxios\n}) => {\n  isFilterEmptyParams = enableFilterEmptyUrl ?? true\n  axiosRequestSingle = axiosRequest\n}\n\n// 过滤 get 请求中的空参数\nconst filterUrlParams = (url: string) => {\n  if (!isFilterEmptyParams) return url\n  const splitArr = url.split('?')\n  if (splitArr.length) {\n    const apiUrl = splitArr[0]\n    const paramsObj = new URLSearchParams(splitArr[1])\n    const deleteArr = []\n    for (const p of paramsObj) {\n      if (p[1] === 'undefined' || p[1] === '') {\n        deleteArr.push(p[0])\n      }\n    }\n    deleteArr.forEach(paramName => {\n      paramsObj.delete(paramName)\n    })\n    return `${apiUrl}?${paramsObj.toString()}`\n  } else {\n    return url\n  }\n}\n\nconst getRequestData = <T extends ResponseData | EmptyResponseData>(\n  url: string,\n  mapperApiId: string,\n  data2mock = false,\n  headers: any = {},\n): Promise<T> => {\n  const mockUrl = `http://172.15.34.231:7001/api/mapper_api/api/getApiJson/${mapperApiId}/2`\n  return new Promise((resolve, reject) => {\n    const apiUrl = data2mock ? mockUrl : filterUrlParams(url)\n    return axiosRequestSingle\n      .get(apiUrl, headers)\n      .then(resp => resolve(resp as T))\n      .catch(err => {\n        reject(err)\n      })\n  })\n}\nconst postRequestData = <T extends ResponseData | EmptyResponseData>(\n  url: string,\n  mapperApiId: string,\n  data2mock = true,\n  data?: { [x: string]: any; },\n  headers: any = {},\n): Promise<T> => {\n  const mockUrl = `http://172.15.34.231:7001/api/mapper_api/api/getApiJson/${mapperApiId}/2`\n  if (data2mock) {\n    return getRequestData(url, mapperApiId, true)\n  }\n  return new Promise((resolve, reject) => {\n    const apiUrl = data2mock ? mockUrl : filterUrlParams(url)\n    return axiosRequestSingle\n      .post(apiUrl, data, headers)\n      .then(resp => resolve(resp as T))\n      .catch(err => {\n        reject(err)\n      })\n  })\n}\nconst putRequestData = <T extends ResponseData | EmptyResponseData>(\n  url: string,\n  mapperApiId: string,\n  data2mock = true,\n  data?: { [x: string]: any; },\n  headers: any = {},\n): Promise<T> => {\n  const mockUrl = `http://172.15.34.231:7001/api/mapper_api/api/getApiJson/${mapperApiId}/2`\n  if (data2mock) {\n    return getRequestData(url, mapperApiId, true)\n  }\n  return new Promise((resolve, reject) => {\n    const apiUrl = data2mock ? mockUrl : filterUrlParams(url)\n    return axiosRequestSingle\n      .put(apiUrl, data, headers)\n      .then(resp => resolve(resp as T))\n      .catch(err => {\n        reject(err)\n      })\n  })\n}\nconst deleteRequestData = <T extends ResponseData | EmptyResponseData>(\n  url: string,\n  mapperApiId: string,\n  data2mock = false,\n  headers: any = {},\n): Promise<T> => {\n  const mockUrl = `http://172.15.34.231:7001/api/mapper_api/api/getApiJson/${mapperApiId}/2`\n  if (data2mock) {\n    return getRequestData(url, mapperApiId, true)\n  }\n  return new Promise((resolve, reject) => {\n    const apiUrl = data2mock ? mockUrl : filterUrlParams(url)\n    return axiosRequestSingle\n      .delete(apiUrl, headers)\n      .then(resp => resolve(resp as T))\n      .catch(err => {\n        reject(err)\n      })\n  })\n}\n/**\n *\n * @param params 请求参数中发现字段值处理\n */\nconst queryPramsDeal = (params: any) =>\n  new Proxy(params, {\n    get(target, prop) {\n      if (prop in target) {\n        return target[prop]\n      }\n      return ''\n    },\n  })\n\nconst setDeepObj = (options: any, key: string, value: any) => {\n  const keys = key.split('.')\n  // eslint-disable-next-line no-return-assign\n  keys.reduce(\n    (acc, cur, i) => (acc[cur] = i === keys.length - 1 ? value : acc[cur] || []),\n    options,\n  )\n}\n\nexport const requestHelper = {\n  getRequestData,\n  postRequestData,\n  putRequestData,\n  deleteRequestData,\n  queryPramsDeal,\n  setDeepObj,\n  setMapperHelper,\n}\n","function _iterableToArrayLimit(arr, i) {\n  var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"];\n  if (null != _i) {\n    var _s,\n      _e,\n      _x,\n      _r,\n      _arr = [],\n      _n = !0,\n      _d = !1;\n    try {\n      if (_x = (_i = _i.call(arr)).next, 0 === i) {\n        if (Object(_i) !== _i) return;\n        _n = !1;\n      } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);\n    } catch (err) {\n      _d = !0, _e = err;\n    } finally {\n      try {\n        if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return;\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n    return _arr;\n  }\n}\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    enumerableOnly && (symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    })), keys.push.apply(keys, symbols);\n  }\n  return keys;\n}\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = null != arguments[i] ? arguments[i] : {};\n    i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n      _defineProperty(target, key, source[key]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n    });\n  }\n  return target;\n}\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  }, _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n  key = _toPropertyKey(key);\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n  return arr2;\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n  var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n  if (!it) {\n    if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n      if (it) o = it;\n      var i = 0;\n      var F = function () {};\n      return {\n        s: F,\n        n: function () {\n          if (i >= o.length) return {\n            done: true\n          };\n          return {\n            done: false,\n            value: o[i++]\n          };\n        },\n        e: function (e) {\n          throw e;\n        },\n        f: F\n      };\n    }\n    throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n  var normalCompletion = true,\n    didErr = false,\n    err;\n  return {\n    s: function () {\n      it = it.call(o);\n    },\n    n: function () {\n      var step = it.next();\n      normalCompletion = step.done;\n      return step;\n    },\n    e: function (e) {\n      didErr = true;\n      err = e;\n    },\n    f: function () {\n      try {\n        if (!normalCompletion && it.return != null) it.return();\n      } finally {\n        if (didErr) throw err;\n      }\n    }\n  };\n}\nfunction _toPrimitive(input, hint) {\n  if (typeof input !== \"object\" || input === null) return input;\n  var prim = input[Symbol.toPrimitive];\n  if (prim !== undefined) {\n    var res = prim.call(input, hint || \"default\");\n    if (typeof res !== \"object\") return res;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n  var key = _toPrimitive(arg, \"string\");\n  return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar globalThisRef = null;\nfunction assignRef() {\n  // for browser env\n  if (typeof window !== 'undefined') {\n    globalThisRef = window;\n    return;\n  }\n  // for nodejs env\n  if (typeof global !== 'undefined') {\n    globalThisRef = global;\n    return;\n  }\n  throw new Error('unable to locate global object');\n}\n\n/**\n *\n * @returns {typeof globalThis}\n */\nfunction getGlobalThis$1() {\n  if (!globalThisRef) {\n    assignRef();\n  }\n  return globalThisRef;\n}\nfunction setGlobalThis$1(specGlobalThis) {\n  var _globalThisRef;\n  var merge = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  var prevShared = null;\n  if ((_globalThisRef = globalThisRef) !== null && _globalThisRef !== void 0 && _globalThisRef.__HEL_MICRO_SHARED__) {\n    prevShared = globalThisRef.__HEL_MICRO_SHARED__;\n  }\n  if (merge) {\n    globalThisRef = _objectSpread2(_objectSpread2({}, globalThisRef), specGlobalThis);\n  } else {\n    globalThisRef = specGlobalThis;\n  }\n  // 避免 resetGlobalThis 被用户调用后，共享数据丢失\n  if (prevShared) {\n    globalThisRef.__HEL_MICRO_SHARED__ = prevShared;\n  }\n}\n\n/**\n * 获取 hel 全局单例对象挂载的宿主，现阶段是 window self global\n * 针对浏览器环境后期可能会调整宿主节点\n */\nfunction getHelSingletonHost() {\n  return getGlobalThis$1();\n}\n\nfunction okeys$1(map) {\n  return Object.keys(map);\n}\nfunction getSearch() {\n  var getLocSearch = function getLocSearch( /** @type {Location} */location) {\n    var locVar = location || {};\n    var search = locVar.search || '';\n    if (!search) {\n      var hash = loc.hash || '';\n      var hashSearch = hash.split('?')[1] || '';\n      if (hashSearch) {\n        search = \"?\".concat(hashSearch);\n      }\n    }\n    return search;\n  };\n  try {\n    var _getGlobalThis, _getGlobalThis$top;\n    return getLocSearch((_getGlobalThis = getGlobalThis$1()) === null || _getGlobalThis === void 0 ? void 0 : (_getGlobalThis$top = _getGlobalThis.top) === null || _getGlobalThis$top === void 0 ? void 0 : _getGlobalThis$top.location);\n  } catch (err) {\n    var _getGlobalThis2;\n    // 可能是非同域的 iframe 载入，访问 iframe 外部变量导致的报错\n    return getLocSearch((_getGlobalThis2 = getGlobalThis$1()) === null || _getGlobalThis2 === void 0 ? void 0 : _getGlobalThis2.location);\n  }\n}\nfunction getLsItem(key) {\n  var _getGlobalThis3;\n  var ls = (_getGlobalThis3 = getGlobalThis$1()) === null || _getGlobalThis3 === void 0 ? void 0 : _getGlobalThis3.localStorage;\n  return ls === null || ls === void 0 ? void 0 : ls.getItem(key);\n}\nfunction setLsItem(key, val) {\n  var _getGlobalThis4;\n  var ls = (_getGlobalThis4 = getGlobalThis$1()) === null || _getGlobalThis4 === void 0 ? void 0 : _getGlobalThis4.localStorage;\n  return ls === null || ls === void 0 ? void 0 : ls.setItem(key, val);\n}\nfunction getSearchObj() {\n  var search = getSearch();\n  var map = {};\n  if (search !== null && search !== void 0 && search.startsWith('?')) {\n    var pureSearch = search.substring(1);\n    var items = pureSearch.split('&');\n    items.forEach(function (item) {\n      var _item$split = item.split('='),\n        _item$split2 = _slicedToArray(_item$split, 2),\n        key = _item$split2[0],\n        value = _item$split2[1];\n      map[key] = value;\n    });\n  }\n  return map;\n}\nfunction getJsRunLocation() {\n  var loc = '';\n  try {\n    throw new Error('getJsRunLocation');\n  } catch (err) {\n    /** @type {string[]} */\n    var stackArr = err.stack.split('\\n');\n    var len = stackArr.length;\n    // firefox 下 len-1 取不到，需要取 len-2\n    loc = stackArr[len - 1] || stackArr[len - 2] || '';\n  }\n  return loc;\n}\nfunction setSubMapValue(rootObj, key, subKey, subValue) {\n  var subMap = safeGetMap(rootObj, key);\n  subMap[subKey] = subValue;\n}\nfunction safeGetMap(rootObj, key) {\n  var defaultMap = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var subMap = rootObj[key];\n  if (!subMap) {\n    subMap = defaultMap;\n    rootObj[key] = subMap;\n  }\n  return subMap;\n}\nfunction safeAssign(assignTo, assignFrom) {\n  Object.keys(assignFrom).forEach(function (key) {\n    var val = assignFrom[key];\n    if (![null, undefined, ''].includes(val)) {\n      assignTo[key] = val;\n    }\n  });\n}\nfunction noDupPush$1(oriList, toPush) {\n  if (!oriList.includes(toPush)) oriList.push(toPush);\n}\nfunction isNull$1(value) {\n  var nullDef = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _nullDef$nullValues = nullDef.nullValues,\n    nullValues = _nullDef$nullValues === void 0 ? [null, undefined, ''] : _nullDef$nullValues,\n    _nullDef$emptyObjIsNu = nullDef.emptyObjIsNull,\n    emptyObjIsNull = _nullDef$emptyObjIsNu === void 0 ? true : _nullDef$emptyObjIsNu,\n    _nullDef$emptyArrIsNu = nullDef.emptyArrIsNull,\n    emptyArrIsNull = _nullDef$emptyArrIsNu === void 0 ? true : _nullDef$emptyArrIsNu;\n  var inNullValues = nullValues.includes(value);\n  if (inNullValues) {\n    return true;\n  }\n  if (Array.isArray(value)) {\n    if (emptyArrIsNull) return value.length === 0;\n    return false;\n  }\n  if (_typeof(value) === 'object') {\n    var keys = okeys$1(value);\n    var keyLen = keys.length;\n    if (emptyObjIsNull) return keyLen === 0;\n    return false;\n  }\n  return false;\n}\n\nfunction noop() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  return args;\n}\nfunction safeParse(jsonStr, defaultValue, errMsg) {\n  // 防止传入进来的已经是 json 对象\n  if (jsonStr && typeof jsonStr !== 'string') {\n    return jsonStr;\n  }\n  try {\n    var result = JSON.parse(jsonStr); // 避免 JSON.parse('null') ---> null\n    return result || defaultValue;\n  } catch (err) {\n    if (defaultValue !== undefined) return defaultValue;\n    if (errMsg) throw new Error(errMsg);\n    throw err;\n  }\n}\nvar isNull = isNull$1;\nvar noDupPush = noDupPush$1;\nvar okeys = okeys$1;\nfunction merge2List(list1, list2) {\n  var mergedList = [];\n  list1.forEach(function (v) {\n    return noDupPush(mergedList, v);\n  });\n  list2.forEach(function (v) {\n    return noDupPush(mergedList, v);\n  });\n  return mergedList;\n}\nfunction purify(obj, isValueValid) {\n  // isValidVal or isNull\n  var isValidFn = isValueValid || function (value) {\n    return !isNull(value);\n  };\n  var pureObj = {};\n  okeys(obj).forEach(function (key) {\n    if (isValidFn(obj[key])) pureObj[key] = obj[key];\n  });\n  return pureObj;\n}\nfunction getObjsVal(objs, key, backupVal) {\n  var val = backupVal;\n  var _iterator = _createForOfIteratorHelper(objs),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var item = _step.value;\n      var mayValidVal = item[key];\n      if (![null, undefined, ''].includes(mayValidVal)) {\n        val = mayValidVal;\n        break;\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  return val;\n}\n\n/**\n * for pretty format multi line string when use \\`...\\`\n * @param {*} mayLineBreakStr\n * @param {'MULTI' | 'ONE'} [mode='MULTI']\n * @returns\n */\nfunction pfstr( /** @type string */mayLineBreakStr) {\n  var mode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'MULTI';\n  var lines = mayLineBreakStr.split('\\n');\n  var lastIdx = lines.length - 1;\n  var formatLine = lines.map(function (line, idx) {\n    var _line$trimStart;\n    if (!line && (idx === 0 || idx === lastIdx)) {\n      return '';\n    }\n    var replaceBr = function replaceBr( /** @type string */line, hasBrStr) {\n      var noBrStr = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n      var result = line;\n      if (line.endsWith('<br/>')) {\n        result = line.substring(0, result.length - 5);\n        return \"\".concat(result).concat(hasBrStr);\n      }\n      return \"\".concat(result).concat(noBrStr);\n    };\n    var result = ((_line$trimStart = line.trimStart) === null || _line$trimStart === void 0 ? void 0 : _line$trimStart.call(line)) || line; // 去头部所有空格\n    if (mode === 'MULTI') {\n      return \"\".concat(replaceBr(result, ''), \"\\n\");\n    }\n    result = replaceBr(result, '\\n', ' ');\n    return result;\n  }).join('');\n  return formatLine;\n}\nfunction nbstr(mayLineBreakStr) {\n  return pfstr(mayLineBreakStr, 'ONE');\n}\nfunction nbalert(mayLineBreakStr) {\n  var alertInDev = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n  var g = getGlobalThis$1();\n  var str = nbstr(mayLineBreakStr);\n  var alert = g.alert || noop;\n  if (alertInDev && g.location) {\n    g.location.port && alert(str);\n    return;\n  }\n  alert(str);\n}\nfunction setDataset(el, key, val) {\n  if (el.dataset) {\n    el.dataset[key] = val;\n  } else {\n    el.setAttribute(\"data-\".concat(key), val);\n  }\n}\nfunction disableNode(node) {\n  // 只能连续命名，否则会报错\n  // failed to set a named property on 'DOMStringMap': 'hel-disabled' is not a valid property name.\n  setDataset(node, 'heldisabled', '1');\n  node.disabled = true;\n}\n\nvar commonUtilMod = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  noop: noop,\n  safeParse: safeParse,\n  isNull: isNull,\n  noDupPush: noDupPush,\n  okeys: okeys,\n  merge2List: merge2List,\n  purify: purify,\n  getObjsVal: getObjsVal,\n  pfstr: pfstr,\n  nbstr: nbstr,\n  nbalert: nbalert,\n  setDataset: setDataset,\n  disableNode: disableNode\n});\n\nfunction injectPlat(platform, injectOptions) {\n  var _this = this;\n  var fn = injectOptions.fn,\n    fnName = injectOptions.fnName,\n    arg1PlatObjFnKeys = injectOptions.arg1PlatObjFnKeys;\n  var handleArg1 = arg1PlatObjFnKeys.includes(fnName);\n  return function () {\n    var mergePlatObj = function mergePlatObj(obj) {\n      return _objectSpread2({\n        platform: platform\n      }, purify(obj || {}));\n    };\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    var arg1 = args[0],\n      arg2 = args[1];\n    if (handleArg1) {\n      args[0] = mergePlatObj(arg1);\n    } else {\n      args[1] = mergePlatObj(arg2);\n    }\n    // @ts-ignore\n    return fn.apply(_this, args);\n  };\n}\nfunction inectPlatToMod$1(platform, mod, options) {\n  var _ref = options || {},\n    _ref$ignoreKeys = _ref.ignoreKeys,\n    ignoreKeys = _ref$ignoreKeys === void 0 ? [] : _ref$ignoreKeys,\n    _ref$arg1PlatObjFnKey = _ref.arg1PlatObjFnKeys,\n    arg1PlatObjFnKeys = _ref$arg1PlatObjFnKey === void 0 ? [] : _ref$arg1PlatObjFnKey;\n  var newObj = {};\n  Object.keys(mod).forEach(function (mayFnName) {\n    var mayFn = mod[mayFnName];\n    if (ignoreKeys.includes(mayFnName)) {\n      newObj[mayFnName] = mayFn;\n      return;\n    }\n    var valueType = _typeof(mayFn);\n    if (valueType && valueType === 'object') {\n      newObj[mayFnName] = inectPlatToMod$1(platform, mayFn, options);\n      return;\n    }\n    if (valueType === 'function') {\n      newObj[mayFnName] = injectPlat(platform, {\n        arg1PlatObjFnKeys: arg1PlatObjFnKeys,\n        fn: mayFn,\n        fnName: mayFnName\n      });\n      return;\n    }\n    newObj[mayFnName] = mayFn;\n  });\n  return newObj;\n}\n\nvar PLAT_HEL$1 = 'hel';\nvar PLAT_UNPKG$1 = 'unpkg';\nvar logModeEnum = {\n  NONE: 0,\n  LOG: 1,\n  TRACE: 2\n};\n\n/**\n * 第一个载入的版本号，后续接口未指定版本时，总是优先载入一个载入的版本号对应的模块，确保优先使用全局已存在的模块\n * 内部很多地方用，这里额外独立暴露一下\n */\nvar DEFAULT_ONLINE_VER = '__default_online_ver__';\n\n/** 内部很多地方用，这里额外独立暴露一下  */\nvar DEFAULT_PLAT = PLAT_UNPKG$1;\nvar helConsts$1 = {\n  CORE_VER: '4.8.5',\n  DEFAULT_API_PREFIX: 'https://unpkg.com',\n  DEFAULT_API_URL: '/openapi/v1/app/info',\n  DEFAULT_ONLINE_VER: DEFAULT_ONLINE_VER,\n  DEFAULT_USER_LS_KEY: 'HelUserRtxName',\n  DEFAULT_PLAT: DEFAULT_PLAT,\n  LS_LOG_MODE: 'HelConfig.logMode',\n  LS_LOG_FILTER: 'HelConfig.logFilter',\n  PLAT_HEL: PLAT_HEL$1,\n  PLAT_UNPKG: PLAT_UNPKG$1,\n  /** commonData.CSS_STR ，存放样式字符串 map */\n  KEY_CSS_STR: 'CSS_STR',\n  /** commonData.ASSET_CTX ，资源对应的具体上下文 */\n  KEY_ASSET_CTX: 'ASSET_CTX',\n  /** commonData.STYLE_TAG_ADDED ，对应的样式字符串 { [key: 'app-group-name' ]: string } */\n  KEY_STYLE_TAG_ADDED: 'STYLE_TAG_ADDED',\n  /** commonData.CSS_LINK_TAG_ADDED ，对应的样式url列表 { [key: 'http://localhost:3000' ]: string[] } */\n  KEY_CSS_LINK_TAG_ADDED: 'CSS_LINK_TAG_ADDED',\n  /** commonData.IGNORE_CSS_PREFIX_LIST ，忽略样式前缀列表 string[] */\n  KEY_IGNORE_CSS_PREFIX_LIST: 'IGNORE_CSS_PREFIX_LIST',\n  /** commonData.IGNORE_STYLE_TAG_KEY ，忽略样式前缀列表 { [key: string ]: 1|0 } */\n  KEY_IGNORE_STYLE_TAG_KEY: 'IGNORE_STYLE_TAG_KEY',\n  /** commonData.IGNORE_CSS_PREFIX_2_KEYS ，忽略样式前缀对应的key { [key: 'http://localhost:3000' ]: string } */\n  KEY_IGNORE_CSS_PREFIX_2_KEYS: 'IGNORE_CSS_PREFIX_2_KEYS'\n};\nvar helEvents$1 = {\n  // renderApp 发射的是 SUB_APP_LOADED\n  // 此处有个小写开头的瑕疵不再做纠正，\n  SUB_APP_LOADED: 'subAppLoaded',\n  // libReady 发射的是 SUB_LIB_LOADED\n  SUB_LIB_LOADED: 'SubLibLoaded',\n  // 3.2+ 新增样式字符串获取完毕事件\n  STYLE_STR_FETCHED: 'StyleStrFetched',\n  /** 4.2.3+ 用于监听动态添加的 style 标签，方便上层用到 shadowdom 的地方可以接收样式并转移到 shadowdom 内部 */\n  STYLE_TAG_ADDED: 'StyleTagAdded',\n  /** 4.2.6+ 用于监听动态添加的 link 标签，方便上层用到 shadowdom 的地方可以接收样式并转移到 shadowdom 内部 */\n  CSS_LINK_TAG_ADDED: 'CssLinkTagAdded'\n};\n\n/**\n * 作为应用是否加载 或 样式字符串 是否获取的枚举 map\n * @type {{NOT_LOAD:0, LOADING:1, LOADED:2}}\n */\nvar helLoadStatus$1 = {\n  NOT_LOAD: 0,\n  LOADING: 1,\n  LOADED: 2\n};\n\nvar LS_LOG_FILTER = helConsts$1.LS_LOG_FILTER,\n  LS_LOG_MODE = helConsts$1.LS_LOG_MODE;\nvar NONE = logModeEnum.NONE,\n  LOG = logModeEnum.LOG,\n  TRACE = logModeEnum.TRACE;\nvar inner = {\n  isIncludeFilter: function isIncludeFilter(firstArg, logFilter) {\n    if (!logFilter.includes(',')) {\n      return firstArg.includes(logFilter);\n    }\n    /** @type {string[]} */\n    var filterList = logFilter.split(',');\n    return filterList.some(function (item) {\n      return firstArg.includes(item);\n    });\n  },\n  getLogFilter: function getLogFilter() {\n    return getHelMicroDebug().logFilter;\n  },\n  setLogFilter: function setLogFilter(value) {\n    var memVal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    getHelMicroDebug().logFilter = value;\n    memVal && setLsItem(LS_LOG_FILTER, value);\n  },\n  setLogMode: function setLogMode(value) {\n    var memVal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    var modeNum = parseInt(value, 10);\n    if ([NONE, LOG, TRACE].includes(modeNum)) {\n      getHelMicroDebug().logMode = modeNum;\n      memVal && setLsItem(LS_LOG_MODE, modeNum);\n    }\n  },\n  getLogMode: function getLogMode() {\n    return getHelMicroDebug().logMode;\n  }\n};\n\n/** @type {import('../index').IHelMicroDebug} */\nvar helMicroDebug = {};\nfunction initMicroDebug() {\n  if (getHelMicroDebug().isInit) {\n    return;\n  }\n  getHelMicroDebug().isInit = true;\n  var searchObj = getSearchObj();\n  var hellog = searchObj.hellog,\n    hellogf = searchObj.hellogf;\n\n  // 优先读 url 上的控制参数 hellog，再读 localStorage 里的控制参数\n  var logMode = hellog || getLsItem(LS_LOG_MODE) || NONE;\n  inner.setLogMode(logMode, false);\n\n  // 优先读 url 上的控制参数 hellogf\n  var logFilter = hellogf || getLsItem(LS_LOG_FILTER) || '';\n  inner.setLogFilter(logFilter, false);\n}\n\n/**\n * @returns {import('../index').IHelMicroDebug}\n */\nfunction makeHelMicroDebug() {\n  return {\n    logMode: NONE,\n    logFilter: '',\n    isInit: false\n  };\n}\nfunction ensureHelMicroDebug() {\n  helMicroDebug = getHelSingletonHost().__HEL_MICRO_DEBUG__;\n  if (!isNull$1(helMicroDebug)) {\n    // 兼容老版本库生成的 __HEL_MICRO_DEBUG__ 对象\n    if (helMicroDebug.logMode === undefined) {\n      helMicroDebug.logMode = NONE;\n      helMicroDebug.logFilter = '';\n    }\n    return;\n  }\n  helMicroDebug = makeHelMicroDebug();\n  getHelSingletonHost().__HEL_MICRO_DEBUG__ = helMicroDebug;\n  try {\n    initMicroDebug();\n  } catch (err) {}\n}\n\n/** 采用缓存一次值后便不再从 search 推导的策略，方便单页面应用路由变化后，依然可以打印log */\nfunction allowLog$1() {\n  return inner.getLogMode() !== NONE;\n}\nfunction getHelMicroDebug() {\n  return helMicroDebug;\n}\nvar logPrefix = '  %c--> HEL LOG:';\nvar colorDesc = 'color:#ad4e00;font-weight:600';\nfunction log$1() {\n  if (!allowLog$1()) {\n    return;\n  }\n  var logFn = inner.getLogMode() === LOG ? console.log : console.trace || console.log;\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  var firstArg = args[0],\n    rest = args.slice(1);\n  if (typeof firstArg !== 'string') {\n    return logFn.apply(void 0, [logPrefix, colorDesc].concat(args));\n  }\n  var logFilter = inner.getLogFilter();\n  var logParams = [\"\".concat(logPrefix, \" \").concat(firstArg), colorDesc].concat(_toConsumableArray(rest));\n  if (logFilter) {\n    inner.isIncludeFilter(firstArg, logFilter) && logFn.apply(void 0, _toConsumableArray(logParams));\n    return;\n  }\n  logFn.apply(void 0, _toConsumableArray(logParams));\n}\n\nvar DEFAULT_API_URL = helConsts$1.DEFAULT_API_URL,\n  DEFAULT_USER_LS_KEY = helConsts$1.DEFAULT_USER_LS_KEY,\n  PLAT_HEL = helConsts$1.PLAT_HEL,\n  PLAT_UNPKG = helConsts$1.PLAT_UNPKG,\n  DEFAULT_API_PREFIX = helConsts$1.DEFAULT_API_PREFIX,\n  CORE_VER = helConsts$1.CORE_VER,\n  KEY_CSS_LINK_TAG_ADDED$1 = helConsts$1.KEY_CSS_LINK_TAG_ADDED,\n  KEY_STYLE_TAG_ADDED$1 = helConsts$1.KEY_STYLE_TAG_ADDED,\n  KEY_IGNORE_CSS_PREFIX_LIST$1 = helConsts$1.KEY_IGNORE_CSS_PREFIX_LIST,\n  KEY_IGNORE_STYLE_TAG_KEY$1 = helConsts$1.KEY_IGNORE_STYLE_TAG_KEY,\n  KEY_IGNORE_CSS_PREFIX_2_KEYS$1 = helConsts$1.KEY_IGNORE_CSS_PREFIX_2_KEYS;\nfunction makeOriginOptions(presetOptions) {\n  var _ref = presetOptions || {},\n    apiPrefix = _ref.apiPrefix;\n  return {\n    apiMode: 'get',\n    apiPrefix: apiPrefix,\n    apiSuffix: '',\n    apiPathOfApp: DEFAULT_API_URL,\n    apiPathOfAppVersion: '',\n    getSubAppAndItsVersionFn: null,\n    onFetchMetaFailed: null,\n    strictMatchVer: true,\n    getUserName: null,\n    userLsKey: DEFAULT_USER_LS_KEY,\n    shouldUseGray: null,\n    trustAppNames: null,\n    semverApi: null,\n    hook: {}\n  };\n}\nfunction makeCacheNode(platform) {\n  /** @type {import('../index').SharedCache} */\n  var cacheNode = _objectSpread2(_objectSpread2({\n    isConfigOverwrite: false,\n    platform: platform,\n    appName2Comp: {},\n    appName2Lib: {},\n    appName2isLibAssigned: {},\n    appName2EmitApp: {},\n    appName2verLoadStatus: {},\n    appName2verEmitLib: {},\n    appName2verEmitApp: {},\n    appName2verStyleStr: {},\n    appName2verStyleFetched: {},\n    appName2verExtraCssList: {},\n    appName2verAppVersion: {},\n    appName2verCustomData: {},\n    appName2app: {},\n    appName2appVersion: {},\n    appName2styleStr: {},\n    appGroupName2firstVer: {},\n    isOriginInitCalled: false\n  }, makeOriginOptions()), {}, {\n    origin: makeOriginOptions({\n      apiPrefix: DEFAULT_API_PREFIX\n    }) // originInit 写入到此对象下\n  });\n\n  return cacheNode;\n}\nfunction makeEventBus() {\n  /** @type {Record<string, any[]>} */\n  var name2listeners = {};\n  return {\n    on: function on(eventName, cb) {\n      var listeners = name2listeners[eventName];\n      if (!listeners) {\n        var arr = [];\n        name2listeners[eventName] = arr;\n        listeners = arr;\n      }\n      listeners.push(cb);\n    },\n    emit: function emit(eventName) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n      var listeners = name2listeners[eventName];\n      if (listeners) {\n        var listenersCopy = listeners.slice();\n        listenersCopy.forEach(function (cb) {\n          return cb.apply(void 0, args);\n        });\n      }\n    },\n    off: function off(eventName, cb) {\n      var listeners = name2listeners[eventName];\n      if (listeners) {\n        for (var i = 0, len = listeners.length; i < len; i++) {\n          var cbItem = listeners[i];\n          if (cbItem === cb) {\n            listeners.splice(i, 1);\n            break;\n          }\n        }\n      }\n    }\n  };\n}\nfunction makeHelMicroShared() {\n  var _caches;\n  var unpkgCache = makeCacheNode(PLAT_UNPKG);\n  var helCache = makeCacheNode(PLAT_HEL);\n  var cacheRoot = {\n    /**\n     * 默认的平台值，这个值在这里已无意义，最新版本的 getPlatform 返回值已固定，不再取此处的值\n     * 这里刻意设为 PLAT_HEL 是为了让 3.0 和 4.0 版本包共存时\n     * 例如宿主4子模块3这种情况，子模块的旧版本 hel-micro-core 调用 getPlatform 依然能正常获取到 hel 为默认平台\n     */\n    platform: PLAT_HEL,\n    platformHint: 'the platform value here does not make any sense!',\n    /** 1.4+ 新增，用于记录 preFetchLib 时显示传递了 platform 值，供 hel-lib-proxy 使用，\n     * 方便多平台共同加载包体场景下， exposeLib 接口如果未显式的传递平台值，能尽量正确推测出应用对应的 platform 值\n     * 但是这里依然推荐用户 exposeLib 传递具体的平台值，避免推测错误\n     */\n    appName2platform: {},\n    /** 取代 appName2platform，后续 appName2platform 会移出 */\n    appGroupName2platform: {},\n    /** @type {Record<string, ReturnType<typeof makeCacheNode>>} */\n    caches: (_caches = {}, _defineProperty(_caches, PLAT_UNPKG, unpkgCache), _defineProperty(_caches, PLAT_HEL, helCache), _caches),\n    /** @type {Record<string, Record<string, any>>} 和应用无关的通用缓存池 */\n    common: {}\n  };\n  var innerEventBus = makeEventBus();\n  var userEventBus = makeEventBus();\n  return {\n    ver: CORE_VER,\n    isStyleObInit: false,\n    nativeHeadAppend: null,\n    nativeBodyAppend: null,\n    createFeature: getJsRunLocation(),\n    eventBus: innerEventBus,\n    userEventBus: userEventBus,\n    cacheRoot: cacheRoot,\n    /** 指向的是  cacheRoot.caches.unpkg ，放第一层仅用于方便控制台查看，实际业务逻辑还是走 caches 去取 */\n    unpkgCache: unpkgCache,\n    /** 指向的是  cacheRoot.caches.hel ，放第一层仅用于方便控制台查看，实际业务逻辑还是走 caches 去取 */\n    helCache: helCache,\n    /** 调试相关函数 */\n    dev: {\n      setLogMode: inner.setLogMode,\n      setLogFilter: inner.setLogFilter\n    }\n  };\n}\nfunction ensureCommonKeys(common) {\n  var keys = [KEY_CSS_LINK_TAG_ADDED$1, KEY_STYLE_TAG_ADDED$1, KEY_IGNORE_CSS_PREFIX_LIST$1, KEY_IGNORE_STYLE_TAG_KEY$1, KEY_IGNORE_CSS_PREFIX_2_KEYS$1];\n  var getDefault = function getDefault(key) {\n    return key === KEY_IGNORE_CSS_PREFIX_LIST$1 ? [] : {};\n  };\n  keys.forEach(function (key) {\n    return safeGetMap(common, key, getDefault(key));\n  });\n}\nfunction ensureHelMicroShared() {\n  var helMicroShared = getHelMicroShared();\n  if (helMicroShared) {\n    var cacheRoot = helMicroShared.cacheRoot;\n    safeGetMap(cacheRoot, 'appGroupName2platform');\n    safeGetMap(cacheRoot, 'common');\n\n    // 兼容线上老版本包，遍历 caches 做检测子节点数据结构并补齐\n    var caches = cacheRoot.caches;\n    Object.keys(caches).forEach(function (key) {\n      var cacheNode = caches[key];\n      safeGetMap(cacheNode, 'appGroupName2firstVer');\n      safeGetMap(cacheNode, 'appName2isLibAssigned');\n      safeGetMap(cacheNode, 'appName2verExtraCssList');\n      safeGetMap(cacheNode, 'appName2verCustomData');\n      safeGetMap(cacheNode, 'hook');\n      safeGetMap(cacheNode, 'origin', makeOriginOptions());\n      safeGetMap(cacheNode.origin, 'hook');\n    });\n    ensureCommonKeys(cacheRoot.common);\n\n    // 补齐老包缺失的对象\n    if (!helMicroShared.userEventBus) {\n      helMicroShared.userEventBus = makeEventBus();\n    }\n    return;\n  }\n  helMicroShared = makeHelMicroShared();\n  ensureCommonKeys(helMicroShared.cacheRoot.common);\n  getHelSingletonHost().__HEL_MICRO_SHARED__ = helMicroShared;\n}\n\n/** @return {ReturnType<typeof makeHelMicroShared>} */\nfunction getHelMicroShared() {\n  var microShared = getHelSingletonHost().__HEL_MICRO_SHARED__;\n  return microShared;\n}\n\n/**\n * 获取默认的平台值\n * @returns\n */\nfunction getPlatform$1() {\n  // 已不再支持重置平台默认值，上层可用 helMicro.createInstace 接口来定义出自动拉取对应平台的相关接口\n  return DEFAULT_PLAT;\n}\n\n/**\n * @param {string} platform\n */\nfunction getSharedCache$1(platform) {\n  var p = platform || getPlatform$1();\n  var cacheRoot = getCacheRoot();\n  var cacheNode = cacheRoot.caches[p];\n  if (!cacheNode) {\n    var platType = _typeof(platform);\n    if (platType !== 'string') {\n      console.error('invalid plaform:', platform);\n      throw new Error(\"fatal error: platform only can be a string, now it is \".concat(platType));\n    }\n    var platCache = makeCacheNode(platform);\n    cacheRoot.caches[p] = platCache;\n    cacheNode = platCache;\n  }\n  return cacheNode;\n}\nfunction getCacheRoot() {\n  return getHelMicroShared().cacheRoot;\n}\n\nvar innerUtil = {\n  getCustomData: function getCustomData(appName, customKey, options) {\n    var versionId = options.versionId,\n      platform = options.platform;\n    var _getSharedCache = getSharedCache$1(platform),\n      appName2verCustomData = _getSharedCache.appName2verCustomData;\n    var customMap = safeGetMap(appName2verCustomData, appName);\n    var dataMap = safeGetMap(customMap, customKey);\n    return dataMap[versionId || DEFAULT_ONLINE_VER];\n  },\n  getAppMeta: function getAppMeta(appName, platform) {\n    var _getSharedCache2 = getSharedCache$1(platform),\n      appName2app = _getSharedCache2.appName2app;\n    return appName2app[appName];\n  },\n  setVerLoadStatus: function setVerLoadStatus(appName, loadStatus, statusMapKey, options) {\n    var _ref = options || {},\n      versionId = _ref.versionId,\n      platform = _ref.platform;\n    var appVerLoadStatus = getSharedCache$1(platform)[statusMapKey];\n    var versionIdVar = versionId || DEFAULT_ONLINE_VER;\n    setSubMapValue(appVerLoadStatus, appName, versionIdVar, loadStatus);\n  },\n  getVerLoadStatus: function getVerLoadStatus(appName, statusMapKey, options) {\n    var _appVerLoadStatus$app;\n    var _ref2 = options || {},\n      versionId = _ref2.versionId,\n      platform = _ref2.platform;\n    var appVerLoadStatus = getSharedCache$1(platform)[statusMapKey];\n    var versionIdVar = versionId || DEFAULT_ONLINE_VER;\n    return ((_appVerLoadStatus$app = appVerLoadStatus[appName]) === null || _appVerLoadStatus$app === void 0 ? void 0 : _appVerLoadStatus$app[versionIdVar]) || helLoadStatus$1.NOT_LOAD;\n  },\n  // 预防一些未升级的老模块未写 DEFAULT_ONLINE_VER 的值到 libOrAppMap 里\n  ensureOnlineModule: function ensureOnlineModule(libOrAppMap, appName, platform) {\n    if (libOrAppMap[DEFAULT_ONLINE_VER]) {\n      return;\n    }\n    var appMeta = innerUtil.getAppMeta(appName, platform);\n    var onlineModule = libOrAppMap[appMeta === null || appMeta === void 0 ? void 0 : appMeta.online_version];\n    if (onlineModule) {\n      libOrAppMap[DEFAULT_ONLINE_VER] = onlineModule;\n    }\n  }\n};\n\nfunction getVerApp$1(appName, inputOptions) {\n  var _options$strictMatchV;\n  var options = inputOptions || {};\n  var versionId = options.versionId,\n    platform = options.platform;\n  var _getSharedCache = getSharedCache$1(platform),\n    appName2verEmitApp = _getSharedCache.appName2verEmitApp,\n    appName2Comp = _getSharedCache.appName2Comp,\n    strictMatchVer = _getSharedCache.strictMatchVer,\n    appName2EmitApp = _getSharedCache.appName2EmitApp;\n  var targetStrictMatchVer = (_options$strictMatchV = options.strictMatchVer) !== null && _options$strictMatchV !== void 0 ? _options$strictMatchV : strictMatchVer;\n  var verEmitAppMap = safeGetMap(appName2verEmitApp, appName);\n  innerUtil.ensureOnlineModule(verEmitAppMap, appName, platform);\n\n  // 不传递具体版本号就指向默认的第一个载入的版本\n  var versionIdVar = versionId || DEFAULT_ONLINE_VER;\n  var verApp = verEmitAppMap[versionIdVar];\n  var Comp = appName2Comp[appName];\n  // { Comp } 是为了兼容老包写入的数据，老包未写入 appName2EmitApp\n  var legacyWriteVerApp = Comp ? {\n    Comp: Comp\n  } : null;\n  // 指定了版本严格匹配的话，兜底模块置为空\n  var fallbackApp = targetStrictMatchVer ? null : appName2EmitApp[appName] || legacyWriteVerApp;\n  var result = verApp || fallbackApp || null;\n  log$1('[[ core:getVerApp ]] appName,options,result:', appName, options, result);\n  return result;\n}\nfunction setEmitApp$1(appName, /** @type {import('hel-types').IEmitAppInfo} */emitApp) {\n  log$1('[[ core:setEmitApp ]] appName,emitApp:', appName, emitApp);\n  var versionId = emitApp.versionId,\n    platform = emitApp.platform;\n  var sharedCache = getSharedCache$1(platform);\n  var appName2verEmitApp = sharedCache.appName2verEmitApp,\n    appName2Comp = sharedCache.appName2Comp,\n    appName2EmitApp = sharedCache.appName2EmitApp;\n\n  // 记录第一个载入的版本号对应 emitApp\n  var verEmitApp = safeGetMap(appName2verEmitApp, appName);\n  if (!verEmitApp[DEFAULT_ONLINE_VER]) {\n    appName2Comp[appName] = emitApp.Comp;\n    appName2EmitApp[appName] = emitApp;\n    setSubMapValue(appName2verEmitApp, appName, DEFAULT_ONLINE_VER, emitApp);\n  }\n  if (versionId) {\n    setSubMapValue(appName2verEmitApp, appName, versionId, emitApp);\n  }\n}\n\nvar KEY_CSS_LINK_TAG_ADDED = helConsts$1.KEY_CSS_LINK_TAG_ADDED,\n  KEY_STYLE_TAG_ADDED = helConsts$1.KEY_STYLE_TAG_ADDED,\n  KEY_IGNORE_CSS_PREFIX_LIST = helConsts$1.KEY_IGNORE_CSS_PREFIX_LIST,\n  KEY_IGNORE_STYLE_TAG_KEY = helConsts$1.KEY_IGNORE_STYLE_TAG_KEY,\n  KEY_IGNORE_CSS_PREFIX_2_KEYS = helConsts$1.KEY_IGNORE_CSS_PREFIX_2_KEYS;\nfunction getDataMap$1(customKey) {\n  var _getCacheRoot = getCacheRoot(),\n    common = _getCacheRoot.common;\n  var dataMap = safeGetMap(common, customKey);\n  return dataMap;\n}\n\n/** perf: 内置的 key 已在 microShared 初始化时做了检查，此处可直接获取 */\nfunction getDataNode(customKey) {\n  var _getCacheRoot2 = getCacheRoot(),\n    common = _getCacheRoot2.common;\n  return common[customKey]; // map or list\n}\n\nfunction getCommonData$1(customKey, dataKey) {\n  var dataMap = getDataMap$1(customKey);\n  var result = dataMap[dataKey];\n  return result !== undefined ? result : null;\n}\nfunction setCommonData$1(customKey, dataKey, data) {\n  var dataMap = getDataMap$1(customKey);\n  dataMap[dataKey] = data;\n}\n\n/** 操作 commonData 的内置方法集合 */\nvar commonDataUtil$1 = {\n  setIgnoreCssPrefix: function setIgnoreCssPrefix(cssPrefix) {\n    var list = getDataNode(KEY_IGNORE_CSS_PREFIX_LIST);\n    noDupPush$1(list, cssPrefix);\n  },\n  setIgnoreStyleTagKey: function setIgnoreStyleTagKey(key) {\n    var map = commonDataUtil$1.getIgnoreStyleTagMap();\n    map[key] = 1;\n  },\n  getIgnoreStyleTagMap: function getIgnoreStyleTagMap() {\n    var map = getDataNode(KEY_IGNORE_STYLE_TAG_KEY);\n    return map;\n  },\n  setIgnoreCssPrefixKey: function setIgnoreCssPrefixKey(ignoreCssPrefix, key) {\n    var list = getCommonData$1(KEY_IGNORE_CSS_PREFIX_2_KEYS, ignoreCssPrefix);\n    if (!list) {\n      list = [];\n      setCommonData$1(KEY_IGNORE_CSS_PREFIX_2_KEYS, ignoreCssPrefix, list);\n    }\n    noDupPush$1(list, key);\n  },\n  getIgnoreCssPrefixKeys: function getIgnoreCssPrefixKeys(ignoreCssPrefix) {\n    var map = getDataNode(KEY_IGNORE_CSS_PREFIX_2_KEYS);\n    return map[ignoreCssPrefix] || [];\n  },\n  getMatchedIgnoreCssPrefix: function getMatchedIgnoreCssPrefix( /** @type string */url) {\n    var ignoreCssPrefixList = getDataNode(KEY_IGNORE_CSS_PREFIX_LIST);\n    var matchedPrefix = '';\n    for (var i = 0; i < ignoreCssPrefixList.length; i++) {\n      var cssPrefix = ignoreCssPrefixList[i];\n      if (url.startsWith(cssPrefix)) {\n        matchedPrefix = cssPrefix;\n        break;\n      }\n    }\n    return matchedPrefix;\n  },\n  getIgnoreCssPrefixCssUrlList: function getIgnoreCssPrefixCssUrlList(ignoreCssPrefix) {\n    var cssUrlList = getCommonData$1(KEY_CSS_LINK_TAG_ADDED, ignoreCssPrefix);\n    if (!cssUrlList) {\n      cssUrlList = [];\n      setCommonData$1(KEY_CSS_LINK_TAG_ADDED, ignoreCssPrefix, cssUrlList);\n    }\n    return cssUrlList;\n  },\n  setIgnoreCssPrefixCssUrl: function setIgnoreCssPrefixCssUrl(ignoreCssPrefix, url) {\n    var cssUrlList = commonDataUtil$1.getIgnoreCssPrefixCssUrlList(ignoreCssPrefix);\n    cssUrlList.push(url);\n  },\n  getStyleTagText: function getStyleTagText(key) {\n    var text = getCommonData$1(KEY_STYLE_TAG_ADDED, key) || '';\n    return text;\n  },\n  clearStyleTagText: function clearStyleTagText(key) {\n    setCommonData$1(KEY_STYLE_TAG_ADDED, key, '');\n  },\n  appendStyleTagText: function appendStyleTagText(key, text) {\n    var oldText = commonDataUtil$1.getStyleTagText(key);\n    // 继续拼接新的样式字符串\n    setCommonData$1(KEY_STYLE_TAG_ADDED, key, \"\".concat(oldText, \" \").concat(text));\n  }\n};\n\n/** @typedef {import('../../index').IPlatformConfigFull} IPlatformConfigFull */\n\n/**\n * 提取无其他杂项的配置对象\n * @param {SharedCache} mayCache\n * @returns {IPlatformConfigFull}\n */\nfunction getPureConfig(mayCache, needOrigin) {\n  var apiMode = mayCache.apiMode,\n    apiPrefix = mayCache.apiPrefix,\n    apiSuffix = mayCache.apiSuffix,\n    apiPathOfApp = mayCache.apiPathOfApp,\n    apiPathOfAppVersion = mayCache.apiPathOfAppVersion,\n    getSubAppAndItsVersionFn = mayCache.getSubAppAndItsVersionFn,\n    onFetchMetaFailed = mayCache.onFetchMetaFailed,\n    strictMatchVer = mayCache.strictMatchVer,\n    getUserName = mayCache.getUserName,\n    userLsKey = mayCache.userLsKey,\n    shouldUseGray = mayCache.shouldUseGray,\n    getApiPrefix = mayCache.getApiPrefix,\n    trustAppNames = mayCache.trustAppNames,\n    platform = mayCache.platform,\n    origin = mayCache.origin,\n    hook = mayCache.hook;\n  var toReturn = {\n    apiMode: apiMode,\n    apiPrefix: apiPrefix,\n    apiSuffix: apiSuffix,\n    apiPathOfApp: apiPathOfApp,\n    apiPathOfAppVersion: apiPathOfAppVersion,\n    getSubAppAndItsVersionFn: getSubAppAndItsVersionFn,\n    onFetchMetaFailed: onFetchMetaFailed,\n    strictMatchVer: strictMatchVer,\n    getUserName: getUserName,\n    userLsKey: userLsKey,\n    shouldUseGray: shouldUseGray,\n    getApiPrefix: getApiPrefix,\n    trustAppNames: trustAppNames,\n    hook: hook,\n    platform: platform\n  };\n  if (needOrigin) {\n    toReturn.origin = origin;\n  }\n  return toReturn;\n}\nfunction getPlatformConfig$1(iPlatform) {\n  var cache = getSharedCache$1(iPlatform);\n  return getPureConfig(cache, true);\n}\n\n/**\n *\n * @param {IPlatformConfig} config\n * @param {string} [iPlatform ]\n * @returns\n */\nfunction initPlatformConfig$1( /** @type {import('../index').IPlatformConfig} */config, iPlatform) {\n  var cache = getSharedCache$1(iPlatform);\n  var pureConfig = getPureConfig(config);\n  if (cache.isConfigOverwrite) {\n    // 对应平台的 initPlatformConfig 只接受一次调用\n    return;\n  }\n  cache.isConfigOverwrite = true;\n  safeAssign(cache, pureConfig);\n}\nfunction originInit$1(platform, options) {\n  var cache = getSharedCache$1(platform);\n  var commonTip = '[[ core:originInit ]] invalid call, it can only been called';\n  if (cache.isConfigOverwrite) {\n    log$1(\"\".concat(commonTip, \" before init\"));\n    return;\n  }\n  if (cache.isOriginInitCalled) {\n    log$1(\"\".concat(commonTip, \" one time\"));\n    // 对应平台的 initPlatformConfig 只接受一次调用\n    return;\n  }\n  var pureConfig = getPureConfig(options);\n  cache.isOriginInitCalled = true;\n  safeAssign(cache.origin, pureConfig);\n}\n\n/**\n * 优先获取用户为某个应用单独设定的平台值，目前设定的时机有 preFetch、preFetchLib 时指定的平台值\n * 这里是为了辅助 exposeLib 接口未指定平台值时能够动态推导出目标模块的平台值\n * @returns\n */\nfunction getAppPlatform$1(appGroupName) {\n  return getCacheRoot().appGroupName2platform[appGroupName] || getPlatform$1();\n}\n\n/**\n * hel-micro innerPreFetch 会调用此接口提前记录一下应用名对应的版本号\n */\nfunction setAppPlatform$1(appGroupName, platform) {\n  getCacheRoot().appGroupName2platform[appGroupName] = platform;\n  return getAppPlatform$1(appGroupName);\n}\n\nfunction getDataMap(appName, options) {\n  var customKey = options.customKey,\n    platform = options.platform;\n  var _getSharedCache = getSharedCache$1(platform),\n    appName2verCustomData = _getSharedCache.appName2verCustomData;\n  var customMap = safeGetMap(appName2verCustomData, appName);\n  var dataMap = safeGetMap(customMap, customKey);\n  return dataMap;\n}\nfunction getCustomData$1(appName, options) {\n  var dataMap = getDataMap(appName, options);\n  var result = dataMap[options.versionId || DEFAULT_ONLINE_VER];\n  return result !== undefined ? result : null;\n}\nfunction setCustomData$1(appName, options) {\n  var customValue = options.customValue,\n    versionId = options.versionId;\n  var dataMap = getDataMap(appName, options);\n  dataMap[versionId || DEFAULT_ONLINE_VER] = customValue;\n}\n\nvar STYLE_TAG_ADDED = helEvents$1.STYLE_TAG_ADDED,\n  CSS_LINK_TAG_ADDED = helEvents$1.CSS_LINK_TAG_ADDED;\nfunction getHelEventBus$1() {\n  return getHelMicroShared().eventBus;\n}\nfunction getUserEventBus$1() {\n  return getHelMicroShared().userEventBus;\n}\nvar evName$1 = {\n  styleTagAdded: function styleTagAdded(groupName) {\n    return \"\".concat(STYLE_TAG_ADDED, \"/\").concat(groupName);\n  },\n  cssLinkTagAdded: function cssLinkTagAdded(host) {\n    return \"\".concat(CSS_LINK_TAG_ADDED, \"(\").concat(host, \")\");\n  }\n};\n\nfunction getVerLib$1(appName, inputOptions) {\n  var _options$strictMatchV;\n  var options = inputOptions || {};\n  var versionId = options.versionId,\n    platform = options.platform;\n  var sharedCache = getSharedCache$1(platform);\n  var appName2verEmitLib = sharedCache.appName2verEmitLib,\n    appName2Lib = sharedCache.appName2Lib,\n    strictMatchVer = sharedCache.strictMatchVer,\n    appName2isLibAssigned = sharedCache.appName2isLibAssigned;\n  var targetStrictMatchVer = (_options$strictMatchV = options.strictMatchVer) !== null && _options$strictMatchV !== void 0 ? _options$strictMatchV : strictMatchVer;\n  var verEmitLibMap = safeGetMap(appName2verEmitLib, appName);\n  innerUtil.ensureOnlineModule(verEmitLibMap, appName);\n\n  // 不传递具体版本号就执行默认在线版本\n  var versionIdVar = versionId || DEFAULT_ONLINE_VER;\n  var verLib = verEmitLibMap[versionIdVar];\n\n  // 未分配的模块，直接返回 null 即可，因为 appName2Lib 里会被 exposeLib 提前注入一个 {} 对象占位\n  var staticLib = appName2isLibAssigned[appName] ? appName2Lib[appName] : null;\n  // 指定了版本严格匹配的话，兜底模块置为空\n  var fallbackLib = targetStrictMatchVer ? null : staticLib;\n  var result = verLib || fallbackLib || null;\n  log$1('[[ core:getVerLib ]] appName,options,result:', appName, options, result);\n  return result;\n}\nfunction setEmitLib$1(appName, /** @type {import('hel-types').IEmitAppInfo} */emitApp, options) {\n  var _ref = options || {},\n    appGroupName = _ref.appGroupName;\n  var versionId = emitApp.versionId,\n    appProperties = emitApp.appProperties;\n  var platform = emitApp.platform || options.platform;\n  var sharedCache = getSharedCache$1(platform);\n  var appName2verEmitLib = sharedCache.appName2verEmitLib,\n    appName2Lib = sharedCache.appName2Lib,\n    appName2isLibAssigned = sharedCache.appName2isLibAssigned;\n  var appMeta = innerUtil.getAppMeta(appName, platform);\n  var assignLibObj = function assignLibObj(appName) {\n    // 使用文件头静态导入模块语法时，默认是从 appName2Lib 拿数据，\n    // 这意味着 文件头静态导入 总是执行第一个加载的版本模块，\n    // （ 注：文件头静态导入对接的是 hel-lib-proxy 的 exposeLib，该接口使用的是 appName2Lib ）\n    // 所以 多版本同时导入 和 文件头静态导入 本身是冲突的，用户不应该两种用法一起使用，\n    // 否则 文件头静态导入 的模块是不稳定的，除非用户知道后果并刻意这样做\n    // marked at 2022-05-06\n    var libObj = appName2Lib[appName];\n    // 未静态导入时，libObj 是 undefined\n    if (!libObj) {\n      appName2Lib[appName] = appProperties;\n    } else if (_typeof(libObj) === 'object' && Object.keys(libObj).length === 0) {\n      // 静态导入时，emptyChunk 那里调用 exposeLib 会提前生成一个 {} 对象\n      // 这里只需负责 merge 模块提供方通过 libReady 提供的模块对象\n      Object.assign(libObj, appProperties);\n    }\n    appName2isLibAssigned[appName] = true;\n  };\n  assignLibObj(appName);\n  // 确保 preFetchLib 传入测试应用名时，exposeLib 获取的代理对象能够指到测试库\n  // 这样静态导入才能正常工作\n  if (appGroupName) {\n    assignLibObj(appGroupName);\n  } else {\n    appMeta && assignLibObj(appMeta.app_group_name);\n  }\n\n  // 当前版本可作为默认线上版本来记录\n  log$1('[[ core:setEmitLib ]] appMeta:', appMeta);\n  var verEmitLibMap = safeGetMap(appName2verEmitLib, appName);\n  // 记录第一个载入的版本号对应 lib\n  if (!verEmitLibMap[DEFAULT_ONLINE_VER]) {\n    setSubMapValue(appName2verEmitLib, appName, DEFAULT_ONLINE_VER, appProperties);\n  }\n  if (versionId) {\n    setSubMapValue(appName2verEmitLib, appName, versionId, appProperties);\n  }\n}\n\nfunction getAppMeta$1(appName, platform) {\n  var _getSharedCache = getSharedCache$1(platform),\n    appName2app = _getSharedCache.appName2app;\n  return appName2app[appName];\n}\nfunction setAppMeta$1( /** @type {import('hel-types').ISubApp}*/appMeta, platform) {\n  var _getSharedCache2 = getSharedCache$1(platform),\n    appName2app = _getSharedCache2.appName2app;\n  appName2app[appMeta.name] = appMeta;\n}\n\nfunction setVerLoadStatus$1(appName, loadStatus, options) {\n  innerUtil.setVerLoadStatus(appName, loadStatus, 'appName2verLoadStatus', options);\n}\nfunction getVerLoadStatus$1(appName, options) {\n  return innerUtil.getVerLoadStatus(appName, 'appName2verLoadStatus', options);\n}\nfunction setVerStyleStrStatus$1(appName, loadStatus, options) {\n  innerUtil.setVerLoadStatus(appName, loadStatus, 'appName2verStyleFetched', options);\n}\nfunction getVerStyleStrStatus$1(appName, options) {\n  return innerUtil.getVerLoadStatus(appName, 'appName2verStyleFetched', options);\n}\n\nfunction getAppStyleStr$1(appName, options) {\n  var _appName2verStyleStr$;\n  var _ref = options || {},\n    platform = _ref.platform,\n    versionId = _ref.versionId;\n  var _getSharedCache = getSharedCache$1(platform),\n    appName2verStyleStr = _getSharedCache.appName2verStyleStr,\n    appName2styleStr = _getSharedCache.appName2styleStr;\n\n  // TODO: 暂未考虑接入 strictMatchVer\n  var fallbackStyleStr = appName2styleStr[appName] || '';\n  // 兼容老包未写 versionId 的情况\n  if (!versionId) {\n    return fallbackStyleStr;\n  }\n  return ((_appName2verStyleStr$ = appName2verStyleStr[appName]) === null || _appName2verStyleStr$ === void 0 ? void 0 : _appName2verStyleStr$[versionId]) || fallbackStyleStr || '';\n}\nfunction setAppStyleStr$1(appName, str, options) {\n  var _ref2 = options || {},\n    platform = _ref2.platform,\n    versionId = _ref2.versionId;\n  var _getSharedCache2 = getSharedCache$1(platform),\n    appName2verStyleStr = _getSharedCache2.appName2verStyleStr,\n    appName2verStyleFetched = _getSharedCache2.appName2verStyleFetched,\n    appName2styleStr = _getSharedCache2.appName2styleStr;\n  // 兼容老包未写 versionId 的情况\n  if (!versionId) {\n    appName2styleStr[appName] = str;\n    return;\n  }\n  setSubMapValue(appName2verStyleStr, appName, versionId, str);\n  setSubMapValue(appName2verStyleFetched, appName, versionId, helLoadStatus$1.LOADED);\n}\nfunction setVerExtraCssList$1(appName, cssList, inputOptions) {\n  var options = inputOptions || {};\n  var versionId = options.versionId,\n    platform = options.platform;\n  var sharedCache = getSharedCache$1(platform);\n  var appName2verExtraCssList = sharedCache.appName2verExtraCssList;\n  log$1('[[ core:setVerExtraCssList ]] cssList:', cssList);\n  var verExtraCssListMap = safeGetMap(appName2verExtraCssList, appName);\n  // 记录第一个载入的版本号对应 css 资源\n  if (!verExtraCssListMap[DEFAULT_ONLINE_VER]) {\n    setSubMapValue(appName2verExtraCssList, appName, DEFAULT_ONLINE_VER, cssList);\n  }\n  if (versionId) {\n    setSubMapValue(appName2verExtraCssList, appName, versionId, cssList);\n  }\n}\nfunction getVerExtraCssList$1(appName, inputOptions) {\n  var options = inputOptions || {};\n  var versionId = options.versionId,\n    platform = options.platform;\n  var sharedCache = getSharedCache$1(platform);\n  var appName2verExtraCssList = sharedCache.appName2verExtraCssList;\n  var verExtraCssListMap = safeGetMap(appName2verExtraCssList, appName);\n  var cssList = verExtraCssListMap[versionId] || verExtraCssListMap[DEFAULT_ONLINE_VER] || [];\n  log$1('[[ core:getVerExtraCssList ]] options,cssList:', options, cssList);\n  return cssList;\n}\n\nfunction getVersion$1(appName, options) {\n  var _appName2verAppVersio;\n  var _ref = options || {},\n    platform = _ref.platform,\n    versionId = _ref.versionId;\n  var _getSharedCache = getSharedCache$1(platform),\n    appName2verAppVersion = _getSharedCache.appName2verAppVersion,\n    appName2appVersion = _getSharedCache.appName2appVersion;\n\n  // TODO: 暂未考虑接入 strictMatchVer\n  var firstVerData = appName2appVersion[appName] || null;\n  if (!versionId) {\n    return firstVerData;\n  }\n  // firstVerData 在这里作为兜底返回，正常情况下 appName2verAppVersion 肯定是能取到数据的\n  return ((_appName2verAppVersio = appName2verAppVersion[appName]) === null || _appName2verAppVersio === void 0 ? void 0 : _appName2verAppVersio[versionId]) || firstVerData;\n}\nfunction setVersion$1(appName, /** @type {import('hel-types').ISubAppVersion}*/versionData, options) {\n  var _ref2 = options || {},\n    platform = _ref2.platform;\n  var _getSharedCache2 = getSharedCache$1(platform),\n    appName2verAppVersion = _getSharedCache2.appName2verAppVersion,\n    appGroupName2firstVer = _getSharedCache2.appGroupName2firstVer,\n    appName2appVersion = _getSharedCache2.appName2appVersion;\n  var versionId = versionData.sub_app_version;\n  if (!versionId) {\n    return;\n  }\n  var appMeta = innerUtil.getAppMeta(appName, platform);\n  var verAppVersion = safeGetMap(appName2verAppVersion, appName);\n  // 记录第一个载入的版本号对应 versionData\n  if (!verAppVersion[DEFAULT_ONLINE_VER]) {\n    setSubMapValue(appName2verAppVersion, appName, DEFAULT_ONLINE_VER, versionData);\n    appName2appVersion[appName] = versionData;\n  }\n  setSubMapValue(appName2verAppVersion, appName, versionId, versionData);\n  appGroupName2firstVer[appMeta.app_group_name] = versionId;\n}\n\nfunction tryGetVersion$1(appGroupName, platform) {\n  // 形如: at c (https://{cdn_host_name}/{platform}/{appname_prefixed_version}/static/js/4.b60c0895.chunk.js:2:44037\n  // 用户串改过的话，可能是：at c (https://{user_cdn}/{user_dir1}/{user_dir2 ...}/{platform}/{appname_prefixed_version}/...)\n  var loc = getJsRunLocation();\n  log$1(\"[[ core:tryGetVersion ]] may include source > \".concat(loc));\n  var _getSharedCache = getSharedCache$1(platform),\n    appGroupName2firstVer = _getSharedCache.appGroupName2firstVer;\n  var callerSpecifiedVer = appGroupName2firstVer[appGroupName] || '';\n  if (loc.includes('https://') || loc.includes('http://')) {\n    var _loc$split = loc.split('//'),\n      _loc$split2 = _slicedToArray(_loc$split, 2),\n      restStr = _loc$split2[1];\n    var strList = restStr.split('/');\n\n    // 优先判断可能包含的版本特征\n    if (callerSpecifiedVer) {\n      if (platform === DEFAULT_PLAT && strList.some(function (item) {\n        return item.includes(callerSpecifiedVer);\n      })) {\n        return callerSpecifiedVer;\n      }\n      if (strList.includes(callerSpecifiedVer)) {\n        return callerSpecifiedVer;\n      }\n      // strList: ['xxxx.com:8888', 'static', 'js']，本地联调时的特征\n      if (strList['1'] === 'static' && strList['2'] === 'js' || strList['1'] === 'js') {\n        return callerSpecifiedVer;\n      }\n    }\n\n    // [ 'unpkg.com' , 'hel-lodash@1.1.0' , ... ]\n    if (platform === DEFAULT_PLAT) {\n      return strList[1].split('@')[1] || callerSpecifiedVer;\n    }\n\n    // 走默认的规则： {cdn_host_name}/{platform}/{appname_prefixed_version}，取下标2对应元素作为版本号\n    return strList[2] || callerSpecifiedVer;\n  }\n\n  // 在微容器里运行时，js全是在VM里初始化的，此时拿不到具体的加载链接了\n  return callerSpecifiedVer;\n}\nfunction tryGetAppName$1( /** @type string */version, appGroupName) {\n  if (version === DEFAULT_ONLINE_VER) {\n    return appGroupName || '';\n  }\n\n  // 来自 helpack 管理台的版本号规则\n  if (version.includes('_')) {\n    // lib-test_20220621165953 ---> lib-test\n    var appName = version.substring(0, version.length - 15);\n    return appName;\n  }\n\n  // 来自 unpkg\n  return appGroupName || '';\n}\n\n// !!! 注：如果hel-micro hel-micro-core相关包体设置到externals里时，\n// 此机制不再有效，建议尽快使用 hel-iso 包替代\n\n// 该变量每个子应用自己维护一份，只能在 __MASTER_APP_LOADED__ 无值时才能被写为true\n// __MASTER_APP_LOADED__ 有值表示主应用已挂载\n// 需注意此设计模式下，hel-micro-core 不应该被抽到 externals，\n// 否则各个应用共同维护一个了 isCoreInit 值，isSubApp 就无效了，需使用 hel-iso 替代\nvar isMeMarkTrue = false;\nvar isTryMarkCalled = false;\n\n/**\n * @returns\n */\nfunction tryMarkFlag(clearSignals) {\n  if (clearSignals) {\n    isMeMarkTrue = false;\n    isTryMarkCalled = false;\n  }\n  if (isTryMarkCalled) {\n    return;\n  }\n  isTryMarkCalled = true;\n  var globalThis = getGlobalThis$1();\n  if (globalThis.__MASTER_APP_LOADED__ === undefined) {\n    globalThis.__MASTER_APP_LOADED__ = true;\n    isMeMarkTrue = true;\n  }\n}\n\n/**\n * 是否是子应用\n * @deprecated\n * @returns\n */\nfunction isSubApp$1() {\n  // calling isSubApp is unsafe, cause it will return wrong result when they were lift up to webpack\n  // externals, please install hel-iso and call its isSubApp instead\n  var tip = 'WARNING: calling isSubApp is unsafe, use hel-iso.isSubApp instead,\\n';\n  tip += 'more details see: https://tnfe.github.io/hel/docs/tutorial/attention-is-subapp';\n  console.log(\"%c\".concat(tip), 'color:red;');\n  // __MASTER_APP_LOADED__ 是当前应用写入的，代表当前应用是主应用\n  if (isMeMarkTrue) {\n    return false;\n  }\n  return true;\n}\n\nfunction markElFeature( /** @type {HTMLElement} */el, options) {\n  var platform = options.platform,\n    groupName = options.groupName,\n    name = options.name,\n    ver = options.ver,\n    elName = options.elName;\n  setDataset(el, 'el', elName);\n  setDataset(el, 'plat', platform);\n  setDataset(el, 'gname', groupName);\n  setDataset(el, 'name', name);\n  setDataset(el, 'ver', ver);\n}\n\nvar KEY_ASSET_CTX = helConsts$1.KEY_ASSET_CTX;\nfunction doAppend(nativeAppend, /** @type {HTMLLinkElement | HTMLScriptElement}*/el) {\n  if (!el || !['LINK', 'SCRIPT'].includes(el.tagName)) {\n    return nativeAppend(el);\n  }\n  var href = el.href,\n    tagName = el.tagName,\n    src = el.src;\n  /** @type string */\n  var url = href || src || '';\n  var isLink = tagName === 'LINK';\n  var assetCtx = getCommonData$1(KEY_ASSET_CTX, url) || {};\n  var platform = assetCtx.platform,\n    groupName = assetCtx.groupName,\n    name = assetCtx.name,\n    ver = assetCtx.ver,\n    beforeAppend = assetCtx.beforeAppend;\n  var mayChangedEl = el;\n  if (beforeAppend) {\n    var urlKey = isLink ? 'href' : 'src';\n    var _url = el.getAttribute(urlKey);\n    var setAssetUrl = function setAssetUrl(newUrl) {\n      return el.setAttribute(urlKey, newUrl);\n    };\n    mayChangedEl = beforeAppend({\n      el: el,\n      nativeAppend: nativeAppend,\n      setAssetUrl: setAssetUrl,\n      url: _url,\n      tagName: tagName\n    }) || el;\n  }\n  var elName = isLink ? 'HelLink' : 'HelScript';\n  platform && markElFeature(mayChangedEl, {\n    platform: platform,\n    groupName: groupName,\n    name: name,\n    ver: ver,\n    elName: elName\n  });\n  return nativeAppend(mayChangedEl);\n}\nfunction patchAppendChild() {\n  var helMicroShared = getHelMicroShared();\n  var gs = getGlobalThis$1();\n  var doc = gs.document;\n  var nativeHeadAppend = helMicroShared.nativeHeadAppend;\n  var nativeBodyAppend = helMicroShared.nativeBodyAppend;\n  // already patched or a mock enviroment\n  if (nativeHeadAppend || !doc) {\n    return;\n  }\n  var head = doc.head,\n    body = doc.body;\n  // record may native appendChild, use bind to avoid Illegal invocation\n  nativeHeadAppend = head.appendChild.bind(head);\n  nativeBodyAppend = body.appendChild.bind(body);\n  helMicroShared.nativeHeadAppend = nativeHeadAppend;\n  helMicroShared.nativeBodyAppend = nativeBodyAppend;\n\n  // 兼容一些第三方库对 Element.prototype.appendChild 打了补丁的情况\n  var getAppend = function getAppend(nativeAppend, bindTarget) {\n    var el = gs.Element;\n    return el ? el.prototype.appendChild.bind(bindTarget) : nativeAppend;\n  };\n\n  // replace appendChild\n  doc.head.appendChild = function (el) {\n    return gs.__POWERED_BY_WUJIE__ ? doAppend(nativeHeadAppend, el) : doAppend(getAppend(nativeHeadAppend, head), el);\n  };\n  doc.body.appendChild = function (el) {\n    return gs.__POWERED_BY_WUJIE__ ? doAppend(nativeBodyAppend, el) : doAppend(getAppend(nativeBodyAppend, body), el);\n  };\n}\n\nfunction libReady$1(appGroupName, appProperties) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var platform = options.platform || getAppPlatform$1(appGroupName);\n  var versionId = options.versionId || tryGetVersion$1(appGroupName, platform);\n  var appName = options.appName || tryGetAppName$1(versionId, appGroupName);\n  var appMeta = getAppMeta$1(appName, platform);\n  // @ts-ignore，来自于用户设定 cust 配置弹射的模块\n  if (appMeta !== null && appMeta !== void 0 && appMeta.__fromCust) {\n    // 优先读用户透传的版本数据，再读实际对应的在线版本\n    versionId = options.versionId || appMeta.online_version;\n    appName = appMeta.name;\n  }\n  var emitLib = {\n    platform: platform,\n    appName: appName,\n    appGroupName: appGroupName,\n    versionId: versionId,\n    appProperties: appProperties,\n    // prettier-ignore\n    Comp: function EmptyComp() {},\n    lifecycle: {}\n  };\n  setEmitLib$1(appName, emitLib, {\n    appGroupName: appGroupName,\n    platform: platform\n  });\n  setVerLoadStatus$1(appName, helLoadStatus$1.LOADED, {\n    versionId: versionId,\n    platform: platform\n  });\n  var eventBus = getHelEventBus$1();\n  eventBus.emit(helEvents$1.SUB_LIB_LOADED, emitLib);\n}\nfunction appReady$1(appGroupName, Comp) {\n  var emitOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var lifecycle = emitOptions.lifecycle;\n  var platform = emitOptions.platform || getAppPlatform$1(appGroupName);\n  var versionId = emitOptions.versionId || tryGetVersion$1(appGroupName, platform);\n  var appName = emitOptions.appName || tryGetAppName$1(versionId, appGroupName);\n  var emitApp = {\n    Comp: Comp,\n    appName: appName,\n    appGroupName: appGroupName,\n    lifecycle: lifecycle,\n    platform: platform,\n    versionId: versionId,\n    isLib: false\n  };\n  setEmitApp$1(appName, emitApp);\n  setVerLoadStatus$1(appName, helLoadStatus$1.LOADED, {\n    versionId: versionId,\n    platform: platform\n  });\n  var eventBus = getHelEventBus$1();\n  eventBus.emit(helEvents$1.SUB_APP_LOADED, emitApp);\n}\n\nvar HEL_CSS_MARK_START = '/* @helstart ';\nvar HEL_CSS_MARK_END = ' @helend */';\nvar START_LEN = HEL_CSS_MARK_START.length;\nfunction matchIgnoreCssPrefix(node, url) {\n  var bus = getHelEventBus$1();\n  var matchedPrefix = commonDataUtil$1.getMatchedIgnoreCssPrefix(url);\n  // 分析 url ，符合 shadow 特征的不追加 dom，仅发射事件让上层适配层去处理\n  if (matchedPrefix) {\n    commonDataUtil$1.setIgnoreCssPrefixCssUrl(matchedPrefix, url);\n    bus.emit(evName$1.cssLinkTagAdded(matchedPrefix), {\n      nodes: [node]\n    });\n  }\n  return matchedPrefix;\n}\nfunction resetStyleText(groupName) {\n  var g = getGlobalThis$1();\n  if (!g) return;\n  var list = g.document.head.querySelectorAll(\"style[data-gname=\\\"\".concat(groupName, \"\\\"]\"));\n  if (list.length) {\n    commonDataUtil$1.clearStyleTagText(groupName);\n    list.forEach(function (node) {\n      disableNode(node);\n      commonDataUtil$1.appendStyleTagText(groupName, node.innerText);\n    });\n    var bus = getHelEventBus$1();\n    bus.emit(evName$1.styleTagAdded(groupName), {\n      nodes: list\n    });\n  }\n}\nfunction handleStyleAdded( /** @type {HTMLElement} */node, ignoreStyleTagMap) {\n  var tagName = node.tagName,\n    innerText = node.innerText,\n    href = node.href;\n  if (!['STYLE', 'LINK'].includes(tagName)) return;\n\n  // is style tag or link tag\n  var isStyleTag = tagName === 'STYLE';\n  if (tagName === 'STYLE' && !innerText) {\n    return;\n  }\n  if (isStyleTag) {\n    var markStart = innerText.indexOf(HEL_CSS_MARK_START);\n    // starts with '/* @helstart '\n    if (markStart < 0) {\n      return;\n    }\n    // 处理 css-loader 动态向 heade 添加 style 标签的情况\n    // /* @helstart hel-tpl-remote-react-comp-ts @helend */ --> hel-tpl-remote-react-comp-ts\n    var markEnd = innerText.indexOf(HEL_CSS_MARK_END);\n    if (markEnd < 0) {\n      return;\n    }\n    var helKey = innerText.substring(START_LEN + markStart, markEnd);\n    if (helKey) {\n      var trimedStr = helKey.trim(); // may groupName or plat/groupName\n      var plat = '';\n      var groupName = trimedStr;\n      if (trimedStr.includes('/')) {\n        var arr = trimedStr.split('/');\n        plat = arr[0];\n        groupName = arr[1];\n      }\n      setDataset(node, 'gname', groupName);\n      plat && setDataset(node, 'plat', plat);\n      if (ignoreStyleTagMap[trimedStr]) {\n        disableNode(node);\n      }\n      var bus = getHelEventBus$1();\n      commonDataUtil$1.appendStyleTagText(trimedStr, innerText);\n      bus.emit(evName$1.styleTagAdded(trimedStr), {\n        nodes: [node]\n      });\n    }\n    return;\n  }\n\n  // process link tag\n  var matchedPrefix = matchIgnoreCssPrefix(node, href);\n  if (matchedPrefix) {\n    disableNode(node);\n  }\n}\nfunction handleHotUpdate( /** @type {HTMLElement} */node, ignoreStyleTagMap) {\n  var tagName = node.tagName,\n    _node$src = node.src,\n    src = _node$src === void 0 ? '' : _node$src;\n  if (tagName !== 'SCRIPT') return false;\n  if (!src.endsWith('.hot-update.js')) return false;\n  var matchedPrefix = commonDataUtil$1.getMatchedIgnoreCssPrefix(src);\n  if (!matchedPrefix) return false;\n  var keys = commonDataUtil$1.getIgnoreCssPrefixKeys(matchedPrefix);\n  if (!keys.length) return false;\n  var handled = false;\n  keys.forEach(function (key) {\n    if (ignoreStyleTagMap[key]) {\n      resetStyleText(key);\n      handled = true;\n    }\n  });\n  return handled;\n}\nfunction obStyleTagInsert() {\n  var helMicroShared = getHelMicroShared();\n  var globalThis = getGlobalThis$1();\n  var isStyleObInit = helMicroShared.isStyleObInit;\n  var doc = globalThis.document;\n  if (isStyleObInit || !doc) {\n    return;\n  }\n  helMicroShared.isStyleObInit = true;\n  var ignoreStyleTagMap = commonDataUtil$1.getIgnoreStyleTagMap();\n  // @ts-ignore\n  var MutationObserver = globalThis.MutationObserver || globalThis.WebKitMutationObserver || globalThis.MozMutationObserver;\n  if (!MutationObserver) return;\n  var observer = new MutationObserver(function (mutations) {\n    mutations.forEach(function (mutation) {\n      var addedNodes = mutation.addedNodes,\n        removedNodes = mutation.removedNodes;\n      var len = addedNodes.length;\n      for (var i = 0; i < len; i++) {\n        handleStyleAdded(addedNodes[i], ignoreStyleTagMap);\n      }\n      var remLen = removedNodes.length;\n      for (var _i = 0; _i < remLen; _i++) {\n        if (handleHotUpdate(removedNodes[_i], ignoreStyleTagMap)) {\n          break;\n        }\n      }\n    });\n  });\n  observer.observe(document.head, {\n    childList: true\n  });\n}\n\n/** @typedef {import('../index').IPlatformConfig} IPlatformConfig */\nresetGlobalThis();\nlog$1(\"hel-micro-core ver \".concat(helConsts$1.CORE_VER));\nvar helEvents = helEvents$1,\n  helLoadStatus = helLoadStatus$1,\n  helConsts = helConsts$1;\nvar inectPlatToMod = inectPlatToMod$1;\nvar commonUtil = commonUtilMod;\nvar isSubApp = isSubApp$1;\nfunction resetGlobalThis(globalThis) {\n  if (globalThis) {\n    setGlobalThis(globalThis);\n  }\n  // 载入此包就尝试设置 masterApp 锁，以推断自己是不是父应用\n  tryMarkFlag(!!globalThis);\n  // 确保 __HEL_MICRO_SHARED__ 存在\n  ensureHelMicroShared();\n  ensureHelMicroDebug();\n  patchAppendChild();\n  obStyleTagInsert();\n}\n\n/**\n * 获取默认的平台值\n * @returns\n */\nvar getPlatform = getPlatform$1,\n  getSharedCache = getSharedCache$1;\nvar getHelDebug = getHelMicroDebug,\n  allowLog = allowLog$1,\n  log = log$1;\nvar getGlobalThis = getGlobalThis$1,\n  setGlobalThis = setGlobalThis$1;\nvar getVerApp = getVerApp$1,\n  setEmitApp = setEmitApp$1;\nvar getVerLib = getVerLib$1,\n  setEmitLib = setEmitLib$1;\nvar getAppMeta = getAppMeta$1,\n  setAppMeta = setAppMeta$1;\nvar getVersion = getVersion$1,\n  setVersion = setVersion$1;\nvar getCustomData = getCustomData$1,\n  setCustomData = setCustomData$1;\nvar getCommonData = getCommonData$1,\n  setCommonData = setCommonData$1,\n  commonDataUtil = commonDataUtil$1;\nvar getVerLoadStatus = getVerLoadStatus$1,\n  setVerLoadStatus = setVerLoadStatus$1,\n  getVerStyleStrStatus = getVerStyleStrStatus$1,\n  setVerStyleStrStatus = setVerStyleStrStatus$1;\nvar getAppStyleStr = getAppStyleStr$1,\n  setAppStyleStr = setAppStyleStr$1,\n  getVerExtraCssList = getVerExtraCssList$1,\n  setVerExtraCssList = setVerExtraCssList$1;\nvar tryGetVersion = tryGetVersion$1,\n  tryGetAppName = tryGetAppName$1;\nvar getPlatformConfig = getPlatformConfig$1,\n  getAppPlatform = getAppPlatform$1,\n  setAppPlatform = setAppPlatform$1,\n  initPlatformConfig = initPlatformConfig$1,\n  originInit = originInit$1;\nvar getHelEventBus = getHelEventBus$1,\n  getUserEventBus = getUserEventBus$1,\n  evName = evName$1;\nvar libReady = libReady$1,\n  appReady = appReady$1;\n\nexport { allowLog, appReady, commonDataUtil, commonUtil, evName, getAppMeta, getAppPlatform, getAppStyleStr, getCommonData, getCustomData, getGlobalThis, getHelDebug, getHelEventBus, getPlatform, getPlatformConfig, getSharedCache, getUserEventBus, getVerApp, getVerExtraCssList, getVerLib, getVerLoadStatus, getVerStyleStrStatus, getVersion, helConsts, helEvents, helLoadStatus, inectPlatToMod, initPlatformConfig, isSubApp, libReady, log, originInit, resetGlobalThis, setAppMeta, setAppPlatform, setAppStyleStr, setCommonData, setCustomData, setEmitApp, setEmitLib, setGlobalThis, setVerExtraCssList, setVerLoadStatus, setVerStyleStrStatus, setVersion, tryGetAppName, tryGetVersion };\n","function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n  }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  Object.defineProperty(Constructor, \"prototype\", {\n    writable: false\n  });\n  return Constructor;\n}\nfunction _toPrimitive(input, hint) {\n  if (typeof input !== \"object\" || input === null) return input;\n  var prim = input[Symbol.toPrimitive];\n  if (prim !== undefined) {\n    var res = prim.call(input, hint || \"default\");\n    if (typeof res !== \"object\") return res;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n  var key = _toPrimitive(arg, \"string\");\n  return typeof key === \"symbol\" ? key : String(key);\n}\n\n//  parse html，inspred by https://zhuanlan.zhihu.com/p/338772106,\n// fixed self close tag parse bug.\n// fixed including comment parse bug.\n\nvar SPACE_REGEX = /\\s/;\nvar TOKEN_REGEX = /[a-zA-Z0-9\\-]/;\nvar DOCTYPE_MARK = '<!DOCTYPE html>';\nvar COMMENT_START = '<!--';\nvar COMMENT_END = '-->';\nvar META_END = '</meta>';\nvar LINK_END = '</link>';\nvar MAY_SELF_CLOSE_TAGS = ['meta', 'link'];\nvar TAG_END_MAP = {\n  meta: META_END,\n  link: LINK_END\n};\nvar HTMLParser = /*#__PURE__*/function () {\n  function HTMLParser() {\n    _classCallCheck(this, HTMLParser);\n    this.input = '';\n    this.len = 0;\n    this.cur = 0;\n  }\n  _createClass(HTMLParser, [{\n    key: \"eof\",\n    get: function get() {\n      return this.cur >= this.len;\n    }\n  }, {\n    key: \"peek\",\n    value: function peek() {\n      var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      return this.input[this.cur + offset];\n    }\n  }, {\n    key: \"sub\",\n    value: function sub(len, start) {\n      var startIdx = start || this.cur;\n      return this.input.substring(startIdx, startIdx + len);\n    }\n  }, {\n    key: \"moveCur\",\n    value: function moveCur(num) {\n      this.cur += num;\n    }\n  }, {\n    key: \"consumeChar\",\n    value: function consumeChar(c) {\n      var curChar = this.peek();\n      if (curChar === c) {\n        this.cur++;\n      } else {\n        throw new Error(\"Unexpected character: '\".concat(curChar, \"' should be '\").concat(c, \"'\"));\n      }\n      return curChar;\n    }\n  }, {\n    key: \"consumeSpace\",\n    value: function consumeSpace() {\n      this.consumeWhile(SPACE_REGEX);\n    }\n  }, {\n    key: \"consumeWhile\",\n    value: function consumeWhile(regex) {\n      var result = [];\n      do {\n        var curChar = this.peek();\n        if (regex.test(curChar)) {\n          result.push(curChar);\n          this.cur++;\n        } else {\n          break;\n        }\n      } while (!this.eof);\n      return result.join('');\n    }\n  }, {\n    key: \"noop\",\n    value: function noop() {}\n  }, {\n    key: \"pureInput\",\n    value: function pureInput( /** @type string */input) {\n      var puredStr = input.trim();\n      if (puredStr.startsWith(DOCTYPE_MARK)) {\n        puredStr = puredStr.substring(DOCTYPE_MARK.length);\n      }\n\n      // 移除 <!-- --> 相关的注释\n      var delComment = function delComment(str) {\n        var commentStartIdx = str.indexOf(COMMENT_START);\n        var commentEndIdx = str.indexOf(COMMENT_END);\n        if (commentStartIdx >= 0 && commentEndIdx >= 0) {\n          var strBeforeComment = str.substring(0, commentStartIdx);\n          var strAfterComment = str.substring(commentEndIdx + COMMENT_END.length);\n          return delComment(\"\".concat(strBeforeComment).concat(strAfterComment));\n        }\n        return str;\n      };\n      puredStr = delComment(puredStr);\n      return puredStr;\n    }\n  }, {\n    key: \"parse\",\n    value: function parse(input) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var inputStr = input || '';\n      this.input = this.pureInput(inputStr);\n      this.len = inputStr.length;\n      this.onTagOpen = options.onTagOpen || this.noop();\n      this.onTagClose = options.onTagClose || this.noop();\n      this.cur = 0;\n      return this.parseNodes();\n    }\n  }, {\n    key: \"parseNodes\",\n    value: function parseNodes() {\n      var nodes = [];\n      do {\n        var node = void 0;\n        if (this.peek() === '<') {\n          if (this.peek(1) === '/') break;\n          node = this.parseElement();\n        } else {\n          node = this.parseTextNode();\n        }\n        if (node === ' ') {\n          // filter ' ' node\n          continue;\n        }\n        nodes.push(node);\n      } while (!this.eof);\n      return nodes;\n    }\n  }, {\n    key: \"parseTextNode\",\n    value: function parseTextNode() {\n      var text = this.consumeWhile(/[^<]/);\n      return text.replace(/[\\s\\n]+/g, ' ');\n    }\n  }, {\n    key: \"parseElement\",\n    value: function parseElement() {\n      var _this = this;\n      this.consumeChar('<');\n      var tag = this.parseTag();\n      this.onTagOpen(tag);\n      this.consumeSpace();\n      var attrs = this.parseAttrs();\n      var curChar = this.peek();\n      var curPrev1Char = this.peek(-1);\n      var handleTagEnd = function handleTagEnd(children) {\n        var move = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n        //  const closeTag = this.parseTag();\n        _this.parseTag();\n        _this.consumeSpace();\n        _this.consumeChar('>');\n        if (move) {\n          _this.moveCur(move);\n        }\n        var toReturn = {\n          tag: tag,\n          attrs: attrs,\n          children: children\n        };\n        _this.onTagClose(tag, toReturn);\n        return toReturn;\n      };\n      if (\"\".concat(curPrev1Char).concat(curChar) === '/>') {\n        // is self close tag\n        return handleTagEnd([]);\n      }\n      if (MAY_SELF_CLOSE_TAGS.includes(tag) && curChar === '>') {\n        // handle <meta> or <meta></meta>, <link> or <link></link>\n        var endTag = TAG_END_MAP[tag];\n        var endTagLen = endTag.length;\n        var endFeature = this.sub(endTagLen, this.cur + 1);\n        var move = endFeature === endTag ? endTagLen : 0;\n        return handleTagEnd([], move);\n      }\n      this.consumeChar('>');\n      var children = this.parseNodes();\n      this.consumeChar('<');\n      this.consumeChar('/');\n      return handleTagEnd(children);\n    }\n  }, {\n    key: \"parseTag\",\n    value: function parseTag() {\n      var tag = this.consumeWhile(TOKEN_REGEX);\n      return tag;\n    }\n  }, {\n    key: \"parseAttrs\",\n    value: function parseAttrs() {\n      var attrs = {};\n      while (this.peek() !== '>') {\n        var name = this.parseTag();\n        if (!name) {\n          this.consumeChar(this.peek());\n          continue;\n        }\n        if (this.peek() === '=') {\n          this.consumeChar('=');\n          this.consumeChar('\"');\n          var value = this.consumeWhile(/[^\"]/);\n          this.consumeChar('\"');\n          attrs[name] = value;\n        } else {\n          attrs[name] = '';\n        }\n        this.consumeSpace();\n      }\n      return attrs;\n    }\n  }]);\n  return HTMLParser;\n}();\nfunction parseHtml(html, options) {\n  var parser = new HTMLParser();\n  var result = parser.parse(html, options);\n  return result;\n}\n\nvar index = {\n  parseHtml: parseHtml,\n  HTMLParser: HTMLParser\n};\n\nexport { HTMLParser, index as default, parseHtml };\n","import * as core$1 from 'hel-micro-core-wujie';\nimport { appReady, getGlobalThis, commonUtil as commonUtil$1, log, getPlatformConfig, allowLog, helConsts as helConsts$1, getAppMeta, getVerLib, getVerApp, libReady, getVersion, setAppMeta, setVersion, getVerExtraCssList, setVerExtraCssList, getAppPlatform, setVerLoadStatus, helLoadStatus, getVerLoadStatus, getHelEventBus, helEvents, commonDataUtil, originInit } from 'hel-micro-core-wujie';\nimport { parseHtml } from 'hel-html-parser';\n\nvar VER$1 = '4.8.10';\n\n/**\n * 暴露给 hel-micro 的 ui 对接层使用，例如 hel-micro-react 的 renderApp 接口，应用提供者会调用对接层开发者提供的\n * renderApp接口渲染整个应用，当应用非本地运行时，renderApp不触发渲染逻辑而是调用 emitApp 弹射整个根应用出去\n * 这样使用方可通过 react ui 对接层 的 <MicroApp name=\"xxApp\" /> 来实例化整个远程应用\n *\n * @see https://github.com/tnfe/hel/blob/main/packages/hel-micro-react/src/process/renderApp.tsx\n */\nfunction emitApp$1(options) {\n    var appGroupName = options.appGroupName, Comp = options.Comp, platform = options.platform, lifecycle = options.lifecycle, appName = options.appName, versionId = options.versionId;\n    appReady(appGroupName, Comp, { lifecycle: lifecycle, platform: platform, appName: appName, versionId: versionId });\n}\n\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n\nvar __assign = function() {\n    __assign = Object.assign || function __assign(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\n\nfunction __rest(s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n}\n\nfunction __awaiter(thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n}\n\nfunction __generator(thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n}\n\n/** api 服务模块的相关常量 */\nvar apiSrvConst = {\n    GET_APP_AND_VER: 'getSubAppAndItsVersion',\n    GET_APP_AND_FULL_VER: 'getSubAppAndItsFullVersion',\n    BATCH_GET_APP_AND_VER: 'batchGetSubAppAndItsVersion',\n    BATCH_GET_APP_AND_FULL_VER: 'batchGetSubAppAndItsFullVersion',\n    GET_APP_VER: 'getSubAppVersion',\n    GET_APP_FULL_VER: 'getSubAppFullVersion',\n};\nvar API_NORMAL_GET = 'get';\nvar JSONP_MARK = 'Jsonp';\n\nvar toExport$1 = {\n    LS_CACHE_APP_PREFIX: 'HelAppCache',\n    // indexedDB 数据库名称\n    DATABASE_NAME: 'HelIndexedDB',\n    // ObjectStore 名称\n    STORE_NAME: 'HelMetaData',\n};\n\n// 保存db实例\nvar dbContexts = {};\n/**\n * 创建 dbcontext\n * @returns\n */\nfunction createContext() {\n    return {\n        db: null,\n        name: '',\n        storeName: '',\n        version: 1,\n    };\n}\n/**\n * 获取indexedDB，若浏览器不支持则打印警告并返回 null\n * @returns\n */\nfunction getIndexedDBFactory() {\n    if (!('indexedDB' in getGlobalThis())) {\n        console.warn('The current browser is not support indexedDB!');\n        return null;\n    }\n    return getGlobalThis().indexedDB;\n}\nvar IndexedDBStorage = /** @class */ (function () {\n    function IndexedDBStorage(options) {\n        this.dbInfo = createContext();\n        this.ready = null;\n        this.initStorage(options);\n    }\n    IndexedDBStorage.prototype.initStorage = function (options) {\n        var indexedDB = getIndexedDBFactory();\n        if (!indexedDB)\n            return;\n        var initResolve = null;\n        var initReject = null;\n        this.ready = new Promise(function (resolve, reject) {\n            initResolve = resolve;\n            initReject = reject;\n        });\n        var dbInfo = this.dbInfo;\n        if (options) {\n            var name = options.name, storeName = options.storeName, version = options.version;\n            Object.assign(dbInfo, commonUtil$1.purify({ name: name, storeName: storeName, version: version }));\n        }\n        var dbContext = dbContexts[dbInfo.name];\n        if (!dbContext) {\n            dbContext = createContext();\n            dbContexts[dbInfo.name] = dbContext;\n        }\n        dbInfo.db = dbContext.db;\n        // 是否升级\n        var isUpgrade = this.isUpgradeNeeded(dbInfo);\n        if (dbInfo.db) {\n            if (isUpgrade) {\n                // 升级前关闭原来打开的\n                dbInfo.db.close();\n            }\n            else {\n                initResolve(dbInfo);\n                return;\n            }\n        }\n        var dbArgs = [dbInfo.name, undefined];\n        if (isUpgrade) {\n            dbArgs[1] = dbInfo.version;\n        }\n        // 打开数据库\n        var openreq = indexedDB.open.apply(indexedDB, dbArgs);\n        if (isUpgrade) {\n            // 如果升级则监听 onupgradeneeded 事件\n            openreq.onupgradeneeded = function (e) {\n                dbContext.db = openreq.result;\n                dbInfo.db = openreq.result;\n                try {\n                    // 创建 ojectStore(只能在 onupgradeneeded 事件中创建)\n                    dbInfo.db.createObjectStore(dbInfo.storeName);\n                }\n                catch (err) {\n                    // storeName 可能重复\n                    if (err.name === 'ConstraintError') {\n                        var tip = commonUtil$1.nbstr(\"\\n              The database \\\"\".concat(dbInfo.name, \"\\\"\\n              has been upgraded from version \").concat(e.oldVersion, \" to version \").concat(e.newVersion, \",\\n              but the storage \\\"\").concat(dbInfo.storeName, \"\\\" already exists.\"));\n                        console.warn(tip);\n                    }\n                    else {\n                        throw err;\n                    }\n                }\n            };\n        }\n        openreq.onerror = function () {\n            initReject(openreq.error);\n        };\n        openreq.onsuccess = function () {\n            dbInfo.db = openreq.result;\n            dbContext.db = openreq.result;\n            dbInfo.db.onversionchange = function (e) {\n                e.target.close();\n            };\n            initResolve(dbInfo);\n        };\n    };\n    /**\n     * 判断是否升级\n     * @param dbInfo\n     * @returns\n     */\n    IndexedDBStorage.prototype.isUpgradeNeeded = function (dbInfo) {\n        if (!dbInfo.db)\n            return true;\n        // 是否有新的 objectStore\n        var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n        // 是否降低版本\n        var isDowngrade = dbInfo.version < dbInfo.db.version;\n        // 是否升级版本\n        var isUpgrade = dbInfo.version > dbInfo.db.version;\n        if (isDowngrade) {\n            // 对于降低版本给予提示，并继续采用之前的版本\n            console.warn(\"The database \\\"\".concat(dbInfo.name, \"\\\" can't be downgraded from version \").concat(dbInfo.db.version, \" to version \").concat(dbInfo.version));\n            dbInfo.version = dbInfo.db.version;\n        }\n        if (isUpgrade || isNewStore) {\n            // 有新的 objectStore 则升级版本\n            if (isNewStore) {\n                var incVersion = dbInfo.db.version + 1;\n                if (incVersion > dbInfo.version) {\n                    dbInfo.version = incVersion;\n                }\n            }\n            return true;\n        }\n        return false;\n    };\n    IndexedDBStorage.prototype.getObjectStore = function (mode) {\n        return __awaiter(this, void 0, Promise, function () {\n            var dbInfo, name, db, storeName, objectStore;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.getDbInfo()];\n                    case 1:\n                        dbInfo = _a.sent();\n                        name = dbInfo.name, db = dbInfo.db, storeName = dbInfo.storeName;\n                        if (!db) {\n                            throw new Error(\"get \".concat(storeName, \" objectStore failed in \").concat(name, \" database\"));\n                        }\n                        objectStore = db.transaction(storeName, mode || 'readonly').objectStore(storeName);\n                        return [2 /*return*/, objectStore];\n                }\n            });\n        });\n    };\n    IndexedDBStorage.prototype.attachHandler = function (req, resolve, reject) {\n        req.onsuccess = function () {\n            resolve(req.result || null);\n        };\n        req.onerror = function () {\n            reject(req.error);\n        };\n    };\n    IndexedDBStorage.prototype.getItem = function (key) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            _this.getObjectStore()\n                .then(function (objectStore) {\n                var req = objectStore.get(key);\n                _this.attachHandler(req, resolve, reject);\n            })\n                .catch(reject);\n        });\n    };\n    IndexedDBStorage.prototype.setItem = function (key, value) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            _this.getObjectStore('readwrite')\n                .then(function (objectStore) {\n                var req = objectStore.put(value, key);\n                _this.attachHandler(req, resolve, reject);\n            })\n                .catch(reject);\n        });\n    };\n    IndexedDBStorage.prototype.removeItem = function (key) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            _this.getObjectStore('readwrite')\n                .then(function (objectStore) {\n                var req = objectStore.delete(key);\n                _this.attachHandler(req, resolve, reject);\n            })\n                .catch(reject);\n        });\n    };\n    IndexedDBStorage.prototype.getDbInfo = function () {\n        if (!this.ready) {\n            return Promise.reject('forget init');\n        }\n        return this.ready;\n    };\n    return IndexedDBStorage;\n}());\n\nfunction isRelativePath(path) {\n    if (path.startsWith('//'))\n        return false;\n    return path.startsWith('/') || path.startsWith('./') || path.startsWith('../');\n}\nfunction getAssetUrlType(webDirPath, url) {\n    if (url.startsWith(webDirPath)) {\n        return 'build'; // 是构建生成的 css 文件\n    }\n    if (isRelativePath(url)) {\n        return 'relative';\n    }\n    return 'static';\n}\nfunction getIndexedDB() {\n    if (!getIndexedDBFactory())\n        return null;\n    var indexedDBIns = new IndexedDBStorage({\n        name: toExport$1.DATABASE_NAME,\n        storeName: toExport$1.STORE_NAME,\n    });\n    function setItem(key, value) {\n        return indexedDBIns.setItem(key, value);\n    }\n    function getItem(key) {\n        return indexedDBIns.getItem(key);\n    }\n    function removeItem(key) {\n        return indexedDBIns.removeItem(key);\n    }\n    return {\n        getItem: getItem,\n        setItem: setItem,\n        removeItem: removeItem,\n    };\n}\n// avoid mock js-dom warn:\n// [DOMException [SecurityError]: localStorage is not available for opaque origins]\nfunction getLocalStorage() {\n    var _a;\n    // prettier-ignore\n    var mockStorage = { getItem: function () { }, setItem: function () { }, removeItem: function () { } };\n    try {\n        var storage = (_a = getGlobalThis()) === null || _a === void 0 ? void 0 : _a.localStorage;\n        return storage || mockStorage;\n    }\n    catch (err) {\n        return mockStorage;\n    }\n}\n/**\n * 支持读取 dom attrs 时只有 key 的正确含义\n * 例如通过设定 defaultValIfOnlyKey 表示 <script data-helappend /> 可拿到值为 '1' 而非 ''\n */\nfunction getDatasetVal(dataset, key, defaultValIfOnlyKey) {\n    var hasKey = Object.prototype.hasOwnProperty.call(dataset, key);\n    if (hasKey) {\n        return dataset[key] || defaultValIfOnlyKey;\n    }\n    return undefined;\n}\n\nfunction getUserName(options) {\n    var userLsKey = options.userLsKey;\n    var userName = getLocalStorage().getItem(userLsKey) || '';\n    if (userName) {\n        return userName;\n    }\n    try {\n        var map_1 = {};\n        getGlobalThis()\n            .document.cookie.split(';')\n            .forEach(function (kvStr) {\n            var _a = kvStr.split('='), k = _a[0], v = _a[1];\n            map_1[k] = v;\n        });\n        userName = map_1[userLsKey] || '';\n        log('[[ getUserName ]] result:', userName);\n    }\n    catch (err) {\n        log('[[ getUserName ]] err:', err);\n    }\n    return userName;\n}\n\nvar builtinFns = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  getUserName: getUserName\n});\n\nvar isNull = commonUtil$1.isNull;\nfunction getFn(platform, fnName, userFn) {\n    var conf = getPlatformConfig(platform);\n    var origin = conf.origin;\n    var confFn = conf[fnName];\n    // @ts-ignore\n    var originFn = origin[fnName];\n    return userFn || confFn || originFn;\n}\nfunction callFn(platform, fnName, params, userFn) {\n    var fn = getFn(platform, fnName, userFn);\n    if (fn) {\n        return fn(params);\n    }\n    // @ts-ignore\n    var builtinFn = builtinFns[fnName] || (function () { return null; });\n    return builtinFn(params);\n}\nfunction getVal(platform, key, valPair, nullDef) {\n    var _a = valPair || [], userVal = _a[0], defautVal = _a[1];\n    if (!isNull(userVal, nullDef)) {\n        return userVal;\n    }\n    var conf = getPlatformConfig(platform);\n    var origin = conf.origin;\n    // 优先返回 platInitOptions\n    var confVal = conf[key];\n    if (!isNull(confVal, nullDef)) {\n        return confVal;\n    }\n    // 最后返回 originInitOptions\n    // @ts-ignore\n    var originVal = origin[key];\n    if (!isNull(originVal, nullDef)) {\n        return originVal;\n    }\n    return defautVal;\n}\nfunction getHookFn(loadOptions, hookKey) {\n    var _a;\n    var conf = getPlatformConfig(loadOptions.platform);\n    var userHook = loadOptions.hook || {};\n    var origin = conf.origin, hook = conf.hook;\n    return userHook[hookKey] || hook[hookKey] || ((_a = origin.hook) === null || _a === void 0 ? void 0 : _a[hookKey]);\n}\n/**\n * 按下面 'getApiPrefix' 链接里描述的生成规则生成api域名前缀\n * @type {import('hel-micro-core-wujie').IControlPreFetchOptions['getApiPrefix']}\n * @param platform\n * @param loadOptions\n * @returns\n */\nfunction genApiPrefix(platform, loadOptions) {\n    var _a, _b, _c;\n    var prefix = '';\n    if (loadOptions) {\n        prefix = ((_a = loadOptions.getApiPrefix) === null || _a === void 0 ? void 0 : _a.call(loadOptions)) || loadOptions.apiPrefix;\n    }\n    if (prefix) {\n        return prefix;\n    }\n    var conf = getPlatformConfig(platform);\n    prefix = ((_b = conf.getApiPrefix) === null || _b === void 0 ? void 0 : _b.call(conf)) || conf.apiPrefix;\n    if (prefix) {\n        return prefix;\n    }\n    var origin = conf.origin;\n    prefix = ((_c = origin.getApiPrefix) === null || _c === void 0 ? void 0 : _c.call(origin)) || origin.apiPrefix;\n    return prefix;\n}\n\n// @see https://www.runoob.com/jsref/prop-node-nodetype.html\nvar DOCUMENT_FRAGMENT_NODE = 11;\nvar JSONP = {\n    now: function () {\n        return new Date().getTime();\n    },\n    rand: function () {\n        return Math.random().toString().substring(6);\n    },\n    // 删除节点元素\n    removeElem: function (elem) {\n        var parent = elem.parentNode;\n        if (parent && parent.nodeType !== DOCUMENT_FRAGMENT_NODE) {\n            parent.removeChild(elem);\n        }\n    },\n    // url 组装 data\n    parseData: function (data) {\n        var ret = '';\n        if (typeof data === 'string') {\n            ret = data;\n        }\n        else if (typeof data === 'object') {\n            for (var key in data) {\n                ret += \"\".concat(ret, \"&\").concat(key, \"=\").concat(encodeURIComponent(data[key]));\n            }\n        }\n        // 加时间戳防止缓存\n        ret += \"&_t=\".concat(JSONP.now());\n        ret = ret.substring(1);\n        return ret;\n    },\n    getJSON: function (inputUrl, data) {\n        return new Promise(function (resolve, reject) {\n            var callbackName = '';\n            var url = inputUrl;\n            url = url + (url.indexOf('?') === -1 ? '?' : '&') + JSONP.parseData(data);\n            // 检测 callback 的函数名是否已经定义\n            var match = /callback=(\\w+)/.exec(url);\n            if (match === null || match === void 0 ? void 0 : match[1]) {\n                callbackName = match[1];\n            }\n            else {\n                callbackName = \"helJsonp_\".concat(JSONP.now(), \"_\").concat(JSONP.rand());\n            }\n            if (url.includes('?')) {\n                url = \"\".concat(url, \"&callback=\").concat(callbackName);\n            }\n            else {\n                url = \"\".concat(url, \"?callback=\").concat(callbackName);\n            }\n            var globalThis = getGlobalThis();\n            var doc = globalThis.document;\n            var script = doc.createElement('script');\n            script.type = 'text/javascript';\n            script.src = url;\n            script.id = callbackName;\n            script.onerror = reject;\n            script.addEventListener('error', reject); // 早期版本的浏览器不支持 script.onerror\n            // 把传进来的函数重新组装，并把它设置为全局函数，远程会触发该函数\n            // @ts-ignore\n            globalThis[callbackName] = function (jsonData) {\n                // @ts-ignore\n                delete globalThis[callbackName]; // 执行完函数就销毁\n                var elem = doc.getElementById(callbackName);\n                elem && JSONP.removeElem(elem);\n                return resolve(jsonData);\n            };\n            var head = doc.getElementsByTagName('head');\n            if (head === null || head === void 0 ? void 0 : head[0]) {\n                head[0].appendChild(script);\n            }\n        });\n    },\n};\nvar getJSON = JSONP.getJSON;\n\nfunction getPlatform(platform) {\n    return platform || core$1.getPlatform();\n}\n\nfunction getXHRFactory() {\n    if (!('XMLHttpRequest' in getGlobalThis())) {\n        return null;\n    }\n    return new XMLHttpRequest();\n}\nfunction xhrFetch(url, config) {\n    return __awaiter(this, void 0, Promise, function () {\n        var _a, method, xhrConfig, xhr, result;\n        return __generator(this, function (_b) {\n            switch (_b.label) {\n                case 0:\n                    _a = config || {}, method = _a.method, xhrConfig = __rest(_a, [\"method\"]);\n                    xhr = new XHR(xhrConfig);\n                    return [4 /*yield*/, xhr.request(url, method)];\n                case 1:\n                    result = _b.sent();\n                    return [2 /*return*/, result];\n            }\n        });\n    });\n}\nvar XHR = /** @class */ (function () {\n    function XHR(config) {\n        this.req = null;\n        this.resultPromise = Promise.resolve(null);\n        this.init(config || {});\n    }\n    XHR.prototype.init = function (config) {\n        var req = getXHRFactory();\n        if (!req) {\n            throw new Error('current browser is not support XMLHttpRequest!');\n        }\n        this.req = req;\n        // 同步配置\n        var responseType = config.responseType, _a = config.timeout, timeout = _a === void 0 ? 10000 : _a, withCredentials = config.withCredentials, headers = config.headers;\n        req.responseType = responseType || 'json';\n        req.timeout = timeout;\n        req.withCredentials = !!withCredentials;\n        if (headers) {\n            Object.keys(headers).forEach(function (key) {\n                req.setRequestHeader(key, headers[key]);\n            });\n        }\n        var initResolve = null;\n        var initReject = null;\n        this.resultPromise = new Promise(function (resolve, reject) {\n            initResolve = resolve;\n            initReject = reject;\n        });\n        var wrapSuccessResult = function () {\n            var response = req.response, status = req.status, statusText = req.statusText, responseURL = req.responseURL;\n            initResolve({ data: response, status: status, statusText: statusText, url: responseURL });\n        };\n        var wrapErrResult = function (e) {\n            var status = req.status, statusText = req.statusText, responseURL = req.responseURL;\n            initReject({ msg: e, status: status, statusText: statusText, url: responseURL });\n        };\n        // 监听事件\n        req.onload = function () { return wrapSuccessResult(); };\n        req.onerror = function (e) { return wrapErrResult(e); };\n        req.onabort = function (e) { return wrapErrResult(e); };\n        req.ontimeout = function (e) { return wrapErrResult(e); };\n        req.onprogress = function () { };\n    };\n    XHR.prototype.request = function (url, method) {\n        return __awaiter(this, void 0, Promise, function () {\n            var result;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!this.req) {\n                            throw new Error('forget init');\n                        }\n                        // 发送请求\n                        this.req.open(method ? method.toUpperCase() : 'GET', url);\n                        this.req.send();\n                        return [4 /*yield*/, this.resultPromise];\n                    case 1:\n                        result = _a.sent();\n                        return [2 /*return*/, result];\n                }\n            });\n        });\n    };\n    return XHR;\n}());\n\nfunction perfStart(label) {\n    if (allowLog()) {\n        console.time(label);\n    }\n}\nfunction perfEnd(label) {\n    if (allowLog()) {\n        console.timeEnd(label);\n    }\n}\n/**\n * 默认请求 unpkg\n */\nfunction getSemverLatestVer(appName, apiPrefix) {\n    return __awaiter(this, void 0, void 0, function () {\n        var comment, url, _a, includeVer, ver;\n        return __generator(this, function (_b) {\n            switch (_b.label) {\n                case 0:\n                    comment = 'try_detect_latest_ver';\n                    return [4 /*yield*/, requestGet(\"\".concat(apiPrefix, \"/\").concat(appName, \"@latest/\").concat(comment, \"_\").concat(Date.now()))];\n                case 1:\n                    url = (_b.sent()).url;\n                    _a = url.split('@'), includeVer = _a[1];\n                    ver = includeVer.split('/')[0];\n                    return [2 /*return*/, ver];\n            }\n        });\n    });\n}\nfunction requestByFetch(url, asJson) {\n    return __awaiter(this, void 0, void 0, function () {\n        var res, status, resUrl, json, text;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0: return [4 /*yield*/, getGlobalThis().fetch(url)];\n                case 1:\n                    res = _a.sent();\n                    status = res.status, resUrl = res.url;\n                    if (![200, 304].includes(status)) {\n                        return [2 /*return*/, { url: resUrl, reply: null, status: status }];\n                    }\n                    if (!asJson) return [3 /*break*/, 3];\n                    return [4 /*yield*/, res.json()];\n                case 2:\n                    json = _a.sent();\n                    return [2 /*return*/, { url: resUrl, reply: json, status: status }];\n                case 3: return [4 /*yield*/, res.text()];\n                case 4:\n                    text = _a.sent();\n                    return [2 /*return*/, { url: resUrl, reply: text, status: status }];\n            }\n        });\n    });\n}\nfunction requestByXHR(url, asJson) {\n    return __awaiter(this, void 0, void 0, function () {\n        var res, status, data, _a, resUrl;\n        return __generator(this, function (_b) {\n            switch (_b.label) {\n                case 0: return [4 /*yield*/, xhrFetch(url, { method: 'GET', responseType: asJson ? 'json' : 'text' })];\n                case 1:\n                    res = _b.sent();\n                    status = res.status, data = res.data, _a = res.url, resUrl = _a === void 0 ? '' : _a;\n                    if (status === 400) {\n                        return [2 /*return*/, { url: resUrl, reply: null, status: status }];\n                    }\n                    return [2 /*return*/, { url: resUrl, reply: data, status: status }];\n            }\n        });\n    });\n}\nfunction requestGet(url, asJson) {\n    if (asJson === void 0) { asJson = true; }\n    return __awaiter(this, void 0, void 0, function () {\n        var requester, result;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    requester = requestByXHR;\n                    // 如果支持fetch则使用\n                    if (!!getGlobalThis().fetch) {\n                        requester = requestByFetch;\n                    }\n                    return [4 /*yield*/, requester(url, asJson)];\n                case 1:\n                    result = _a.sent();\n                    return [2 /*return*/, result];\n            }\n        });\n    });\n}\nfunction getAllExtraCssList(loadOptions) {\n    var _a = loadOptions.extraCssList, extraCssList = _a === void 0 ? [] : _a, custom = loadOptions.custom;\n    if (custom) {\n        var _b = custom.extraCssList, custCssList = _b === void 0 ? [] : _b, _c = custom.enable, enable = _c === void 0 ? true : _c;\n        if (enable) {\n            var mergedList = commonUtil$1.merge2List(extraCssList, custCssList);\n            return mergedList;\n        }\n    }\n    return extraCssList.slice();\n}\n\nvar safeParse = commonUtil$1.safeParse;\n/** 内部用的工具函数 */\nvar inner$3 = {\n    /** 处理语义化版本平台返回的结果 */\n    handleSemverRet: function (ret, options) {\n        var version = (ret || {}).version;\n        var retVar = ret;\n        if (options.onlyVersion) {\n            retVar = version;\n        }\n        if (!options.isFullVersion && version) {\n            Reflect.deleteProperty(version, 'html_content');\n        }\n        if (!version) {\n            return { data: null, code: '404', msg: 'no version found' };\n        }\n        return { data: retVar, code: '0', msg: '' };\n    },\n    appendSearchKV: function (oriStr, key, value) {\n        var newStr = oriStr;\n        if (value) {\n            newStr += \"&\".concat(key, \"=\").concat(value);\n        }\n        return newStr;\n    },\n    appendSuffix: function (oriStr, suffix) {\n        var newStr = oriStr;\n        if (suffix) {\n            newStr += suffix;\n        }\n        return newStr;\n    },\n};\nfunction executeGet(url, options) {\n    return __awaiter(this, void 0, Promise, function () {\n        var ret, _a, semverApi, apiMode, perfLabel, result, err_1;\n        return __generator(this, function (_b) {\n            switch (_b.label) {\n                case 0:\n                    ret = null;\n                    _a = options.semverApi, semverApi = _a === void 0 ? true : _a;\n                    apiMode = semverApi ? API_NORMAL_GET : options.apiMode;\n                    perfLabel = \"request \".concat(url);\n                    perfStart(perfLabel);\n                    _b.label = 1;\n                case 1:\n                    _b.trys.push([1, 6, , 7]);\n                    if (!(apiMode === API_NORMAL_GET)) return [3 /*break*/, 3];\n                    return [4 /*yield*/, requestGet(url)];\n                case 2:\n                    result = _b.sent();\n                    ret = result.reply;\n                    return [3 /*break*/, 5];\n                case 3: return [4 /*yield*/, getJSON(url)];\n                case 4:\n                    // jsonp get\n                    ret = _b.sent();\n                    _b.label = 5;\n                case 5:\n                    perfEnd(perfLabel);\n                    // 请求语义化cdn平台时拿到的是原始数据，和自定义平台有差异\n                    // 这里做一下抹平处理，以便上层可以用一致的方式读取数据\n                    if (semverApi) {\n                        return [2 /*return*/, inner$3.handleSemverRet(ret, options)];\n                    }\n                    return [2 /*return*/, ret];\n                case 6:\n                    err_1 = _b.sent();\n                    return [2 /*return*/, { data: null, code: '404', msg: err_1.message }];\n                case 7: return [2 /*return*/];\n            }\n        });\n    });\n}\nfunction ensureApp(app) {\n    var clonedApp = __assign({}, app);\n    clonedApp.additional_scripts = safeParse(clonedApp.additional_scripts, []);\n    clonedApp.additional_body_scripts = safeParse(clonedApp.additional_body_scripts, []);\n    return clonedApp;\n}\nfunction ensureVersion(version) {\n    var clonedVersion = __assign({}, version);\n    clonedVersion.src_map = safeParse(clonedVersion.src_map, {\n        htmlIndexSrc: '',\n        webDirPath: '',\n        headAssetList: [],\n        bodyAssetList: [],\n        chunkJsSrcList: [],\n        chunkCssSrcList: [],\n        staticJsSrcList: [],\n        staticCssSrcList: [],\n        relativeJsSrcList: [],\n        relativeCssSrcList: [],\n        otherSrcList: [],\n    });\n    return clonedVersion;\n}\n/**\n * 生成版本语义化的元数据请求链接\n */\nfunction getSemverUrl(apiHost, appName, versionId, skip404Sniff) {\n    if (skip404Sniff === void 0) { skip404Sniff = false; }\n    return __awaiter(this, void 0, void 0, function () {\n        var ver;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    ver = versionId;\n                    if (!!ver) return [3 /*break*/, 3];\n                    if (!skip404Sniff) return [3 /*break*/, 1];\n                    ver = 'latest'; // latest 未必是最新的，unpkg 可能有延时，需用户自己抉择需不需要跳过404嗅探\n                    return [3 /*break*/, 3];\n                case 1: return [4 /*yield*/, getSemverLatestVer(appName, apiHost)];\n                case 2:\n                    ver = _a.sent();\n                    _a.label = 3;\n                case 3: \n                // https://unpkg.com/hel-lodash@2.1.7/hel_dist/hel-meta.json\n                // https://cdn.jsdelivr.net/npm/hel-lodash@2.1.7/hel_dist/hel-meta.json\n                return [2 /*return*/, \"\".concat(apiHost, \"/\").concat(appName, \"@\").concat(ver, \"/hel_dist/hel-meta.json?_t=\").concat(Date.now())];\n            }\n        });\n    });\n}\n/**\n * 生成请求的自定义平台的请求信息\n */\nfunction prepareCustomPlatRequestInfo(appNameOrNames, getOptions) {\n    var versionId = getOptions.versionId, projectId = getOptions.projectId, apiMode = getOptions.apiMode, _a = getOptions.isFullVersion, isFullVersion = _a === void 0 ? false : _a, _b = getOptions.versionIdList, versionIdList = _b === void 0 ? [] : _b, _c = getOptions.projectIdList, projectIdList = _c === void 0 ? [] : _c, _d = getOptions.loadOptions, loadOptions = _d === void 0 ? {} : _d;\n    var platform = getPlatform(getOptions.platform);\n    // trust me, appName will be reassign later\n    var appName = appNameOrNames;\n    var urlAppName = appName;\n    var urlVersion = versionId;\n    var urlProjId = projectId;\n    var isBatch = false;\n    if (Array.isArray(appNameOrNames)) {\n        appName = appNameOrNames[0];\n        urlAppName = appNameOrNames.join(',');\n        urlVersion = versionIdList.join(',');\n        urlProjId = projectIdList.join(',');\n        isBatch = true;\n    }\n    // 按 preFetchOptions.{key} --> platInitOptions.{key} --> originInitOptions.{key} --> innerDefault 取值的函数\n    var getVal$1 = function (key, defaultVal) {\n        return getVal(platform, key, [loadOptions[key], defaultVal]);\n    };\n    var getFnVal = function (fnName, fnParams) {\n        return callFn(platform, fnName, fnParams, loadOptions[fnName]);\n    };\n    var userLsKey = getVal$1('userLsKey', helConsts$1.DEFAULT_USER_LS_KEY);\n    var userName = getFnVal('getUserName', { platform: platform, appName: appName, userLsKey: userLsKey });\n    var grayResult = getFnVal('shouldUseGray', { appName: appName });\n    var apiSuffix = getVal$1('apiSuffix');\n    var apiPathOfApp = getVal$1('apiPathOfApp', helConsts$1.DEFAULT_API_URL);\n    var apiHost = genApiPrefix(platform, loadOptions);\n    var grayVar = '';\n    if (typeof grayResult === 'boolean') {\n        grayVar = grayResult ? '1' : '0';\n    }\n    // 为自定义模块管理台拼接请求链接\n    var jsonpMark = apiMode === API_NORMAL_GET ? '' : JSONP_MARK;\n    var interfaceName = '';\n    if (!isBatch) {\n        interfaceName = !isFullVersion ? apiSrvConst.GET_APP_AND_VER : apiSrvConst.GET_APP_AND_FULL_VER;\n    }\n    else {\n        interfaceName = !isFullVersion ? apiSrvConst.BATCH_GET_APP_AND_VER : apiSrvConst.BATCH_GET_APP_AND_FULL_VER;\n    }\n    var finalInterfaceName = \"\".concat(interfaceName).concat(jsonpMark);\n    var url = '';\n    url = \"\".concat(apiHost).concat(apiPathOfApp, \"/\").concat(finalInterfaceName, \"?name=\").concat(urlAppName);\n    url = inner$3.appendSearchKV(url, 'userName', userName);\n    url = inner$3.appendSearchKV(url, 'version', urlVersion);\n    url = inner$3.appendSearchKV(url, 'projId', urlProjId);\n    url = inner$3.appendSearchKV(url, 'gray', grayVar);\n    url = inner$3.appendSuffix(url, apiSuffix);\n    return { url: url, userName: userName };\n}\n/**\n * 生成请求的 unpkg 平台的请求信息\n */\nfunction prepareSemverRequestInfo(appName, getOptions) {\n    return __awaiter(this, void 0, void 0, function () {\n        var versionId, platform, loadOptions, apiHost, url;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    versionId = getOptions.versionId, platform = getOptions.platform, loadOptions = getOptions.loadOptions;\n                    apiHost = genApiPrefix(platform, loadOptions);\n                    return [4 /*yield*/, getSemverUrl(apiHost, appName, versionId || '', loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.skip404Sniff)];\n                case 1:\n                    url = _a.sent();\n                    return [2 /*return*/, url];\n            }\n        });\n    });\n}\n/**\n * 生成请求请求信息\n */\nfunction prepareRequestInfo(appName, getOptions) {\n    var _a;\n    return __awaiter(this, void 0, void 0, function () {\n        var loadOptions, userName, url, semverApi, ret;\n        return __generator(this, function (_b) {\n            switch (_b.label) {\n                case 0:\n                    loadOptions = getOptions.loadOptions;\n                    userName = '';\n                    url = '';\n                    semverApi = (_a = loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.semverApi) !== null && _a !== void 0 ? _a : true;\n                    if (!semverApi) return [3 /*break*/, 2];\n                    return [4 /*yield*/, prepareSemverRequestInfo(appName, getOptions)];\n                case 1:\n                    url = _b.sent();\n                    return [3 /*break*/, 3];\n                case 2:\n                    ret = prepareCustomPlatRequestInfo(appName, getOptions);\n                    url = ret.url;\n                    userName = ret.userName;\n                    _b.label = 3;\n                case 3: return [2 /*return*/, { url: url, userName: userName }];\n            }\n        });\n    });\n}\n/**\n * 准备请求版本数据的 url 链接\n */\nfunction prepareRequestVersionUrl(versionId, getOptions) {\n    return __awaiter(this, void 0, void 0, function () {\n        var apiMode, appName, _a, isFullVersion, _b, semverApi, platform, apiHost, apiSuffix, apiPathOfApp, apiPathOfAppVersion, url, jsonpMark, interfaceName, finalInterfaceName, finalApiPath;\n        return __generator(this, function (_c) {\n            switch (_c.label) {\n                case 0:\n                    apiMode = getOptions.apiMode, appName = getOptions.appName, _a = getOptions.isFullVersion, isFullVersion = _a === void 0 ? false : _a, _b = getOptions.semverApi, semverApi = _b === void 0 ? true : _b;\n                    platform = getPlatform(getOptions.platform);\n                    apiHost = getVal(platform, 'apiPrefix');\n                    apiSuffix = getVal(platform, 'apiSuffix');\n                    apiPathOfApp = getVal(platform, 'apiPathOfApp');\n                    apiPathOfAppVersion = getVal(platform, 'apiPathOfAppVersion');\n                    url = '';\n                    if (!semverApi) return [3 /*break*/, 2];\n                    return [4 /*yield*/, getSemverUrl(apiHost, appName, versionId)];\n                case 1:\n                    url = _c.sent();\n                    return [3 /*break*/, 3];\n                case 2:\n                    jsonpMark = apiMode === API_NORMAL_GET ? '' : JSONP_MARK;\n                    interfaceName = !isFullVersion ? apiSrvConst.GET_APP_VER : apiSrvConst.GET_APP_FULL_VER;\n                    finalInterfaceName = \"\".concat(interfaceName).concat(jsonpMark);\n                    finalApiPath = apiPathOfAppVersion || apiPathOfApp || helConsts$1.DEFAULT_API_URL;\n                    url = \"\".concat(apiHost).concat(finalApiPath, \"/\").concat(finalInterfaceName, \"?ver=\").concat(versionId);\n                    url = inner$3.appendSearchKV(url, 'name', appName);\n                    url = inner$3.appendSuffix(url, apiSuffix);\n                    _c.label = 3;\n                case 3: return [2 /*return*/, url];\n            }\n        });\n    });\n}\n/**\n * 获取子应用和它的最新在线版本\n */\nfunction getSubAppAndItsVersion(appName, getOptions) {\n    return __awaiter(this, void 0, void 0, function () {\n        var versionId, platform, apiMode, loadOptions, getFn$1, _a, url, userName, innerRequest, fnParams, data_1, data;\n        var _this = this;\n        return __generator(this, function (_b) {\n            switch (_b.label) {\n                case 0:\n                    versionId = getOptions.versionId, platform = getOptions.platform, apiMode = getOptions.apiMode, loadOptions = getOptions.loadOptions;\n                    getFn$1 = getFn(platform, 'getSubAppAndItsVersionFn', loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.getSubAppAndItsVersionFn);\n                    return [4 /*yield*/, prepareRequestInfo(appName, getOptions)];\n                case 1:\n                    _a = _b.sent(), url = _a.url, userName = _a.userName;\n                    innerRequest = function (custUrl, custApiMode) { return __awaiter(_this, void 0, void 0, function () {\n                        var metaUrl, reply;\n                        return __generator(this, function (_a) {\n                            switch (_a.label) {\n                                case 0:\n                                    metaUrl = custUrl || url;\n                                    return [4 /*yield*/, executeGet(metaUrl, { apiMode: custApiMode || apiMode, semverApi: loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.semverApi })];\n                                case 1:\n                                    reply = _a.sent();\n                                    if (0 !== parseInt(reply.code, 10) || !reply) {\n                                        throw new Error((reply === null || reply === void 0 ? void 0 : reply.msg) || 'getSubAppAndItsVersion err');\n                                    }\n                                    return [2 /*return*/, { app: ensureApp(reply.data.app), version: ensureVersion(reply.data.version), metaUrl: metaUrl }];\n                            }\n                        });\n                    }); };\n                    if (!getFn$1) return [3 /*break*/, 3];\n                    fnParams = { platform: platform, appName: appName, userName: userName, versionId: versionId, url: url, innerRequest: innerRequest };\n                    return [4 /*yield*/, Promise.resolve(getFn$1(fnParams))];\n                case 2:\n                    data_1 = (_b.sent());\n                    return [2 /*return*/, { app: ensureApp(data_1.app), version: ensureVersion(data_1.version) }];\n                case 3: return [4 /*yield*/, innerRequest()];\n                case 4:\n                    data = _b.sent();\n                    return [2 /*return*/, data];\n            }\n        });\n    });\n}\n/**\n * 获取子应用版本详情\n */\nfunction getSubAppVersion$1(versionId, options) {\n    return __awaiter(this, void 0, void 0, function () {\n        var apiMode, _a, isFullVersion, semverApi, url, _b, data, code, msg, versionData;\n        return __generator(this, function (_c) {\n            switch (_c.label) {\n                case 0:\n                    apiMode = options.apiMode, _a = options.isFullVersion, isFullVersion = _a === void 0 ? false : _a, semverApi = options.semverApi;\n                    return [4 /*yield*/, prepareRequestVersionUrl(versionId, options)];\n                case 1:\n                    url = _c.sent();\n                    return [4 /*yield*/, executeGet(url, { apiMode: apiMode, isFullVersion: isFullVersion, semverApi: semverApi, onlyVersion: true })];\n                case 2:\n                    _b = _c.sent(), data = _b.data, code = _b.code, msg = _b.msg;\n                    if (0 !== parseInt(code, 10) || !data) {\n                        throw new Error(msg || 'ver not found');\n                    }\n                    versionData = ensureVersion(data);\n                    return [2 /*return*/, versionData];\n            }\n        });\n    });\n}\n/**\n * 批量获取子应用版本详情\n */\nfunction batchGetSubAppAndItsVersion(appNames, batchGetOptions) {\n    return __awaiter(this, void 0, void 0, function () {\n        var apiMode, batchGetFn, semverApi, platform, url, innerRequest, list, fnParams;\n        var _this = this;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    if (!appNames.length) {\n                        return [2 /*return*/, []];\n                    }\n                    apiMode = batchGetOptions.apiMode, batchGetFn = batchGetOptions.batchGetFn, semverApi = batchGetOptions.semverApi;\n                    platform = getPlatform(batchGetOptions.platform);\n                    return [4 /*yield*/, prepareCustomPlatRequestInfo(appNames, batchGetOptions)];\n                case 1:\n                    url = (_a.sent()).url;\n                    innerRequest = function () { return __awaiter(_this, void 0, void 0, function () {\n                        var _a, data, code, msg, list;\n                        return __generator(this, function (_b) {\n                            switch (_b.label) {\n                                case 0: return [4 /*yield*/, executeGet(url, { apiMode: apiMode, semverApi: semverApi })];\n                                case 1:\n                                    _a = _b.sent(), data = _a.data, code = _a.code, msg = _a.msg;\n                                    if (0 !== parseInt(code, 10) || !data) {\n                                        throw new Error(msg || 'batch get failed');\n                                    }\n                                    list = data.map(function (item) { return ({ app: ensureApp(item.app), version: ensureVersion(item.version) }); });\n                                    return [2 /*return*/, list];\n                            }\n                        });\n                    }); };\n                    list = [];\n                    if (!batchGetFn) return [3 /*break*/, 3];\n                    fnParams = { url: url, platform: platform, innerRequest: innerRequest };\n                    return [4 /*yield*/, Promise.resolve(batchGetFn(fnParams))];\n                case 2:\n                    list = (_a.sent());\n                    return [3 /*break*/, 5];\n                case 3: return [4 /*yield*/, innerRequest()];\n                case 4:\n                    list = _a.sent();\n                    _a.label = 5;\n                case 5: return [2 /*return*/, list];\n            }\n        });\n    });\n}\n\nvar noop = commonUtil$1.noop, okeys = commonUtil$1.okeys;\nvar assign = Object.assign;\nfunction isAssetExisted(selectors) {\n    var _a;\n    try {\n        var doc = (_a = getGlobalThis()) === null || _a === void 0 ? void 0 : _a.document;\n        var el = doc.querySelector(selectors);\n        return !!el;\n    }\n    catch (err) {\n        return false;\n    }\n}\n/**\n * 识别 data-helappend data-helex 原语来确定资源是否能加载\n */\nfunction canAppendByHelMark(attrs, tag) {\n    var ex = attrs['data-helex'];\n    var helAppend = attrs['data-helappend'];\n    var g = getGlobalThis();\n    if (helAppend === '0') {\n        return false;\n    }\n    // check is ex loaded，此功能用于支持需延迟加载的 externals\n    if (ex) {\n        // @ts-ignore avoid error: type {xxx} was found on type 'typeof globalThis'.\n        if (tag === 'script' && g[ex]) {\n            // script 型的 ex，优先查 globalThis 上是否已绑定，已绑定则不能加载相同 ex 标记的资源了\n            return false;\n        }\n        // 查 helex 特征值对应的资源是否存在\n        var isExisted = isAssetExisted(\"\".concat(tag, \"[data-helex=\\\"\").concat(ex, \"\\\"]\"));\n        return !isExisted; // 不存在才加载\n    }\n    return true;\n}\nfunction appendEl(el, attrs, appendToBody) {\n    var doc = getGlobalThis().document;\n    okeys(attrs).forEach(function (key) { return el.setAttribute(key, attrs[key]); });\n    if (appendToBody)\n        doc.body.appendChild(el);\n    else\n        doc.head.appendChild(el);\n}\nfunction createScriptElement(options) {\n    var attrs = options.attrs, innerText = options.innerText, _a = options.appendToBody, appendToBody = _a === void 0 ? true : _a, onloadCb = options.onloadCb;\n    var src = attrs.src, rest = __rest(attrs, [\"src\"]);\n    var restObj = rest;\n    if (!src && !innerText) {\n        return false;\n    }\n    var doc = getGlobalThis().document;\n    if (src && isAssetExisted(\"script[src=\\\"\".concat(src, \"\\\"]\"))) {\n        return false;\n    }\n    if (!canAppendByHelMark(restObj, 'script')) {\n        return false;\n    }\n    var el = doc.createElement('script');\n    if (src)\n        el.setAttribute('src', src);\n    okeys(restObj).forEach(function (key) { return el.setAttribute(key, restObj[key]); });\n    if (onloadCb)\n        el.onload = onloadCb;\n    if (innerText)\n        el.innerText = innerText;\n    appendEl(el, restObj, appendToBody);\n    return true;\n}\nfunction createLinkElement(options) {\n    var _a = options.appendToBody, appendToBody = _a === void 0 ? false : _a, innerText = options.innerText, attrs = options.attrs;\n    var href = attrs.href, rel = attrs.rel, rest = __rest(attrs, [\"href\", \"rel\"]);\n    var restObj = rest;\n    var doc = getGlobalThis().document;\n    if (!href && !innerText)\n        return;\n    if (!canAppendByHelMark(restObj, 'link')) {\n        return false;\n    }\n    var el = doc.createElement('link');\n    if (href) {\n        el.setAttribute('href', href);\n        el.setAttribute('rel', rel || 'stylesheet');\n    }\n    else if (rel) {\n        // 无 href 时，不默认 rel 为 'stylesheet'\n        el.setAttribute('rel', rel);\n    }\n    if (innerText)\n        el.innerText = innerText;\n    appendEl(el, restObj, appendToBody);\n}\nfunction createStyleElement(options) {\n    var _a = options.appendToBody, appendToBody = _a === void 0 ? false : _a, _b = options.innerText, innerText = _b === void 0 ? '' : _b, attrs = options.attrs;\n    var doc = getGlobalThis().document;\n    var el = doc.createElement('style');\n    el.innerText = innerText;\n    appendEl(el, attrs, appendToBody);\n}\n// 相比 as 写法，谓词可直接将 attrs 类型缩小并适用于整个 if block 块里\nfunction isLinkAttrs(tag, attrs) {\n    noop(attrs);\n    return ['link', 'staticLink', 'relativeLink'].includes(tag);\n}\nfunction isScriptAttrs(tag, attrs) {\n    noop(attrs);\n    return ['script', 'staticScript', 'relativeScript'].includes(tag);\n}\nfunction createDomByAssetList(assetList, options) {\n    var appendToBody = options.appendToBody, appendCss = options.appendCss, webDirPath = options.webDirPath, cssAppendTypes = options.cssAppendTypes, excludeCssList = options.excludeCssList;\n    assetList.forEach(function (v) {\n        // 兼容历史元数据，无 append 的话就默认为 true\n        var tag = v.tag, attrs = v.attrs, _a = v.append, append = _a === void 0 ? true : _a, _b = v.innerText, innerText = _b === void 0 ? '' : _b;\n        if (!append) {\n            return;\n        }\n        // 处理 link 标签\n        if (isLinkAttrs(tag, attrs)) {\n            var createLinkOptions = { appendToBody: appendToBody, attrs: attrs, innerText: innerText };\n            var href = attrs.href;\n            // .ico 文件默认不加载（ 除非显式地记录了 append 为 true ）\n            if (href.endsWith('.ico') && v.append !== true) {\n                return;\n            }\n            if (href.endsWith('.css')) {\n                if (appendCss\n                    && cssAppendTypes.includes(getAssetUrlType(webDirPath, href)) // 当前链接类型是合法的可以附加到 html 文档的链接类型\n                    && !excludeCssList.includes(href) // 当前链接没有被设置在排除链接列表里\n                ) {\n                    createLinkElement(createLinkOptions);\n                }\n                return;\n            }\n            createLinkElement(createLinkOptions);\n            return;\n        }\n        // 处理 script 标签\n        if (isScriptAttrs(tag, attrs)) {\n            createScriptElement({ appendToBody: appendToBody, attrs: attrs, innerText: innerText });\n        }\n        // 处理 style 标签\n        if (tag === 'style') {\n            createStyleElement({ appendToBody: appendToBody, attrs: attrs, innerText: innerText });\n        }\n    });\n}\n/**\n * 加载应用首屏的各项资源\n */\nfunction loadAppAssets(app, version, loadOptions) {\n    // 重命名，避免 @typescript-eslint/naming-convention 警告\n    var _a = app.additional_scripts, additionalScripts = _a === void 0 ? [] : _a, _b = app.additional_body_scripts, additionalBodyScripts = _b === void 0 ? [] : _b;\n    var _c = version.src_map, _d = _c.headAssetList, headAssetList = _d === void 0 ? [] : _d, _e = _c.bodyAssetList, bodyAssetList = _e === void 0 ? [] : _e, webDirPath = _c.webDirPath, _f = _c.chunkCssSrcList, chunkCssSrcList = _f === void 0 ? [] : _f;\n    var _g = loadOptions.useAdditionalScript, useAdditionalScript = _g === void 0 ? false : _g, _h = loadOptions.appendCss, appendCss = _h === void 0 ? true : _h, _j = loadOptions.cssAppendTypes, cssAppendTypes = _j === void 0 ? ['build', 'static', 'relative'] : _j, getExcludeCssList = loadOptions.getExcludeCssList;\n    var allExtraCssList = getAllExtraCssList(loadOptions);\n    var allCssList = commonUtil$1.merge2List(allExtraCssList, chunkCssSrcList);\n    var excludeCssList = (getExcludeCssList === null || getExcludeCssList === void 0 ? void 0 : getExcludeCssList(allCssList, { version: version })) || [];\n    var createAdditionalAssets = function (scripts, appendToBody) {\n        if (!scripts)\n            return;\n        // 严格按照顺序创建\n        for (var _i = 0, scripts_1 = scripts; _i < scripts_1.length; _i++) {\n            var scriptUrl = scripts_1[_i];\n            if (scriptUrl.endsWith('.css')) {\n                if (appendCss && !excludeCssList.includes(scriptUrl)) {\n                    createLinkElement({ appendToBody: appendToBody, attrs: { href: scriptUrl } });\n                }\n            }\n            else {\n                createScriptElement({ appendToBody: appendToBody, attrs: { src: scriptUrl } });\n            }\n        }\n    };\n    if (useAdditionalScript) {\n        createAdditionalAssets(additionalScripts, false);\n        createAdditionalAssets(additionalBodyScripts, true);\n    }\n    createAdditionalAssets(allExtraCssList, false);\n    var optionsCommon = { excludeCssList: excludeCssList, webDirPath: webDirPath, appendCss: appendCss, cssAppendTypes: cssAppendTypes };\n    // Object.assign is much faster than spread operator\n    createDomByAssetList(headAssetList, assign(optionsCommon, { appendToBody: false }));\n    createDomByAssetList(bodyAssetList, assign(optionsCommon, { appendToBody: true }));\n}\n\nvar toExport = {\n    SHADOW: true,\n    SET_STYLE_AS_STRING: true,\n    ENABLE_DISK_CACHE: false,\n    ENABLE_SYNC_META: true,\n    STORAGE_TYPE: 'localStorage',\n    ENABLE_APPEND_CSS: true,\n    API_MODE: 'get',\n    EXTRA_DATA_PREFIX: 'HelExtraData',\n};\n\n/**\n * @returns true，匹配成功，false，匹配失败\n */\nfunction isEmitVerMatchInputVer(appName, options) {\n    var _a;\n    var fnMark = '[[ isEmitVerMatchInputVer ]]';\n    var platform = options.platform, emitVer = options.emitVer, inputVer = options.inputVer, projectId = options.projectId;\n    var strictMatchVer = getVal(platform, 'strictMatchVer', [options.strictMatchVer]);\n    var appMeta = getAppMeta(appName, platform);\n    if (strictMatchVer === false) {\n        log(\"\".concat(fnMark, \" set strictMatchVer false for app (\").concat(appName, \"), trust emitVer (\").concat(emitVer, \") is the target version\"));\n        return true;\n    }\n    // 模块版本信息未发射上来的话，当做匹配成功\n    if (!emitVer) {\n        log(\"\".concat(fnMark, \" emitVer should not be null\"));\n        return true;\n    }\n    // 用在线版本或灰度版本比较\n    if (!inputVer && appMeta) {\n        var online_version = appMeta.online_version, build_version = appMeta.build_version;\n        // 判断 projectId 是否传入，传入的话看 proj_ver.map[projectId].o 的值是否存在且是否和 emitVer 相等\n        if (projectId) {\n            var verMap = ((_a = appMeta.proj_ver) === null || _a === void 0 ? void 0 : _a.map) || {};\n            var config = verMap[projectId];\n            if (config) {\n                // 后台是按 p1 项目灰度版本 --> p2 应用灰度版本 --> p3 项目线上版本 优先级依次降低返回的版本\n                // 这里的匹配规则和后台严格对应上\n                return emitVer === config.b || emitVer === build_version || emitVer === config.o;\n            }\n        }\n        return emitVer === online_version || emitVer === build_version;\n    }\n    return emitVer === inputVer;\n}\n\nvar DEFAULT_ONLINE_VER = helConsts$1.DEFAULT_ONLINE_VER;\nvar LOCAL_STR = 'http://localhost';\nvar LOCAL_127 = 'http://127.0.0.1';\nvar inner$2 = {\n    isSrcMatchHost: function (src, host) {\n        // 支持 custom 设定 localhost 或 127 时，能相互匹配\n        if (host.startsWith(LOCAL_STR) || host.startsWith(LOCAL_127)) {\n            return src.startsWith(LOCAL_STR) || src.startsWith(LOCAL_127);\n        }\n        return src.startsWith(host);\n    },\n    parseHtml: function (htmlText) {\n        var isHeadOpen = true;\n        var itemList = [];\n        var isValidTag = function (tag) { return ['script', 'link', 'style'].includes(tag); };\n        parseHtml(htmlText, {\n            onTagOpen: function (tag) {\n                if (isValidTag(tag)) {\n                    itemList.push({ tag: tag, attrs: {}, innerText: '', head: isHeadOpen });\n                }\n            },\n            onTagClose: function (tag, tagData) {\n                if (tag === 'head')\n                    isHeadOpen = false;\n                if (!isValidTag(tag))\n                    return;\n                var lastItem = itemList[itemList.length - 1];\n                if (lastItem) {\n                    var firstChild = tagData.children[0] || '';\n                    if (typeof firstChild === 'string') {\n                        lastItem.innerText = firstChild;\n                    }\n                    lastItem.attrs = tagData.attrs;\n                }\n            },\n        });\n        return itemList;\n    },\n    convertToAssetList: function (list, host) {\n        var headAssetList = [];\n        var bodyAssetList = [];\n        var staticCssSrcList = [];\n        var staticJsSrcList = [];\n        var relativeCssSrcList = [];\n        var relativeJsSrcList = [];\n        list.forEach(function (item) {\n            var head = item.head, attrs = item.attrs, innerText = item.innerText, tag = item.tag;\n            var list = head ? headAssetList : bodyAssetList;\n            var src = attrs.src, href = attrs.href, helEx = attrs[\"data-helex\"], rel = attrs.rel;\n            var helAppend = getDatasetVal(attrs, 'data-helappend', '1');\n            if (tag === 'style') {\n                list.push({ tag: tag, attrs: attrs, innerText: innerText, append: true });\n            }\n            else {\n                var url = src || href || '';\n                var isCss = url.endsWith('.css');\n                var isLink = tag === 'link';\n                if (!url)\n                    return;\n                var append = true;\n                var isBuildUrl = inner$2.isSrcMatchHost(url, host);\n                // icon 资源默认不加载\n                // 非构建产生的资源，如未标记 data-helappend=\"1\" 且未标记data-helex=\"{exName}\"，则不加载\n                if (rel === 'icon' || (!isBuildUrl && helAppend !== '1' && !helEx)) {\n                    append = false;\n                }\n                var tagVar = tag;\n                if (!isBuildUrl) {\n                    if (isRelativePath(url)) {\n                        tagVar = isLink ? 'relativeLink' : 'relativeScript';\n                        isCss ? relativeCssSrcList.push(url) : relativeJsSrcList.push(url);\n                    }\n                    else {\n                        tagVar = isLink ? 'staticLink' : 'staticScript';\n                        isCss ? staticCssSrcList.push(url) : staticJsSrcList.push(url);\n                    }\n                }\n                var itemVar = { tag: tagVar, attrs: attrs, innerText: innerText, append: append };\n                list.push(itemVar);\n            }\n        });\n        return { headAssetList: headAssetList, bodyAssetList: bodyAssetList, staticCssSrcList: staticCssSrcList, staticJsSrcList: staticJsSrcList, relativeCssSrcList: relativeCssSrcList, relativeJsSrcList: relativeJsSrcList };\n    },\n    getChunkList: function (assetList) {\n        var chunkCssSrcList = [];\n        var chunkJsSrcList = [];\n        assetList.forEach(function (asset) {\n            var _a = asset.attrs, href = _a.href, src = _a.src;\n            var url = href || src || '';\n            if (url) {\n                url.endsWith('.css') ? chunkCssSrcList.push(url) : chunkJsSrcList.push(url);\n            }\n        });\n        return { chunkCssSrcList: chunkCssSrcList, chunkJsSrcList: chunkJsSrcList };\n    },\n    extactHelMeta: function (reply) {\n        var code = reply.code, data = reply.data, msg = reply.msg;\n        if (code && data) {\n            // 符合来着管理台的相应数据特征\n            if (code !== '0') {\n                throw new Error(msg || 'server error occurred');\n            }\n            return data;\n        }\n        // 当作是来自 cdn 存储的元数据\n        return reply;\n    },\n    getHelMeta: function (appName, apiUrl, throwError) {\n        return __awaiter(this, void 0, void 0, function () {\n            var msg, reply, helMeta, err_1;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        msg = function (detail) {\n                            if (detail === void 0) { detail = ''; }\n                            return \"fetch \".concat(appName, \" helmeta by url \").concat(apiUrl, \" failed in custom mode! \").concat(detail);\n                        };\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, requestGet(apiUrl)];\n                    case 2:\n                        reply = (_a.sent()).reply;\n                        helMeta = inner$2.extactHelMeta(reply);\n                        if (helMeta && helMeta.app && helMeta.version) {\n                            helMeta.app.__fromCust = true;\n                            return [2 /*return*/, helMeta];\n                        }\n                        if (throwError) {\n                            throw new Error(msg());\n                        }\n                        log('[[ getCustomMeta ]] 404 is a expected behavior for custom mode, user can ignore it');\n                        return [2 /*return*/, null];\n                    case 3:\n                        err_1 = _a.sent();\n                        if (throwError) {\n                            throw new Error(msg(err_1.messgae));\n                        }\n                        commonUtil$1.noop('json parse fail or other error');\n                        return [3 /*break*/, 4];\n                    case 4: return [2 /*return*/];\n                }\n            });\n        });\n    },\n};\nfunction isCustomValid(custom) {\n    if (custom) {\n        var _a = custom.enable, enable = _a === void 0 ? true : _a, host = custom.host;\n        return !!(host && enable);\n    }\n    return false;\n}\nfunction getCustomMeta(appName, custom) {\n    return __awaiter(this, void 0, Promise, function () {\n        var host, appGroupName, _a, skipFetchHelMeta, isApiUrl, parseHtml, t, helMeta, helMetaUrl, helMeta, htmlText, result, err_2, parseFn, nodeList, _b, headAssetList, bodyAssetList, restList, srcList;\n        return __generator(this, function (_c) {\n            switch (_c.label) {\n                case 0:\n                    host = custom.host, appGroupName = custom.appGroupName, _a = custom.skipFetchHelMeta, skipFetchHelMeta = _a === void 0 ? false : _a, isApiUrl = custom.isApiUrl, parseHtml = custom.parseHtml;\n                    t = Date.now();\n                    if (!isApiUrl) return [3 /*break*/, 2];\n                    return [4 /*yield*/, inner$2.getHelMeta(appName, host, true)];\n                case 1:\n                    helMeta = _c.sent();\n                    return [2 /*return*/, helMeta];\n                case 2:\n                    if (!!skipFetchHelMeta) return [3 /*break*/, 4];\n                    helMetaUrl = host.endsWith('hel-meta.json') ? host : \"\".concat(host, \"/hel-meta.json?_t=\").concat(t);\n                    return [4 /*yield*/, inner$2.getHelMeta(appName, helMetaUrl)];\n                case 3:\n                    helMeta = _c.sent();\n                    if (helMeta) {\n                        return [2 /*return*/, helMeta];\n                    }\n                    _c.label = 4;\n                case 4:\n                    htmlText = '';\n                    _c.label = 5;\n                case 5:\n                    _c.trys.push([5, 7, , 8]);\n                    return [4 /*yield*/, requestGet(\"\".concat(host, \"/index.html?_t=\").concat(t), false)];\n                case 6:\n                    result = _c.sent();\n                    htmlText = result.reply || '';\n                    if (![200, 304].includes(result.status)) {\n                        throw new Error(\"status \".concat(result.status));\n                    }\n                    return [3 /*break*/, 8];\n                case 7:\n                    err_2 = _c.sent();\n                    throw new Error(\"\".concat(err_2.message, \" from \").concat(host));\n                case 8:\n                    parseFn = parseHtml || inner$2.parseHtml;\n                    nodeList = parseFn(htmlText);\n                    _b = inner$2.convertToAssetList(nodeList, host), headAssetList = _b.headAssetList, bodyAssetList = _b.bodyAssetList, restList = __rest(_b, [\"headAssetList\", \"bodyAssetList\"]);\n                    srcList = inner$2.getChunkList(headAssetList.concat(bodyAssetList));\n                    return [2 /*return*/, {\n                            app: {\n                                // @ts-ignore，标记来自 cust 配置\n                                __fromCust: true,\n                                name: appName,\n                                app_group_name: appGroupName || appName,\n                                online_version: DEFAULT_ONLINE_VER,\n                                build_version: DEFAULT_ONLINE_VER,\n                            },\n                            version: {\n                                sub_app_name: appName,\n                                sub_app_version: DEFAULT_ONLINE_VER,\n                                src_map: __assign(__assign({ webDirPath: host, headAssetList: headAssetList, bodyAssetList: bodyAssetList }, srcList), restList),\n                            },\n                        }];\n            }\n        });\n    });\n}\n\nvar commonUtil = core$1.commonUtil, helConsts = core$1.helConsts;\nvar KEY_ASSET_CTX = helConsts.KEY_ASSET_CTX;\nvar inner$1 = {\n    recordAssetCtx: function (appInfo, appVersion, options) {\n        var name = appInfo.name, app_group_name = appInfo.app_group_name;\n        var srcMap = appVersion.src_map, ver = appVersion.sub_app_version;\n        var _a = srcMap.chunkCssSrcList, chunkCssSrcList = _a === void 0 ? [] : _a, _b = srcMap.chunkJsSrcList, chunkJsSrcList = _b === void 0 ? [] : _b;\n        var fn = getHookFn(options, 'beforeAppendAssetNode');\n        var assetList = chunkCssSrcList.concat(chunkJsSrcList);\n        var platform = options.platform;\n        // 记录资源映射的 配置上下文数据，方便以下作用\n        // 1 记录 beforeAppendAssetNode 句柄引用，方便 patchAppendChild 逻辑里做追加的资源替换\n        // 2 记录资源不能加载情况，方便 patchAppendChild 逻辑里，不追加资源到 document，用于拦截 webpack 异步加载的资源（目前只对css有效）\n        assetList.forEach(function (url) {\n            var urlData = core$1.getCommonData(KEY_ASSET_CTX, url) || {};\n            if (!urlData.marked) {\n                Object.assign(urlData, {\n                    marked: true,\n                    platform: platform,\n                    groupName: app_group_name,\n                    name: name,\n                    ver: ver,\n                    beforeAppend: fn,\n                });\n                core$1.setCommonData(KEY_ASSET_CTX, url, urlData);\n            }\n        });\n    },\n    tryTriggerOnFetchMetaSuccess: function (appInfo, appVersion, options) {\n        var loadOptions = options.loadOptions, fromFallback = options.fromFallback;\n        var fn = getHookFn(loadOptions, 'onFetchMetaSuccess');\n        fn === null || fn === void 0 ? void 0 : fn({ app: appInfo, version: appVersion, fromFallback: fromFallback });\n    },\n};\nfunction getFallbackHook(options) {\n    var legacyFn = getFn(options.platform, 'onFetchMetaFailed', options.onFetchMetaFailed);\n    var newFn = getHookFn(options, 'onFetchMetaFailed');\n    return newFn || legacyFn;\n}\n/**\n * 如果用户未指定 apiMode，或许将来node 环境则一定是 get\n */\nfunction computeApiMode(platform, specifiedApiMode) {\n    var apiMode = core$1.getPlatformConfig(platform).apiMode;\n    if (specifiedApiMode) {\n        return specifiedApiMode;\n    }\n    return apiMode;\n}\nfunction getPlatformAndApiMode(specifiedPlatform, specifiedApiMode) {\n    var platform = getPlatform(specifiedPlatform);\n    var apiMode = computeApiMode(platform, specifiedApiMode);\n    return { platform: platform, apiMode: apiMode };\n}\nfunction getAppCacheKey(appName) {\n    return \"\".concat(toExport$1.LS_CACHE_APP_PREFIX, \".\").concat(appName);\n}\nfunction getDiskCachedApp(appName, options) {\n    return __awaiter(this, void 0, Promise, function () {\n        var indexedDBStorage, appCache, appCacheStr;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    if (!(options.storageType === 'indexedDB')) return [3 /*break*/, 2];\n                    indexedDBStorage = getIndexedDB();\n                    if (!indexedDBStorage) return [3 /*break*/, 2];\n                    return [4 /*yield*/, indexedDBStorage.getItem(getAppCacheKey(appName))];\n                case 1:\n                    appCache = _a.sent();\n                    return [2 /*return*/, appCache];\n                case 2:\n                    appCacheStr = getLocalStorage().getItem(getAppCacheKey(appName));\n                    return [2 /*return*/, commonUtil.safeParse(appCacheStr || '', null)];\n            }\n        });\n    });\n}\nfunction clearDiskCachedApp$1(appName) {\n    return __awaiter(this, void 0, void 0, function () {\n        var indexedDBStorage;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    indexedDBStorage = getIndexedDB();\n                    if (!indexedDBStorage) return [3 /*break*/, 2];\n                    return [4 /*yield*/, indexedDBStorage.removeItem(getAppCacheKey(appName))];\n                case 1:\n                    _a.sent();\n                    _a.label = 2;\n                case 2:\n                    getLocalStorage().removeItem(getAppCacheKey(appName));\n                    return [2 /*return*/];\n            }\n        });\n    });\n}\nfunction getAppFromRemoteOrLocal(appName, options, fnOptions) {\n    return __awaiter(this, void 0, void 0, function () {\n        var _a, enableDiskCache, _b, enableSyncMeta, _c, versionId, _d, projectId, _e, isFullVersion, custom, strictMatchVer, semverApi, _f, callRemote, _g, platform, apiMode, _h, app, version, memApp, memAppVersion, srcInnerOptions, mayCachedApp, tryGetFromRemote, appInfo, appVersion;\n        var _this = this;\n        return __generator(this, function (_j) {\n            switch (_j.label) {\n                case 0:\n                    _a = options.enableDiskCache, enableDiskCache = _a === void 0 ? toExport.ENABLE_DISK_CACHE : _a, _b = options.enableSyncMeta, enableSyncMeta = _b === void 0 ? toExport.ENABLE_SYNC_META : _b, _c = options.versionId, versionId = _c === void 0 ? '' : _c, _d = options.projectId, projectId = _d === void 0 ? '' : _d, _e = options.isFullVersion, isFullVersion = _e === void 0 ? false : _e, custom = options.custom, strictMatchVer = options.strictMatchVer, semverApi = options.semverApi;\n                    _f = (fnOptions || {}).callRemote, callRemote = _f === void 0 ? true : _f;\n                    _g = getPlatformAndApiMode(options.platform, options.apiMode), platform = _g.platform, apiMode = _g.apiMode;\n                    if (!isCustomValid(custom)) return [3 /*break*/, 2];\n                    return [4 /*yield*/, getCustomMeta(appName, custom)];\n                case 1:\n                    _h = _j.sent(), app = _h.app, version = _h.version;\n                    cacheApp(app, { appVersion: version, platform: platform, toDisk: false, loadOptions: options });\n                    core$1.setAppPlatform(app.app_group_name, platform);\n                    return [2 /*return*/, { appInfo: app, appVersion: version }];\n                case 2:\n                    memApp = core$1.getAppMeta(appName, platform);\n                    memAppVersion = core$1.getVersion(appName, { platform: platform, versionId: versionId });\n                    // 优先从内存获取（非语义化api获取的 memAppVersion 才是有意义的，可进入此逻辑做判断）\n                    // TODO : semverApi 下沉到 isEmitVerMatchInputVer 里面\n                    if (!semverApi\n                        && memApp\n                        && memAppVersion\n                        && isEmitVerMatchInputVer(appName, { platform: platform, projectId: projectId, emitVer: memAppVersion.sub_app_version, inputVer: versionId, strictMatchVer: strictMatchVer })) {\n                        return [2 /*return*/, { appInfo: memApp, appVersion: memAppVersion }];\n                    }\n                    srcInnerOptions = { platform: platform, apiMode: apiMode, versionId: versionId, projectId: projectId, isFullVersion: isFullVersion, loadOptions: options };\n                    mayCachedApp = null;\n                    tryGetFromRemote = function (allowGet) { return __awaiter(_this, void 0, void 0, function () {\n                        var remoteApp;\n                        return __generator(this, function (_a) {\n                            switch (_a.label) {\n                                case 0:\n                                    if (!allowGet) return [3 /*break*/, 2];\n                                    return [4 /*yield*/, getAndCacheApp(appName, srcInnerOptions)];\n                                case 1:\n                                    remoteApp = _a.sent();\n                                    return [2 /*return*/, remoteApp];\n                                case 2: return [2 /*return*/, null];\n                            }\n                        });\n                    }); };\n                    if (!enableDiskCache) return [3 /*break*/, 9];\n                    return [4 /*yield*/, getDiskCachedApp(appName, options)];\n                case 3:\n                    mayCachedApp = _j.sent();\n                    if (!!mayCachedApp) return [3 /*break*/, 5];\n                    return [4 /*yield*/, tryGetFromRemote(callRemote)];\n                case 4:\n                    mayCachedApp = _j.sent();\n                    return [3 /*break*/, 8];\n                case 5:\n                    appInfo = mayCachedApp.appInfo, appVersion = mayCachedApp.appVersion;\n                    if (!(versionId && appVersion.sub_app_version !== versionId)) return [3 /*break*/, 7];\n                    return [4 /*yield*/, tryGetFromRemote(callRemote)];\n                case 6:\n                    mayCachedApp = _j.sent();\n                    return [3 /*break*/, 8];\n                case 7:\n                    // 将硬盘缓存数据写回到内存\n                    cacheApp(appInfo, { appVersion: appVersion, platform: platform, toDisk: false, loadOptions: options });\n                    // 异步缓存一份最新的数据\n                    tryGetFromRemote(enableSyncMeta).catch(function (err) { return commonUtil.noop(err); });\n                    _j.label = 8;\n                case 8: return [3 /*break*/, 11];\n                case 9: return [4 /*yield*/, tryGetFromRemote(callRemote)];\n                case 10:\n                    mayCachedApp = _j.sent();\n                    _j.label = 11;\n                case 11:\n                    // 此处记录【应用组名】对应【平台】，仅为了让模块暴露方在使用 exposeLib 接口或 libReady 接口如未显式的指定平台值，\n                    // 但 preFetch 指定了平台值去拉取模块时，能够自动帮 exposeLib、libReady 推导出模块对应的平台值\n                    // 但是依然强烈建议给 exposeLib 、libReady 显式指定平台值，避免用户通过 preFetchLib 引入了多平台的同名包体时\n                    // 出现推导错误的情况出现\n                    if (mayCachedApp) {\n                        core$1.setAppPlatform(mayCachedApp.appInfo.app_group_name, platform);\n                    }\n                    return [2 /*return*/, mayCachedApp];\n            }\n        });\n    });\n}\nfunction getAppWithFallback(appName, options) {\n    return __awaiter(this, void 0, Promise, function () {\n        var _a, isFirstCall, data, err_1, data;\n        return __generator(this, function (_b) {\n            switch (_b.label) {\n                case 0:\n                    _a = options.isFirstCall, isFirstCall = _a === void 0 ? true : _a;\n                    _b.label = 1;\n                case 1:\n                    _b.trys.push([1, 3, , 5]);\n                    return [4 /*yield*/, getAppFromRemoteOrLocal(appName, options)];\n                case 2:\n                    data = _b.sent();\n                    return [2 /*return*/, { data: data, err: '' }];\n                case 3:\n                    err_1 = _b.sent();\n                    // 第一次调用出错，抛上去，让上层再尝试一次\n                    if (isFirstCall) {\n                        throw err_1;\n                    }\n                    // 有指定 fallbackHook，返回空结果，让上层触发兜底函数\n                    if (getFallbackHook(options)) {\n                        return [2 /*return*/, { data: null, err: err_1.message }];\n                    }\n                    return [4 /*yield*/, getDiskCachedApp(appName, options)];\n                case 4:\n                    data = _b.sent();\n                    if (!data) {\n                        throw err_1;\n                    }\n                    commonUtil.nbalert(\"\\n      \".concat(err_1.message, \", hel-micro will try use cached data to keep your app works well,\\n      please check your network if this behavior is not as you expected!\\n    \"));\n                    return [2 /*return*/, { data: data, err: '' }];\n                case 5: return [2 /*return*/];\n            }\n        });\n    });\n}\nfunction getAppAndVersion(appName, options) {\n    return __awaiter(this, void 0, void 0, function () {\n        var _a, platform, apiMode, fixedOptions, _b, appInfo, appVersion;\n        return __generator(this, function (_c) {\n            switch (_c.label) {\n                case 0:\n                    _a = getPlatformAndApiMode(options.platform, options.apiMode), platform = _a.platform, apiMode = _a.apiMode;\n                    fixedOptions = __assign(__assign({}, options), { platform: platform, apiMode: apiMode });\n                    return [4 /*yield*/, getSubAppAndItsVersion(appName, fixedOptions)];\n                case 1:\n                    _b = _c.sent(), appInfo = _b.app, appVersion = _b.version;\n                    if (!appVersion) {\n                        throw new Error('no version found or builded');\n                    }\n                    return [2 /*return*/, { appInfo: appInfo, appVersion: appVersion }];\n            }\n        });\n    });\n}\nfunction cacheApp(appInfo, options) {\n    // toDisk 默认是 true\n    var appVersion = options.appVersion, platform = options.platform, _a = options.toDisk, toDisk = _a === void 0 ? true : _a, loadOptions = options.loadOptions;\n    if (!appInfo || !appVersion) {\n        return;\n    }\n    var appMeta = appInfo;\n    var appName = appMeta.name;\n    // 写 disk\n    if (toDisk) {\n        var saveToLocalStorage_1 = function () {\n            try {\n                getLocalStorage().setItem(getAppCacheKey(appName), JSON.stringify({ appInfo: appInfo, appVersion: appVersion }));\n            }\n            catch (err) {\n                core$1.log('save localStorage failed');\n            }\n        };\n        if (loadOptions.storageType === 'indexedDB') {\n            var indexedDBStorage = getIndexedDB();\n            if (indexedDBStorage) {\n                indexedDBStorage.setItem(getAppCacheKey(appName), { appInfo: appInfo, appVersion: appVersion }).catch(function (err) {\n                    core$1.log(\"save indexeddb failed, use localStorage instead, err: \".concat(err.message));\n                    saveToLocalStorage_1();\n                });\n            }\n            else {\n                saveToLocalStorage_1();\n            }\n        }\n        else {\n            saveToLocalStorage_1();\n        }\n    }\n    // 写 mem app\n    if (loadOptions.semverApi) {\n        var meta = core$1.getAppMeta(appName, platform);\n        // @ts-ignore, inject __setByLatest\n        if ((meta === null || meta === void 0 ? void 0 : meta.__setByLatest) !== true) {\n            // @ts-ignore, inject __setByLatest，确保未设置版本好的调用写入 appMeta 后，后续其他版本的调用不在写入新的 appMeta\n            appMeta = !loadOptions.versionId ? __assign(__assign({}, appMeta), { __setByLatest: true }) : appMeta;\n            core$1.setAppMeta(appMeta, platform);\n        }\n    }\n    else {\n        core$1.setAppMeta(appInfo, platform);\n    }\n    // 写 mem version\n    core$1.setVersion(appName, appVersion, { platform: platform });\n    // 记录sdk注入的额外样式\n    var cssList = getAllExtraCssList(loadOptions);\n    core$1.setVerExtraCssList(appName, cssList, { platform: platform, versionId: appVersion.sub_app_version });\n}\nfunction getAndCacheApp(appName, options) {\n    return __awaiter(this, void 0, void 0, function () {\n        var platform, loadOptions, ret, appInfo, appVersion;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    platform = options.platform, loadOptions = options.loadOptions;\n                    return [4 /*yield*/, getAppAndVersion(appName, options)];\n                case 1:\n                    ret = _a.sent();\n                    appInfo = ret.appInfo, appVersion = ret.appVersion;\n                    cacheApp(appInfo, { appVersion: appVersion, platform: platform, loadOptions: loadOptions });\n                    return [2 /*return*/, ret];\n            }\n        });\n    });\n}\n/**\n * 加载应用的入口函数，先获取元数据，再加载资源\n */\nfunction loadApp(appName, loadOptions) {\n    if (loadOptions === void 0) { loadOptions = {}; }\n    return __awaiter(this, void 0, Promise, function () {\n        var _a, isFirstCall, _b, controlLoadAssets, platform, _c, versionId, _d, data, err, _e, appInfo_1, appVersion_1, noMeta, fromFallback, fallbackHook, meta, startLoad, err_2, ret;\n        return __generator(this, function (_f) {\n            switch (_f.label) {\n                case 0:\n                    _a = loadOptions.isFirstCall, isFirstCall = _a === void 0 ? true : _a, _b = loadOptions.controlLoadAssets, controlLoadAssets = _b === void 0 ? false : _b, platform = loadOptions.platform, _c = loadOptions.versionId, versionId = _c === void 0 ? '' : _c;\n                    _f.label = 1;\n                case 1:\n                    _f.trys.push([1, 5, , 8]);\n                    return [4 /*yield*/, getAppWithFallback(appName, loadOptions)];\n                case 2:\n                    _d = _f.sent(), data = _d.data, err = _d.err;\n                    _e = data || {}, appInfo_1 = _e.appInfo, appVersion_1 = _e.appVersion;\n                    noMeta = !appInfo_1 || !appVersion_1;\n                    fromFallback = false;\n                    if (!(noMeta && !isFirstCall)) return [3 /*break*/, 4];\n                    fallbackHook = getFallbackHook(loadOptions);\n                    if (!fallbackHook) return [3 /*break*/, 4];\n                    return [4 /*yield*/, Promise.resolve(fallbackHook({ platform: platform, appName: appName, versionId: versionId }))];\n                case 3:\n                    meta = _f.sent();\n                    if (meta) {\n                        appInfo_1 = meta.app;\n                        appVersion_1 = meta.version;\n                        fromFallback = true;\n                        cacheApp(appInfo_1, { appVersion: appVersion_1, platform: getPlatform(platform), toDisk: false, loadOptions: loadOptions });\n                    }\n                    _f.label = 4;\n                case 4:\n                    if (!appInfo_1) {\n                        throw new Error(err || \"app[\".concat(appName, \"] not exist\"));\n                    }\n                    if (!appVersion_1) {\n                        throw new Error(err || \"app[\".concat(appName, \"]'s version[\").concat(versionId, \"] not exist\"));\n                    }\n                    inner$1.tryTriggerOnFetchMetaSuccess(appInfo_1, appVersion_1, { loadOptions: loadOptions, fromFallback: fromFallback });\n                    inner$1.recordAssetCtx(appInfo_1, appVersion_1, loadOptions);\n                    startLoad = function () {\n                        loadAppAssets(appInfo_1, appVersion_1, loadOptions);\n                    };\n                    // !!! 需要人工控制开始加载资源的时机\n                    if (controlLoadAssets) {\n                        return [2 /*return*/, startLoad];\n                    }\n                    startLoad();\n                    return [2 /*return*/, null];\n                case 5:\n                    err_2 = _f.sent();\n                    if (!isFirstCall) return [3 /*break*/, 7];\n                    console.error('loadApp err and try one more time: ', err_2);\n                    return [4 /*yield*/, loadApp(appName, __assign(__assign({}, loadOptions), { isFirstCall: false }))];\n                case 6:\n                    ret = _f.sent();\n                    return [2 /*return*/, ret];\n                case 7: throw new Error(\"loadApp [\".concat(appName, \"] err (\").concat(err_2.message, \"), recommend config onFetchMetaFailed hook\"));\n                case 8: return [2 /*return*/];\n            }\n        });\n    });\n}\n\n/**\n * 获取应用构建版本数据\n */\nfunction getSubAppVersion(versionId, options) {\n    return __awaiter(this, void 0, Promise, function () {\n        var versionData;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0: return [4 /*yield*/, getSubAppVersion$1(versionId, options)];\n                case 1:\n                    versionData = _a.sent();\n                    return [2 /*return*/, versionData];\n            }\n        });\n    });\n}\n/**\n * 获取应用自身描述和构建版本数据\n */\nfunction getSubAppMeta(appName, options) {\n    return __awaiter(this, void 0, Promise, function () {\n        var meta;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0: return [4 /*yield*/, getSubAppAndItsVersion(appName, options || {})];\n                case 1:\n                    meta = _a.sent();\n                    return [2 /*return*/, meta];\n            }\n        });\n    });\n}\n/**\n * 获取某个应用的元数据请求链接\n * @param appName 应用名称\n * @param options\n * @returns\n */\nfunction getMetaDataUrl(appName, options) {\n    var _a = options || {}, versionId = _a.versionId, platform = _a.platform, _b = _a.apiMode, apiMode = _b === void 0 ? API_NORMAL_GET : _b, _c = _a.protocol, protocol = _c === void 0 ? 'http' : _c, projectId = _a.projectId, _d = _a.semverApi, semverApi = _d === void 0 ? true : _d;\n    var url = prepareCustomPlatRequestInfo(appName, { platform: platform, versionId: versionId, apiMode: apiMode, projectId: projectId, semverApi: semverApi }).url;\n    if (protocol === 'http') {\n        url = url.replace('https:', 'http:');\n    }\n    return url;\n}\nfunction clearDiskCachedApp(appNameOrNames) {\n    return __awaiter(this, void 0, void 0, function () {\n        var tasks_1;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    if (!Array.isArray(appNameOrNames)) return [3 /*break*/, 2];\n                    tasks_1 = [];\n                    appNameOrNames.forEach(function (name) { return tasks_1.push(clearDiskCachedApp$1(name)); });\n                    return [4 /*yield*/, Promise.all(tasks_1)];\n                case 1:\n                    _a.sent();\n                    return [3 /*break*/, 4];\n                case 2: return [4 /*yield*/, clearDiskCachedApp$1(appNameOrNames)];\n                case 3:\n                    _a.sent();\n                    _a.label = 4;\n                case 4: return [2 /*return*/];\n            }\n        });\n    });\n}\n\nvar appMeta = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  getSubAppVersion: getSubAppVersion,\n  getSubAppMeta: getSubAppMeta,\n  getMetaDataUrl: getMetaDataUrl,\n  clearDiskCachedApp: clearDiskCachedApp\n});\n\n/**\n * 参数相关服务\n */\nfunction getWebDirPath$1(name, options) {\n    var verData = core$1.getVersion(name, options);\n    return (verData === null || verData === void 0 ? void 0 : verData.src_map.webDirPath) || '';\n}\n\n/**\n * 参数相关服务\n */\n/**\n * 推导当前应用的平台与版本\n * 调用者需自己确保版本数据已获取，即 preFetchApp 或 preFetchLib 已调用结束\n */\nfunction getPlatAndVer(appName, options) {\n    var optionsVar = options || {};\n    var platform = getPlatform(optionsVar.platform);\n    var versionId = optionsVar.versionId || '';\n    if (!versionId) {\n        var versionData = core$1.getVersion(appName, { platform: platform });\n        if (versionData) {\n            // 已存在了正在运行的版本数据\n            versionId = versionData.sub_app_version;\n        }\n        else {\n            var appMeta = core$1.getAppMeta(appName, platform);\n            versionId = (appMeta === null || appMeta === void 0 ? void 0 : appMeta.online_version) || (appMeta === null || appMeta === void 0 ? void 0 : appMeta.build_version) || '';\n        }\n    }\n    return {\n        platform: platform,\n        versionId: versionId,\n    };\n}\nfunction getGroupedStyleList(appName, options) {\n    var map = {\n        static: [],\n        build: [],\n    };\n    var version = core$1.getVersion(appName, options);\n    if (version) {\n        var _a = version.src_map, webDirPath_1 = _a.webDirPath, chunkCssSrcList = _a.chunkCssSrcList;\n        chunkCssSrcList.forEach(function (src) {\n            src.startsWith(webDirPath_1) ? map.build.push(src) : map.static.push(src);\n        });\n    }\n    return map;\n}\nvar getWebDirPath = getWebDirPath$1;\n\nvar appParam = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  getPlatAndVer: getPlatAndVer,\n  getGroupedStyleList: getGroupedStyleList,\n  getWebDirPath: getWebDirPath\n});\n\nvar KEY_CSS_STR = core$1.helConsts.KEY_CSS_STR;\nvar _a = core$1.helLoadStatus, LOADED = _a.LOADED, LOADING = _a.LOADING, NOT_LOAD = _a.NOT_LOAD;\nvar merge2List = core$1.commonUtil.merge2List;\nvar eventBus$2 = core$1.getHelEventBus();\nvar STYLE_STR_FETCHED = core$1.helEvents.STYLE_STR_FETCHED;\nvar inner = {\n    isStyleStatusMatch: function (appName, judeStatus, options) {\n        var _a = getPlatAndVer(appName, options), platform = _a.platform, versionId = _a.versionId;\n        var status = core$1.getVerStyleStrStatus(appName, { platform: platform, versionId: versionId });\n        return status === judeStatus;\n    },\n    /**\n     * 获取应用自身的样式列表，返回如下\n     * buildCssList ：应用构建生成的\n     * initExtraCssList ：preFetch 是设定的，该列表只接收一次设置，后续不再变动\n     * appCssList ：应用构建生成的与能追加的 staticLink、relativeLink 全部样式列表\n     */\n    getSelfCssList: function (appName, options) {\n        var platAndVer = getPlatAndVer(appName, options);\n        var appVersion = core$1.getVersion(appName, platAndVer);\n        // 获取用户 preFetch 时设定的额外样式列表\n        var initExtraCssList = core$1.getVerExtraCssList(appName, platAndVer);\n        // 获取构建阶段生成的样式列表\n        var buildCssList = [];\n        // 应用自身的所有样式列表，包含构建的 staticLink、relativeLink 里可以追加的，preFetch 是设定的 extraCssList\n        var appCssList = [];\n        if (appVersion) {\n            var _a = appVersion.src_map || {}, _b = _a.chunkCssSrcList, chunkCssSrcList = _b === void 0 ? [] : _b, _c = _a.headAssetList, headAssetList = _c === void 0 ? [] : _c, _d = _a.bodyAssetList, bodyAssetList = _d === void 0 ? [] : _d;\n            buildCssList = chunkCssSrcList;\n            var filterCssList = function (assetList) {\n                var resultList = [];\n                assetList.forEach(function (assetItem) {\n                    var _a = assetItem.append, append = _a === void 0 ? true : _a; // 默认 true，兼容旧数据\n                    var href = assetItem.attrs.href || '';\n                    if (href.endsWith('.css') && append) {\n                        resultList.push(href);\n                    }\n                });\n                return resultList;\n            };\n            var htmlCssList = merge2List(filterCssList(headAssetList), filterCssList(bodyAssetList));\n            appCssList = merge2List(htmlCssList, buildCssList);\n        }\n        appCssList = merge2List(appCssList, initExtraCssList);\n        return { buildCssList: buildCssList, initExtraCssList: initExtraCssList, appCssList: appCssList };\n    },\n    fetchStyleStr: function (cssList) {\n        return __awaiter(this, void 0, void 0, function () {\n            var str, i, len, cssUrl, cachedCssStr, result, err_1;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        str = '';\n                        i = 0, len = cssList.length;\n                        _a.label = 1;\n                    case 1:\n                        if (!(i < len)) return [3 /*break*/, 7];\n                        cssUrl = cssList[i];\n                        if (!cssUrl.endsWith('.css')) {\n                            return [3 /*break*/, 6];\n                        }\n                        cachedCssStr = core$1.getCommonData(KEY_CSS_STR, cssUrl);\n                        if (!!cachedCssStr) return [3 /*break*/, 5];\n                        _a.label = 2;\n                    case 2:\n                        _a.trys.push([2, 4, , 5]);\n                        return [4 /*yield*/, requestGet(cssUrl, false)];\n                    case 3:\n                        result = _a.sent();\n                        cachedCssStr = result.reply;\n                        core$1.setCommonData(KEY_CSS_STR, cssUrl, cachedCssStr);\n                        return [3 /*break*/, 5];\n                    case 4:\n                        err_1 = _a.sent();\n                        console.error(err_1);\n                        return [3 /*break*/, 5];\n                    case 5:\n                        str += cachedCssStr;\n                        _a.label = 6;\n                    case 6:\n                        i++;\n                        return [3 /*break*/, 1];\n                    case 7: return [2 /*return*/, str];\n                }\n            });\n        });\n    },\n    waitStyleReady: function (appName, options) {\n        return __awaiter(this, void 0, void 0, function () {\n            var handleStyleFetched;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        handleStyleFetched = null;\n                        return [4 /*yield*/, new Promise(function (resolve) {\n                                handleStyleFetched = function (styleInfo) {\n                                    var emitAppName = styleInfo.appName, emitPlatform = styleInfo.platform, emitVer = styleInfo.versionId;\n                                    var inputVer = options.versionId, platform = options.platform, strictMatchVer = options.strictMatchVer;\n                                    if (emitAppName !== appName\n                                        || emitPlatform !== platform\n                                        || !isEmitVerMatchInputVer(appName, { platform: platform, emitVer: emitVer, inputVer: inputVer, strictMatchVer: strictMatchVer })) {\n                                        return;\n                                    }\n                                    resolve(true);\n                                };\n                                // 先监听，再触发资源加载，确保监听不会有遗漏\n                                eventBus$2.on(STYLE_STR_FETCHED, handleStyleFetched);\n                            })];\n                    case 1:\n                        _a.sent();\n                        if (handleStyleFetched) {\n                            eventBus$2.off(STYLE_STR_FETCHED, handleStyleFetched);\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        });\n    },\n    computeStyleData: function (appName, options) {\n        var platAndVer = getPlatAndVer(appName, options);\n        var _a = inner.getSelfCssList(appName, options), appCssList = _a.appCssList, buildCssList = _a.buildCssList, initExtraCssList = _a.initExtraCssList;\n        var _b = options.extraCssList, extraCssList = _b === void 0 ? [] : _b, getExcludeCssList = options.getExcludeCssList; // extraCssList 此时表示二次透传的\n        var allCssList = merge2List(appCssList, extraCssList);\n        var excludeCssList = (getExcludeCssList === null || getExcludeCssList === void 0 ? void 0 : getExcludeCssList(allCssList, { version: core$1.getVersion(appName, platAndVer) })) || [];\n        // 仅使用应用自身的样式列表\n        var onlyUseAppCssList = !excludeCssList.length && !extraCssList.length;\n        var validCssList = allCssList;\n        if (excludeCssList.length) {\n            // 按照 excludeCssList 配置过滤 allCssList ，才是最终得到的合法样式列表\n            validCssList = allCssList.filter(function (item) { return !excludeCssList.includes(item); });\n        }\n        return { validCssList: validCssList, onlyUseAppCssList: onlyUseAppCssList, buildCssList: buildCssList, initExtraCssList: initExtraCssList, appCssList: appCssList };\n    },\n    fetchStyleData: function (appName, options) {\n        return __awaiter(this, void 0, void 0, function () {\n            var platAndVer, _a, extraStyleStr, cssListToStr, _b, extraCssList, _c, validCssList, onlyUseAppCssList, buildCssList, initExtraCssList, appCssList, result, status, appStyleStr, styleStr;\n            return __generator(this, function (_d) {\n                switch (_d.label) {\n                    case 0:\n                        platAndVer = getPlatAndVer(appName, options);\n                        _a = options.extraStyleStr, extraStyleStr = _a === void 0 ? '' : _a, cssListToStr = options.cssListToStr, _b = options.extraCssList, extraCssList = _b === void 0 ? [] : _b;\n                        _c = inner.computeStyleData(appName, options), validCssList = _c.validCssList, onlyUseAppCssList = _c.onlyUseAppCssList, buildCssList = _c.buildCssList, initExtraCssList = _c.initExtraCssList, appCssList = _c.appCssList;\n                        result = {\n                            validCssList: validCssList,\n                            buildCssList: buildCssList,\n                            initExtraCssList: initExtraCssList,\n                            appCssList: appCssList,\n                            extraCssList: extraCssList,\n                            extraStyleStr: extraStyleStr,\n                            renderStyleStr: '',\n                        };\n                        if (!cssListToStr) {\n                            return [2 /*return*/, result];\n                        }\n                        if (!onlyUseAppCssList) return [3 /*break*/, 6];\n                        status = core$1.getVerStyleStrStatus(appName, platAndVer);\n                        appStyleStr = '';\n                        if (!(status === LOADING)) return [3 /*break*/, 2];\n                        return [4 /*yield*/, inner.waitStyleReady(appName, __assign(__assign({}, platAndVer), { strictMatchVer: options.strictMatchVer }))];\n                    case 1:\n                        _d.sent();\n                        appStyleStr = core$1.getAppStyleStr(appName, platAndVer) || '';\n                        return [3 /*break*/, 5];\n                    case 2:\n                        if (!(status === NOT_LOAD)) return [3 /*break*/, 4];\n                        core$1.setVerStyleStrStatus(appName, LOADING, platAndVer);\n                        return [4 /*yield*/, inner.fetchStyleStr(appCssList)];\n                    case 3:\n                        appStyleStr = _d.sent();\n                        core$1.setAppStyleStr(appName, appStyleStr, platAndVer);\n                        core$1.setVerStyleStrStatus(appName, LOADED, platAndVer);\n                        eventBus$2.emit(STYLE_STR_FETCHED, __assign({ appName: appName }, platAndVer)); // 预设的样式列表转换为字符串完毕\n                        return [3 /*break*/, 5];\n                    case 4:\n                        appStyleStr = core$1.getAppStyleStr(appName, platAndVer) || '';\n                        _d.label = 5;\n                    case 5:\n                        result.renderStyleStr = \"\".concat(appStyleStr).concat(extraStyleStr);\n                        return [3 /*break*/, 8];\n                    case 6: return [4 /*yield*/, inner.fetchStyleStr(validCssList)];\n                    case 7:\n                        styleStr = _d.sent();\n                        result.renderStyleStr = \"\".concat(styleStr).concat(extraStyleStr);\n                        _d.label = 8;\n                    case 8: return [2 /*return*/, result];\n                }\n            });\n        });\n    },\n};\n/**\n * 返回渲染用的样式字符串传、及相关样式列表计算结果，具体描述见 IStyleDataResult\n * 调用者需自己确保版本数据已获取，即 preFetchApp 或 preFetchLib 已调用\n */\nfunction fetchAppStyleData(appName, options) {\n    return __awaiter(this, void 0, Promise, function () {\n        var result;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0: return [4 /*yield*/, inner.fetchStyleData(appName, options || {})];\n                case 1:\n                    result = _a.sent();\n                    return [2 /*return*/, result];\n            }\n        });\n    });\n}\n/**\n * 应用构建生成的 + 能追加的 staticLink、relativeLink + preFetch 时设置的 extraCssList 的全部样式列表之合集对应的字符串\n * 调用者需自己确保 appCssList 样式字符串已拉取，即  preFetchApp 或 preFetchLib 调用之后， fetchAppStyleData 已调用\n */\nfunction getAppStyleStr(appName, options) {\n    var platAndVer = getPlatAndVer(appName, options);\n    var styleStr = core$1.getAppStyleStr(appName, platAndVer);\n    return styleStr;\n}\n/**\n * 获取应用自身的样式列表，返回如下\n * buildCssList ：应用构建生成的样式列表\n * initExtraCssList ：preFetch 是设定的样式列表，该列表只接收一次设置，后续不再变动\n * appCssList ：应用构建生成的 + 能追加的 staticLink、relativeLink + preFetch 时设置的 extraCssList 的全部样式列表之合集\n */\nfunction getAppCssList(appName, options) {\n    var result = inner.getSelfCssList(appName, options || {});\n    return result;\n}\n/**\n * 通过样式列表获取样式字符串\n * @param cssUrlList\n * @returns\n */\nfunction fetchStyleByUrlList(cssUrlList) {\n    return __awaiter(this, void 0, void 0, function () {\n        var styleStr;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0: return [4 /*yield*/, inner.fetchStyleStr(cssUrlList)];\n                case 1:\n                    styleStr = _a.sent();\n                    return [2 /*return*/, styleStr];\n            }\n        });\n    });\n}\n/**\n * 判断样式是否已经异步拉取过了\n */\nfunction isStyleFetched(appName, options) {\n    return inner.isStyleStatusMatch(appName, LOADED, options || {});\n}\n/**\n * 禁用所有 style tag 样式\n */\nfunction disableStyleTags(groupName) {\n    var g = core$1.getGlobalThis();\n    if (g.document) {\n        var styleTags = g.document.querySelectorAll(\"style[data-gname=\\\"\".concat(groupName, \"\\\"]\"));\n        styleTags.forEach(core$1.commonUtil.disableNode);\n    }\n}\nfunction getStyleTagText(groupName) {\n    var styleTagText = core$1.commonDataUtil.getStyleTagText(groupName);\n    return styleTagText;\n}\n/**\n * 获取因主动设置了 ignoreCssPrefix 规则而忽略掉的样式列表\n */\nfunction getIgnoredCssUrlList(name, options) {\n    var cssPrefix = getSuitableCssPrefix(name, options);\n    var cssList = core$1.commonDataUtil.getIgnoreCssPrefixCssUrlList(cssPrefix) || [];\n    return cssList;\n}\n/**\n * 获取合适的 css 前缀\n */\nfunction getSuitableCssPrefix(name, options) {\n    var custom = ((options || {}).custom || {});\n    var cssPrefix = '';\n    var host = custom.host, _a = custom.enable, enable = _a === void 0 ? true : _a;\n    if (host && enable) {\n        if (host.endsWith('.json') || host.endsWith('.html')) {\n            var arr = host.split('/');\n            var len = arr.length;\n            arr.splice(len - 1, len); // 去掉最后一位元素\n            cssPrefix = arr.join('/');\n        }\n        else {\n            cssPrefix = host;\n        }\n    }\n    else {\n        cssPrefix = getWebDirPath$1(name, options);\n    }\n    return cssPrefix;\n}\n\nvar appStyle = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  fetchAppStyleData: fetchAppStyleData,\n  getAppStyleStr: getAppStyleStr,\n  getAppCssList: getAppCssList,\n  fetchStyleByUrlList: fetchStyleByUrlList,\n  isStyleFetched: isStyleFetched,\n  disableStyleTags: disableStyleTags,\n  getStyleTagText: getStyleTagText,\n  getIgnoredCssUrlList: getIgnoredCssUrlList,\n  getSuitableCssPrefix: getSuitableCssPrefix\n});\n\nfunction tryFixAssociateData(appName, appGroupName, fixOptions) {\n    var platform = fixOptions.platform;\n    var oriMeta = getAppMeta(appGroupName, platform);\n    if (oriMeta) {\n        return;\n    }\n    // 因 appName 对应的 appMeta、version、extraCssList 数据由 micro 写入\n    // trust 模式下是没有这些数据的，需补上 appGroupName 相关数据\n    var custMeta = getAppMeta(appName, platform);\n    var custVer = getVersion(appName, fixOptions);\n    if (custMeta && custVer) {\n        setAppMeta(__assign(__assign({}, custMeta), { name: appGroupName, __addedByTrust: true }), platform);\n        setVersion(appGroupName, __assign(__assign({}, custVer), { sub_app_name: appGroupName, __addedByTrust: true }), { platform: platform });\n        var cssList = getVerExtraCssList(appName, fixOptions);\n        setVerExtraCssList(appGroupName, cssList, fixOptions);\n    }\n}\n/**\n * @returns {boolean} - shouldNext\n */\nfunction fixLibAssociateData(appName, appGroupName, fixOptions) {\n    var platform = fixOptions.platform, emitPlatform = fixOptions.emitPlatform, versionId = fixOptions.versionId, emitVer = fixOptions.emitVer;\n    var lib = getVerLib(appName, fixOptions);\n    if (!lib) {\n        tryFixAssociateData(appName, appGroupName, fixOptions);\n        var originalLib = getVerLib(appGroupName, { platform: platform, versionId: versionId }); // appGroupName 对应 lib 由 core 写入，此处可获取到\n        if (!originalLib && emitPlatform) {\n            // 相信弹射的版本数据就是目标版本数据\n            originalLib = getVerLib(appGroupName, { platform: emitPlatform, versionId: emitVer, strictMatchVer: false });\n        }\n        if (!originalLib) {\n            throw new Error(\"seems plat \".concat(emitPlatform, \" emit null lib for \").concat(appGroupName));\n        }\n        libReady(appGroupName, originalLib, { platform: platform, appName: appName, versionId: versionId }); // 强制转移给当前平台\n        return false; // 不走 next()，等待 libReady 内部触发新的 judgeAppReady 流程\n    }\n    return true; // lib 匹配成功，执行 next()，返回给上层调用\n}\n/**\n * @returns {boolean} - shouldNext\n */\nfunction fixAppAssociateData(appName, appGroupName, fixOptions) {\n    var platform = fixOptions.platform, emitPlatform = fixOptions.emitPlatform, versionId = fixOptions.versionId, emitVer = fixOptions.emitVer;\n    var emittedApp = getVerApp(appName, fixOptions);\n    if (!emittedApp) {\n        tryFixAssociateData(appName, appGroupName, fixOptions);\n        var oriEmittedApp = getVerApp(appGroupName, { platform: platform, versionId: versionId });\n        if (!oriEmittedApp && emitPlatform) {\n            oriEmittedApp = getVerApp(appGroupName, { platform: emitPlatform, versionId: emitVer, strictMatchVer: false });\n        }\n        if (!oriEmittedApp) {\n            throw new Error(\"seems plat \".concat(emitPlatform, \" emit null app for \").concat(appGroupName));\n        }\n        emitApp$1(__assign(__assign({}, oriEmittedApp), { platform: platform, appGroupName: appGroupName, appName: appName, versionId: versionId })); // 强制转移给当前平台\n        return false; // 不走 next()，等待 emitApp 内部触发新的 judgeAppReady 流程\n    }\n    return true; // app 匹配成功，执行 next()，返回给上层调用\n}\nfunction getLibOrApp(appName, innerOptions) {\n    var _a = innerOptions.versionId, versionId = _a === void 0 ? '' : _a, isLib = innerOptions.isLib;\n    var platform = getPlatform(innerOptions.platform);\n    var strictMatchVer = getVal(platform, 'strictMatchVer', [innerOptions.strictMatchVer]);\n    var newGetOptions = __assign(__assign({}, innerOptions), { strictMatchVer: strictMatchVer });\n    var targetName = appName;\n    var custom = innerOptions.custom;\n    if (isCustomValid(custom)) {\n        // 处于调试模式时，应用名可置换为用户人工设定的组名，以便让一个组名对应多个应用名的模式下，本地调试依然生效\n        targetName = custom.appGroupName || appName;\n    }\n    var appMeta = getAppMeta(targetName, platform);\n    // 语义化版本服务采用cdn架构存储元数据，它返回的 appMeta 里记录的 online_version 不可靠，这里要结合 __setByLatest 一起判断后才决定是否采用 lib\n    if (innerOptions.semverApi && !versionId && appMeta && appMeta.__setByLatest !== true) {\n        return null;\n    }\n    if (isLib) {\n        var lib = getVerLib(targetName, newGetOptions);\n        var libWrap = {\n            appName: targetName,\n            appGroupName: (appMeta === null || appMeta === void 0 ? void 0 : appMeta.app_group_name) || '',\n            platform: platform,\n            appProperties: lib,\n            isLib: true,\n            versionId: versionId,\n            Comp: null,\n            lifecycle: undefined,\n        };\n        return lib ? libWrap : null;\n    }\n    var emitApp = getVerApp(targetName, newGetOptions);\n    return emitApp || null;\n}\nfunction judgeAppReady(appInfo, options, preFetchOptions) {\n    var fnMark = '[[ judgeAppReady ]]';\n    log(\"\".concat(fnMark, \" receive emitApp(appInfo):\"), appInfo);\n    var _a = options.versionId, inputVer = _a === void 0 ? '' : _a, projectId = options.projectId, appName = options.appName, platform = options.platform, next = options.next, error = options.error, isLib = options.isLib, strictMatchVer = options.strictMatchVer;\n    var inputPlatform = getPlatform(platform);\n    var emitAppName = appInfo.appName, appGroupName = appInfo.appGroupName, _b = appInfo.platform, emitPlatform = _b === void 0 ? inputPlatform : _b, emitVer = appInfo.versionId;\n    var appPathDesc = \"\".concat(platform, \"/\").concat(appName, \"/\").concat(inputVer);\n    var appMeta = getAppMeta(appName, platform);\n    var custom = preFetchOptions.custom, trust = preFetchOptions.trust;\n    var fixData = function (fixOptions) {\n        try {\n            var shouldNext = isLib\n                ? fixLibAssociateData(appName, appGroupName, fixOptions)\n                : fixAppAssociateData(appName, appGroupName, fixOptions);\n            return shouldNext;\n        }\n        catch (err) {\n            error(err);\n            return false;\n        }\n    };\n    if (custom) {\n        var _c = custom.enable, enable = _c === void 0 ? true : _c, host = custom.host, customAppGroupName_1 = custom.appGroupName, _d = custom.trust, trust_1 = _d === void 0 ? false : _d;\n        // 额外判断 appGroupName 是否存在，防止 appGroupName 是 undefined\n        var isGroupNameValid = function () { return appGroupName && (appGroupName === appName || appGroupName === customAppGroupName_1); };\n        if (enable && host) {\n            // 非 trust 模式下，组名有效才识别为当前调用所需模块\n            if (!trust_1) {\n                isGroupNameValid() && next();\n                return;\n            }\n            // trust 模式会强行复制远程模块为当前调用所需要模块，同时会为远程补齐缺失数据，开发者需要知道并承担其危险后果！\n            var shouldNext = fixData({ versionId: inputVer, platform: inputPlatform, emitPlatform: emitPlatform, emitVer: emitVer });\n            shouldNext && next();\n            return;\n        }\n    }\n    // 非严格版本匹配模式，只需要应用组名和平台值匹配即可，满足一些用户copy了资源到自己的项目目录下也想要正常加载的场景\n    if (strictMatchVer === false && appGroupName && (appMeta === null || appMeta === void 0 ? void 0 : appMeta.app_group_name) === appGroupName && inputPlatform === emitPlatform) {\n        log(\"\".concat(fnMark, \" treat emitApp as wanted when strictMatchVer is false (appInfo):\"), appInfo);\n        return next();\n    }\n    var logStillWait = function () { return log(\"\".concat(fnMark, \" still wait \").concat(appPathDesc, \" emitted (appInfo,toMatch):\"), appInfo, toMatch); };\n    // 啥也不做，等待平台值匹配、应用名匹配的那个事件发射上来\n    var toMatch = { platform: platform, emitVer: emitVer, inputVer: inputVer, projectId: projectId, strictMatchVer: strictMatchVer };\n    if (appName !== emitAppName || !isEmitVerMatchInputVer(appName, toMatch)) {\n        return logStillWait();\n    }\n    var trustAppNames = getVal(inputPlatform, 'trustAppNames', [null, []], { emptyArrIsNull: false });\n    // sdk 初始化了一些信任的应用，或者模块使用方主动设置了信任模式，则开始走模块转移流程\n    if (inputPlatform !== emitPlatform && (trust || trustAppNames.includes(appName))) {\n        var shouldNext = fixData({ versionId: inputVer, platform: inputPlatform, emitPlatform: emitPlatform, emitVer: emitVer });\n        if (!shouldNext) {\n            log(\"\".concat(fnMark, \" transfer \").concat(emitPlatform, \" app [\").concat(appName, \"] to \").concat(inputPlatform, \" plat due to being in trustAppNames\"));\n            return logStillWait();\n        }\n    }\n    next();\n}\n\nvar logic = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  getLibOrApp: getLibOrApp,\n  judgeAppReady: judgeAppReady\n});\n\n/**\n * 3.3.2+，接口不再自动设置默认平台，非hel平台的模块，用户在获取或暴露模块时，\n * 需在 preFetchLib preFetchApp libReady exposeLib 接口里显式的传递平台值\n * @param initOptions\n */\nfunction init$1(initOptions) {\n    var platform = initOptions.platform, restOptions = __rest(initOptions, [\"platform\"]);\n    core$1.initPlatformConfig(restOptions, platform);\n}\n\n/**\n * 此方法已不鼓励使用，请尽快替换为 hel-iso 包体里的 isSubApp\n * 因为当 hel-micro/hel-lib-proxy 提升到 webpack external 里时，此方法将返回错误结果\n * 此处保留是为了让老用户升级到最新版本时，如未使用 hel-micro/hel-lib-proxy external 模式依然能够编译通过并正常运行\n * @deprecated\n */\nfunction isSubApp$1() {\n    return core$1.isSubApp();\n}\n\nfunction injectDefault(externalItem) {\n    if (externalItem && !externalItem.default) {\n        try {\n            // eslint-disable-next-line\n            externalItem.default = externalItem;\n            // prettier-ignore\n        }\n        catch (err) { }\n    }\n    return externalItem;\n}\nfunction bindExternals$1(externalsObj) {\n    var globalThis = getGlobalThis();\n    Object.keys(externalsObj).forEach(function (key) {\n        var mod = externalsObj[key];\n        if (mod) {\n            // @ts-ignore\n            globalThis[key] = mod;\n        }\n    });\n}\n/**\n * 存在以下几种情况时，可调用此接口让子模块顺利复用宿主 react 运行时（注：不存在以下情况调用此接口）\n * -------------------------------------------------\n * 1 宿主是 vite 开发环境，直接读取cdn react会照成 invalid hook call问题，见：https://github.com/vitejs/vite/issues/1584\n * 2 宿主没有配置 externals 外链 cdn react（ 例如在线IDE ）\n * 3 宿主配置的 externals 和子模块没有对齐\n * -------------------------------------------------\n * 不存在上诉情况调用此接口也没事，意味着可以总是调用此接口\n * @param reactRuntimeObj\n */\nfunction bindReactRuntime$1(reactRuntimeObj) {\n    var reactMod = injectDefault(reactRuntimeObj.React);\n    var reactDomMod = injectDefault(reactRuntimeObj.ReactDOM);\n    var reactIsMod = reactRuntimeObj.ReactIs || null;\n    var reactReconcilerMod = reactRuntimeObj.ReactReconciler || null;\n    var externalObj = {\n        // 让一些采用了旧映射模式的包也能够正常加载\n        LEAH_React: reactMod,\n        LEAH_ReactDOM: reactDomMod,\n        LEAH_ReactIs: reactIsMod,\n        LEAH_ReactReconciler: reactReconcilerMod,\n        // 对齐社区的挂载 key 名称\n        React: reactMod,\n        ReactDOM: reactDomMod,\n        ReactIs: reactIsMod,\n        ReactReconciler: reactReconcilerMod,\n    };\n    bindExternals$1(externalObj);\n}\n/**\n * 宿主调用此接口让子模块可复用宿主的 vue 运行时，详细意义同 bindReactRuntime 描述\n * @param vueRuntimeObj\n */\nfunction bindVueRuntime$1(vueRuntimeObj) {\n    var vueMod = injectDefault(vueRuntimeObj.Vue);\n    var externalObj = {\n        // 让一些采用了旧映射模式的包也能够正常加载\n        LEAH_Vue: vueMod,\n        // 对齐社区的挂载 key 名称\n        Vue: vueMod,\n    };\n    bindExternals$1(externalObj);\n}\n\nfunction getExtraDataPrefix(appName) {\n    return \"\".concat(toExport.EXTRA_DATA_PREFIX, \".\").concat(appName);\n}\nfunction getExtraData$1(appName, shouldParse) {\n    var _a, _b;\n    var shouldParseVar = shouldParse !== null && shouldParse !== void 0 ? shouldParse : false;\n    var str = (_b = (_a = getGlobalThis().localStorage) === null || _a === void 0 ? void 0 : _a.getItem(getExtraDataPrefix(appName))) !== null && _b !== void 0 ? _b : null;\n    if (str) {\n        if (shouldParseVar) {\n            return JSON.parse(str);\n        }\n        return str;\n    }\n    return null;\n}\nfunction setExtraData$1(appName, data, shouldStringify) {\n    var _a;\n    var shouldStringifyVar = shouldStringify !== null && shouldStringify !== void 0 ? shouldStringify : false;\n    var mayStr = shouldStringifyVar ? JSON.stringify(data) : data;\n    (_a = getGlobalThis().localStorage) === null || _a === void 0 ? void 0 : _a.setItem(getExtraDataPrefix(appName), mayStr);\n}\n\nfunction getBodyContainer(idOrTriggerNode) {\n    var _a;\n    if (typeof idOrTriggerNode === 'string') {\n        return (_a = getGlobalThis()) === null || _a === void 0 ? void 0 : _a.document.getElementById(idOrTriggerNode);\n    }\n    return idOrTriggerNode;\n}\nfunction getFakeHelContext$1(name, options) {\n    return {\n        name: name,\n        platform: (options === null || options === void 0 ? void 0 : options.platform) || getAppPlatform(name),\n        versionId: (options === null || options === void 0 ? void 0 : options.versionId) || '',\n        getShadowAppRoot: getBodyContainer,\n        getShadowBodyRoot: getBodyContainer,\n    };\n}\n\nvar getObjsVal = commonUtil$1.getObjsVal;\nvar ENABLE_DISK_CACHE = toExport.ENABLE_DISK_CACHE, ENABLE_SYNC_META = toExport.ENABLE_SYNC_META, STORAGE_TYPE = toExport.STORAGE_TYPE;\nfunction makePreFetchOptions(isLib, options) {\n    var optionsVar = typeof options === 'string' ? { versionId: options } : __assign({}, (options || {}));\n    optionsVar.platform = getPlatform(optionsVar.platform);\n    optionsVar.isLib = isLib;\n    return optionsVar;\n}\nfunction markShadowDataBeforeLoad(appName, groupName, preFetchOptions) {\n    if (preFetchOptions.shadow) {\n        // 辅助后续流程标记 css link disable=true, style tag disable=true\n        if (!groupName)\n            return;\n        var cssPrefix = getSuitableCssPrefix(appName, preFetchOptions);\n        commonDataUtil.setIgnoreCssPrefix(cssPrefix);\n        commonDataUtil.setIgnoreStyleTagKey(appName);\n        commonDataUtil.setIgnoreStyleTagKey(groupName);\n        commonDataUtil.setIgnoreCssPrefixKey(cssPrefix, groupName);\n    }\n}\nfunction waitAppEmit(appName, innerOptions, loadAssetsStarter) {\n    return __awaiter(this, void 0, void 0, function () {\n        var eventBus, platform, _a, isLib, versionId, projectId, strictMatchVer, eventName, handleAppLoaded, emitAppOrLib;\n        return __generator(this, function (_b) {\n            switch (_b.label) {\n                case 0:\n                    eventBus = getHelEventBus();\n                    platform = innerOptions.platform, _a = innerOptions.isLib, isLib = _a === void 0 ? false : _a, versionId = innerOptions.versionId, projectId = innerOptions.projectId, strictMatchVer = innerOptions.strictMatchVer;\n                    eventName = isLib ? helEvents.SUB_LIB_LOADED : helEvents.SUB_APP_LOADED;\n                    handleAppLoaded = null;\n                    return [4 /*yield*/, new Promise(function (resolve, reject) {\n                            handleAppLoaded = function (appInfo) {\n                                judgeAppReady(appInfo, { appName: appName, platform: platform, versionId: versionId, projectId: projectId, isLib: isLib, next: resolve, error: reject, strictMatchVer: strictMatchVer }, innerOptions);\n                            };\n                            // 先监听，再触发资源加载，确保监听不会有遗漏\n                            eventBus.on(eventName, handleAppLoaded);\n                            if (loadAssetsStarter) {\n                                var appMeta = getAppMeta(appName, platform);\n                                appMeta && markShadowDataBeforeLoad(appName, appMeta.app_group_name, innerOptions);\n                                loadAssetsStarter();\n                            }\n                        })];\n                case 1:\n                    _b.sent();\n                    if (handleAppLoaded) {\n                        eventBus.off(eventName, handleAppLoaded);\n                    }\n                    emitAppOrLib = getLibOrApp(appName, innerOptions);\n                    return [2 /*return*/, emitAppOrLib];\n            }\n        });\n    });\n}\n/**\n * 预抓取一些应用 js 脚本并解析执行，返回应用暴露的模块或组件\n * @param appName\n * @param preFetchOptions\n * @returns\n */\nfunction innerPreFetch(appName, preFetchOptions) {\n    return __awaiter(this, void 0, void 0, function () {\n        var emitApp, versionId, platform, isLib, strictMatchVer, semverApi, fixedInnerOptions, fnName, loadAssetsStarter, currentLoadStatus, err_1;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    emitApp = null;\n                    versionId = preFetchOptions.versionId, platform = preFetchOptions.platform, isLib = preFetchOptions.isLib, strictMatchVer = preFetchOptions.strictMatchVer, semverApi = preFetchOptions.semverApi;\n                    fixedInnerOptions = __assign({}, preFetchOptions);\n                    fnName = isLib ? 'preFetchLib' : 'preFetchApp';\n                    _a.label = 1;\n                case 1:\n                    _a.trys.push([1, 7, , 8]);\n                    // 用户未传的话走平台默认值 true\n                    fixedInnerOptions.strictMatchVer = getVal(platform, 'strictMatchVer', [strictMatchVer]);\n                    // 默认为 indexedDB，不支持 indexedDB 的环境会降级为 localStorage\n                    fixedInnerOptions.storageType = preFetchOptions.storageType || 'indexedDB';\n                    fixedInnerOptions.semverApi = getVal(platform, 'semverApi', [semverApi]);\n                    emitApp = getLibOrApp(appName, fixedInnerOptions);\n                    if (emitApp) {\n                        // 支持用户拉取同一个模块的多个版本，但是实际工程里不鼓励这么做\n                        if (!versionId || (versionId && emitApp.versionId === versionId)) {\n                            log(\"[[ \".concat(fnName, \" ]] return cached app:\"), appName, fixedInnerOptions);\n                            return [2 /*return*/, { emitApp: emitApp, msg: '' }];\n                        }\n                    }\n                    loadAssetsStarter = null;\n                    currentLoadStatus = getVerLoadStatus(appName, fixedInnerOptions);\n                    if (!(currentLoadStatus === helLoadStatus.LOADED)) return [3 /*break*/, 3];\n                    return [4 /*yield*/, waitAppEmit(appName, fixedInnerOptions)];\n                case 2:\n                    emitApp = _a.sent();\n                    log(\"[[ \".concat(fnName, \" ]] return emit app:\"), appName, fixedInnerOptions, emitApp);\n                    return [2 /*return*/, { emitApp: emitApp, msg: '' }];\n                case 3:\n                    if (!(currentLoadStatus !== helLoadStatus.LOADING)) return [3 /*break*/, 5];\n                    setVerLoadStatus(appName, helLoadStatus.LOADING, fixedInnerOptions);\n                    return [4 /*yield*/, loadApp(appName, __assign(__assign({}, fixedInnerOptions), { controlLoadAssets: true }))];\n                case 4:\n                    loadAssetsStarter = _a.sent();\n                    _a.label = 5;\n                case 5: return [4 /*yield*/, waitAppEmit(appName, preFetchOptions, loadAssetsStarter)];\n                case 6:\n                    // 正在加载中，等待模块获取\n                    emitApp = _a.sent();\n                    log(\"[[ \".concat(fnName, \" ]] return fetch&emit app:\"), appName, fixedInnerOptions, emitApp);\n                    return [2 /*return*/, { emitApp: emitApp, msg: '' }];\n                case 7:\n                    err_1 = _a.sent();\n                    console.error(err_1);\n                    // 标记未加载，下次再进入可以继续重试\n                    setVerLoadStatus(appName, helLoadStatus.NOT_LOAD, fixedInnerOptions);\n                    return [2 /*return*/, { emitApp: emitApp, msg: err_1.message }];\n                case 8: return [2 /*return*/];\n            }\n        });\n    });\n}\n/**\n * 等待 helEvents.SUB_LIB_LOADED 信号发射的模块对象\n * 由 hel-lib-proxy 的 libReady 函数发射上来\n * 这里采取相信用户传递的是正确的模块名原则，故返回类型不写为 Promise<T | null>，\n * 如用户需要有空值返回断言处理，可以写为\n * ```js\n *  const lib = await preFetchLib<Lib | null>('remote-lib-tpl');\n * ```\n */\nfunction preFetchLib$1(appName, options) {\n    return __awaiter(this, void 0, Promise, function () {\n        var targetOpts, _a, emitApp, msg, appProperties, fallbackLib, details;\n        return __generator(this, function (_b) {\n            switch (_b.label) {\n                case 0:\n                    targetOpts = makePreFetchOptions(true, options);\n                    return [4 /*yield*/, innerPreFetch(appName, targetOpts)];\n                case 1:\n                    _a = _b.sent(), emitApp = _a.emitApp, msg = _a.msg;\n                    appProperties = emitApp === null || emitApp === void 0 ? void 0 : emitApp.appProperties;\n                    if (!appProperties && targetOpts.onLibNull) {\n                        fallbackLib = targetOpts.onLibNull(appName, { versionId: targetOpts.versionId });\n                        if (fallbackLib) {\n                            appProperties = fallbackLib;\n                        }\n                    }\n                    if (!appProperties) {\n                        details = msg ? \" details : \".concat(msg) : '';\n                        throw new Error(\"preFetchLib \".concat(appName, \" fail from \").concat(targetOpts.platform, \", it may be an invalid module!\").concat(details));\n                    }\n                    return [2 /*return*/, appProperties];\n            }\n        });\n    });\n}\n/**\n * 等待 helEvents.SUB_APP_LOADED 信号发射的应用根组件\n * 由中间层ui适配库自己实现，如 hel-micro-react 的 renderApp\n */\nfunction preFetchApp$1(appName, options) {\n    return __awaiter(this, void 0, void 0, function () {\n        var targetOpts, appInfo;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    targetOpts = makePreFetchOptions(false, options);\n                    return [4 /*yield*/, innerPreFetch(appName, targetOpts)];\n                case 1:\n                    appInfo = _a.sent();\n                    return [2 /*return*/, (appInfo === null || appInfo === void 0 ? void 0 : appInfo.emitApp) || null];\n            }\n        });\n    });\n}\n/**\n * 批量预加载模块，特别注意一下两点：\n * 1 因服务器端控制，一次性最多只能获取 8 个\n * 2 该接口仅支持 hel-pack（包括其他私有部署版）\n */\nfunction batchPreFetchLib$1(appNames, batchOptions) {\n    return __awaiter(this, void 0, Promise, function () {\n        var versionIdList, projectIdList, optionsMap, getOptions, platform, appDataList, shouldFetchAppNames, ensuredOptionsMap, _i, appNames_1, name, oriOptions, options, appData, tasks, mods;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    versionIdList = [];\n                    projectIdList = [];\n                    optionsMap = (batchOptions === null || batchOptions === void 0 ? void 0 : batchOptions.preFetchConfigs) || {};\n                    getOptions = __assign({ semverApi: false }, ((batchOptions === null || batchOptions === void 0 ? void 0 : batchOptions.common) || {}));\n                    platform = getPlatform(getOptions.platform);\n                    if (appNames.length > 8) {\n                        throw new Error('only support 8 appName at most!'); // 当前最多只支持最多拉8个\n                    }\n                    appDataList = [];\n                    shouldFetchAppNames = [];\n                    ensuredOptionsMap = {};\n                    _i = 0, appNames_1 = appNames;\n                    _a.label = 1;\n                case 1:\n                    if (!(_i < appNames_1.length)) return [3 /*break*/, 4];\n                    name = appNames_1[_i];\n                    oriOptions = optionsMap[name];\n                    options = { platform: platform };\n                    if (!oriOptions || typeof oriOptions === 'string') {\n                        options.versionId = oriOptions || '';\n                    }\n                    else if (oriOptions) {\n                        options = __assign(__assign({}, oriOptions), options);\n                    }\n                    ensuredOptionsMap[name] = options;\n                    options.enableDiskCache = getObjsVal([options, getOptions], 'enableDiskCache', ENABLE_DISK_CACHE);\n                    options.enableSyncMeta = getObjsVal([options, getOptions], 'enableSyncMeta', ENABLE_SYNC_META);\n                    options.storageType = getObjsVal([options, getOptions], 'storageType', STORAGE_TYPE);\n                    return [4 /*yield*/, getAppFromRemoteOrLocal(name, options, { callRemote: false })];\n                case 2:\n                    appData = _a.sent();\n                    if (!appData) {\n                        versionIdList.push(options.versionId || '');\n                        projectIdList.push(options.projectId || '');\n                        shouldFetchAppNames.push(name);\n                    }\n                    _a.label = 3;\n                case 3:\n                    _i++;\n                    return [3 /*break*/, 1];\n                case 4:\n                    getOptions.versionIdList = versionIdList;\n                    getOptions.projectIdList = projectIdList;\n                    if (!getOptions.semverApi) return [3 /*break*/, 6];\n                    return [4 /*yield*/, Promise.all(shouldFetchAppNames.map(function (name) { return getSubAppAndItsVersion(name, ensuredOptionsMap[name]); }))];\n                case 5:\n                    appDataList = _a.sent();\n                    return [3 /*break*/, 8];\n                case 6: return [4 /*yield*/, batchGetSubAppAndItsVersion(shouldFetchAppNames, getOptions)];\n                case 7:\n                    appDataList = _a.sent();\n                    _a.label = 8;\n                case 8:\n                    // 设置到内存里，方便后续 preFetchLib 执行时可以跳过请求阶段\n                    appDataList.forEach(function (_a) {\n                        var app = _a.app, version = _a.version;\n                        var loadOptions = ensuredOptionsMap[app.name] || {};\n                        cacheApp(app, { appVersion: version, platform: platform, toDisk: loadOptions.enableDiskCache, loadOptions: loadOptions });\n                    });\n                    tasks = appNames.map(function (name) { return preFetchLib$1(name, ensuredOptionsMap[name]); });\n                    return [4 /*yield*/, Promise.all(tasks)];\n                case 9:\n                    mods = _a.sent();\n                    // @ts-ignore, trust user specified AnyRecord[]\n                    return [2 /*return*/, mods];\n            }\n        });\n    });\n}\n\nvar apis = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  core: core$1,\n  VER: VER$1,\n  emitApp: emitApp$1,\n  appMetaSrv: appMeta,\n  appParamSrv: appParam,\n  appStyleSrv: appStyle,\n  logicSrv: logic,\n  init: init$1,\n  isSubApp: isSubApp$1,\n  bindExternals: bindExternals$1,\n  bindReactRuntime: bindReactRuntime$1,\n  bindVueRuntime: bindVueRuntime$1,\n  getExtraData: getExtraData$1,\n  setExtraData: setExtraData$1,\n  getFakeHelContext: getFakeHelContext$1,\n  batchPreFetchLib: batchPreFetchLib$1,\n  preFetchApp: preFetchApp$1,\n  preFetchLib: preFetchLib$1\n});\n\nvar purify = commonUtil$1.purify;\nvar eventBus$1 = core$1.getUserEventBus();\n// 无需处理的 key\nvar ignoreKeys = ['eventBus', 'getExtraData', 'setExtraData', 'bindExternals', 'bindVueRuntime', 'bindReactRuntime', 'isSubApp'];\n// core 层面函数处理规则\nvar coreRules = {\n    // 不需要处理的\n    ignoreFns: ['tryGetAppName', 'log', 'commonUtil', 'getCommonData', 'setCommonData', 'setGlobalThis'],\n    // 这些函数仅1个参数，第1位参数是平台值\n    arg1PlatFns: ['getPlatformConfig', 'getSharedCache'],\n    // 这些函数共2个参数，第2位参数是平台值\n    arg2PlatFns: ['initPlatformConfig', 'getAppMeta', 'setAppMeta', 'tryGetVersion', 'setAppPlatform'],\n    // 这些函数共2个参数，第2位参数是平台值对象\n    arg2PlatObjFns: [],\n};\n// 这些函数共2个参数，第2位参数是包含平台值的对象或版本号，且需要注入 semverApi 值\nvar preFetchFns = ['preFetchLib', 'preFetchApp'];\n// 这些函数共2个参数，第2位参数需要注入 semverApi 值\nvar injectSemverApiFns = ['getSubAppMeta', 'getMetaDataUrl'];\n// 这些函数第1位参数是平台值对象\nvar arg1PlatObjFns = ['emitApp', 'init'];\nfunction injectPlat(platform, injectOptions) {\n    var _this = this;\n    var fnName = injectOptions.fnName, fn = injectOptions.fn, isCore = injectOptions.isCore, preFetchOptions = injectOptions.preFetchOptions;\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var mergePlatObj = function (obj) { return (__assign({ platform: platform }, purify(obj || {}))); };\n        var arg0 = args[0], arg1 = args[1], arg2 = args[2];\n        if (isCore) {\n            if (fnName === 'getPlatform') {\n                // 来自 createInstace 实例调用，则返回的是对应的自定义平台\n                return platform;\n            }\n            if (coreRules.arg1PlatFns.includes(fnName)) {\n                args[0] = arg0 || platform;\n            }\n            else if (coreRules.arg2PlatFns.includes(fnName)) {\n                args[1] = arg1 || platform;\n            }\n            else if (coreRules.arg2PlatObjFns.includes(fnName)) {\n                args[1] = mergePlatObj(arg1);\n            }\n            else if (!coreRules.ignoreFns.includes(fnName)) {\n                if (fnName.startsWith('set')) {\n                    // 统一按第3位参数是包含平台值的对象来处理\n                    args[2] = mergePlatObj(arg2);\n                }\n                else {\n                    // 统一按第2位参数是包含平台值的对象来处理，对于 getGlobalThis 等内部仅使用第一位参数的函数，处理了也不影响\n                    args[1] = mergePlatObj(arg1);\n                }\n            }\n            // 剩下的 core 函数无需处理\n        }\n        else {\n            // 开始处理非 core 层面的函数\n            if (fnName === 'batchPreFetchLib') {\n                // 特殊处理 batchPreFetchLib 的 batchOptions\n                var arg1Var = arg1 || {};\n                var common = mergePlatObj(arg1Var.common);\n                args[1] = __assign(__assign({}, arg1Var), { common: common });\n            }\n            else if (preFetchFns.includes(fnName)) {\n                var toMerge = purify(typeof arg1 === 'string' ? { versionId: arg1 } : arg1 || {});\n                // 继续处理来自 createInstance 的预设参数\n                if (preFetchOptions) {\n                    toMerge = purify(__assign(__assign({}, preFetchOptions), toMerge));\n                }\n                args[1] = __assign({ platform: platform }, toMerge);\n            }\n            else if (injectSemverApiFns.includes(fnName)) {\n                var _a = (preFetchOptions || {}).semverApi, semverApi = _a === void 0 ? true : _a;\n                args[1] = mergePlatObj(__assign({ semverApi: semverApi }, purify(arg1 || {})));\n            }\n            else if (arg1PlatObjFns.includes(fnName)) {\n                args[0] = mergePlatObj(arg0);\n            }\n            else {\n                // 剩余的统一按第2位参数是包含平台值的对象来处理\n                args[1] = mergePlatObj(arg1);\n            }\n        }\n        // @ts-ignore\n        return fn.apply(_this, args);\n    };\n}\nfunction tryInectPlatForMethods(platform, obj, options) {\n    var preFetchOptions = options.preFetchOptions, isCore = options.isCore;\n    var newObj = {};\n    Object.keys(obj).forEach(function (mayFnName) {\n        // @ts-ignore\n        var mayFn = obj[mayFnName];\n        if (ignoreKeys.includes(mayFnName)) {\n            newObj[mayFnName] = mayFn;\n            return;\n        }\n        var valueType = typeof mayFn;\n        if (valueType === 'function') {\n            var injectOptions = { fnName: mayFnName, fn: mayFn, isCore: isCore, preFetchOptions: preFetchOptions };\n            newObj[mayFnName] = injectPlat(platform, injectOptions);\n            return;\n        }\n        if (mayFn && valueType === 'object') {\n            var tryOptions = __assign(__assign({}, options), { isCore: mayFnName === 'core' });\n            newObj[mayFnName] = tryInectPlatForMethods(platform, mayFn, tryOptions);\n            return;\n        }\n        newObj[mayFnName] = mayFn;\n    });\n    return newObj;\n}\n/**\n * 预设获取参数自定义api实例，之后调用的api实例将总是自动带上用户的预设参数作为兜底参数\n * @param platform\n * @param preFetchOptions\n * @returns\n */\nfunction createInstance$1(platform, preFetchOptions) {\n    var insApis = tryInectPlatForMethods(platform, apis, { preFetchOptions: preFetchOptions });\n    insApis.createInstance = createInstance$1;\n    insApis.createOriginInstance = createOriginInstance$1;\n    insApis.resetGlobalThis = core$1.resetGlobalThis;\n    insApis.eventBus = eventBus$1;\n    insApis.default = insApis;\n    return insApis;\n}\n/**\n * 预设获取参数自定义api实例，同时将预设参数参数写入 origin 配置，这样用户使用原始 api 时也能够复用预设参数\n * ```\n * // 原始 api 指从 hel-micro 里直接导入的接口，例如下面的 preFetchLib 是原始 api\n * import { preFetchLib, createOriginInstance } from 'hel-micro';\n * // 预设 origin 配置\n * createOriginInstance('myplat', { apiPrefix: 'https://myplat.com', semverApi: false });\n * // 此后采用 preFetchLib 调用时将自动读取到对应平台预设的 origin 配置\n * preFetchLib('xx', {platform:'myplat'});\n * ```\n * 此方法通常用户用户基于 hel-micro 定制自己平台参数后再次发包到npm，别人使用此包体可自动获取对应平台的模块，例如\n * ```\n * // 发布此代码包体 custom-hel-micro 到 npm\n * import { preFetchLib, createOriginInstance } from 'hel-micro';\n * const ins = createOriginInstance(...);\n * export default ins;\n * ```\n */\nfunction createOriginInstance$1(platform, originOptions) {\n    var _a = originOptions || {}; _a.trustAppNames; var preFetchOptions = __rest(_a, [\"trustAppNames\"]);\n    originInit(platform, originOptions);\n    return createInstance$1(platform, preFetchOptions);\n}\n\nvar VER = VER$1, preFetchLib = preFetchLib$1, preFetchApp = preFetchApp$1, batchPreFetchLib = batchPreFetchLib$1, appStyleSrv = appStyle, appParamSrv = appParam, appMetaSrv = appMeta, logicSrv = logic, emitApp = emitApp$1, init = init$1, isSubApp = isSubApp$1, getFakeHelContext = getFakeHelContext$1, getExtraData = getExtraData$1, setExtraData = setExtraData$1, bindExternals = bindExternals$1, bindVueRuntime = bindVueRuntime$1, bindReactRuntime = bindReactRuntime$1, core = core$1;\nvar resetGlobalThis = core$1.resetGlobalThis;\nvar createInstance = createInstance$1, createOriginInstance = createOriginInstance$1;\nvar eventBus = core$1.getUserEventBus();\ncore.log(\"hel-micro ver \".concat(VER));\nvar index = {\n    VER: VER,\n    preFetchLib: preFetchLib,\n    preFetchApp: preFetchApp,\n    batchPreFetchLib: batchPreFetchLib,\n    appStyleSrv: appStyleSrv,\n    appParamSrv: appParamSrv,\n    appMetaSrv: appMetaSrv,\n    logicSrv: logicSrv,\n    emitApp: emitApp,\n    eventBus: eventBus,\n    init: init,\n    isSubApp: isSubApp,\n    getFakeHelContext: getFakeHelContext,\n    getExtraData: getExtraData,\n    setExtraData: setExtraData,\n    bindExternals: bindExternals,\n    bindVueRuntime: bindVueRuntime,\n    bindReactRuntime: bindReactRuntime,\n    resetGlobalThis: resetGlobalThis,\n    core: core$1,\n    createInstance: createInstance,\n    createOriginInstance: createOriginInstance,\n};\n\nexport { VER, appMetaSrv, appParamSrv, appStyleSrv, batchPreFetchLib, bindExternals, bindReactRuntime, bindVueRuntime, core, createInstance, createOriginInstance, index as default, emitApp, eventBus, getExtraData, getFakeHelContext, init, isSubApp, logicSrv, preFetchApp, preFetchLib, resetGlobalThis, setExtraData };\n","import { shallowRef, watchEffect, readonly, unref, ref, isVue3, version, watch, customRef, getCurrentScope, onScopeDispose, effectScope, provide, inject, isRef, computed, reactive, toRefs as toRefs$1, toRef, isVue2, set as set$1, getCurrentInstance, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$b.call(b, prop))\n      __defNormalProp$9(a, prop, b[prop]);\n  if (__getOwnPropSymbols$b)\n    for (var prop of __getOwnPropSymbols$b(b)) {\n      if (__propIsEnum$b.call(b, prop))\n        __defNormalProp$9(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nfunction computedEager(fn, options) {\n  var _a;\n  const result = shallowRef();\n  watchEffect(() => {\n    result.value = fn();\n  }, __spreadProps$6(__spreadValues$9({}, options), {\n    flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n  }));\n  return readonly(result);\n}\n\nvar _a;\nconst isClient = typeof window !== \"undefined\";\nconst isDef = (val) => typeof val !== \"undefined\";\nconst assert = (condition, ...infos) => {\n  if (!condition)\n    console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isBoolean = (val) => typeof val === \"boolean\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isNumber = (val) => typeof val === \"number\";\nconst isString = (val) => typeof val === \"string\";\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst isWindow = (val) => typeof window !== \"undefined\" && toString.call(val) === \"[object Window]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent);\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\n\nfunction resolveUnref(r) {\n  return typeof r === \"function\" ? r() : unref(r);\n}\n\nfunction createFilterWrapper(filter, fn) {\n  function wrapper(...args) {\n    return new Promise((resolve, reject) => {\n      Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n    });\n  }\n  return wrapper;\n}\nconst bypassFilter = (invoke) => {\n  return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n  let timer;\n  let maxTimer;\n  let lastRejector = noop;\n  const _clearTimeout = (timer2) => {\n    clearTimeout(timer2);\n    lastRejector();\n    lastRejector = noop;\n  };\n  const filter = (invoke) => {\n    const duration = resolveUnref(ms);\n    const maxDuration = resolveUnref(options.maxWait);\n    if (timer)\n      _clearTimeout(timer);\n    if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n      if (maxTimer) {\n        _clearTimeout(maxTimer);\n        maxTimer = null;\n      }\n      return Promise.resolve(invoke());\n    }\n    return new Promise((resolve, reject) => {\n      lastRejector = options.rejectOnCancel ? reject : resolve;\n      if (maxDuration && !maxTimer) {\n        maxTimer = setTimeout(() => {\n          if (timer)\n            _clearTimeout(timer);\n          maxTimer = null;\n          resolve(invoke());\n        }, maxDuration);\n      }\n      timer = setTimeout(() => {\n        if (maxTimer)\n          _clearTimeout(maxTimer);\n        maxTimer = null;\n        resolve(invoke());\n      }, duration);\n    });\n  };\n  return filter;\n}\nfunction throttleFilter(ms, trailing = true, leading = true, rejectOnCancel = false) {\n  let lastExec = 0;\n  let timer;\n  let isLeading = true;\n  let lastRejector = noop;\n  let lastValue;\n  const clear = () => {\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n      lastRejector();\n      lastRejector = noop;\n    }\n  };\n  const filter = (_invoke) => {\n    const duration = resolveUnref(ms);\n    const elapsed = Date.now() - lastExec;\n    const invoke = () => {\n      return lastValue = _invoke();\n    };\n    clear();\n    if (duration <= 0) {\n      lastExec = Date.now();\n      return invoke();\n    }\n    if (elapsed > duration && (leading || !isLeading)) {\n      lastExec = Date.now();\n      invoke();\n    } else if (trailing) {\n      lastValue = new Promise((resolve, reject) => {\n        lastRejector = rejectOnCancel ? reject : resolve;\n        timer = setTimeout(() => {\n          lastExec = Date.now();\n          isLeading = true;\n          resolve(invoke());\n          clear();\n        }, Math.max(0, duration - elapsed));\n      });\n    }\n    if (!leading && !timer)\n      timer = setTimeout(() => isLeading = true, duration);\n    isLeading = false;\n    return lastValue;\n  };\n  return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n  const isActive = ref(true);\n  function pause() {\n    isActive.value = false;\n  }\n  function resume() {\n    isActive.value = true;\n  }\n  const eventFilter = (...args) => {\n    if (isActive.value)\n      extendFilter(...args);\n  };\n  return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nfunction __onlyVue3(name = \"this function\") {\n  if (isVue3)\n    return;\n  throw new Error(`[VueUse] ${name} is only works on Vue 3.`);\n}\nfunction __onlyVue27Plus(name = \"this function\") {\n  if (isVue3 || version.startsWith(\"2.7.\"))\n    return;\n  throw new Error(`[VueUse] ${name} is only works on Vue 2.7 or above.`);\n}\nconst directiveHooks = {\n  mounted: isVue3 ? \"mounted\" : \"inserted\",\n  updated: isVue3 ? \"updated\" : \"componentUpdated\",\n  unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n  return new Promise((resolve, reject) => {\n    if (throwOnTimeout)\n      setTimeout(() => reject(reason), ms);\n    else\n      setTimeout(resolve, ms);\n  });\n}\nfunction identity(arg) {\n  return arg;\n}\nfunction createSingletonPromise(fn) {\n  let _promise;\n  function wrapper() {\n    if (!_promise)\n      _promise = fn();\n    return _promise;\n  }\n  wrapper.reset = async () => {\n    const _prev = _promise;\n    _promise = void 0;\n    if (_prev)\n      await _prev;\n  };\n  return wrapper;\n}\nfunction invoke(fn) {\n  return fn();\n}\nfunction containsProp(obj, ...props) {\n  return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n  var _a;\n  if (typeof target === \"number\")\n    return target + delta;\n  const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n  const unit = target.slice(value.length);\n  const result = parseFloat(value) + delta;\n  if (Number.isNaN(result))\n    return target;\n  return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n  return keys.reduce((n, k) => {\n    if (k in obj) {\n      if (!omitUndefined || obj[k] !== void 0)\n        n[k] = obj[k];\n    }\n    return n;\n  }, {});\n}\n\nfunction computedWithControl(source, fn) {\n  let v = void 0;\n  let track;\n  let trigger;\n  const dirty = ref(true);\n  const update = () => {\n    dirty.value = true;\n    trigger();\n  };\n  watch(source, update, { flush: \"sync\" });\n  const get = isFunction(fn) ? fn : fn.get;\n  const set = isFunction(fn) ? void 0 : fn.set;\n  const result = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        if (dirty.value) {\n          v = get();\n          dirty.value = false;\n        }\n        track();\n        return v;\n      },\n      set(v2) {\n        set == null ? void 0 : set(v2);\n      }\n    };\n  });\n  if (Object.isExtensible(result))\n    result.trigger = update;\n  return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n  if (getCurrentScope()) {\n    onScopeDispose(fn);\n    return true;\n  }\n  return false;\n}\n\nfunction createEventHook() {\n  const fns = [];\n  const off = (fn) => {\n    const index = fns.indexOf(fn);\n    if (index !== -1)\n      fns.splice(index, 1);\n  };\n  const on = (fn) => {\n    fns.push(fn);\n    const offFn = () => off(fn);\n    tryOnScopeDispose(offFn);\n    return {\n      off: offFn\n    };\n  };\n  const trigger = (param) => {\n    fns.forEach((fn) => fn(param));\n  };\n  return {\n    on,\n    off,\n    trigger\n  };\n}\n\nfunction createGlobalState(stateFactory) {\n  let initialized = false;\n  let state;\n  const scope = effectScope(true);\n  return () => {\n    if (!initialized) {\n      state = scope.run(stateFactory);\n      initialized = true;\n    }\n    return state;\n  };\n}\n\nfunction createInjectionState(composable) {\n  const key = Symbol(\"InjectionState\");\n  const useProvidingState = (...args) => {\n    const state = composable(...args);\n    provide(key, state);\n    return state;\n  };\n  const useInjectedState = () => inject(key);\n  return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n  let subscribers = 0;\n  let state;\n  let scope;\n  const dispose = () => {\n    subscribers -= 1;\n    if (scope && subscribers <= 0) {\n      scope.stop();\n      state = void 0;\n      scope = void 0;\n    }\n  };\n  return (...args) => {\n    subscribers += 1;\n    if (!state) {\n      scope = effectScope(true);\n      state = scope.run(() => composable(...args));\n    }\n    tryOnScopeDispose(dispose);\n    return state;\n  };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n  __onlyVue27Plus();\n  for (const [key, value] of Object.entries(extend)) {\n    if (key === \"value\")\n      continue;\n    if (isRef(value) && unwrap) {\n      Object.defineProperty(ref, key, {\n        get() {\n          return value.value;\n        },\n        set(v) {\n          value.value = v;\n        },\n        enumerable\n      });\n    } else {\n      Object.defineProperty(ref, key, { value, enumerable });\n    }\n  }\n  return ref;\n}\n\nfunction get(obj, key) {\n  if (key == null)\n    return unref(obj);\n  return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n  return unref(v) != null;\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$a.call(b, prop))\n      __defNormalProp$8(a, prop, b[prop]);\n  if (__getOwnPropSymbols$a)\n    for (var prop of __getOwnPropSymbols$a(b)) {\n      if (__propIsEnum$a.call(b, prop))\n        __defNormalProp$8(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction makeDestructurable(obj, arr) {\n  if (typeof Symbol !== \"undefined\") {\n    const clone = __spreadValues$8({}, obj);\n    Object.defineProperty(clone, Symbol.iterator, {\n      enumerable: false,\n      value() {\n        let index = 0;\n        return {\n          next: () => ({\n            value: arr[index++],\n            done: index > arr.length\n          })\n        };\n      }\n    });\n    return clone;\n  } else {\n    return Object.assign([...arr], obj);\n  }\n}\n\nfunction reactify(fn, options) {\n  const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : resolveUnref;\n  return function(...args) {\n    return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n  };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n  let keys = [];\n  let options;\n  if (Array.isArray(optionsOrKeys)) {\n    keys = optionsOrKeys;\n  } else {\n    options = optionsOrKeys;\n    const { includeOwnProperties = true } = optionsOrKeys;\n    keys.push(...Object.keys(obj));\n    if (includeOwnProperties)\n      keys.push(...Object.getOwnPropertyNames(obj));\n  }\n  return Object.fromEntries(keys.map((key) => {\n    const value = obj[key];\n    return [\n      key,\n      typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n    ];\n  }));\n}\n\nfunction toReactive(objectRef) {\n  if (!isRef(objectRef))\n    return reactive(objectRef);\n  const proxy = new Proxy({}, {\n    get(_, p, receiver) {\n      return unref(Reflect.get(objectRef.value, p, receiver));\n    },\n    set(_, p, value) {\n      if (isRef(objectRef.value[p]) && !isRef(value))\n        objectRef.value[p].value = value;\n      else\n        objectRef.value[p] = value;\n      return true;\n    },\n    deleteProperty(_, p) {\n      return Reflect.deleteProperty(objectRef.value, p);\n    },\n    has(_, p) {\n      return Reflect.has(objectRef.value, p);\n    },\n    ownKeys() {\n      return Object.keys(objectRef.value);\n    },\n    getOwnPropertyDescriptor() {\n      return {\n        enumerable: true,\n        configurable: true\n      };\n    }\n  });\n  return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n  return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n  const flatKeys = keys.flat();\n  return reactiveComputed(() => Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nfunction reactivePick(obj, ...keys) {\n  const flatKeys = keys.flat();\n  return reactive(Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n  return customRef((track, trigger) => {\n    let value = defaultValue;\n    let timer;\n    const resetAfter = () => setTimeout(() => {\n      value = defaultValue;\n      trigger();\n    }, resolveUnref(afterMs));\n    tryOnScopeDispose(() => {\n      clearTimeout(timer);\n    });\n    return {\n      get() {\n        track();\n        return value;\n      },\n      set(newValue) {\n        value = newValue;\n        trigger();\n        clearTimeout(timer);\n        timer = resetAfter();\n      }\n    };\n  });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n  return createFilterWrapper(debounceFilter(ms, options), fn);\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n  const debounced = ref(value.value);\n  const updater = useDebounceFn(() => {\n    debounced.value = value.value;\n  }, ms, options);\n  watch(value, () => updater());\n  return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n  return computed({\n    get() {\n      var _a;\n      return (_a = source.value) != null ? _a : defaultValue;\n    },\n    set(value) {\n      source.value = value;\n    }\n  });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n  return createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n  if (delay <= 0)\n    return value;\n  const throttled = ref(value.value);\n  const updater = useThrottleFn(() => {\n    throttled.value = value.value;\n  }, delay, trailing, leading);\n  watch(value, () => updater());\n  return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n  let source = initial;\n  let track;\n  let trigger;\n  const ref = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        return get();\n      },\n      set(v) {\n        set(v);\n      }\n    };\n  });\n  function get(tracking = true) {\n    if (tracking)\n      track();\n    return source;\n  }\n  function set(value, triggering = true) {\n    var _a, _b;\n    if (value === source)\n      return;\n    const old = source;\n    if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n      return;\n    source = value;\n    (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n    if (triggering)\n      trigger();\n  }\n  const untrackedGet = () => get(false);\n  const silentSet = (v) => set(v, false);\n  const peek = () => get(false);\n  const lay = (v) => set(v, false);\n  return extendRef(ref, {\n    get,\n    set,\n    untrackedGet,\n    silentSet,\n    peek,\n    lay\n  }, { enumerable: true });\n}\nconst controlledRef = refWithControl;\n\nfunction resolveRef(r) {\n  return typeof r === \"function\" ? computed(r) : ref(r);\n}\n\nfunction set(...args) {\n  if (args.length === 2) {\n    const [ref, value] = args;\n    ref.value = value;\n  }\n  if (args.length === 3) {\n    if (isVue2) {\n      set$1(...args);\n    } else {\n      const [target, key, value] = args;\n      target[key] = value;\n    }\n  }\n}\n\nfunction syncRef(left, right, options = {}) {\n  var _a, _b;\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true,\n    direction = \"both\",\n    transform = {}\n  } = options;\n  let watchLeft;\n  let watchRight;\n  const transformLTR = (_a = transform.ltr) != null ? _a : (v) => v;\n  const transformRTL = (_b = transform.rtl) != null ? _b : (v) => v;\n  if (direction === \"both\" || direction === \"ltr\") {\n    watchLeft = watch(left, (newValue) => right.value = transformLTR(newValue), { flush, deep, immediate });\n  }\n  if (direction === \"both\" || direction === \"rtl\") {\n    watchRight = watch(right, (newValue) => left.value = transformRTL(newValue), { flush, deep, immediate });\n  }\n  return () => {\n    watchLeft == null ? void 0 : watchLeft();\n    watchRight == null ? void 0 : watchRight();\n  };\n}\n\nfunction syncRefs(source, targets, options = {}) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true\n  } = options;\n  if (!Array.isArray(targets))\n    targets = [targets];\n  return watch(source, (newValue) => targets.forEach((target) => target.value = newValue), { flush, deep, immediate });\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$9.call(b, prop))\n      __defNormalProp$7(a, prop, b[prop]);\n  if (__getOwnPropSymbols$9)\n    for (var prop of __getOwnPropSymbols$9(b)) {\n      if (__propIsEnum$9.call(b, prop))\n        __defNormalProp$7(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction toRefs(objectRef) {\n  if (!isRef(objectRef))\n    return toRefs$1(objectRef);\n  const result = Array.isArray(objectRef.value) ? new Array(objectRef.value.length) : {};\n  for (const key in objectRef.value) {\n    result[key] = customRef(() => ({\n      get() {\n        return objectRef.value[key];\n      },\n      set(v) {\n        if (Array.isArray(objectRef.value)) {\n          const copy = [...objectRef.value];\n          copy[key] = v;\n          objectRef.value = copy;\n        } else {\n          const newObject = __spreadProps$5(__spreadValues$7({}, objectRef.value), { [key]: v });\n          Object.setPrototypeOf(newObject, objectRef.value);\n          objectRef.value = newObject;\n        }\n      }\n    }));\n  }\n  return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true) {\n  if (getCurrentInstance())\n    onBeforeMount(fn);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn) {\n  if (getCurrentInstance())\n    onBeforeUnmount(fn);\n}\n\nfunction tryOnMounted(fn, sync = true) {\n  if (getCurrentInstance())\n    onMounted(fn);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn) {\n  if (getCurrentInstance())\n    onUnmounted(fn);\n}\n\nfunction createUntil(r, isNot = false) {\n  function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(r, (v) => {\n        if (condition(v) !== isNot) {\n          stop == null ? void 0 : stop();\n          resolve(v);\n        }\n      }, {\n        flush,\n        deep,\n        immediate: true\n      });\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => stop == null ? void 0 : stop()));\n    }\n    return Promise.race(promises);\n  }\n  function toBe(value, options) {\n    if (!isRef(value))\n      return toMatch((v) => v === value, options);\n    const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch([r, value], ([v1, v2]) => {\n        if (isNot !== (v1 === v2)) {\n          stop == null ? void 0 : stop();\n          resolve(v1);\n        }\n      }, {\n        flush,\n        deep,\n        immediate: true\n      });\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => {\n        stop == null ? void 0 : stop();\n        return resolveUnref(r);\n      }));\n    }\n    return Promise.race(promises);\n  }\n  function toBeTruthy(options) {\n    return toMatch((v) => Boolean(v), options);\n  }\n  function toBeNull(options) {\n    return toBe(null, options);\n  }\n  function toBeUndefined(options) {\n    return toBe(void 0, options);\n  }\n  function toBeNaN(options) {\n    return toMatch(Number.isNaN, options);\n  }\n  function toContains(value, options) {\n    return toMatch((v) => {\n      const array = Array.from(v);\n      return array.includes(value) || array.includes(resolveUnref(value));\n    }, options);\n  }\n  function changed(options) {\n    return changedTimes(1, options);\n  }\n  function changedTimes(n = 1, options) {\n    let count = -1;\n    return toMatch(() => {\n      count += 1;\n      return count >= n;\n    }, options);\n  }\n  if (Array.isArray(resolveUnref(r))) {\n    const instance = {\n      toMatch,\n      toContains,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  } else {\n    const instance = {\n      toMatch,\n      toBe,\n      toBeTruthy,\n      toBeNull,\n      toBeNaN,\n      toBeUndefined,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  }\n}\nfunction until(r) {\n  return createUntil(r);\n}\n\nfunction useArrayEvery(list, fn) {\n  return computed(() => resolveUnref(list).every((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n  return computed(() => resolveUnref(resolveUnref(list).find((element, index, array) => fn(resolveUnref(element), index, array))));\n}\n\nfunction useArrayFindIndex(list, fn) {\n  return computed(() => resolveUnref(list).findIndex((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n  let index = arr.length;\n  while (index-- > 0) {\n    if (cb(arr[index], index, arr))\n      return arr[index];\n  }\n  return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n  return computed(() => resolveUnref(!Array.prototype.findLast ? findLast(resolveUnref(list), (element, index, array) => fn(resolveUnref(element), index, array)) : resolveUnref(list).findLast((element, index, array) => fn(resolveUnref(element), index, array))));\n}\n\nfunction useArrayJoin(list, separator) {\n  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).join(resolveUnref(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n  const reduceCallback = (sum, value, index) => reducer(resolveUnref(sum), resolveUnref(value), index);\n  return computed(() => {\n    const resolved = resolveUnref(list);\n    return args.length ? resolved.reduce(reduceCallback, resolveUnref(args[0])) : resolved.reduce(reduceCallback);\n  });\n}\n\nfunction useArraySome(list, fn) {\n  return computed(() => resolveUnref(list).some((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayUnique(list) {\n  return computed(() => [...new Set(resolveUnref(list).map((element) => resolveUnref(element)))]);\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n  const count = ref(initialValue);\n  const {\n    max = Infinity,\n    min = -Infinity\n  } = options;\n  const inc = (delta = 1) => count.value = Math.min(max, count.value + delta);\n  const dec = (delta = 1) => count.value = Math.max(min, count.value - delta);\n  const get = () => count.value;\n  const set = (val) => count.value = Math.max(min, Math.min(max, val));\n  const reset = (val = initialValue) => {\n    initialValue = val;\n    return set(val);\n  };\n  return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nconst defaultMeridiem = (hours, minutes, isLowercase, hasPeriod) => {\n  let m = hours < 12 ? \"AM\" : \"PM\";\n  if (hasPeriod)\n    m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n  return isLowercase ? m.toLowerCase() : m;\n};\nconst formatDate = (date, formatStr, options = {}) => {\n  var _a;\n  const years = date.getFullYear();\n  const month = date.getMonth();\n  const days = date.getDate();\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  const seconds = date.getSeconds();\n  const milliseconds = date.getMilliseconds();\n  const day = date.getDay();\n  const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n  const matches = {\n    YY: () => String(years).slice(-2),\n    YYYY: () => years,\n    M: () => month + 1,\n    MM: () => `${month + 1}`.padStart(2, \"0\"),\n    MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n    MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n    D: () => String(days),\n    DD: () => `${days}`.padStart(2, \"0\"),\n    H: () => String(hours),\n    HH: () => `${hours}`.padStart(2, \"0\"),\n    h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n    hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n    m: () => String(minutes),\n    mm: () => `${minutes}`.padStart(2, \"0\"),\n    s: () => String(seconds),\n    ss: () => `${seconds}`.padStart(2, \"0\"),\n    SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n    d: () => day,\n    dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n    ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n    dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n    A: () => meridiem(hours, minutes),\n    AA: () => meridiem(hours, minutes, false, true),\n    a: () => meridiem(hours, minutes, true),\n    aa: () => meridiem(hours, minutes, true, true)\n  };\n  return formatStr.replace(REGEX_FORMAT, (match, $1) => $1 || matches[match]());\n};\nconst normalizeDate = (date) => {\n  if (date === null)\n    return new Date(NaN);\n  if (date === void 0)\n    return new Date();\n  if (date instanceof Date)\n    return new Date(date);\n  if (typeof date === \"string\" && !/Z$/i.test(date)) {\n    const d = date.match(REGEX_PARSE);\n    if (d) {\n      const m = d[2] - 1 || 0;\n      const ms = (d[7] || \"0\").substring(0, 3);\n      return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n    }\n  }\n  return new Date(date);\n};\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n  return computed(() => formatDate(normalizeDate(resolveUnref(date)), resolveUnref(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n  const {\n    immediate = true,\n    immediateCallback = false\n  } = options;\n  let timer = null;\n  const isActive = ref(false);\n  function clean() {\n    if (timer) {\n      clearInterval(timer);\n      timer = null;\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    clean();\n  }\n  function resume() {\n    const intervalValue = resolveUnref(interval);\n    if (intervalValue <= 0)\n      return;\n    isActive.value = true;\n    if (immediateCallback)\n      cb();\n    clean();\n    timer = setInterval(cb, intervalValue);\n  }\n  if (immediate && isClient)\n    resume();\n  if (isRef(interval) || isFunction(interval)) {\n    const stopWatch = watch(interval, () => {\n      if (isActive.value && isClient)\n        resume();\n    });\n    tryOnScopeDispose(stopWatch);\n  }\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$8.call(b, prop))\n      __defNormalProp$6(a, prop, b[prop]);\n  if (__getOwnPropSymbols$8)\n    for (var prop of __getOwnPropSymbols$8(b)) {\n      if (__propIsEnum$8.call(b, prop))\n        __defNormalProp$6(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useInterval(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    immediate = true,\n    callback\n  } = options;\n  const counter = ref(0);\n  const update = () => counter.value += 1;\n  const reset = () => {\n    counter.value = 0;\n  };\n  const controls = useIntervalFn(callback ? () => {\n    update();\n    callback(counter.value);\n  } : update, interval, { immediate });\n  if (exposeControls) {\n    return __spreadValues$6({\n      counter,\n      reset\n    }, controls);\n  } else {\n    return counter;\n  }\n}\n\nfunction useLastChanged(source, options = {}) {\n  var _a;\n  const ms = ref((_a = options.initialValue) != null ? _a : null);\n  watch(source, () => ms.value = timestamp(), options);\n  return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n  const {\n    immediate = true\n  } = options;\n  const isPending = ref(false);\n  let timer = null;\n  function clear() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n  function stop() {\n    isPending.value = false;\n    clear();\n  }\n  function start(...args) {\n    clear();\n    isPending.value = true;\n    timer = setTimeout(() => {\n      isPending.value = false;\n      timer = null;\n      cb(...args);\n    }, resolveUnref(interval));\n  }\n  if (immediate) {\n    isPending.value = true;\n    if (isClient)\n      start();\n  }\n  tryOnScopeDispose(stop);\n  return {\n    isPending: readonly(isPending),\n    start,\n    stop\n  };\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$7.call(b, prop))\n      __defNormalProp$5(a, prop, b[prop]);\n  if (__getOwnPropSymbols$7)\n    for (var prop of __getOwnPropSymbols$7(b)) {\n      if (__propIsEnum$7.call(b, prop))\n        __defNormalProp$5(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useTimeout(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    callback\n  } = options;\n  const controls = useTimeoutFn(callback != null ? callback : noop, interval, options);\n  const ready = computed(() => !controls.isPending.value);\n  if (exposeControls) {\n    return __spreadValues$5({\n      ready\n    }, controls);\n  } else {\n    return ready;\n  }\n}\n\nfunction useToNumber(value, options = {}) {\n  const {\n    method = \"parseFloat\",\n    radix,\n    nanToZero\n  } = options;\n  return computed(() => {\n    let resolved = resolveUnref(value);\n    if (typeof resolved === \"string\")\n      resolved = Number[method](resolved, radix);\n    if (nanToZero && isNaN(resolved))\n      resolved = 0;\n    return resolved;\n  });\n}\n\nfunction useToString(value) {\n  return computed(() => `${resolveUnref(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n  const {\n    truthyValue = true,\n    falsyValue = false\n  } = options;\n  const valueIsRef = isRef(initialValue);\n  const _value = ref(initialValue);\n  function toggle(value) {\n    if (arguments.length) {\n      _value.value = value;\n      return _value.value;\n    } else {\n      const truthy = resolveUnref(truthyValue);\n      _value.value = _value.value === truthy ? resolveUnref(falsyValue) : truthy;\n      return _value.value;\n    }\n  }\n  if (valueIsRef)\n    return toggle;\n  else\n    return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n  let oldList = (options == null ? void 0 : options.immediate) ? [] : [\n    ...source instanceof Function ? source() : Array.isArray(source) ? source : unref(source)\n  ];\n  return watch(source, (newList, _, onCleanup) => {\n    const oldListRemains = new Array(oldList.length);\n    const added = [];\n    for (const obj of newList) {\n      let found = false;\n      for (let i = 0; i < oldList.length; i++) {\n        if (!oldListRemains[i] && obj === oldList[i]) {\n          oldListRemains[i] = true;\n          found = true;\n          break;\n        }\n      }\n      if (!found)\n        added.push(obj);\n    }\n    const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n    cb(newList, oldList, added, removed, onCleanup);\n    oldList = [...newList];\n  }, options);\n}\n\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __objRest$5 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$6)\n    for (var prop of __getOwnPropSymbols$6(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchWithFilter(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter = bypassFilter\n  } = _a, watchOptions = __objRest$5(_a, [\n    \"eventFilter\"\n  ]);\n  return watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __objRest$4 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$5.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$5)\n    for (var prop of __getOwnPropSymbols$5(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$5.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchAtMost(source, cb, options) {\n  const _a = options, {\n    count\n  } = _a, watchOptions = __objRest$4(_a, [\n    \"count\"\n  ]);\n  const current = ref(0);\n  const stop = watchWithFilter(source, (...args) => {\n    current.value += 1;\n    if (current.value >= resolveUnref(count))\n      nextTick(() => stop());\n    cb(...args);\n  }, watchOptions);\n  return { count: current, stop };\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$4.call(b, prop))\n      __defNormalProp$4(a, prop, b[prop]);\n  if (__getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(b)) {\n      if (__propIsEnum$4.call(b, prop))\n        __defNormalProp$4(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nvar __objRest$3 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchDebounced(source, cb, options = {}) {\n  const _a = options, {\n    debounce = 0,\n    maxWait = void 0\n  } = _a, watchOptions = __objRest$3(_a, [\n    \"debounce\",\n    \"maxWait\"\n  ]);\n  return watchWithFilter(source, cb, __spreadProps$4(__spreadValues$4({}, watchOptions), {\n    eventFilter: debounceFilter(debounce, { maxWait })\n  }));\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$3.call(b, prop))\n      __defNormalProp$3(a, prop, b[prop]);\n  if (__getOwnPropSymbols$3)\n    for (var prop of __getOwnPropSymbols$3(b)) {\n      if (__propIsEnum$3.call(b, prop))\n        __defNormalProp$3(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nvar __objRest$2 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$3.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$3)\n    for (var prop of __getOwnPropSymbols$3(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$3.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchIgnorable(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter = bypassFilter\n  } = _a, watchOptions = __objRest$2(_a, [\n    \"eventFilter\"\n  ]);\n  const filteredCb = createFilterWrapper(eventFilter, cb);\n  let ignoreUpdates;\n  let ignorePrevAsyncUpdates;\n  let stop;\n  if (watchOptions.flush === \"sync\") {\n    const ignore = ref(false);\n    ignorePrevAsyncUpdates = () => {\n    };\n    ignoreUpdates = (updater) => {\n      ignore.value = true;\n      updater();\n      ignore.value = false;\n    };\n    stop = watch(source, (...args) => {\n      if (!ignore.value)\n        filteredCb(...args);\n    }, watchOptions);\n  } else {\n    const disposables = [];\n    const ignoreCounter = ref(0);\n    const syncCounter = ref(0);\n    ignorePrevAsyncUpdates = () => {\n      ignoreCounter.value = syncCounter.value;\n    };\n    disposables.push(watch(source, () => {\n      syncCounter.value++;\n    }, __spreadProps$3(__spreadValues$3({}, watchOptions), { flush: \"sync\" })));\n    ignoreUpdates = (updater) => {\n      const syncCounterPrev = syncCounter.value;\n      updater();\n      ignoreCounter.value += syncCounter.value - syncCounterPrev;\n    };\n    disposables.push(watch(source, (...args) => {\n      const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n      ignoreCounter.value = 0;\n      syncCounter.value = 0;\n      if (ignore)\n        return;\n      filteredCb(...args);\n    }, watchOptions));\n    stop = () => {\n      disposables.forEach((fn) => fn());\n    };\n  }\n  return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchOnce(source, cb, options) {\n  const stop = watch(source, (...args) => {\n    nextTick(() => stop());\n    return cb(...args);\n  }, options);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$2.call(b, prop))\n      __defNormalProp$2(a, prop, b[prop]);\n  if (__getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(b)) {\n      if (__propIsEnum$2.call(b, prop))\n        __defNormalProp$2(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nvar __objRest$1 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchPausable(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter: filter\n  } = _a, watchOptions = __objRest$1(_a, [\n    \"eventFilter\"\n  ]);\n  const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n  const stop = watchWithFilter(source, cb, __spreadProps$2(__spreadValues$2({}, watchOptions), {\n    eventFilter\n  }));\n  return { stop, pause, resume, isActive };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$1.call(b, prop))\n      __defNormalProp$1(a, prop, b[prop]);\n  if (__getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(b)) {\n      if (__propIsEnum$1.call(b, prop))\n        __defNormalProp$1(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$1.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$1.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchThrottled(source, cb, options = {}) {\n  const _a = options, {\n    throttle = 0,\n    trailing = true,\n    leading = true\n  } = _a, watchOptions = __objRest(_a, [\n    \"throttle\",\n    \"trailing\",\n    \"leading\"\n  ]);\n  return watchWithFilter(source, cb, __spreadProps$1(__spreadValues$1({}, watchOptions), {\n    eventFilter: throttleFilter(throttle, trailing, leading)\n  }));\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction watchTriggerable(source, cb, options = {}) {\n  let cleanupFn;\n  function onEffect() {\n    if (!cleanupFn)\n      return;\n    const fn = cleanupFn;\n    cleanupFn = void 0;\n    fn();\n  }\n  function onCleanup(callback) {\n    cleanupFn = callback;\n  }\n  const _cb = (value, oldValue) => {\n    onEffect();\n    return cb(value, oldValue, onCleanup);\n  };\n  const res = watchIgnorable(source, _cb, options);\n  const { ignoreUpdates } = res;\n  const trigger = () => {\n    let res2;\n    ignoreUpdates(() => {\n      res2 = _cb(getWatchSources(source), getOldValue(source));\n    });\n    return res2;\n  };\n  return __spreadProps(__spreadValues({}, res), {\n    trigger\n  });\n}\nfunction getWatchSources(sources) {\n  if (isReactive(sources))\n    return sources;\n  if (Array.isArray(sources))\n    return sources.map((item) => getOneWatchSource(item));\n  return getOneWatchSource(sources);\n}\nfunction getOneWatchSource(source) {\n  return typeof source === \"function\" ? source() : unref(source);\n}\nfunction getOldValue(source) {\n  return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n  return watch(source, (v, ov, onInvalidate) => {\n    if (v)\n      cb(v, ov, onInvalidate);\n  }, options);\n}\n\nexport { __onlyVue27Plus, __onlyVue3, assert, refAutoReset as autoResetRef, bypassFilter, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, hasOwn, identity, watchIgnorable as ignorableWatch, increaseWithUnit, invoke, isBoolean, isClient, isDef, isDefined, isFunction, isIOS, isNumber, isObject, isString, isWindow, makeDestructurable, noop, normalizeDate, now, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRefs, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchIgnorable, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import * as Vue from 'vue'\nimport { defineAsyncComponent } from 'vue'\nimport { preFetchLib, bindVueRuntime } from 'hel-micro-wujie'\nimport { isClient } from '@vueuse/core'\n\nbindVueRuntime({ Vue })\n\nconst loadRemoteComponents = ({\n  libName,\n  libUrl,\n  libVersion,\n  componentNames,\n}: {\n  libName: string\n  libUrl: string\n  libVersion: string\n  componentNames: string[]\n}) => {\n  const components: Array<ReturnType<typeof defineAsyncComponent>> = []\n  let lib: any = null\n\n  if (!isClient) return components\n\n  componentNames.forEach(n => {\n    components.push(defineAsyncComponent(() => {\n      return new Promise(async (resolve, reject) => {\n        if (!lib) {\n          try {\n            lib = await preFetchLib(libName, {\n              custom: {\n                host: libUrl,\n              },\n              versionId: libVersion,\n            })\n          } catch(e) {\n            reject('loadRemoteComponents: ' + e)\n          }\n        }\n        resolve(lib[n])\n      })\n    }))\n  })\n  return components\n}\n\nconst loadRemoteOthers = async ({\n  libName,\n  libUrl,\n  libVersion,\n  names,\n}: {\n  libName: string\n  libUrl: string\n  libVersion: string\n  names: string[]\n}) => {\n  const others: any[] = []\n\n  if (!isClient) return others\n\n  const lib = await preFetchLib(libName, {\n    custom: {\n      host: libUrl,\n    },\n    versionId: libVersion,\n  })\n  names.forEach(n => {\n    others.push(lib[n])\n  })\n  return others\n}\n\nexport {\n  loadRemoteComponents,\n  loadRemoteOthers,\n}\n","<template>\n  <div :class=\"`${PREFIX.toLowerCase()}-file-upload`\">\n    <hl-upload\n      :class=\"listType==='text'?'custom-file-upload':''\"\n      :headers=\"{authorization: token}\"\n      :action=\"fileService\"\n      :list-type=\"listType\"\n      :accept=\"accept\"\n      :limit=\"limit\"\n      :file-list=\"fileList\"\n      :multiple=\"multiple\"\n      :disabled=\"disabled\"\n      :show-file-list=\"showFileList\"\n      :on-preview=\"handlePictureCardPreview\"\n      :on-remove=\"handleRemove\"\n      :on-success=\"handleSuccess\"\n      :on-exceed=\"handleExceed\"\n    >\n      <!--图片上传-->\n      <hl-icon v-if=\"listType==='card'\"><two-upload /></hl-icon>\n      <!--文件上传-->\n      <hl-button v-if=\"listType==='text'&&!disabled\" type=\"primary\" icon-position=\"left\">\n        {{ textButton }}\n        <template #icon>\n          <hl-icon><two-upload /></hl-icon>\n        </template>\n      </hl-button>\n    </hl-upload>\n    <hl-dialog v-model=\"dialogVisible\" title=\"查看图片\" width=\"50%\" :append-to-body=\"true\">\n      <hl-thumb :src=\"dialogImageUrl\" class=\"full\" />\n    </hl-dialog>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, onMounted, PropType } from 'vue'\nimport { HlMessage } from 'hongluan-ui'\nimport { TwoUpload } from '@hongluan-ui/icons'\nimport { fileSizeLimit, FileList } from './types'\nimport { PREFIX } from '@fx-front-framework/utils'\n\nexport default defineComponent({\n  name: 'FileUpload',\n  components: { TwoUpload },\n  props: {\n    token: {\n      type: String,\n      default: '',\n    },\n    textButton: {\n      type: String,\n      default: '点击上传',\n    },\n    showFileList: {\n      type: Boolean,\n      default: true,\n    },\n    listType: {\n      type: String,\n      default: 'text',\n    },\n    accept: {\n      type: String,\n      default: '.*',\n    },\n    limit: {\n      type: Number,\n    },\n    multiple: {\n      type: Boolean,\n      default: false,\n    },\n    // 文件上传后的列表id数组字符串\n    ids: {\n      type: String,\n      default: '',\n    },\n    // 用于回显\n    getFileList: {\n      type: Function as PropType<(...args: any) => void>,\n      default: () => ({}),\n    },\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n    // 文件上传路径,API地址\n    fileService: {\n      type: String,\n      default: '',\n    },\n    // 文件大小\n    fileSizeLimit: {\n      type: Object,\n      default: () => ({\n        video: 100, // 视频100M\n        image: 5, // 图片5M\n      }),\n    },\n  },\n  emits: ['handleSuccess', 'update:ids'],\n  setup (props, { emit }) {\n    const fileList = ref<FileList[]>([])\n\n    // 初始化文件数据方法\n    const initData = () => {\n      if (props.ids) {\n        props.getFileList({\n          ids: props.ids,\n          setFileList: setFileList,\n        })\n      }\n    }\n    onMounted(() => {\n      initData()\n    })\n\n    const setFileList = (list: FileList[]) => {\n      fileList.value = list\n    }\n\n    const dialogImageUrl = ref('')\n    const dialogVisible = ref(false)\n\n    // 删除文件\n    const handleRemove = (file: any, newFileList: any) => {\n      fileList.value = newFileList\n      emit('handleSuccess', fileList.value)\n      emit('update:ids', fileList.value.map(item => { return item.id }).join(','))\n    }\n\n    // 文件预览\n    const handlePictureCardPreview = (file: { url: string; }) => {\n      // 判断图片还是文件\n      const fileName = file.url.split('/')[file.url.split('/').length - 1]\n\n      if (/\\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(fileName)) {\n        dialogImageUrl.value = file.url\n        dialogVisible.value = true\n      } else {\n        // 简单处理下载，浏览器不能在线预览则调用下载\n        window.open(file.url)\n      }\n    }\n\n    // 图片上传前的校验\n    const handelBeforeUpload = (file: File) => {\n      dialogImageUrl.value = ''\n      const fileSizeLimit: fileSizeLimit = props.fileSizeLimit\n      const type = file.type.split('/')[0]\n      if (file.size > fileSizeLimit[type] * 1024 * 1024) {\n        HlMessage.warning(\n          type === 'video'\n            ? `视频文件不能超过 ${fileSizeLimit[type]} MB`\n            : `图片文件不能超过 ${fileSizeLimit[type]} MB`,\n        )\n        return false\n      }\n      return true\n    }\n\n    // 文件限制提示\n    const handleExceed = (files: string | any[], newFileList: string | any[]) => {\n      HlMessage.warning(\n        `当前限制选择 ${props.limit} 个文件，本次选择了 ${files.length} 个文件，共选择了 ${files.length + newFileList.length} 个文件`,\n      )\n    }\n\n    // 上传成功\n    const handleSuccess = (res: any) => {\n      if (+res.code === 0) {\n        console.log(res.data)\n        // 普通上传\n        if (props.showFileList) {\n          fileList.value.push({\n            ...res.data,\n            name: res.data.originalName,\n          })\n          emit('handleSuccess', fileList.value)\n          emit('update:ids', fileList.value.map(item => { return item.id }).join(','))\n        } else {\n          // 导入上传\n          emit('handleSuccess', res)\n        }\n      } else {\n        emit('handleSuccess', res)\n      }\n    }\n    return {\n      dialogImageUrl,\n      dialogVisible,\n      handleRemove,\n      handlePictureCardPreview,\n      handelBeforeUpload,\n      handleSuccess,\n      handleExceed,\n      fileList,\n      setFileList,\n      PREFIX,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport FileUpload from './src/file-upload.vue'\n\nexport const FxFileUpload = withInstall(FileUpload)\nexport default FxFileUpload\n\nexport * from './src/types'\n","<template>\n  <div\n    class=\"fx-page-detail\"\n    :class=\"{\n      'has-required': hasRequired,\n      'readonly': readonly,\n      'multiple': multiple\n    }\"\n    :style=\"[\n      !hasAffix ? '--affix-height: 0px' : '',\n      !multiple && hasMap ? 'height: calc(100% - var(--affix-height))' : '',\n      multiple && hasMap ? 'max-height: calc(100% - var(--affix-height))' : '',\n      !multiple && !hasMap ? 'min-height: calc(100% - var(--affix-height))' : '',\n    ]\"\n  >\n    <div class=\"header\">\n      <div class=\"title\"><span class=\"line\"></span><span class=\"txt\">{{ title }}</span></div>\n      <slot name=\"action\"></slot>\n    </div>\n    <div class=\"content\" :class=\"{ 'has-map': hasMap }\">\n      <slot name=\"content\">\n        <template v-if=\"hasMap\">\n          <hl-form ref=\"formRef\" :width=\"['col-24', 'col-24']\" class=\"left-form\" v-bind=\"formProps\">\n            <hl-group dir=\"vertical\" gap-y=\"var(--lg)\" class=\"form-scrollbar\">\n              <slot></slot>\n            </hl-group>\n          </hl-form>\n          <div class=\"right-map\" :class=\"multiple && hasMap ? 'max-h-full' : 'h-full'\">\n            <slot name=\"map\"></slot>\n          </div>\n        </template>\n        <template v-else>\n          <hl-form\n            ref=\"formRef\"\n            :width=\"['col-24', 'col-24']\"\n            class=\"hl-row grid grid-direction-vertical count-3 page-form\"\n            v-bind=\"formProps\"\n          >\n            <slot></slot>\n          </hl-form>\n        </template>\n      </slot>\n    </div>\n  </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue'\nimport { HlForm, HlGroup } from 'hongluan-ui'\n\nexport default defineComponent({\n  name: 'PageDetail',\n  components: { HlForm, HlGroup },\n  props: {\n    title: String,\n    hasMap: Boolean,\n    hasAffix: {\n      type: Boolean,\n      default: true,\n    },\n    multiple: Boolean,\n    hasRequired: Boolean,\n    readonly: Boolean,\n    formProps: {\n      type: Object,\n      default: () => ({}),\n    },\n  },\n  setup() {\n    const formRef = ref()\n    return {\n      formRef,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport PageDetail from './src/page-detail.vue'\n\nexport const FxPageDetail = withInstall(PageDetail)\nexport default FxPageDetail\n","<template>\n  <div class=\"fx-anim-page\">\n    <transition name=\"fade-transform\" mode=\"out-in\">\n      <div v-if=\"showContent\" class=\"page-content\">\n        <slot></slot>\n      </div>\n    </transition>\n    <!-- <router-view v-slot=\"{ Component }\">\n      <transition name=\"fade-transform\" mode=\"out-in\"> <component :is=\"Component\" /> </transition>\n    </router-view> -->\n  </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, getCurrentInstance, ref, watch } from 'vue'\n\nexport default defineComponent({\n  name: 'AnimPage',\n  props: {\n    path: {\n      type: String,\n      default: '',\n    },\n  },\n  setup(props) {\n    const showContent = ref(false)\n    const instance = getCurrentInstance()\n    const route = instance.appContext.config.globalProperties.$route\n    watch(\n      () => route?.path,\n      () => {\n        showContent.value = route.path === props.path\n      },\n      { immediate: true },\n    )\n    return {\n      showContent,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport AnimPage from './src/index.vue'\n\nexport const FxAnimPage = withInstall(AnimPage)\nexport default FxAnimPage\n\n","<template>\n  <hl-button\n    type=\"primary\"\n    class=\"action-button\"\n    :class=\"[size, type]\"\n    icon-position=\"left\"\n    @click=\"$emit('click')\"\n  >\n    {{ label }}\n    <template #icon>\n      <hl-icon>\n        <slot name=\"icon\">\n          <svg\n            viewBox=\"0 0 22 22\"\n            version=\"1.1\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            class=\"icon-system\"\n            name=\"SystemAdd\"\n            iconId=\"icon_1538\"\n          ><!----><g stroke=\"currentColor\"><path d=\"M4,11 L18,11 M11,4 L11,18\" /></g></svg>\n        </slot>\n      </hl-icon>\n    </template>\n  </hl-button>\n</template>\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nimport { HlIcon, HlButton } from 'hongluan-ui'\n\nexport default defineComponent({\n  name: 'ActionButton',\n  components: { HlIcon, HlButton },\n  props: {\n    label: {\n      type: String,\n      default: '',\n    },\n    size: {\n      type: String,\n      default: 'md',\n    },\n    type: {\n      type: String,\n      default: 'main',\n    },\n  },\n  emits: ['click'],\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport ActionButton from './src/action-button.vue'\n\nexport const FxActionButton = withInstall(ActionButton)\nexport default FxActionButton\n","<template>\n  <table-search-wrapper\n    class=\"fx-search-bar\"\n    :show-search-bar=\"searchItems.length > 0\"\n    :search-items=\"searchItems\"\n    :show-adv-search=\"showAdvSearch\"\n    :hide-header-line=\"hideHeaderLine\"\n    :show-reset-at-simple-mode=\"showResetAtSimpleMode\"\n    @search=\"searchBarChanged\"\n    @change-height=\"setContentHeight\"\n  >\n    <template v-for=\"s in searchItemsSlots\" #[s]=\"itemData\">\n      <slot :name=\"s\" v-bind=\"itemData\"></slot>\n    </template>\n  </table-search-wrapper>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType, computed } from 'vue'\nimport TableSearchWrapper from '../../page-table-v2/src/table-search-wrapper.vue'\nimport { TagItem } from '../../page-table-v2/src/types'\nimport { Utils } from '../../page-table-v2/src/utils'\n\nexport default defineComponent({\n  name: 'SearchBar',\n  components: { TableSearchWrapper },\n  props: {\n    showAdvSearch: {\n      type: Boolean,\n      default: true,\n    },\n    // 搜索条件\n    searchItems: {\n      type: Array as PropType<any[]>,\n      default: () => [],\n    },\n    hideHeaderLine: Boolean,\n    showResetAtSimpleMode: Boolean,\n  },\n  emits: ['search', 'height-changed'],\n  setup (props, { emit }) {\n    const searchItemsSlots = computed(() => {\n      const result: string[] = []\n      props.searchItems.forEach(si => {\n        if (si.type === 'slot' && si.slotName) {\n          result.push(si.slotName)\n        }\n      })\n      return result\n    })\n\n    const searchBarChanged = (searchArr: TagItem[], searchType: number) => {\n      let currentSearchTags: TagItem[] = []\n      if (searchType === 1) { // 简单搜索，只有一个搜索项\n        const idx = currentSearchTags.findIndex(st => st.key === searchArr[0].key)\n        if (idx > -1) {\n          currentSearchTags[idx] = searchArr[0]\n        } else {\n          currentSearchTags.push(searchArr[0])\n        }\n      } else { // 高级搜索\n        currentSearchTags = searchArr\n      }\n      emit('search', { ...Utils.getSearchParams(currentSearchTags).mapParams })\n    }\n\n    const setContentHeight = (val: number) => {\n      emit('height-changed', val)\n    }\n\n    return {\n      searchItemsSlots,\n      searchBarChanged,\n      setContentHeight,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport SearchBar from './src/search-bar.vue'\n\nexport const FxSearchBar = withInstall(SearchBar)\nexport default FxSearchBar\n","<template>\n  <div\n    class=\"fx-tabs\"\n  >\n    <div\n      v-for=\"t in data\"\n      :key=\"t.value\"\n      :class=\"{ tab: true, active: cur === t.value }\"\n      @click=\"change(t)\"\n    >\n      <span class=\"label\">{{ t.label }}</span>\n      <span class=\"mark\"></span>\n    </div>\n  </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, ref, PropType, watch } from 'vue'\n\nexport default defineComponent({\n  name: 'Tabs',\n  components: {},\n  props: {\n    data: Array as PropType<Array<{ label: string; value: string; }>>,\n    active: String,\n  },\n  emits: ['change'],\n  setup(props, { emit }) {\n    const cur = ref(props.active || props.data?.[0].value || '')\n\n    const change = (t: { label: string; value: string; }) => {\n      cur.value = t.value\n      emit('change', t)\n    }\n\n    watch(() => props.active, newVal => {\n      cur.value = newVal\n      emit('change', props.data.find(d => d.value === newVal))\n    })\n\n    return {\n      cur,\n      change,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport Tabs from './src/tabs.vue'\n\nexport const FxTabs = withInstall(Tabs)\nexport default FxTabs\n","<template>\n  <div class=\"fx-v-panel\" @mouseenter=\"enter()\" @mouseleave=\"leave()\">\n    <hl-panel\n      class=\"panel-card\"\n      padding=\"calc(var(--xxs) * 5)\"\n      borderless\n      :collapsed=\"collapse\"\n      :style=\"bodyHeight ? `--panel-body-height: ${bodyHeight}` : ''\"\n    >\n      <template #header>\n        <div class=\"panel-header-left\">\n          <hl-icon size=\"lg\">\n            <svg viewBox=\"0 0 27 16\" xmlns=\"http://www.w3.org/2000/svg\">\n              <g stroke=\"none\" stroke-width=\"1\" fill=\"#71F8FC\" fill-rule=\"evenodd\">\n                <polygon points=\"23.6666667 0 27 0 19.3333333 16 16 16\" />\n                <polygon fill-opacity=\"0.7\" points=\"15.6666667 0 19 0 11.3333333 16 8 16\" />\n                <polygon fill-opacity=\"0.4\" points=\"7.66666667 0 11 0 3.33333333 16 5.69405634e-14 16\" />\n              </g>\n            </svg>\n          </hl-icon>\n        </div>\n        <h2 class=\"panel-title\">\n          <slot name=\"title\">\n            {{ title }}\n          </slot>\n        </h2>\n        <div class=\"panel-header-right\">\n          <slot name=\"action\"></slot>\n        </div>\n      </template>\n      <slot></slot>\n    </hl-panel>\n    <hl-group\n      v-if=\"isHovering() && (collapsable || sizes?.length)\"\n      dir=\"vertical\"\n      gap-y=\"var(--xxs)\"\n      :class=\"['action-bar', actionBarDir]\"\n      @mouseenter=\"enter()\"\n      @mouseleave=\"leave()\"\n    >\n      <div class=\"icon-wrapper\">\n        <hl-icon v-if=\"collapsable\" size=\"sm\" class=\"cursor-pointer\" @click=\"changeStatus\">\n          <fill-maximize2 v-if=\"!collapse\" />\n          <fill-minimize2 v-else />\n        </hl-icon>\n      </div>\n      <hl-group\n        v-if=\"sizes?.length && !collapse\"\n        class=\"size-options font-lg\"\n        dir=\"vertical\"\n        gap-y=\"var(--xxs)\"\n        align=\"items-middle\"\n      >\n        <span\n          v-for=\"s in sizes\"\n          :key=\"s\"\n          :class=\"{'active': currentSize === s}\"\n          @click=\"changeSize(s)\"\n        >\n          {{ s }}\n        </span>\n      </hl-group>\n    </hl-group>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue'\nimport { HlPanel, HlIcon, HlGroup } from 'hongluan-ui'\nimport { FillMaximize2, FillMinimize2 } from '@hongluan-ui/icons'\nimport { useHovering } from 'hongluan-hooks'\nimport type { PropType } from 'vue'\n\nexport default defineComponent({\n  name: 'VPanel',\n  components: { HlPanel, HlIcon, HlGroup, FillMaximize2, FillMinimize2 },\n  props: {\n    title: {\n      type: String,\n      default: '',\n    },\n    bodyHeight: {\n      type: String,\n      default: '',\n    },\n    actionBarDir: {\n      type: String as PropType<'left' | 'right'>,\n      default: 'right',\n    },\n    collapsable: Boolean,\n    sizes: Array,\n    defaultSize: String,\n  },\n  emits: ['size-change', 'collapse-change'],\n  setup(props, { emit }) {\n    const collapse = ref(false)\n    const currentSize = ref(props.defaultSize ?? (props.sizes?.[0] ?? ''))\n\n    const { enter, leave, isHovering } = useHovering()\n\n    const changeStatus = () => {\n      collapse.value = !collapse.value\n      emit('collapse-change', collapse.value)\n    }\n    const changeSize = (size: string) => {\n      currentSize.value = size\n      emit('size-change', size)\n    }\n\n    watch(() => props.defaultSize, val => {\n      currentSize.value = val\n    })\n\n    return {\n      collapse,\n      currentSize,\n      changeStatus,\n      changeSize,\n      enter,\n      leave,\n      isHovering,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport VPanel from './src/index.vue'\n\nexport const FxVPanel = withInstall(VPanel)\nexport default FxVPanel\n","<template>\n  <!-- 面板内容 begin-->\n  <hl-panel class=\"page-panel\" :body-padding=\"bodyPadding\" borderless :style=\"[bodyHeight ? `--panel-body-height: ${bodyHeight}` : '', width ? `width: ${width}` : '']\">\n    <template #header>\n      <div class=\"panel-header-left\">\n        <hl-icon size=\"lg\">\n          <svg viewBox=\"0 0 27 16\" xmlns=\"http://www.w3.org/2000/svg\">\n            <g stroke=\"none\" stroke-width=\"1\" fill=\"#71F8FC\" fill-rule=\"evenodd\">\n              <polygon points=\"23.6666667 0 27 0 19.3333333 16 16 16\" />\n              <polygon fill-opacity=\"0.7\" points=\"15.6666667 0 19 0 11.3333333 16 8 16\" />\n              <polygon fill-opacity=\"0.4\" points=\"7.66666667 0 11 0 3.33333333 16 5.69405634e-14 16\" />\n            </g>\n          </svg>\n        </hl-icon>\n      </div>\n      <h2 class=\"panel-title\">\n        <slot name=\"title\">\n          {{ title }}\n        </slot>\n      </h2>\n      <div class=\"panel-header-right\">\n        <slot name=\"action\"></slot>\n        <hl-icon v-if=\"showClose\" @click=\"$emit('close')\">\n          <two-close />\n        </hl-icon>\n      </div>\n    </template>\n    <slot></slot>\n  </hl-panel>\n  <!-- 面板内容 end-->\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nimport { HlPanel, HlIcon } from 'hongluan-ui'\nimport { TwoClose } from '@hongluan-ui/icons'\n\nexport default defineComponent({\n  name: 'VModal',\n  components: { HlPanel, HlIcon, TwoClose },\n  props: {\n    title: {\n      type: String,\n      default: '',\n    },\n    width: {\n      type: String,\n      default: '',\n    },\n    bodyHeight: {\n      type: String,\n      default: '',\n    },\n    bodyPadding: {\n      type: String,\n      default: '',\n    },\n    showClose: {\n      type: Boolean,\n      default: true,\n    },\n  },\n  emits: ['close'],\n  setup() {\n    return {}\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport VModal from './src/index.vue'\n\nexport const FxVModal = withInstall(VModal)\nexport default FxVModal\n","import { isReactive, nextTick, onBeforeUnmount, toRef, watch } from 'vue'\n\nimport type { Ref } from 'vue'\nimport type { Indexable } from 'fx-front-utils'\n\nfunction useRenderChart(cb: () => void, data: Ref<unknown> | Indexable<any>, field = 'chartData') {\n  const watcherData = isReactive(data) ? toRef(data, field as keyof typeof data) : data\n  const unwatcher = watch(watcherData, () => {\n    nextTick(() => {\n      cb()\n    })\n  }, {\n    immediate: true,\n    deep: true,\n  })\n\n  onBeforeUnmount(() => {\n    unwatcher && unwatcher()\n  })\n}\n\nexport { useRenderChart }\n","import { getCurrentInstance } from 'vue'\nimport { getAllConfig } from '@fx-front-framework/utils/config'\n\nimport type { InstallOptions } from '@fx-front-framework/utils/config'\n\nexport function useGlobalConfig(): InstallOptions {\n  const vm: any = getCurrentInstance()\n  if ('$FX' in vm.proxy) {\n    return vm.proxy.$FX\n  }\n  return getAllConfig()\n}\n","import { ref } from 'vue'\n\nfunction useMaxScreen(domQuery?: string) {\n  const isMaxScreen = ref(true)\n\n  const changeFullScreen = () => {\n    isMaxScreen.value = !isMaxScreen.value\n    if (isMaxScreen.value) {\n      const doc: any = document\n      if (doc.exitFullscreen) {\n        doc.exitFullscreen()\n      } else if (doc.mozCancelFullScreen) {\n        doc.mozCancelFullScreen()\n      } else if (doc.webkitExitFullscreen) {\n        doc.webkitExitFullscreen()\n      }\n    } else {\n      const element: any = domQuery ? document.querySelector(domQuery) : document.documentElement\n      if (element.requestFullscreen) {\n        element.requestFullscreen()\n      } else if (element.mozRequestFullScreen) {\n        element.mozRequestFullScreen()\n      } else if (element.webkitRequestFullscreen) {\n        element.webkitRequestFullscreen()\n      } else if (element.msRequestFullscreen) {\n        element.msRequestFullscreen()\n      }\n    }\n  }\n\n  return {\n    isMaxScreen,\n    changeFullScreen,\n  }\n}\n\nexport { useMaxScreen }\n","import { computed, onBeforeUnmount, onMounted, ref } from 'vue'\n\nfunction useTextTimer() {\n  const dates = ref('')\n  const day = ref('')\n  const times = ref('00:00:00')\n  const fullDatetime = computed(() => dates.value + ' ' + times.value + ' ' + day.value)\n  let timerHandler = 0\n\n  const getDay = (num: number) => {\n    const week = [\n      '星期天',\n      '星期一',\n      '星期二',\n      '星期三',\n      '星期四',\n      '星期五',\n      '星期六',\n    ]\n    return week[num]\n  }\n\n  const refreshTime = () => {\n    const date = new Date()\n    day.value = getDay(date.getDay())\n    dates.value =\n        date.getFullYear() +\n        '年' +\n        (date.getMonth() + 1) +\n        '月' +\n        date.getDate() +\n        '日'\n    timerHandler = window.setInterval(() => {\n      const curDate = new Date()\n      let h: number | string = curDate.getHours()\n      let m: number | string = curDate.getMinutes()\n      let s: number | string = curDate.getSeconds()\n      if (h >= 0 && h < 10) {\n        h = '0' + h\n      }\n      if (m >= 0 && m < 10) {\n        m = '0' + m\n      }\n      if (s >= 0 && s < 10) {\n        s = '0' + s\n      }\n      times.value = h + ':' + m + ':' + s\n    }, 1000)\n  }\n  onMounted(() => {\n    refreshTime()\n  })\n  onBeforeUnmount(() => {\n    timerHandler && window.clearInterval(Number(timerHandler))\n  })\n\n  return {\n    dates,\n    times,\n    day,\n    fullDatetime,\n  }\n}\n\nexport { useTextTimer }\n","import { useGlobalConfig } from '../use-global-config'\n\nconst isObject = (obj: any) => {\n  return Object.prototype.toString.call(obj) === '[object Object]'\n}\nconst defaultAttributes = [\n  'lineHeight',\n  'margin',\n  'fontSize',\n  'left',\n  'right',\n  'top',\n  'bottom',\n  'padding',\n  'itemWidth',\n  'itemHeight',\n  'itemGap',\n  'symbolSize',\n  'width',\n  'height',\n  'barMaxWidth',\n]\n\nfunction useResponsiveChart() {\n  const FX = useGlobalConfig()\n  const basicPX = FX.visualized.basicPX\n\n  const updateOptionToResponsive = (option: any, keyArr: string[] = defaultAttributes) => {\n    if (typeof option !== 'object') return\n    for (const key in option) {\n      if (option.hasOwnProperty(key)) {\n        const element = option[key]\n        const type = typeof element\n\n        if (keyArr.includes(key)) {\n          switch (type) {\n            case 'number':\n              option[key] = element * basicPX\n              break\n              // array\n            case 'object':\n              option[key] = element.map(item => typeof item !== 'number' ? item : item * basicPX)\n              break\n            default:\n              break\n          }\n        } else if (isObject(element)) {\n          updateOptionToResponsive(element, keyArr)\n        } else if (Array.isArray(element)) {\n          element.forEach(ele => updateOptionToResponsive(ele, keyArr))\n        }\n      }\n    }\n  }\n\n  return {\n    updateOptionToResponsive,\n    defaultAttributes,\n  }\n}\n\nexport { useResponsiveChart }\n","import { ref, onMounted, onActivated, onBeforeMount, onDeactivated } from 'vue'\n\nfunction useTele (autoDestroy?: boolean) {\n  const showTeleport = ref(false)\n\n\n  onMounted(() => {\n    showTeleport.value = true\n  })\n  onActivated(() => {\n    showTeleport.value = true\n  })\n\n  onBeforeMount(() => {\n    if (autoDestroy) {\n      showTeleport.value = false\n    }\n  })\n  onDeactivated(() => {\n    if (autoDestroy) {\n      showTeleport.value = false\n    }\n  })\n\n  return {\n    showTeleport,\n  }\n}\n\nexport { useTele }\n","import { h, ref, onBeforeUnmount } from 'vue'\nimport { omit } from 'lodash-es'\nimport { HlMessage } from 'hongluan-ui'\nimport { ModelessDialogManager } from 'hongluan-business-ui'\n\nexport interface PreviewItem {\n  [x: string]: any\n  id: string\n  name: string\n  url: string\n  sourceType: 1 | 2 // 1: img, 2: video,\n}\n\nfunction usePreviewer() {\n  const modelessIds = ref<string[]>([])\n\n  const showModelessDialogManager = (item: PreviewItem, initVideoWidth: string, limitNum?: number | null) => {\n    ModelessDialogManager.show({\n      id: item.id,\n      title: item.name,\n      useDock: false,\n      snapshot: false,\n      body: item.sourceType === 2\n        ? h('video',\n          {\n            class: 'videoBox',\n            src: `${item.url}`,\n            autoPlay: true,\n            controls: true,\n            muted: true,\n            style: {\n              width: initVideoWidth,\n            },\n          },\n        )\n        : h('img',\n          {\n            class: 'videoBox',\n            src: `${item.url}`,\n            style: {\n              width: initVideoWidth,\n            },\n          },\n        ),\n      resize: true,\n      onResize: (dlg: HTMLDivElement) => {\n        const videoNode = dlg.querySelector('.videoBox')\n        videoNode?.setAttribute('style', 'width:100%')\n      },\n      onClose: () => {\n        limitNum && modelessIds.value.splice(\n          modelessIds.value.findIndex(el => el === item.id),\n          1,\n        )\n      },\n      ...omit(item, ['id', 'name', 'url', 'sourceType']),\n    })\n  }\n  const openPreviewer = (item: PreviewItem, limitNum?: number | null, initVideoWidth = '500px') => {\n    if (limitNum) {\n      if (!modelessIds.value.includes(`${item.id}`)) {\n        if (modelessIds.value.length <= limitNum - 1) {\n          modelessIds.value.push(`${item.id}`)\n          showModelessDialogManager(item, initVideoWidth, limitNum)\n        } else {\n          HlMessage.warning({\n            message: `最多打开${limitNum}路视频!`,\n          })\n        }\n      } else {\n        HlMessage.warning({\n          message: '已打开!',\n        })\n      }\n    } else {\n      showModelessDialogManager(item, initVideoWidth, limitNum)\n    }\n  }\n\n  onBeforeUnmount(() => {\n    modelessIds.value = []\n    ModelessDialogManager.closeAll()\n  })\n\n  return {\n    openPreviewer,\n  }\n}\n\nexport { usePreviewer }\n","import { ref, onMounted } from 'vue'\n\nfunction useIframe() {\n  const isIframe = ref(false)\n\n  onMounted(() => {\n    isIframe.value = window.parent !== window\n  })\n\n  return {\n    isIframe,\n  }\n}\n\nexport { useIframe }\n","<template>\n  <div ref=\"chartContainer\" class=\"echart-container\"></div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, onMounted, PropType } from 'vue'\nimport { merge } from 'lodash-es'\nimport * as echarts from 'echarts/core'\nimport { BarChart } from 'echarts/charts'\nimport {\n  TitleComponent,\n  TooltipComponent,\n  LegendComponent,\n  GridComponent,\n  DataZoomComponent,\n} from 'echarts/components'\nimport { CanvasRenderer } from 'echarts/renderers'\nimport { useEChart, useScrollEChartData } from 'hongluan-hooks'\nimport { useRenderChart, useResponsiveChart } from '@fx-front-framework/hooks'\n\nimport type { BarChartData } from './types'\n\necharts.use([\n  BarChart,\n  LegendComponent,\n  TitleComponent,\n  TooltipComponent,\n  GridComponent,\n  DataZoomComponent,\n  CanvasRenderer,\n])\n\nexport default defineComponent({\n  name: 'VColumnChart',\n  props: {\n    chartData: {\n      type: Array as PropType<BarChartData[]>,\n      default: () => [],\n    },\n    barWidth: {\n      type: Number,\n      default: 8,\n    },\n    barColor: {\n      type: [String, Array] as PropType<string | [string, string]>,\n      default: () => ['#71F8FC', 'rgba(0,250,255,0.16)'],\n    },\n    backgroundColor: {\n      type: String,\n      default: 'rgba(56,75,103,0.16)',\n    },\n    // 每次滚动个数\n    scrollCount: {\n      type: Number,\n      default: 4,\n    },\n    // 每次展示个数\n    showCount: {\n      type: Number,\n      default: Number.MAX_SAFE_INTEGER,\n    },\n    // 定时器时间间隔\n    interval: {\n      type: Number,\n      default: 5000,\n    },\n    xAxis: {\n      type: Object,\n      default: () => ({}),\n    },\n    yAxis: {\n      type: Object,\n      default: () => ({}),\n    },\n    hoverStop: Boolean,\n    isVertical: {\n      type: Boolean,\n      default: true,\n    },\n    // echarts.tooltip\n    tooltip: {\n      type: Object,\n      default: () => ({}),\n    },\n    // echarts.grid\n    grid: {\n      type: Object,\n      default: () => ({}),\n    },\n  },\n  setup(props) {\n    const { chartContainer, setChartOption, addChartEvent } = useEChart()\n    const { updateOptionToResponsive } = useResponsiveChart()\n\n    const renderChart = (chartData: BarChartData[]) => {\n      const colorDir: [number, number, number, number] = props.isVertical ? [0, 0, 0, 1] : [1, 0, 0, 0]\n      const option = {\n        tooltip: merge({\n          trigger: 'axis',\n          axisPointer: {\n            type: 'none',\n          },\n          extraCssText: 'border-radius: 0;',\n          formatter: (params: any) => `\n          <div class=\"font-md\" style=\"background-color:#fff;border-raduis:0;\">\n            ${params[0].marker}\n            <span>${params[0].axisValue} <span style=\"font-weight: bold; margin-left: var(--md)\">${params[0].value}</span></span>\n          </div>\n          `,\n        }, props.tooltip),\n        grid: merge({\n          top: '10',\n          left: '0%',\n          right: '10',\n          bottom: '0%',\n          containLabel: true,\n        }, props.grid),\n        xAxis: merge({\n          type: props.isVertical ? 'category' : 'value',\n          splitLine: {\n            show: props.isVertical ? false : true,\n            lineStyle: {\n              type: 'solid',\n              color: '#2B394E',\n            },\n          },\n          axisLabel: {\n            fontSize: 12,\n            color: '#6F8EA8',\n            lineHeight: 20,\n            margin: 5,\n          },\n          axisTick: {\n            alignWithLabel: true,\n          },\n          axisLine: {\n            lineStyle: {\n              color: '#2B394E',\n            },\n          },\n          data: props.isVertical ? chartData.map(d => d.label) : null,\n        }, props.xAxis),\n        yAxis: merge({\n          type: props.isVertical ? 'value' : 'category',\n          splitNumber: 3,\n          splitLine: {\n            show: props.isVertical ? true : false,\n            lineStyle: {\n              type: 'solid',\n              color: '#2B394E',\n            },\n          },\n          axisLabel: {\n            fontSize: 12,\n            color: '#6F8EA8',\n            lineHeight: 20,\n          },\n          axisLine: {\n            lineStyle: {\n              color: '#2B394E',\n            },\n          },\n          data: props.isVertical ? null : chartData.map(d => d.label),\n        }, props.yAxis),\n        series: [\n          {\n            itemStyle: {\n              color: typeof props.barColor === 'string' ? props.barColor : new echarts.graphic.LinearGradient(...colorDir, [\n                { offset: 0, color: props.barColor[0] },\n                { offset: 1, color: props.barColor[1] },\n              ]),\n              borderRadius: [2, 2, 0, 0],\n            },\n            barWidth: props.barWidth,\n            showBackground: true,\n            backgroundStyle: {\n              color: props.backgroundColor,\n            },\n            data: chartData.map(d => d.value),\n            type: 'bar',\n          },\n        ],\n      }\n      updateOptionToResponsive(option)\n      setChartOption(option)\n    }\n\n    const { startScroll, stopScroll } = useScrollEChartData({\n      showCount: props.showCount,\n      scrollCount: props.scrollCount,\n      interval: props.interval,\n      chartData: props.chartData,\n    }, renderChart)\n\n    useRenderChart(startScroll, props)\n\n    onMounted(() => {\n      if (props.hoverStop) {\n        addChartEvent('mouseover', stopScroll)\n        addChartEvent('mouseout', startScroll)\n      }\n    })\n\n    return {\n      chartContainer,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport VColumnChart from './src/index.vue'\n\nexport const FxVColumnChart = withInstall(VColumnChart)\nexport default FxVColumnChart\n\nexport * from './src/types'\n","<template>\n  <div ref=\"chartContainer\" class=\"echart-container\"></div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue'\nimport * as echarts from 'echarts/core'\nimport { BarChart, PictorialBarChart } from 'echarts/charts'\nimport {\n  TitleComponent,\n  TooltipComponent,\n  LegendComponent,\n  GridComponent,\n  DataZoomComponent,\n} from 'echarts/components'\nimport { CanvasRenderer } from 'echarts/renderers'\nimport { useEChart } from 'hongluan-hooks'\nimport { useRenderChart, useResponsiveChart } from '@fx-front-framework/hooks'\n\nimport type { SpireColumnChartData } from './types'\n\necharts.use([\n  PictorialBarChart,\n  BarChart,\n  LegendComponent,\n  TitleComponent,\n  TooltipComponent,\n  GridComponent,\n  DataZoomComponent,\n  CanvasRenderer,\n])\n\nexport default defineComponent({\n  name: 'VSpireColumnChart',\n  props: {\n    chartData: {\n      type: Array as PropType<SpireColumnChartData[]>,\n      default: () => [],\n    },\n  },\n  setup(props) {\n    const { chartContainer, setChartOption } = useEChart()\n    const { updateOptionToResponsive } = useResponsiveChart()\n\n    const renderChart = () => {\n      const option = {\n        grid: {\n          left: '0',\n          top: '0',\n          right: '0',\n          bottom: '20%',\n        },\n        tooltip: {\n          axisPointer: {\n            type: 'none',\n          },\n          extraCssText: 'border-radius: 0;',\n          formatter: (params: any) => {\n            return params.componentType === 'series' ? `\n              <div class=\"font-md\" style=\"background-color:#fff;border-raduis:0;\">\n                ${params.marker}\n                <span>${params.data.name} <span style=\"font-weight: bold; margin-left: var(--md)\">${params.data.value}</span></span>\n              </div>\n            ` : ''\n          },\n        },\n        legend: {\n          data: props.chartData.map(d => ({\n            name: d.label,\n            itemStyle: {\n              color: {\n                type: 'linear',\n                x: 0,\n                y: 0,\n                x2: 0,\n                y2: 1,\n                colorStops: [{\n                  offset: 0,\n                  color: d.color[0],\n                },\n                {\n                  offset: 1,\n                  color: d.color[1],\n                },\n                ],\n                global: false,\n              },\n            },\n          })),\n          bottom: '-5',\n          icon: 'rect',\n          itemHeight: 12,\n          itemWidth: 12,\n          itemGap: 16,\n          textStyle: {\n            'color': '#84A4F6',\n          },\n        },\n        xAxis: {\n          type: 'category',\n          data: props.chartData.map(d => d.label),\n          axisLabel: {\n            show: false,\n          },\n          axisTick: {\n            show: false,\n          },\n          axisLine: {\n            show: false,\n          },\n          splitLine: {\n            'show': false,\n          },\n        },\n        yAxis: {\n          type: 'value',\n          axisLabel: {\n            show: false,\n          },\n          axisTick: {\n            show: false,\n          },\n          axisLine: {\n            show: false,\n          },\n          splitLine: {\n            show: false,\n          },\n        },\n        series: [\n          ...new Array(props.chartData.length).fill(0).map((_, idx) => ({\n            name: props.chartData[idx].label,\n            data: new Array(props.chartData.length).fill(0),\n            'stack': 'a',\n            'type': 'bar',\n          })),\n          {\n            type: 'pictorialBar',\n            name: '',\n            data: props.chartData.map(d => ({\n              name: d.label,\n              value: d.value,\n              label: {\n                show: true,\n                position: 'top',\n                fontSize: 14,\n                fontWeight: 'bold',\n                color: '#fff',\n              },\n              itemStyle: {\n                color: {\n                  type: 'linear',\n                  x: 0,\n                  y: 0,\n                  x2: 0,\n                  y2: 1,\n                  colorStops: [{\n                    offset: 0,\n                    color: d.color[0],\n                  },\n                  {\n                    offset: 1,\n                    color: d.color[1],\n                  },\n                  ],\n                  global: false,\n                },\n              },\n            })),\n            stack: 'a',\n            symbol: 'path://M0,10 L10,10 C5.5,10 5.5,5 5,0 C4.5,5 4.5,10 0,10 z',\n          },\n        ],\n      }\n      updateOptionToResponsive(option)\n      setChartOption(option)\n    }\n\n    useRenderChart(renderChart, props)\n\n    return {\n      chartContainer,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport VSpireColumnChart from './src/index.vue'\n\nexport const FxVSpireColumnChart = withInstall(VSpireColumnChart)\nexport default FxVSpireColumnChart\n\nexport * from './src/types'\n","<template>\n  <hl-group full=\"full-x\" align=\"items-middle\" gap=\"var(--md)\" style=\"height: 100%\">\n    <div\n      ref=\"chartContainer\"\n      class=\"static\"\n      :style=\"`min-height: ${showLabel ? height : '100%'}; min-width: ${showLabel ? height : '100%'}`\"\n    ></div>\n    <hl-group\n      v-if=\"showLabel\"\n      dir=\"vertical\"\n      align=\"items-center\"\n      :gap=\"legend.gapY\"\n      class=\"static p-r-md\"\n      style=\"width: 45%; height:100%; overflow-y:auto\"\n    >\n      <hl-group\n        v-for=\"(item, index) in chartData\"\n        :key=\"index\"\n        :gap=\"legend.gapX\"\n        align=\"items-middle items-between\"\n        :class=\"['cursor-pointer static', isHighlights[index] ? 'is-checked' : '']\"\n        :style=\"`opacity:${isHides[index] ? 0.2 : 1}`\"\n        @click=\"hideSerie(index)\"\n      >\n        <span class=\"echart-fill-rect static\" :style=\"`background-color:${item.color}`\"></span>\n        <span class=\"text-secondary font-md w-full checked:text-link\">{{ item.label }}</span>\n        <h3 class=\"font-lg font-din static\">{{ item.value }}</h3>\n      </hl-group>\n    </hl-group>\n  </hl-group>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, ref, onMounted, PropType } from 'vue'\nimport { useEChart } from 'hongluan-hooks'\nimport { HlGroup } from 'hongluan-ui'\nimport * as echarts from 'echarts/core'\nimport { PieChart } from 'echarts/charts'\nimport {\n  TitleComponent,\n  TooltipComponent,\n  LegendComponent,\n  GridComponent,\n  DataZoomComponent,\n} from 'echarts/components'\nimport { CanvasRenderer } from 'echarts/renderers'\nimport { useRenderChart, useResponsiveChart } from '@fx-front-framework/hooks'\nimport { merge } from 'lodash-es'\n\nimport type { PieChartData } from './types'\n\necharts.use([\n  PieChart,\n  LegendComponent,\n  TitleComponent,\n  TooltipComponent,\n  GridComponent,\n  DataZoomComponent,\n  CanvasRenderer,\n])\n\nexport default defineComponent({\n  name: 'VPieChart',\n  components: { HlGroup },\n  props: {\n    chartData: {\n      type: Array as PropType<PieChartData[]>,\n      default: () => [],\n    },\n    height: {\n      type: String,\n      default: 'calc(var(--xxl) * 5)',\n    },\n    radius: {\n      type: Array as PropType<string[]>,\n      default: () => ['20%', '70%'],\n    },\n    legend: {\n      type: Object as PropType<{ gap: string; }>,\n      default: () => ({ gapX: 'var(--sm)', gapY: 'var(--sm)' }),\n    },\n    title: {\n      type: String,\n      default: '',\n    },\n    fullTitle: {\n      type: Object,\n      default: () => ({}),\n    },\n    showLabel: {\n      type: Boolean,\n      default: true,\n    },\n    // echarts.tooltip\n    tooltip: {\n      type: Object,\n      default: () => ({}),\n    },\n  },\n  setup(props) {\n    const { chartContainer, setChartOption, addChartEvent } = useEChart()\n    const { updateOptionToResponsive } = useResponsiveChart()\n\n    const isHides = ref<boolean[]>([])\n    const isHighlights = ref<boolean[]>([])\n    const color = ref([] as string[])\n\n    const setColor = () => {\n      color.value = []\n      props.chartData.forEach((item, index) => {\n        if (item.value !== 0 && !isHides.value[index]) {\n          color.value.push(item.color, 'transparent')\n        }\n      })\n    }\n    const setChartData = (data: PieChartData[]) => {\n      const data1 = [] as PieChartData[]\n      const sum = data.reduce((prev, cur) => prev + cur.value, 0)\n      const nonZeroCount = data.filter(d => d.value).length\n      // 给每个数据后添加特定的透明的数据形成间隔\n      data.forEach((item, idx) => {\n        if (item.value !== 0 && !isHides.value[idx]) {\n          data1.push(item, {\n            label: '',\n            value: nonZeroCount <= 1 ? 0 : sum / 70, // 根据总值算间隔大小\n            color: '',\n            labelLine: {\n              show: false,\n              lineStyle: {\n                color: 'transparent',\n              },\n            },\n            itemStyle: {\n              color: 'transparent',\n            },\n          })\n        }\n      })\n      return data1\n    }\n    const renderChart = () => {\n      setColor()\n      const data1 = setChartData(props.chartData)\n      // 每层圆环大小\n      const radius2 = [Number(props.radius[1].split('%')[0]) - 10 + '%', Number(props.radius[1].split('%')[0]) + 4 + '%']\n      const radius3 = [Number(props.radius[1].split('%')[0]) + 4 + '%', Number(props.radius[1].split('%')[0]) + 8 + '%']\n\n      const option = {\n        tooltip: merge({\n          confine: true,\n          axisPointer: {\n            type: 'none',\n          },\n          extraCssText: 'border-radius: 0;',\n          formatter: (params: any) => {\n            return params.seriesIndex <= 1 && params.componentType === 'series' ? `\n              <div class=\"font-md\" style=\"background-color:#fff;border-raduis:0;\">\n                ${params.marker}\n                <span>${params.data.label} <span style=\"font-weight: bold; margin-left: var(--md)\">${params.data.value}</span></span>\n              </div>\n            ` : ''\n          },\n        }, props.tooltip),\n        title: [\n          merge({\n            text: props.title,\n            top: 'center',\n            left: 'center',\n            textStyle: {\n              color: '#6F8EA8',\n              fontSize: 14,\n            },\n          }, props.fullTitle),\n        ],\n        series: [\n          // 最外层圆环\n          {\n            type: 'pie',\n            radius: radius3,\n            center: ['50%', '50%'],\n            startAngle: 90,\n            selectedMode: 'single',\n            selectedOffset: 0,\n            itemStyle: {\n              color: (params: any) => color.value[params.dataIndex],\n            },\n            emptyCircleStyle: {\n              color: 'rgba(47,71,110,0.12)',\n            },\n            label: {\n              show: false,\n            },\n            data: data1,\n            emphasis: {\n              scale: true,\n            },\n          },\n          {\n            type: 'pie',\n            radius: radius2,\n            center: ['50%', '50%'],\n            startAngle: 90,\n            selectedMode: 'single',\n            selectedOffset: 0,\n            itemStyle: {\n              color: (params: any) => color.value[params.dataIndex],\n              opacity: 0.16,\n            },\n            emptyCircleStyle: {\n              color: 'rgba(47,71,110,0.12)',\n            },\n            label: {\n              show: false,\n            },\n            emphasis: {\n              scale: false,\n            },\n            data: data1,\n          },\n          {\n            type: 'pie',\n            radius: ['49%', '50%'],\n            center: ['50%', '50%'],\n            startAngle: 90,\n            selectedMode: 'single',\n            selectedOffset: 0,\n            itemStyle: {\n              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n                { offset: 0, color: 'rgba(64,83,112,0.6)' },\n                { offset: 0.5, color: 'rgba(0,0,0,0.00)' },\n                { offset: 1, color: 'rgba(64,83,112,0.6)' },\n              ]),\n            },\n            label: {\n              show: false,\n            },\n            emphasis: {\n              scale: false,\n            },\n            data: [100],\n          },\n          {\n            type: 'pie',\n            radius: '50%',\n            center: ['50%', '50%'],\n            startAngle: 90,\n            selectedMode: 'single',\n            selectedOffset: 0,\n            itemStyle: {\n              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n                { offset: 0, color: 'rgba(64,83,112,0.23)' },\n                { offset: 0.5, color: 'rgba(0,0,0,0)' },\n                { offset: 1, color: 'rgba(64,83,112,0.23)' },\n              ]),\n            },\n            label: {\n              show: false,\n            },\n            emphasis: {\n              scale: false,\n            },\n            data: [100],\n          },\n        ],\n      }\n      updateOptionToResponsive(option)\n      setChartOption(option)\n    }\n    const hideSerie = (idx: number) => {\n      isHides.value[idx] = !isHides.value[idx]\n      renderChart()\n    }\n\n    useRenderChart(renderChart, props)\n\n    onMounted(() => {\n      addChartEvent('click', (params: any) => {\n        if (params.componentType === 'series' && params.seriesIndex === 0) {\n          const idx = props.chartData.findIndex(c => c.label === params.data.label)\n          if (idx > -1) {\n            isHighlights.value.fill(false)\n            isHighlights.value[idx] = true\n          }\n        }\n      })\n    })\n\n    return {\n      chartContainer,\n      isHides,\n      isHighlights,\n      hideSerie,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport VPieChart from './src/index.vue'\n\nexport const FxVPieChart = withInstall(VPieChart)\nexport default FxVPieChart\n\nexport * from './src/types'\n","<template>\n  <hl-group full=\"full-x\" align=\"items-middle\" gap=\"var(--md)\" style=\"height: 100%\">\n    <div\n      ref=\"chartContainer\"\n      class=\"echart-container static\"\n      :style=\"`min-height: ${showLabel ? height : '100%'}; min-width: ${showLabel ? height : '100%'}`\"\n    ></div>\n    <hl-group\n      v-if=\"showLabel\"\n      dir=\"vertical\"\n      align=\"items-center\"\n      gap=\"var(--md)\"\n      class=\"static p-r-md\"\n      style=\"width: 45%\"\n    >\n      <hl-group\n        v-for=\"(item, index) in chartData\"\n        :key=\"index\"\n        :gap=\"legend.gap\"\n        align=\"items-middle items-between\"\n        :class=\"['cursor-pointer static', isHighlights[index] ? 'is-checked' : '']\"\n        :style=\"`opacity:${isHides[index] ? 0.2 : 1}`\"\n        @click=\"hideSerie(index)\"\n      >\n        <span class=\"echart-fill-rect static\" :style=\"`background-color:${item.color}`\"></span>\n        <span class=\"text-secondary font-md w-full text-link-checked\">{{ item.label }}</span>\n        <h3 class=\"font-lg font-din static\">{{ item.value }}</h3>\n      </hl-group>\n    </hl-group>\n  </hl-group>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, ref, onMounted, PropType } from 'vue'\nimport { merge } from 'lodash-es'\nimport { useEChart } from 'hongluan-hooks'\nimport * as echarts from 'echarts/core'\nimport { PieChart } from 'echarts/charts'\nimport {\n  TitleComponent,\n  TooltipComponent,\n  LegendComponent,\n  GridComponent,\n  DataZoomComponent,\n} from 'echarts/components'\nimport { CanvasRenderer } from 'echarts/renderers'\nimport { HlGroup } from 'hongluan-ui'\nimport { useRenderChart, useResponsiveChart } from '@fx-front-framework/hooks'\n\nimport type { PieChartData } from '../../pie-chart/src/types'\n\necharts.use([\n  PieChart,\n  LegendComponent,\n  TitleComponent,\n  TooltipComponent,\n  GridComponent,\n  DataZoomComponent,\n  CanvasRenderer,\n])\n\nexport default defineComponent({\n  name: 'VRosePieChart',\n  components: { HlGroup },\n  props: {\n    chartData: {\n      type: Array as PropType<PieChartData[]>,\n      default: () => [],\n    },\n    legend: {\n      type: Object as PropType<{ gap: string; }>,\n      default: () => ({ gap: 'var(--sm)' }),\n    },\n    height: {\n      type: String,\n      default: 'calc(var(--xxl) * 5)',\n    },\n    title: {\n      type: String,\n      default: '',\n    },\n    showLabel: {\n      type: Boolean,\n      default: true,\n    },\n    // echarts.tooltip\n    tooltip: {\n      type: Object,\n      default: () => ({}),\n    },\n  },\n  setup(props) {\n    const { chartContainer, setChartOption, addChartEvent } = useEChart()\n    const { updateOptionToResponsive } = useResponsiveChart()\n\n    const isHides = ref<boolean[]>([])\n    const isHighlights = ref<boolean[]>([])\n\n    const renderChart = () => {\n      const option = {\n        confine: true,\n        tooltip: merge({\n          axisPointer: {\n            type: 'none',\n          },\n          extraCssText: 'border-radius: 0;',\n          formatter: (params: any) => {\n            return params.seriesIndex === 0 && params.componentType === 'series' ? `\n              <div class=\"font-md\" style=\"background-color:#fff;border-raduis:0;\">\n                ${params.marker}\n                <span>${params.data.label} <span style=\"font-weight: bold; margin-left: var(--md)\">${params.data.value}</span></span>\n              </div>\n            ` : ''\n          },\n        }, props.tooltip),\n        title: [\n          {\n            text: props.title,\n            top: 'center',\n            left: 'center',\n            textStyle: {\n              color: '#6F8EA8',\n              fontSize: 14,\n            },\n          },\n        ],\n        series: [\n          {\n            name: '',\n            type: 'pie',\n            radius: ['40%', '90%'],\n            center: ['50%', '50%'],\n            roseType: 'radius',\n            minShowLabelAngle: 60,\n            left: '0',\n            itemStyle: {\n              color: (params: any) => props.chartData[params.dataIndex].color,\n            },\n            emptyCircleStyle: {\n              color: 'rgba(47,71,110,0.12)',\n            },\n            label: {\n              show: false,\n            },\n            labelLine: {\n              length: 1,\n              length2: 20,\n              smooth: true,\n            },\n            data: props.chartData.filter((_, idx) => !isHides.value[idx]),\n          },\n        ],\n      }\n      updateOptionToResponsive(option)\n      setChartOption(option)\n    }\n    const hideSerie = (idx: number) => {\n      isHides.value[idx] = !isHides.value[idx]\n      renderChart()\n    }\n\n    useRenderChart(renderChart, props)\n\n    onMounted(() => {\n      addChartEvent('click', (params: any) => {\n\n        if (params.componentType === 'series' && params.seriesIndex === 0) {\n          const idx = props.chartData.findIndex(c => c.label === params.data.label)\n          if (idx > -1) {\n            isHighlights.value.fill(false)\n            isHighlights.value[idx] = true\n          }\n        }\n      })\n    })\n\n    return {\n      chartContainer,\n      isHides,\n      isHighlights,\n      hideSerie,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport VRosePieChart from './src/index.vue'\n\nexport const FxVRosePieChart = withInstall(VRosePieChart)\nexport default FxVRosePieChart\n","<template>\n  <hl-scrollbar class=\"scrolling-bar-chart-container\" :style=\"{ height, '--bar-color': barStyle?.color }\">\n    <div class=\"scrolling-bar-chart\">\n      <div\n        v-for=\"(barItem, idx) in chartData\"\n        :key=\"idx\"\n        class=\"bar-item\"\n        :style=\"`${margin ? 'margin: ' + margin : ''}`\"\n      >\n        <div class=\"label-value m-b-xxs\">\n          <span class=\"label\" :class=\"isEmptyFunction ? '' : 'cursor-pointer'\" :style=\"getLabelStyle(barItem)\" @click=\"labelClick(barItem)\">{{\n            labelFormatter (barItem.label)\n          }}</span>\n          <span class=\"value\" :style=\"getValueStyle(barItem)\">{{ valueFormatter (getBarItemTotal(barItem)) }}</span>\n        </div>\n        <div\n          :class=\"['bar-bg', isStack ? 'stack' : '']\"\n          :style=\"{\n            backgroundColor: barItem?.barStyle?.backgroundColor || barStyle?.backgroundColor,\n            height: barItem?.barStyle?.width || barStyle?.width\n          }\"\n        >\n          <template v-if=\"isStack\">\n            <div\n              v-for=\"(subBarItem, sidx) in barItem.value\"\n              :key=\"sidx\"\n              class=\"bar\"\n              :style=\"{\n                background: subBarItem?.barStyle?.color || barStyle?.color,\n                width: `${subBarItem.value / maxVal * 100}%`\n              }\"\n            ></div>\n          </template>\n          <div\n            v-else\n            class=\"bar\"\n            :style=\"{\n              background: barItem?.barStyle?.color || barStyle?.color,\n              width: `${barItem.value / maxVal * 100}%`\n            }\"\n          ></div>\n        </div>\n      </div>\n    </div>\n  </hl-scrollbar>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, PropType, computed } from 'vue'\nimport { HlScrollbar } from 'hongluan-ui'\nimport type { ScrollingBarChartData } from './types'\n\nexport default defineComponent({\n  name: 'VScrollingBarChart',\n  components: { HlScrollbar },\n  props: {\n    height: {\n      type: String,\n      required: true,\n    },\n    margin: {\n      type: String,\n      default: '',\n    },\n    barStyle: {\n      type: Object as PropType<{ width: string; color: string; backgroundColor: string; }>,\n      default: () => ({\n        width: '1em',\n        color: '#71F8FC',\n        backgroundColor: 'rgba(47,71,110,0.12)',\n      }),\n    },\n    labelStyle: {\n      type: Object as PropType<Record<string, any>>,\n      default: () => ({\n        fontSize: '1em',\n        color: '#B5CEE3',\n      }),\n    },\n    valueStyle: {\n      type: Object as PropType<Record<string, any>>,\n      default: () => ({\n        fontSize: '1.2em',\n        color: '#B5CEE3',\n      }),\n    },\n    chartData: {\n      type: Array as PropType<ScrollingBarChartData[]>,\n      default: () => [],\n    },\n    labelFormatter: {\n      type: Function as PropType<(label: string) => string>,\n      default: (label: string) => label,\n    },\n    valueFormatter: {\n      type: Function as PropType<(value: number) => string>,\n      default: (value: number) => value,\n    },\n    labelClick: {\n      type: Function as PropType<(barItem: ScrollingBarChartData) => void>,\n      default: () => ({}),\n    },\n  },\n  setup (props) {\n    const isStack = computed(() => props.chartData.every(d => Array.isArray(d.value)))\n    const maxVal = computed(() => {\n      if (isStack.value) {\n        return Math.max(\n          ...props.chartData.map(d =>\n            (d.value as ScrollingBarChartData[]).reduce((prev, cur) => prev + (cur.value as number), 0),\n          ),\n        )\n      } else {\n        return Math.max(...props.chartData.map(d => (d.value as number)))\n      }\n    })\n    const isEmptyFunction = computed(() => {\n      return props.labelClick && props.labelClick.toString().includes('({})')\n    })\n    const getLabelStyle = (charItem: ScrollingBarChartData) => ({ ...props.labelStyle, ...(charItem?.labelStyle ?? {}) })\n    const getValueStyle = (charItem: ScrollingBarChartData) => ({ ...props.valueStyle, ...(charItem?.valueStyle ?? {}) })\n    const getBarItemTotal = (charItem: ScrollingBarChartData) => isStack.value ? (charItem.value as ScrollingBarChartData[]).reduce((prev, cur) => prev + (cur.value as number), 0) : charItem.value\n\n    return {\n      maxVal,\n      isStack,\n      getLabelStyle,\n      getValueStyle,\n      getBarItemTotal,\n      isEmptyFunction,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport VScrollingBarChart from './src/index.vue'\n\nexport const FxVScrollingBarChart = withInstall(VScrollingBarChart)\nexport default FxVScrollingBarChart\n\nexport * from './src/types'\n","<template>\n  <hl-scrollbar\n    class=\"scrolling-list-chart-container\"\n    :style=\"{ height, '--bar-color': barStyle?.color }\"\n  >\n    <div class=\"scrolling-list-chart\">\n      <div v-for=\"(barItem, idx) in chartData\" :key=\"idx\" class=\"list-item\" :style=\"itemStyle\">\n        <div class=\"list-box m-b-xxs\">\n          <slot name=\"label\" :row=\"barItem\">\n            <span class=\"label\" :style=\"getLabelStyle(barItem)\">\n              {{\n                labelFormatter(barItem.label)\n              }}\n            </span>\n          </slot>\n          <div\n            :class=\"['list-bg', isStack ? 'stack' : '']\"\n            :style=\"{\n              background: barItem?.barStyle?.background || barStyle?.background,\n              height: barItem?.barStyle?.width || barStyle?.width,\n            }\"\n          >\n            <template v-if=\"isStack\">\n              <div\n                v-for=\"(subBarItem, sidx) in barItem.value\"\n                :key=\"sidx\"\n                class=\"list\"\n                :style=\"{\n                  background: subBarItem?.barStyle?.color || barStyle?.color,\n                  width: `${(subBarItem.value / maxVal) * 100}%`,\n                }\"\n              ></div>\n            </template>\n            <div\n              v-else\n              class=\"list\"\n              :style=\"{\n                background: barItem?.barStyle?.color || barStyle?.color,\n                width: `${(barItem.value / maxVal) * 100}%`,\n              }\"\n            ></div>\n            <span class=\"value\" :style=\"getValueStyle(barItem)\">\n              {{\n                valueFormatter(getBarItemTotal(barItem))\n              }}\n            </span>\n          </div>\n        </div>\n      </div>\n    </div>\n  </hl-scrollbar>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, PropType, computed } from 'vue'\nimport { HlScrollbar } from 'hongluan-ui'\nimport { ScrollingListChartData } from './types'\n\nexport default defineComponent({\n  name: 'VScrollingListChart',\n  components: { HlScrollbar },\n  props: {\n    height: {\n      type: String,\n    },\n    itemStyle: {\n      type: Object as PropType<Record<string, any>>,\n      default: () => ({\n        margin: '4px 0 0',\n        height: '44px',\n        lineHeight: '44px',\n      }),\n    },\n    barStyle: {\n      type: Object as PropType<{\n        width: string\n        color: string\n        backgroundColor: string\n      }>,\n      default: () => ({\n        width: '1em',\n        color: '#71F8FC',\n        backgroundColor: 'none',\n      }),\n    },\n    labelStyle: {\n      type: Object as PropType<Record<string, any>>,\n      default: () => ({\n        fontSize: '1em',\n        color: '#FFFFFF',\n        width: '30%',\n      }),\n    },\n    valueStyle: {\n      type: Object as PropType<Record<string, any>>,\n      default: () => ({\n        fontSize: '1.2em',\n        color: '#FFFFFF',\n      }),\n    },\n    chartData: {\n      type: Array as PropType<ScrollingListChartData[]>,\n      default: () => [],\n    },\n    labelFormatter: {\n      type: Function as PropType<(label: string) => string>,\n      default: (label: string) => label,\n    },\n    valueFormatter: {\n      type: Function as PropType<(value: number) => string>,\n      default: (value: number) => value,\n    },\n  },\n  setup(props) {\n    const isStack = computed(() => props.chartData.every(d => Array.isArray(d.value)))\n    const maxVal = computed(() => {\n      if (isStack.value) {\n        return Math.max(\n          ...props.chartData.map(d => (d.value as ScrollingListChartData[]).reduce(\n            (prev, cur) => prev + (cur.value as number),\n            0,\n          )),\n        )\n      }\n      return Math.max(...props.chartData.map(d => d.value as number))\n    })\n\n    const getLabelStyle = (charItem: ScrollingListChartData) => ({\n      ...props.labelStyle,\n      ...(charItem?.labelStyle ?? {}),\n    })\n    const getValueStyle = (charItem: ScrollingListChartData) => ({\n      left: `${(charItem.value as number / maxVal.value) * 100}%`,\n      ...props.valueStyle,\n      ...(charItem?.valueStyle ?? {}),\n    })\n    const getBarItemTotal = (charItem: ScrollingListChartData) => (isStack.value\n      ? (charItem.value as ScrollingListChartData[]).reduce(\n        (prev, cur) => prev + (cur.value as number),\n        0,\n      )\n      : charItem.value)\n\n    return {\n      maxVal,\n      isStack,\n      getLabelStyle,\n      getValueStyle,\n      getBarItemTotal,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport VScrollingListChart from './src/index.vue'\n\nexport const FxVScrollingListChart = withInstall(VScrollingListChart)\nexport default FxVScrollingListChart\n\nexport * from './src/types'\n","<template>\n  <div ref=\"chartContainer\" class=\"echart-container\"></div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue'\nimport * as echarts from 'echarts/core'\nimport { FunnelChart } from 'echarts/charts'\nimport {\n  TitleComponent,\n  TooltipComponent,\n  LegendComponent,\n  GridComponent,\n  DataZoomComponent,\n} from 'echarts/components'\nimport { CanvasRenderer } from 'echarts/renderers'\nimport { useEChart } from 'hongluan-hooks'\nimport { useRenderChart, useResponsiveChart } from '@fx-front-framework/hooks'\n\nimport type { PyramidChartData } from './types'\n\necharts.use([\n  FunnelChart,\n  LegendComponent,\n  TitleComponent,\n  TooltipComponent,\n  GridComponent,\n  DataZoomComponent,\n  CanvasRenderer,\n])\n\nexport default defineComponent({\n  name: 'VPyramidChart',\n  props: {\n    chartData: {\n      type: Array as PropType<PyramidChartData[]>,\n      default: () => [],\n    },\n  },\n  setup(props) {\n    const { chartContainer, setChartOption } = useEChart()\n    const { updateOptionToResponsive } = useResponsiveChart()\n\n    const renderChart = () => {\n      const option = {\n        // tooltip: {\n        //   axisPointer: {\n        //     type: 'none',\n        //   },\n        //   extraCssText: 'border-radius: 0;',\n        //   formatter: (params: any) => {\n        //     return params.componentType === 'series' ? `\n        //       <div style=\"backgroundColor:#fff;borderRaduis:0\">\n        //         ${params.marker}\n        //         <span>${params.data.name} <span style=\"font-weight: bold; margin-left: var(--md)\">${params.data.value}</span></span>\n        //       </div>\n        //     ` : ''\n        //   },\n        // },\n        legend: {\n          data: props.chartData.map(d => d.label),\n          bottom: '-5',\n          icon: 'rect',\n          itemHeight: 12,\n          itemWidth: 12,\n          itemGap: 16,\n          textStyle: {\n            'color': '#84A4F6',\n          },\n        },\n        series: [{\n          type: 'funnel',\n          left: '10%',\n          top: 0,\n          bottom: 45,\n          width: '80%',\n          sort: 'ascending',\n          // min: 0,\n          // max: Math.max(...props.chartData.map(d => d.value)),\n          // minSize: '0%',\n          // maxSize: '100%',\n          gap: 2,\n          label: {\n            show: false,\n            position: 'inside',\n          },\n          emphasis: {\n            label: {\n              color: '#fff',\n              fontSize: 14,\n              formatter: '{c}',\n              backgroundColor: 'transparent',\n              fontWeight: 'bold',\n            },\n            labelLine: {\n              show: false,\n            },\n          },\n          data: props.chartData.map(d => ({\n            value: d.value,\n            name: d.label,\n            itemStyle: {\n              color: typeof d.color === 'string' ? d.color : new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n                { offset: 0, color: d.color[0] },\n                { offset: 1, color: d.color[1] },\n              ]),\n              borderWidth: 0,\n              borderRadius: [2, 2, 0, 0],\n            },\n          })),\n        }],\n      }\n      updateOptionToResponsive(option)\n      setChartOption(option)\n    }\n\n    useRenderChart(renderChart, props)\n\n    return {\n      chartContainer,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport VPyramidChart from './src/index.vue'\n\nexport const FxVPyramidChart = withInstall(VPyramidChart)\nexport default FxVPyramidChart\n\nexport * from './src/types'\n","<template>\n  <div ref=\"chartContainer\" class=\"echart-container\"></div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue'\nimport * as echarts from 'echarts/core'\nimport { LineChart, BarChart } from 'echarts/charts'\nimport {\n  TitleComponent,\n  TooltipComponent,\n  LegendComponent,\n  GridComponent,\n  DataZoomComponent,\n} from 'echarts/components'\nimport { CanvasRenderer } from 'echarts/renderers'\nimport { merge } from 'lodash-es'\nimport { useEChart } from 'hongluan-hooks'\nimport { useRenderChart, useResponsiveChart } from '@fx-front-framework/hooks'\n\nimport type { LineSeriesDataItem, LineChartDataItem } from './types'\n\necharts.use([\n  LineChart,\n  BarChart,\n  LegendComponent,\n  TitleComponent,\n  TooltipComponent,\n  GridComponent,\n  DataZoomComponent,\n  CanvasRenderer,\n])\n\nexport default defineComponent({\n  name: 'VLineChart',\n  props: {\n    // 指标及配置 如: [{ label: \"重大风险\", key: \"level1\", itemStyle: { color: \"#FD6161\" } }]\n    seriesData: {\n      required: true,\n      type: Array as PropType<LineSeriesDataItem[]>,\n    },\n    // y轴数据 如：[{  xValue: \"一月\", level1: 20, level2: 40, level3: 30, level4: 11 }]\n    chartData: {\n      required: true,\n      type: Array as PropType<LineChartDataItem[]>,\n      default: () => [],\n    },\n    xAxis: {\n      type: Object,\n      default: () => ({}),\n    },\n    yAxis: {\n      type: Object,\n      default: () => ({}),\n    },\n    grid: {\n      type: Object,\n      default: () => ({\n        top: '20',\n        left: '0',\n        right: '0',\n        bottom: '40',\n        containLabel: true,\n      }),\n    },\n    // echarts.legend\n    legend: {\n      type: Object,\n      default: () => ({}),\n    },\n    // echarts.tooltip\n    tooltip: {\n      type: Object,\n      default: () => ({}),\n    },\n    showArea: {\n      type: Boolean,\n      default: false,\n    },\n    // echarts.dataZoom\n    dataZoom: {\n      type: Array,\n      default: () => ([]),\n    },\n  },\n  setup(props) {\n    const { chartContainer, setChartOption } = useEChart()\n    const { updateOptionToResponsive } = useResponsiveChart()\n\n    const seriesItemStyle = {\n      itemStyle: {\n        color: '#F1E723',\n      },\n      showSymbol: false,\n      symbolSize: 4,\n      lineStyle: {\n        width: 2,\n      },\n      type: 'line',\n    }\n\n    const getSeriesData = () =>\n      props.seriesData.map(item => ({\n        ...JSON.parse(JSON.stringify(seriesItemStyle)),\n        itemStyle: item?.itemStyle ?? seriesItemStyle.itemStyle,\n        name: item.label,\n        data: props.chartData?.map(ele => ele[item.key]),\n        areaStyle: item.areaStyleColor ? {\n          opacity: 0.8,\n          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n            {\n              offset: 0,\n              color: item.areaStyleColor[0],\n            },\n            {\n              offset: 1,\n              color: item.areaStyleColor[1],\n            },\n          ]),\n        } : undefined,\n      }))\n\n    const renderChart = () => {\n      const option = {\n        grid: props.grid,\n        legend: merge({\n          data: props.seriesData.map(item => item.label),\n          icon: 'rect',\n          itemWidth: 10,\n          itemHeight: 10,\n          itemGap: 20,\n          textStyle: {\n            fontSize: 12,\n            color: '#A1A5B7',\n          },\n        }, props.legend),\n        tooltip: merge({\n          trigger: 'axis',\n          axisPointer: {\n            show: false,\n            lineStyle: {\n              color: 'rgba(255,255,255,0)',\n              type: 'solid',\n            },\n          },\n          textStyle: {\n            fontSize: 14,\n          },\n          extraCssText: 'border-radius: 0',\n        }, props.tooltip),\n        xAxis: merge({\n          axisLabel: {\n            fontSize: 12,\n            color: '#6F8EA8',\n            lineHeight: 24,\n            margin: 5,\n          },\n          axisTick: {\n            alignWithLabel: true,\n          },\n          axisLine: {\n            lineStyle: {\n              color: '#34435A',\n            },\n          },\n          type: 'category',\n          data: props.chartData?.map(item => item.xValue),\n        }, props.xAxis),\n        yAxis: merge({\n          splitLine: {\n            lineStyle: {\n              type: 'line',\n              color: '#253346',\n            },\n          },\n          axisLabel: {\n            fontSize: 12,\n            color: '#6F8EA8',\n            lineHeight: 24,\n          },\n          type: 'value',\n          nameTextStyle: {\n            color: '#6F8EA8',\n            align: 'left',\n            padding: [0, 0, 0, -22],\n          },\n        }, props.yAxis),\n        dataZoom: props.dataZoom,\n        series: [\n          ...getSeriesData(),\n          {\n            showBackground: true,\n            backgroundStyle: {\n              color: 'rgba(56,75,103,0.16)',\n            },\n            itemStyle: {\n              color: 'rgba(180, 180, 180, 0)',\n            },\n            barMaxWidth: 24,\n            name: '',\n            data: Array(props.chartData?.length).fill(0),\n            selectedMode: false,\n            type: 'bar',\n            tooltip: {\n              show: false,\n            },\n          },\n        ],\n      }\n      updateOptionToResponsive(option)\n      setChartOption(option)\n    }\n\n    useRenderChart(renderChart, props)\n\n    return {\n      chartContainer,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport VLineChart from './src/index.vue'\n\nexport const FxVLineChart = withInstall(VLineChart)\nexport default FxVLineChart\n\nexport * from './src/types'\n","<template>\n  <div ref=\"chartContainer\" class=\"echart-container\"></div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue'\nimport { merge } from 'lodash-es'\nimport * as echarts from 'echarts/core'\nimport { BarChart } from 'echarts/charts'\nimport {\n  TitleComponent,\n  TooltipComponent,\n  LegendComponent,\n  GridComponent,\n  DataZoomComponent,\n} from 'echarts/components'\nimport { CanvasRenderer } from 'echarts/renderers'\nimport { useEChart } from 'hongluan-hooks'\nimport { useRenderChart, useResponsiveChart } from '@fx-front-framework/hooks'\n\nimport type { StackBarLegendItem, StackBarChartDataItem } from './types'\n\necharts.use([\n  BarChart,\n  LegendComponent,\n  TitleComponent,\n  TooltipComponent,\n  GridComponent,\n  DataZoomComponent,\n  CanvasRenderer,\n])\n\nexport default defineComponent({\n  name: 'VStackedBarChart',\n  props: {\n    // 指标及配置 如: [{ label: \"重大风险\", key: \"greatRisk\", itemStyle: { color: \"#FD6161\" } }]\n    legend: {\n      required: true,\n      type: Array as PropType<StackBarLegendItem[]>,\n    },\n    // y轴数据 如：[{  xValue: \"一月\", greatRisk: 20, biggerRisk: 40, normalRisk: 30, lowRisk: 11 }]\n    chartData: {\n      required: true,\n      type: Array as PropType<StackBarChartDataItem[]>,\n      deflautl: () => [],\n    },\n    xAxis: {\n      type: Object,\n      default: () => ({}),\n    },\n    yAxis: {\n      type: Object,\n      default: () => ({}),\n    },\n    grid: {\n      type: Object,\n      default: () => ({\n        top: '20',\n        left: '0',\n        right: '0',\n        bottom: '40',\n        containLabel: true,\n      }),\n    },\n    // echarts.tooltip\n    tooltip: {\n      type: Object,\n      default: () => ({}),\n    },\n    // echarts.legend\n    legendReal: {\n      type: Object,\n      default: () => ({}),\n    },\n    // echarts.dataZoom\n    dataZoom: {\n      type: Array,\n      default: () => ([]),\n    },\n  },\n  setup(props) {\n    const { chartContainer, setChartOption } = useEChart()\n    const { updateOptionToResponsive } = useResponsiveChart()\n\n    const seriesItemStyle = {\n      itemStyle: {\n        borderRadius: [2, 2, 0, 0],\n      },\n      barWidth: 22,\n      type: 'bar',\n      stack: 'one',\n      showBackground: true,\n      backgroundStyle: {\n        color: 'rgba(56,75,103, 0.1)',\n      },\n    }\n\n    const getSeriesData = () => props.legend.map(item => ({\n      ...JSON.parse(JSON.stringify(seriesItemStyle)),\n      itemStyle: item?.itemStyle ?? seriesItemStyle.itemStyle,\n      barWidth: item?.barWidth ?? seriesItemStyle.barWidth,\n      name: item.label,\n      data: props.chartData?.map(ele => ele[item.key]),\n    }))\n\n    const renderChart = () => {\n      const option = {\n        grid: props.grid,\n        legend: merge({\n          data: props.legend.map(item => item.label),\n          bottom: '3%',\n          itemWidth: 10,\n          itemHeight: 10,\n          itemGap: 16,\n          textStyle: {\n            fontSize: 12,\n            color: '#A1A5B7',\n          },\n        }, props.legendReal),\n        tooltip: merge({\n          trigger: 'axis',\n          axisPointer: {\n            show: false,\n            lineStyle: {\n              color: 'rgba(255,255,255,0)',\n              type: 'solid',\n            },\n          },\n          extraCssText: 'border-radius: 0',\n          textStyle: {\n            fontSize: 14,\n          },\n        }, props.tooltip),\n        xAxis: merge({\n          axisLabel: {\n            interval: 0,\n            fontSize: 12,\n            color: '#6F8EA8',\n            lineHeight: 20,\n            margin: 5,\n          },\n          axisTick: {\n            alignWithLabel: true,\n          },\n          axisLine: {\n            lineStyle: {\n              color: '#2B394E',\n            },\n          },\n          type: 'category',\n          data: props.chartData?.map(item => item.xValue),\n        }, props.xAxis),\n        yAxis: merge({\n          splitNumber: 3,\n          splitLine: {\n            lineStyle: {\n              type: 'solid',\n              color: '#2B394E',\n            },\n          },\n          axisLabel: {\n            fontSize: 12,\n            color: '#6F8EA8',\n            lineHeight: 20,\n          },\n          type: 'value',\n        }, props.yAxis),\n        dataZoom: props.dataZoom,\n        series: [\n          ...getSeriesData(),\n        ],\n      }\n      updateOptionToResponsive(option)\n      setChartOption(option)\n    }\n\n    useRenderChart(renderChart, props)\n\n    return {\n      chartContainer,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport VStackedBarChart from './src/index.vue'\n\nexport const FxVStackedBarChart = withInstall(VStackedBarChart)\nexport default FxVStackedBarChart\n\nexport * from './src/types'\n","<template>\n  <div ref=\"chartContainer\" class=\"echart-container\"></div>\n</template>\n\n<script lang=\"ts\">\nimport {\n  defineComponent,\n  PropType,\n  ref,\n} from 'vue'\nimport * as echarts from 'echarts/core'\nimport { PieChart } from 'echarts/charts'\nimport {\n  TitleComponent,\n  TooltipComponent,\n  LegendComponent,\n  GridComponent,\n  DataZoomComponent,\n  PolarComponent,\n} from 'echarts/components'\nimport { CanvasRenderer } from 'echarts/renderers'\nimport { useEChart } from 'hongluan-hooks'\nimport { useRenderChart, useResponsiveChart } from '@fx-front-framework/hooks'\nimport { ProportionPieChartDataItem } from './types'\n\necharts.use([\n  PieChart,\n  LegendComponent,\n  TitleComponent,\n  TooltipComponent,\n  GridComponent,\n  DataZoomComponent,\n  PolarComponent,\n  CanvasRenderer,\n])\n\nexport default defineComponent({\n  name: 'VProportionPieChart',\n  props: {\n    chartData: {\n      required: true,\n      type: Array as PropType<ProportionPieChartDataItem[]>,\n      default: () => [],\n    },\n    // click时圆环颜色\n    activeColor: {\n      type: String,\n      default: 'rgba(113, 248, 252)',\n    },\n    label1: {\n      type: Object,\n      default: () => ({}),\n    },\n    label2: {\n      type: Object,\n      default: () => ({}),\n    },\n  },\n  setup(props) {\n    const { chartContainer, setChartOption, addChartEvent, dispatchAction } = useEChart()\n    const { updateOptionToResponsive } = useResponsiveChart()\n\n    // 默认圆环颜色\n    const DEFAULT_COLOR = '#1D2B3E'\n    const seriesItem = {\n      value: '',\n      name: '',\n      label: {\n        color: '#fff',\n      },\n      itemStyle: {\n        color: DEFAULT_COLOR,\n      },\n      emphasis: {\n        itemStyle: {},\n      },\n    }\n    const seriesData = ref<any[]>([])\n\n    const getSeriesData = () => {\n      seriesData.value = props.chartData.map(item => ({\n        ...seriesItem,\n        itemStyle: { color: item.color || DEFAULT_COLOR },\n        value: item.value,\n        name: item.label,\n      }))\n    }\n\n    // 调整文字角度\n    const angleText = (i: number, num: number) => {\n      // 每个元素的角度\n      const everyAngle = 360 / num\n      // 文字现在所在的角度\n      const currentAngle = i * everyAngle + everyAngle / 2\n\n      if (currentAngle <= 90) {\n        return -currentAngle\n      } if (currentAngle <= 180 && currentAngle > 90) {\n        return 180 - currentAngle\n      } if (currentAngle < 270 && currentAngle > 180) {\n        return 180 - currentAngle\n      } if (currentAngle < 360 && currentAngle >= 270) {\n        return 360 - currentAngle\n      }\n      return 0\n    }\n    // 有值的色图的正切处理\n    const getColorData = () => {\n      let data = []\n      data = JSON.parse(JSON.stringify(seriesData.value))\n      for (let i = 0; i < data.length; i++) {\n        if (i === 0) {\n          data[i].label.color = '#333'\n          data[i].itemStyle.color = props.activeColor\n          data[i].label.rotate = angleText(i, data.length)\n        } else {\n          data[i].label.color = '#fff'\n          data[i].label.rotate = angleText(i, data.length)\n        }\n      }\n      return data\n    }\n    // 最外层大圈的数据\n    const getFirseCircleData = () => {\n      let data = []\n      data = JSON.parse(JSON.stringify(seriesData.value))\n      for (let i = 0; i < data.length; i++) {\n        data[i].value = 1\n        data[i].label.rotate = angleText(i, data.length)\n        data[i].itemStyle = {}\n        if (i === 0) {\n          data[i].label.color = props.activeColor\n        }\n      }\n      return data\n    }\n    // 透明饼图（hover、click）时背景的数据\n    const getBgCircleData = () => {\n      const data2 = []\n      for (let i = 0; i < seriesData.value.length; i++) {\n        if (i === 0) {\n          data2.push({\n            value: 1,\n            itemStyle: {\n              color: 'rgba(25, 255, 224,0.05)',\n            },\n          })\n        } else {\n          data2.push({\n            value: 1,\n            itemStyle: {\n              color: 'transparent',\n            },\n          })\n        }\n      }\n      return data2\n    }\n\n    const renderChart = () => {\n      const option = {\n        grid: {\n        },\n        polar: {},\n        angleAxis: {\n          show: false,\n          interval: 1,\n          type: 'category',\n          data: [],\n\n        },\n        // 中间画圈圈的坐标轴\n        radiusAxis: {\n          show: false,\n        },\n        series: [{\n          type: 'pie',\n          radius: ['70%', '96%'],\n          itemStyle: {\n            color: 'transparent',\n          },\n          labelLine: {\n            show: false,\n            length: 30,\n            length2: 55,\n          },\n          label: {\n            position: 'inside',\n            align: 'right',\n            fontSize: 14,\n            ...props.label1,\n          },\n          emphasis: {\n            scale: false,\n          },\n          name: '',\n          data: getFirseCircleData(),\n        },\n        {\n          stack: 'a',\n          type: 'pie',\n          radius: ['75%', '36%'],\n          roseType: 'area',\n          zlevel: 10,\n          emphasis: {\n            scale: false,\n          },\n          labelLayout: {\n            hideOverlap: false,\n          },\n          label: {\n            show: true,\n            fontSize: 12,\n            color: '#fff',\n            position: 'inside',\n            rotate: 30,\n            align: 'right',\n            fontWeight: 'bold',\n            formatter: '{c}%',\n            ...props.label2,\n          },\n          animation: false,\n          data: getColorData(),\n        },\n        {\n          type: 'pie',\n          zlevel: 99,\n          radius: ['15%', '98%'],\n          selectedOffset: 0,\n          animation: false,\n          label: {\n            show: false,\n          },\n          emphasis: {\n            scale: false,\n          },\n          data: getBgCircleData(),\n        }],\n      }\n      updateOptionToResponsive(option)\n      setChartOption(option)\n      // 监听点击事件 改变色值\n      addChartEvent('click', (a: { dataIndex: string | number; }) => {\n      // 最外层的字体颜色重置变色\n        for (let da1 = 0; da1 < option.series[0].data.length; da1++) {\n          option.series[0].data[da1].label.color = '#fff'\n        }\n\n        // 色圈的字体颜色和选中颜色重置\n        for (let da2 = 0; da2 < option.series[1].data.length; da2++) {\n          option.series[1].data[da2].itemStyle.color = seriesData.value[da2].itemStyle.color\n          option.series[1].data[da2].label.color = '#fff'\n        }\n\n        // 背景的透明饼图的重置\n        for (let da3 = 0; da3 < option.series[2].data.length; da3++) {\n          option.series[2].data[da3].itemStyle.color = 'transparent'\n        }\n\n        option.series[1].data[a.dataIndex].itemStyle.color = props.activeColor\n        option.series[1].data[a.dataIndex].label.color = '#333'\n        option.series[0].data[a.dataIndex].label.color = props.activeColor\n        option.series[2].data[a.dataIndex].itemStyle.color = 'rgba(25, 255, 224, 0.1)'\n        setChartOption(option)\n      })\n\n      addChartEvent('mouseover', (a: { dataIndex: number; }) => {\n        dispatchAction({\n          type: 'highlight',\n          seriesIndex: 1,\n          dataIndex: a.dataIndex,\n        })\n      })\n\n      addChartEvent('mouseout', (a: { dataIndex: number; }) => {\n        dispatchAction({\n          type: 'downplay',\n          seriesIndex: 1,\n          dataIndex: a.dataIndex,\n        })\n      })\n    }\n\n    useRenderChart(() => {\n      getSeriesData()\n      renderChart()\n    }, props)\n\n    return {\n      chartContainer,\n    }\n  },\n})\n</script>\n","import { withInstall } from '@fx-front-framework/utils/with-install'\nimport VProportionPieChart from './src/index.vue'\n\nexport const FxVProportionPieChart = withInstall(VProportionPieChart)\nexport default FxVProportionPieChart\n\nexport * from './src/types'\n","import { FxPageTable } from '@fx-front-framework/components/page-table'\nimport { FxPageTableV2 } from '@fx-front-framework/components/page-table-v2'\nimport { FxFileUpload } from '@fx-front-framework/components/file-upload'\nimport { FxPageDetail } from '@fx-front-framework/components/page-detail'\nimport { FxAnimPage } from '@fx-front-framework/components/anim-page'\nimport { FxActionButton } from '@fx-front-framework/components/action-button'\nimport { FxSearchBar } from '@fx-front-framework/components/search-bar'\nimport { FxTabs } from '@fx-front-framework/components/tabs'\n\n// 大屏组件\nimport { FxVPanel } from '@fx-front-framework/components/visualized/panel'\nimport { FxVModal } from '@fx-front-framework/components/visualized/modal'\nimport { FxVColumnChart } from '@fx-front-framework/components/visualized/charts/column-chart'\nimport { FxVSpireColumnChart } from '@fx-front-framework/components/visualized/charts/spire-column-chart'\nimport { FxVPieChart } from '@fx-front-framework/components/visualized/charts/pie-chart'\nimport { FxVRosePieChart } from '@fx-front-framework/components/visualized/charts/rose-pie-chart'\nimport { FxVScrollingBarChart } from '@fx-front-framework/components/visualized/charts/scrolling-bar-chart'\nimport { FxVScrollingListChart } from '@fx-front-framework/components/visualized/charts/scrolling-list-chart'\nimport { FxVPyramidChart } from '@fx-front-framework/components/visualized/charts/pyramid-chart'\nimport { FxVLineChart } from '@fx-front-framework/components/visualized/charts/line-chart'\nimport { FxVStackedBarChart } from '@fx-front-framework/components/visualized/charts/stacked-bar-chart'\nimport { FxVProportionPieChart } from '@fx-front-framework/components/visualized/charts/proportion-pie-chart'\n\nimport type { Plugin } from 'vue'\n\nexport default [\n  FxPageTable,\n  FxPageTableV2,\n  FxFileUpload,\n  FxPageDetail,\n  FxAnimPage,\n  FxActionButton,\n  FxSearchBar,\n  FxTabs,\n\n  // 大屏组件\n  FxVPanel,\n  FxVModal,\n  FxVColumnChart,\n  FxVSpireColumnChart,\n  FxVPieChart,\n  FxVRosePieChart,\n  FxVScrollingBarChart,\n  FxVScrollingListChart,\n  FxVPyramidChart,\n  FxVLineChart,\n  FxVStackedBarChart,\n  FxVProportionPieChart,\n] as Plugin[]\n\n","export default [\n]\n\n","import makeInstaller from './make-installer'\nimport Components from './component'\nimport Plugins from './plugin'\n\nexport default makeInstaller([\n  ...Components,\n  ...Plugins,\n])\n","import type { ObjectDirective } from 'vue'\n\nconst Focus: ObjectDirective = {\n  mounted(el: HTMLInputElement) {\n    el?.focus()\n  },\n}\n\nexport default Focus\n","import installer from './defaults'\nexport * from '@fx-front-framework/components'\nexport * from '@fx-front-framework/directives'\nexport * from '@fx-front-framework/hooks'\nexport * from '@fx-front-framework/tokens'\nexport * from '@fx-front-framework/utils'\n\nexport { default as makeInstaller } from './make-installer'\nexport { default } from './defaults'\n\nexport const install = installer.install\nexport const version = installer.version\n"],"names":["s","t","o","l","version","f","e","r","_export_sfc","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_sfc_render","_hoisted_7","TwoFilter","_createBlock","_normalizeClass","_createSlots","_withCtx","_createVNode","_withModifiers","_renderSlot","_createElementVNode","_createTextVNode","_renderList","_normalizeProps","Object","prototype","toString","call","_isVNode","defineComponent","name","components","HlForm","HlButton","HlGroup","HlSelect","HlOption","props","searchSlots","type","Function","default","hideHeaderLine","Boolean","showSearchBar","showAdvSearch","showResetAtSimpleMode","emits","setup","ctx","slots","emit","data","reactive","myObserver","simpleOptions","btnOpen","searchForm","searchType","simpleOptionVal","componentOptions","searchEnabled","computed","val","isArray","length","onBeforeMount","init","onMounted","currentInstance","getCurrentInstance","runResizeObserver","onBeforeUnmount","disconnect","ResizeObserver","entries","forEach","entry","target","className","indexOf","setListContentHeight","contentRect","height","observe","refs","resetSearch","isEmitting","keys","k","Array","value","runSearch","arr","getIt","push","key","valueName","label","getSearchLabel","str","item","setSearchType","nextTick","setBtnsPosition","offsetWidth","$el","simpleOptionChange","children","prop","i","simpleOptionRender","_resolveComponent","$event","_isSlot","_slot","map","allItemsRender","simpleItemRender","_withDirectives","_vShow","onClick","Utils","_openBlock","_createElementBlock","_Fragment","_mergeProps","_toDisplayString","_createCommentVNode","_guardReactiveProps","c","u","g","bind","require$$0","isObject","isFunction","isPlainObject","merge","utils","isBuffer","isString","isNumber","isDate","buildURL","encode","InterceptorManager","normalizeHeaderName","enhanceError","createError","settle","cookies","isAbsoluteURL","combineURLs","require$$1","buildFullPath","parseHeaders","isURLSameOrigin","Cancel","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","defaults","require$$8","require$$9","debug","url","http","https","noop","followRedirectsModule","followRedirects","VERSION","require$$10","require$$11","require$$12","require$$13","transformData","isCancel","dispatchRequest","mergeConfig","validators","validator","Axios","axios","axiosModule","axios_1","hasSymbols","hasProto","toStr","implementation","undefined","$SyntaxError","$TypeError","$gOPD","hasOwn","$concat","$replace","rePropName","reEscapeChar","stringToPath","GetIntrinsic","$defineProperty","hasPropertyDescriptors","gopd","$floor","setFunctionLength","callBound","objectToString","isSymbol","has","isRegExp","isMap","isSet","global","formats","assign","stringify","parse","__defProp","__defNormalProp","__publicField","Cache","freeGlobal","Symbol","root","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","symbolTag","INFINITY","symbolProto","funcTag","genTag","coreJsData","funcProto","funcToString","WeakMap","defineProperty","baseSetToString","MAX_SAFE_INTEGER","setToString","argsTag","propertyIsEnumerable","freeExports","freeModule","moduleExports","Buffer","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","nodeUtil","isArguments","isTypedArray","nativeKeys","nativeCreate","HASH_UNDEFINED","Map","getPrototype","nativeGetSymbols","getSymbols","getSymbolsIn","DataView","Promise","Set","Uint8Array","baseCreate","getTag","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","baseFor","w","m","y","h.stringify","d","T","R","b","_toPropertyKey","_toPrimitive","isNull","okeys","safeParse","DEFAULT_ONLINE_VER","KEY_ASSET_CTX","helConsts","commonUtil","getPlatform","core$1.getPlatform","helConsts$1","core$1.commonUtil","core$1.helConsts","core$1.getCommonData","core$1.setCommonData","core$1.getPlatformConfig","core$1.setAppPlatform","core$1.getAppMeta","core$1.getVersion","core$1.log","core$1.setAppMeta","core$1.setVersion","core$1.setVerExtraCssList","_a","core$1.helLoadStatus","core$1.getHelEventBus","core$1.helEvents","core$1.getUserEventBus","h","p","a","TwoUpload","fileSizeLimit","_normalizeStyle","_Transition","FillMaximize2","FillMinimize2","TwoClose","v","n","useResponsiveChart","useRenderChart","x","F"],"mappings":"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"}