From dd99cba265ee4e62b9991f81ff83b00dc2649f5e Mon Sep 17 00:00:00 2001 From: * <8> Date: Tue, 12 Jul 2022 17:20:49 +0800 Subject: [PATCH 1/8] Match-id-94f7e1b22b072209adf7133a84ee33f407a77222 --- .eslintrc.js | 1 + libs/horizon/global.d.ts | 1 + libs/horizon/src/horizonx/Constants.ts | 2 + .../src/horizonx/proxy/HooklessObserver.ts | 4 +- libs/horizon/src/horizonx/proxy/Observer.ts | 6 +- .../src/horizonx/proxy/ProxyHandler.ts | 18 ++- .../proxy/handlers/ArrayProxyHandler.ts | 6 +- .../proxy/handlers/CollectionProxyHandler.ts | 44 ++++---- .../proxy/handlers/ObjectProxyHandler.ts | 19 +++- libs/horizon/src/horizonx/types.d.ts | 12 +- libs/horizon/src/renderer/ErrorHandler.ts | 2 +- .../StoreFunctionality/cloneDeep.test.js | 106 ++++++++++++++++++ scripts/__tests__/jest/jestSetting.js | 1 + 13 files changed, 171 insertions(+), 51 deletions(-) create mode 100644 scripts/__tests__/HorizonXText/StoreFunctionality/cloneDeep.test.js diff --git a/.eslintrc.js b/.eslintrc.js index f0692e11..3f20b668 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -45,6 +45,7 @@ module.exports = { }, globals: { isDev: true, + isTest: true, }, overrides: [ { diff --git a/libs/horizon/global.d.ts b/libs/horizon/global.d.ts index 0ebd7135..a3777f70 100644 --- a/libs/horizon/global.d.ts +++ b/libs/horizon/global.d.ts @@ -2,4 +2,5 @@ 区分是否开发者模式 */ declare var isDev: boolean; +declare var isTest: boolean; declare const __VERSION__: string; diff --git a/libs/horizon/src/horizonx/Constants.ts b/libs/horizon/src/horizonx/Constants.ts index 5967d853..334f0ef6 100644 --- a/libs/horizon/src/horizonx/Constants.ts +++ b/libs/horizon/src/horizonx/Constants.ts @@ -1,3 +1,5 @@ // The two constants must be the same as those in horizon. export const FunctionComponent = 'FunctionComponent'; export const ClassComponent = 'ClassComponent'; + +export const OBSERVER_KEY = Symbol('_horizonObserver'); diff --git a/libs/horizon/src/horizonx/proxy/HooklessObserver.ts b/libs/horizon/src/horizonx/proxy/HooklessObserver.ts index 9ea8937f..10fce509 100644 --- a/libs/horizon/src/horizonx/proxy/HooklessObserver.ts +++ b/libs/horizon/src/horizonx/proxy/HooklessObserver.ts @@ -10,7 +10,7 @@ export class HooklessObserver implements IObserver { listeners:(() => void)[] = []; - useProp(key: string): void { + useProp(key: string | symbol): void { } addListener(listener: () => void) { @@ -21,7 +21,7 @@ export class HooklessObserver implements IObserver { this.listeners = this.listeners.filter(item => item != listener); } - setProp(key: string): void { + setProp(key: string | symbol): void { this.triggerChangeListeners(); } diff --git a/libs/horizon/src/horizonx/proxy/Observer.ts b/libs/horizon/src/horizonx/proxy/Observer.ts index be24d1c2..1324c87a 100644 --- a/libs/horizon/src/horizonx/proxy/Observer.ts +++ b/libs/horizon/src/horizonx/proxy/Observer.ts @@ -16,7 +16,7 @@ export class Observer implements IObserver { listeners:(()=>void)[] = []; - useProp(key: string): void { + useProp(key: string | symbol): void { const processingVNode = getProcessingVNode(); if (processingVNode === null || !processingVNode.observers) { return; @@ -50,7 +50,7 @@ export class Observer implements IObserver { this.listeners = this.listeners.filter(item => item != listener); } - setProp(key: string): void { + setProp(key: string | symbol): void { const vNodes = this.keyVNodes.get(key); vNodes?.forEach((vNode: VNode) => { if (vNode.isStoreChange) { @@ -85,7 +85,7 @@ export class Observer implements IObserver { } } - clearByVNode(vNode: Vnode): void { + clearByVNode(vNode: VNode): void { const keys = this.vNodeKeys.get(vNode); if (keys) { keys.forEach((key: any) => { diff --git a/libs/horizon/src/horizonx/proxy/ProxyHandler.ts b/libs/horizon/src/horizonx/proxy/ProxyHandler.ts index f2051b9d..a540e199 100644 --- a/libs/horizon/src/horizonx/proxy/ProxyHandler.ts +++ b/libs/horizon/src/horizonx/proxy/ProxyHandler.ts @@ -1,12 +1,11 @@ -import {createObjectProxy} from './handlers/ObjectProxyHandler'; -import {Observer} from './Observer'; -import {HooklessObserver} from './HooklessObserver'; -import {isArray, isCollection, isObject} from '../CommonUtils'; -import {createArrayProxy} from './handlers/ArrayProxyHandler'; -import {createCollectionProxy} from './handlers/CollectionProxyHandler'; +import { createObjectProxy } from './handlers/ObjectProxyHandler'; +import { Observer } from './Observer'; +import { HooklessObserver } from './HooklessObserver'; +import { isArray, isCollection, isObject } from '../CommonUtils'; +import { createArrayProxy } from './handlers/ArrayProxyHandler'; +import { createCollectionProxy } from './handlers/CollectionProxyHandler'; import { IObserver } from '../types'; - -const OBSERVER_KEY = Symbol('_horizonObserver'); +import { OBSERVER_KEY } from '../Constants'; const proxyMap = new WeakMap(); @@ -29,7 +28,7 @@ export function createProxy(rawObj: any, hookObserver = true): any { } // 创建Observer - let observer:IObserver = getObserver(rawObj); + let observer: IObserver = getObserver(rawObj); if (!observer) { observer = hookObserver ? new Observer() : new HooklessObserver(); rawObj[OBSERVER_KEY] = observer; @@ -59,4 +58,3 @@ export function createProxy(rawObj: any, hookObserver = true): any { export function getObserver(rawObj: any): Observer { return rawObj[OBSERVER_KEY]; } - diff --git a/libs/horizon/src/horizonx/proxy/handlers/ArrayProxyHandler.ts b/libs/horizon/src/horizonx/proxy/handlers/ArrayProxyHandler.ts index 879dc088..a6812bde 100644 --- a/libs/horizon/src/horizonx/proxy/handlers/ArrayProxyHandler.ts +++ b/libs/horizon/src/horizonx/proxy/handlers/ArrayProxyHandler.ts @@ -26,14 +26,14 @@ function set(rawObj: any[], key: string, value: any, receiver: any) { const ret = Reflect.set(rawObj, key, newValue, receiver); const newLength = rawObj.length; - const tracker = getObserver(rawObj); + const observer = getObserver(rawObj); if (!isSame(newValue, oldValue)) { - tracker.setProp(key); + observer.setProp(key); } if (oldLength !== newLength) { - tracker.setProp('length'); + observer.setProp('length'); } return ret; diff --git a/libs/horizon/src/horizonx/proxy/handlers/CollectionProxyHandler.ts b/libs/horizon/src/horizonx/proxy/handlers/CollectionProxyHandler.ts index ec8214b3..bd044b44 100644 --- a/libs/horizon/src/horizonx/proxy/handlers/CollectionProxyHandler.ts +++ b/libs/horizon/src/horizonx/proxy/handlers/CollectionProxyHandler.ts @@ -40,8 +40,8 @@ function get(rawObj: { size: number }, key: any, receiver: any): any { } function getFun(rawObj: { get: (key: any) => any }, key: any) { - const tracker = getObserver(rawObj); - tracker.useProp(key); + const observer = getObserver(rawObj); + observer.useProp(key); const value = rawObj.get(key); // 对于value也需要进一步代理 @@ -60,14 +60,14 @@ function set( const newValue = value; rawObj.set(key, newValue); const valChange = !isSame(newValue, oldValue); - const tracker = getObserver(rawObj); + const observer = getObserver(rawObj); if (valChange || !rawObj.has(key)) { - tracker.setProp(COLLECTION_CHANGE); + observer.setProp(COLLECTION_CHANGE); } if (valChange) { - tracker.setProp(key); + observer.setProp(key); } return rawObj; @@ -78,17 +78,17 @@ function add(rawObj: { add: (any) => void; set: (string, any) => any; has: (any) if (!rawObj.has(value)) { rawObj.add(value); - const tracker = getObserver(rawObj); - tracker.setProp(value); - tracker.setProp(COLLECTION_CHANGE); + const observer = getObserver(rawObj); + observer.setProp(value); + observer.setProp(COLLECTION_CHANGE); } return rawObj; } function has(rawObj: { has: (string) => boolean }, key: any): boolean { - const tracker = getObserver(rawObj); - tracker.useProp(key); + const observer = getObserver(rawObj); + observer.useProp(key); return rawObj.has(key); } @@ -98,8 +98,8 @@ function clear(rawObj: { size: number; clear: () => void }) { rawObj.clear(); if (oldSize > 0) { - const tracker = getObserver(rawObj); - tracker.allChange(); + const observer = getObserver(rawObj); + observer.allChange(); } } @@ -107,9 +107,9 @@ function deleteFun(rawObj: { has: (key: any) => boolean; delete: (key: any) => v if (rawObj.has(key)) { rawObj.delete(key); - const tracker = getObserver(rawObj); - tracker.setProp(key); - tracker.setProp(COLLECTION_CHANGE); + const observer = getObserver(rawObj); + observer.setProp(key); + observer.setProp(COLLECTION_CHANGE); return true; } @@ -118,8 +118,8 @@ function deleteFun(rawObj: { has: (key: any) => boolean; delete: (key: any) => v } function size(rawObj: { size: number }) { - const tracker = getObserver(rawObj); - tracker.useProp(COLLECTION_CHANGE); + const observer = getObserver(rawObj); + observer.useProp(COLLECTION_CHANGE); return rawObj.size; } @@ -148,8 +148,8 @@ function forEach( rawObj: { forEach: (callback: (value: any, key: any) => void) => void }, callback: (valProxy: any, keyProxy: any, rawObj: any) => void ) { - const tracker = getObserver(rawObj); - tracker.useProp(COLLECTION_CHANGE); + const observer = getObserver(rawObj); + observer.useProp(COLLECTION_CHANGE); rawObj.forEach((value, key) => { const valProxy = createProxy(value, hookObserverMap.get(rawObj)); const keyProxy = createProxy(key, hookObserverMap.get(rawObj)); @@ -159,9 +159,9 @@ function forEach( } function wrapIterator(rawObj: Object, rawIt: { next: () => { value: any; done: boolean } }, isPair = false) { - const tracker = getObserver(rawObj); + const observer = getObserver(rawObj); const hookObserver = hookObserverMap.get(rawObj); - tracker.useProp(COLLECTION_CHANGE); + observer.useProp(COLLECTION_CHANGE); return { next() { @@ -170,7 +170,7 @@ function wrapIterator(rawObj: Object, rawIt: { next: () => { value: any; done: b return { value: createProxy(value, hookObserver), done }; } - tracker.useProp(COLLECTION_CHANGE); + observer.useProp(COLLECTION_CHANGE); let newVal; if (isPair) { diff --git a/libs/horizon/src/horizonx/proxy/handlers/ObjectProxyHandler.ts b/libs/horizon/src/horizonx/proxy/handlers/ObjectProxyHandler.ts index 709c68a9..28749a57 100644 --- a/libs/horizon/src/horizonx/proxy/handlers/ObjectProxyHandler.ts +++ b/libs/horizon/src/horizonx/proxy/handlers/ObjectProxyHandler.ts @@ -1,5 +1,6 @@ import { isSame } from '../../CommonUtils'; import { createProxy, getObserver, hookObserverMap } from '../ProxyHandler'; +import { OBSERVER_KEY } from '../../Constants'; export function createObjectProxy(rawObj: T): ProxyHandler { const proxy = new Proxy(rawObj, { @@ -10,7 +11,12 @@ export function createObjectProxy(rawObj: T): ProxyHandler return proxy; } -export function get(rawObj: object, key: string, receiver: any): any { +export function get(rawObj: object, key: string | symbol, receiver: any): any { + // The observer object of symbol ('_horizonObserver') cannot be accessed from Proxy to prevent errors caused by clonedeep. + if (key === OBSERVER_KEY) { + return undefined; + } + const observer = getObserver(rawObj); if (key === 'addListener') { @@ -25,10 +31,15 @@ export function get(rawObj: object, key: string, receiver: any): any { const value = Reflect.get(rawObj, key, receiver); - // 对于value也需要进一步代理 - const valProxy = createProxy(value, hookObserverMap.get(rawObj)); + // 对于prototype不做代理 + if (key !== 'prototype') { + // 对于value也需要进一步代理 + const valProxy = createProxy(value, hookObserverMap.get(rawObj)); - return valProxy; + return valProxy; + } + + return value; } export function set(rawObj: object, key: string, value: any, receiver: any): boolean { diff --git a/libs/horizon/src/horizonx/types.d.ts b/libs/horizon/src/horizonx/types.d.ts index 3fed3afe..9b54c139 100644 --- a/libs/horizon/src/horizonx/types.d.ts +++ b/libs/horizon/src/horizonx/types.d.ts @@ -1,23 +1,23 @@ export interface IObserver { - useProp: (key: string) => void; + useProp: (key: string | symbol) => void; addListener: (listener: () => void) => void; removeListener: (listener: () => void) => void; - setProp: (key: string) => void; + setProp: (key: string | symbol) => void; triggerChangeListeners: () => void; triggerUpdate: (vNode: any) => void; allChange: () => void; - + clearByVNode: (vNode: any) => void; } -type RemoveFirstFromTuple = +type RemoveFirstFromTuple = T['length'] extends 0 ? [] : (((...b: T) => void) extends (a, ...b: infer I) => void ? I : []) @@ -36,7 +36,7 @@ type ComputedValues> = { [K in type PostponedAction = (state: object, ...args: any[]) => Promise; type PostponedActions = { [key:string]: PostponedAction } -export type StoreHandler,C extends UserComputedValues> = +export type StoreHandler,C extends UserComputedValues> = {$subscribe: ((listener: () => void) => void), $unsubscribe: ((listener: () => void) => void), $state: S, @@ -78,4 +78,4 @@ type ReduxMiddleware = (store:ReduxStoreHandler, extraArgument?:any) => (action:( ReduxAction| ((dispatch:(action:ReduxAction)=>void,store:ReduxStoreHandler,extraArgument?:any)=>any) - )) => ReduxStoreHandler \ No newline at end of file + )) => ReduxStoreHandler diff --git a/libs/horizon/src/renderer/ErrorHandler.ts b/libs/horizon/src/renderer/ErrorHandler.ts index 8eaed4f8..1f629d97 100644 --- a/libs/horizon/src/renderer/ErrorHandler.ts +++ b/libs/horizon/src/renderer/ErrorHandler.ts @@ -15,7 +15,7 @@ import {updateShouldUpdateOfTree} from './vnode/VNodeShouldUpdate'; import {BuildErrored, setBuildResult} from './GlobalVar'; function consoleError(error: any): void { - if (isDev) { + if (isTest) { // 只打印message为了让测试用例能pass console['error']('The codes throw the error: ' + error.message); } else { diff --git a/scripts/__tests__/HorizonXText/StoreFunctionality/cloneDeep.test.js b/scripts/__tests__/HorizonXText/StoreFunctionality/cloneDeep.test.js new file mode 100644 index 00000000..9f0dd806 --- /dev/null +++ b/scripts/__tests__/HorizonXText/StoreFunctionality/cloneDeep.test.js @@ -0,0 +1,106 @@ +import * as Horizon from '@cloudsop/horizon/index.ts'; +import { clearStore, createStore, useStore } from '../../../../libs/horizon/src/horizonx/store/StoreHandler'; +import { OBSERVER_KEY } from '../../../../libs/horizon/src/horizonx/Constants'; +import { App, Text, triggerClickEvent } from '../../jest/commonComponents'; + +describe('测试对store.state对象进行深度克隆', () => { + const { unmountComponentAtNode } = Horizon; + let container = null; + beforeEach(() => { + // 创建一个 DOM 元素作为渲染目标 + container = document.createElement('div'); + document.body.appendChild(container); + + createStore({ + id: 'user', + state: { + type: 'bing dun dun', + persons: [ + { name: 'p1', age: 1 }, + { name: 'p2', age: 2 }, + ], + }, + actions: { + addOnePerson: (state, person) => { + state.persons.push(person); + }, + delOnePerson: state => { + state.persons.pop(); + }, + clearPersons: state => { + state.persons = null; + }, + }, + }); + }); + + afterEach(() => { + // 退出时进行清理 + unmountComponentAtNode(container); + container.remove(); + container = null; + + clearStore('user'); + }); + + const newPerson = { name: 'p3', age: 3 }; + + function Parent({ children }) { + const userStore = useStore('user'); + const addOnePerson = function() { + userStore.addOnePerson(newPerson); + }; + const delOnePerson = function() { + userStore.delOnePerson(); + }; + return ( +
+ + +
{children}
+
+ ); + } + + it('The observer object of symbol (\'_horizonObserver\') cannot be accessed to from Proxy', () => { + let userStore = null; + function Child(props) { + userStore = useStore('user'); + + return ( +
+ +
+ ); + } + + Horizon.render(, container); + + // The observer object of symbol ('_horizonObserver') cannot be accessed to from Proxy prevent errors caused by clonedeep. + expect(userStore.persons[0][OBSERVER_KEY]).toBe(undefined); + }); + + it('The observer object of symbol (\'_horizonObserver\') cannot be accessed to from Proxy', () => { + let userStore = null; + function Child(props) { + userStore = useStore('user'); + + return ( +
+ +
+ ); + } + + Horizon.render(, container); + + // NO throw this Exception, TypeError: 'get' on proxy: property 'prototype' is a read-only and non-configurable data property on the proxy target but the proxy did not return its actual value + const proxyObj = userStore.persons[0].constructor; + expect(proxyObj.prototype !== undefined).toBeTruthy(); + }); + +}); diff --git a/scripts/__tests__/jest/jestSetting.js b/scripts/__tests__/jest/jestSetting.js index 2111a635..a62c3372 100644 --- a/scripts/__tests__/jest/jestSetting.js +++ b/scripts/__tests__/jest/jestSetting.js @@ -5,6 +5,7 @@ import { getLogUtils } from './testUtils'; //failOnConsole(); const LogUtils = getLogUtils(); global.isDev = process.env.NODE_ENV === 'development'; +global.isTest = true; global.container = null; global.beforeEach(() => { LogUtils.clear(); From 03499516d41f745fa7268ebe381cf68f804e4e14 Mon Sep 17 00:00:00 2001 From: * <8> Date: Wed, 13 Jul 2022 16:51:49 +0800 Subject: [PATCH 2/8] Match-id-91fed5beca23725fe7d58b119880c1a4df9ddb7e --- .gitignore | 1 + scripts/gen3rdLib.js | 5 + scripts/horizon3rdTemplate.ejs | 17568 ------------------------------- scripts/template.ejs | 768 -- 4 files changed, 6 insertions(+), 18336 deletions(-) delete mode 100644 scripts/horizon3rdTemplate.ejs delete mode 100644 scripts/template.ejs diff --git a/.gitignore b/.gitignore index 070f36c2..7fa547da 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ build/ .vscode package-lock.json libs/**/dist +scripts/*.ejs diff --git a/scripts/gen3rdLib.js b/scripts/gen3rdLib.js index f2953691..26a55887 100644 --- a/scripts/gen3rdLib.js +++ b/scripts/gen3rdLib.js @@ -10,6 +10,11 @@ const argv = require('minimist')(process.argv.slice(2)); const libPathPrefix = '../build'; const suffix = argv.dev ? 'development.js' : 'production.js'; const template = argv.type === 'horizon' ? 'horizon3rdTemplate.ejs' : 'template.ejs'; +const templatePath = path.resolve(__dirname, `./${template}`); +if (!fs.existsSync(templatePath)) { + console.log(chalk.yellow('Failed: Template file not exist')); + return; +} const readLib = lib => { const libName = lib.split('.')[0]; const libPath = path.resolve(__dirname, `${libPathPrefix}/${libName}/umd/${lib}`); diff --git a/scripts/horizon3rdTemplate.ejs b/scripts/horizon3rdTemplate.ejs deleted file mode 100644 index 889a6283..00000000 --- a/scripts/horizon3rdTemplate.ejs +++ /dev/null @@ -1,17568 +0,0 @@ -!function(t, r) { -"object" == typeof exports && "object" == typeof module ? module.exports = r() : "function" == typeof define && define.amd ? define([], r) : "object" == typeof exports ? exports.ie = r() : t.ie = r() -}(window, (function() { -return function(t) { -var r = {}; -function e(n) { -if (r[n]) -return r[n].exports; -var o = r[n] = { -i: n, -l: !1, -exports: {} -}; -return t[n].call(o.exports, o, o.exports, e), -o.l = !0, -o.exports -} -return e.m = t, -e.c = r, -e.d = function(t, r, n) { -e.o(t, r) || Object.defineProperty(t, r, { -enumerable: !0, -get: n -}) -} -, -e.r = function(t) { -"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, { -value: "Module" -}), -Object.defineProperty(t, "__esModule", { -value: !0 -}) -} -, -e.t = function(t, r) { -if (1 & r && (t = e(t)), -8 & r) -return t; -if (4 & r && "object" == typeof t && t && t.__esModule) -return t; -var n = Object.create(null); -if (e.r(n), -Object.defineProperty(n, "default", { -enumerable: !0, -value: t -}), -2 & r && "string" != typeof t) -for (var o in t) -e.d(n, o, function(r) { -return t[r] -} -.bind(null, o)); -return n -} -, -e.n = function(t) { -var r = t && t.__esModule ? function() { -return t.default -} -: function() { -return t -} -; -return e.d(r, "a", r), -r -} -, -e.o = function(t, r) { -return Object.prototype.hasOwnProperty.call(t, r) -} -, -e.p = "", -e(e.s = 192) -}([function(t, r, e) { -var n = e(1) -, o = e(23).f -, i = e(25) -, a = e(17) -, u = e(114) -, c = e(90) -, s = e(73); -t.exports = function(t, r) { -var e, f, l, h, p, v = t.target, g = t.global, d = t.stat; -if (e = g ? n : d ? n[v] || u(v, {}) : (n[v] || {}).prototype) -for (f in r) { -if (h = r[f], -l = t.noTargetGet ? (p = o(e, f)) && p.value : e[f], -!s(g ? f : v + (d ? "." : "#") + f, t.forced) && void 0 !== l) { -if (typeof h == typeof l) -continue; -c(h, l) -} -(t.sham || l && l.sham) && i(h, "sham", !0), -a(e, f, h, t) -} -} -} -, function(t, r, e) { -(function(r) { -var e = function(t) { -return t && t.Math == Math && t -}; -t.exports = e("object" == typeof globalThis && globalThis) || e("object" == typeof window && window) || e("object" == typeof self && self) || e("object" == typeof r && r) || function() { -return this -}() || Function("return this")() -} -).call(this, e(195)) -} -, function(t, r) { -t.exports = function(t) { -try { -return !!t() -} catch (t) { -return !0 -} -} -} -, function(t, r, e) { -var n = e(68) -, o = Function.prototype -, i = o.bind -, a = o.call -, u = n && i.bind(a, a); -t.exports = n ? function(t) { -return t && u(t) -} -: function(t) { -return t && function() { -return a.apply(t, arguments) -} -} -} -, function(t, r, e) { -var n = e(1) -, o = e(6) -, i = n.String -, a = n.TypeError; -t.exports = function(t) { -if (o(t)) -return t; -throw a(i(t) + " is not an object") -} -} -, function(t, r, e) { -var n = e(2); -t.exports = !n((function() { -return 7 != Object.defineProperty({}, 1, { -get: function() { -return 7 -} -})[1] -} -)) -} -, function(t, r, e) { -var n = e(9); -t.exports = function(t) { -return "object" == typeof t ? null !== t : n(t) -} -} -, function(t, r, e) { -var n = e(1) -, o = e(86) -, i = e(12) -, a = e(60) -, u = e(112) -, c = e(142) -, s = o("wks") -, f = n.Symbol -, l = f && f.for -, h = c ? f : f && f.withoutSetter || a; -t.exports = function(t) { -if (!i(s, t) || !u && "string" != typeof s[t]) { -var r = "Symbol." + t; -u && i(f, t) ? s[t] = f[t] : s[t] = c && l ? l(r) : h(r) -} -return s[t] -} -} -, function(t, r, e) { -var n = e(1) -, o = e(52) -, i = n.String; -t.exports = function(t) { -if ("Symbol" === o(t)) -throw TypeError("Cannot convert a Symbol value to a string"); -return i(t) -} -} -, function(t, r) { -t.exports = function(t) { -return "function" == typeof t -} -} -, function(t, r, e) { -"use strict"; -var n, o, i, a = e(128), u = e(5), c = e(1), s = e(9), f = e(6), l = e(12), h = e(52), p = e(70), v = e(25), g = e(17), d = e(13).f, y = e(29), m = e(37), b = e(39), x = e(7), w = e(60), E = c.Int8Array, S = E && E.prototype, A = c.Uint8ClampedArray, O = A && A.prototype, R = E && m(E), T = S && m(S), I = Object.prototype, M = c.TypeError, j = x("toStringTag"), P = w("TYPED_ARRAY_TAG"), k = w("TYPED_ARRAY_CONSTRUCTOR"), _ = a && !!b && "Opera" !== h(c.opera), L = !1, N = { -Int8Array: 1, -Uint8Array: 1, -Uint8ClampedArray: 1, -Int16Array: 2, -Uint16Array: 2, -Int32Array: 4, -Uint32Array: 4, -Float32Array: 4, -Float64Array: 8 -}, D = { -BigInt64Array: 8, -BigUint64Array: 8 -}, U = function(t) { -if (!f(t)) -return !1; -var r = h(t); -return l(N, r) || l(D, r) -}; -for (n in N) -(i = (o = c[n]) && o.prototype) ? v(i, k, o) : _ = !1; -for (n in D) -(i = (o = c[n]) && o.prototype) && v(i, k, o); -if ((!_ || !s(R) || R === Function.prototype) && (R = function() { -throw M("Incorrect invocation") -} -, -_)) -for (n in N) -c[n] && b(c[n], R); -if ((!_ || !T || T === I) && (T = R.prototype, -_)) -for (n in N) -c[n] && b(c[n].prototype, T); -if (_ && m(O) !== T && b(O, T), -u && !l(T, j)) -for (n in L = !0, -d(T, j, { -get: function() { -return f(this) ? this[P] : void 0 -} -}), -N) -c[n] && v(c[n], P, n); -t.exports = { -NATIVE_ARRAY_BUFFER_VIEWS: _, -TYPED_ARRAY_CONSTRUCTOR: k, -TYPED_ARRAY_TAG: L && P, -aTypedArray: function(t) { -if (U(t)) -return t; -throw M("Target is not a typed array") -}, -aTypedArrayConstructor: function(t) { -if (s(t) && (!b || y(R, t))) -return t; -throw M(p(t) + " is not a typed array constructor") -}, -exportTypedArrayMethod: function(t, r, e, n) { -if (u) { -if (e) -for (var o in N) { -var i = c[o]; -if (i && l(i.prototype, t)) -try { -delete i.prototype[t] -} catch (e) { -try { -i.prototype[t] = r -} catch (t) {} -} -} -T[t] && !e || g(T, t, e ? r : _ && S[t] || r, n) -} -}, -exportTypedArrayStaticMethod: function(t, r, e) { -var n, o; -if (u) { -if (b) { -if (e) -for (n in N) -if ((o = c[n]) && l(o, t)) -try { -delete o[t] -} catch (t) {} -if (R[t] && !e) -return; -try { -return g(R, t, e ? r : _ && R[t] || r) -} catch (t) {} -} -for (n in N) -!(o = c[n]) || o[t] && !e || g(o, t, r) -} -}, -isView: function(t) { -if (!f(t)) -return !1; -var r = h(t); -return "DataView" === r || l(N, r) || l(D, r) -}, -isTypedArray: U, -TypedArray: R, -TypedArrayPrototype: T -} -} -, function(t, r, e) { -var n = e(68) -, o = Function.prototype.call; -t.exports = n ? o.bind(o) : function() { -return o.apply(o, arguments) -} -} -, function(t, r, e) { -var n = e(3) -, o = e(14) -, i = n({}.hasOwnProperty); -t.exports = Object.hasOwn || function(t, r) { -return i(o(t), r) -} -} -, function(t, r, e) { -var n = e(1) -, o = e(5) -, i = e(144) -, a = e(145) -, u = e(4) -, c = e(49) -, s = n.TypeError -, f = Object.defineProperty -, l = Object.getOwnPropertyDescriptor; -r.f = o ? a ? function(t, r, e) { -if (u(t), -r = c(r), -u(e), -"function" == typeof t && "prototype" === r && "value"in e && "writable"in e && !e.writable) { -var n = l(t, r); -n && n.writable && (t[r] = e.value, -e = { -configurable: "configurable"in e ? e.configurable : n.configurable, -enumerable: "enumerable"in e ? e.enumerable : n.enumerable, -writable: !1 -}) -} -return f(t, r, e) -} -: f : function(t, r, e) { -if (u(t), -r = c(r), -u(e), -i) -try { -return f(t, r, e) -} catch (t) {} -if ("get"in e || "set"in e) -throw s("Accessors not supported"); -return "value"in e && (t[r] = e.value), -t -} -} -, function(t, r, e) { -var n = e(1) -, o = e(18) -, i = n.Object; -t.exports = function(t) { -return i(o(t)) -} -} -, function(t, r, e) { -var n = e(30); -t.exports = function(t) { -return n(t.length) -} -} -, function(t, r, e) { -var n = e(1) -, o = e(9) -, i = function(t) { -return o(t) ? t : void 0 -}; -t.exports = function(t, r) { -return arguments.length < 2 ? i(n[t]) : n[t] && n[t][r] -} -} -, function(t, r, e) { -var n = e(1) -, o = e(9) -, i = e(12) -, a = e(25) -, u = e(114) -, c = e(88) -, s = e(19) -, f = e(61).CONFIGURABLE -, l = s.get -, h = s.enforce -, p = String(String).split("String"); -(t.exports = function(t, r, e, c) { -var s, l = !!c && !!c.unsafe, v = !!c && !!c.enumerable, g = !!c && !!c.noTargetGet, d = c && void 0 !== c.name ? c.name : r; -o(e) && ("Symbol(" === String(d).slice(0, 7) && (d = "[" + String(d).replace(/^Symbol\(([^)]*)\)/, "$1") + "]"), -(!i(e, "name") || f && e.name !== d) && a(e, "name", d), -(s = h(e)).source || (s.source = p.join("string" == typeof d ? d : ""))), -t !== n ? (l ? !g && t[r] && (v = !0) : delete t[r], -v ? t[r] = e : a(t, r, e)) : v ? t[r] = e : u(r, e) -} -)(Function.prototype, "toString", (function() { -return o(this) && l(this).source || c(this) -} -)) -} -, function(t, r, e) { -var n = e(1).TypeError; -t.exports = function(t) { -if (null == t) -throw n("Can't call method on " + t); -return t -} -} -, function(t, r, e) { -var n, o, i, a = e(146), u = e(1), c = e(3), s = e(6), f = e(25), l = e(12), h = e(113), p = e(89), v = e(71), g = u.TypeError, d = u.WeakMap; -if (a || h.state) { -var y = h.state || (h.state = new d) -, m = c(y.get) -, b = c(y.has) -, x = c(y.set); -n = function(t, r) { -if (b(y, t)) -throw new g("Object already initialized"); -return r.facade = t, -x(y, t, r), -r -} -, -o = function(t) { -return m(y, t) || {} -} -, -i = function(t) { -return b(y, t) -} -} else { -var w = p("state"); -v[w] = !0, -n = function(t, r) { -if (l(t, w)) -throw new g("Object already initialized"); -return r.facade = t, -f(t, w, r), -r -} -, -o = function(t) { -return l(t, w) ? t[w] : {} -} -, -i = function(t) { -return l(t, w) -} -} -t.exports = { -set: n, -get: o, -has: i, -enforce: function(t) { -return i(t) ? o(t) : n(t, {}) -}, -getterFor: function(t) { -return function(r) { -var e; -if (!s(r) || (e = o(r)).type !== t) -throw g("Incompatible receiver, " + t + " required"); -return e -} -} -} -} -, function(t, r) { -var e = Math.ceil -, n = Math.floor; -t.exports = function(t) { -var r = +t; -return r != r || 0 === r ? 0 : (r > 0 ? n : e)(r) -} -} -, function(t, r) { -t.exports = !1 -} -, function(t, r, e) { -var n = e(38) -, o = e(3) -, i = e(69) -, a = e(14) -, u = e(15) -, c = e(77) -, s = o([].push) -, f = function(t) { -var r = 1 == t -, e = 2 == t -, o = 3 == t -, f = 4 == t -, l = 6 == t -, h = 7 == t -, p = 5 == t || l; -return function(v, g, d, y) { -for (var m, b, x = a(v), w = i(x), E = n(g, d), S = u(w), A = 0, O = y || c, R = r ? O(v, S) : e || h ? O(v, 0) : void 0; S > A; A++) -if ((p || A in w) && (b = E(m = w[A], A, x), -t)) -if (r) -R[A] = b; -else if (b) -switch (t) { -case 3: -return !0; -case 5: -return m; -case 6: -return A; -case 2: -s(R, m) -} -else -switch (t) { -case 4: -return !1; -case 7: -s(R, m) -} -return l ? -1 : o || f ? f : R -} -}; -t.exports = { -forEach: f(0), -map: f(1), -filter: f(2), -some: f(3), -every: f(4), -find: f(5), -findIndex: f(6), -filterReject: f(7) -} -} -, function(t, r, e) { -var n = e(5) -, o = e(11) -, i = e(85) -, a = e(35) -, u = e(26) -, c = e(49) -, s = e(12) -, f = e(144) -, l = Object.getOwnPropertyDescriptor; -r.f = n ? l : function(t, r) { -if (t = u(t), -r = c(r), -f) -try { -return l(t, r) -} catch (t) {} -if (s(t, r)) -return a(!o(i.f, t, r), t[r]) -} -} -, function(t, r, e) { -var n = e(1) -, o = e(9) -, i = e(70) -, a = n.TypeError; -t.exports = function(t) { -if (o(t)) -return t; -throw a(i(t) + " is not a function") -} -} -, function(t, r, e) { -var n = e(5) -, o = e(13) -, i = e(35); -t.exports = n ? function(t, r, e) { -return o.f(t, r, i(1, e)) -} -: function(t, r, e) { -return t[r] = e, -t -} -} -, function(t, r, e) { -var n = e(69) -, o = e(18); -t.exports = function(t) { -return n(o(t)) -} -} -, function(t, r, e) { -var n = e(150) -, o = e(12) -, i = e(149) -, a = e(13).f; -t.exports = function(t) { -var r = n.Symbol || (n.Symbol = {}); -o(r, t) || a(r, t, { -value: i.f(t) -}) -} -} -, function(t, r, e) { -var n = e(3) -, o = n({}.toString) -, i = n("".slice); -t.exports = function(t) { -return i(o(t), 8, -1) -} -} -, function(t, r, e) { -var n = e(3); -t.exports = n({}.isPrototypeOf) -} -, function(t, r, e) { -var n = e(20) -, o = Math.min; -t.exports = function(t) { -return t > 0 ? o(n(t), 9007199254740991) : 0 -} -} -, function(t, r, e) { -var n = e(68) -, o = Function.prototype -, i = o.apply -, a = o.call; -t.exports = "object" == typeof Reflect && Reflect.apply || (n ? a.bind(i) : function() { -return a.apply(i, arguments) -} -) -} -, function(t, r, e) { -var n, o = e(4), i = e(74), a = e(116), u = e(71), c = e(148), s = e(87), f = e(89), l = f("IE_PROTO"), h = function() {}, p = function(t) { -return "