├── test └── blah.test.tsx ├── .prettierrc.json ├── example ├── .npmignore ├── index.html ├── tsconfig.json ├── package.json ├── index.tsx └── yarn.lock ├── commitlint.config.js ├── .gitignore ├── .husky ├── pre-commit └── commit-msg ├── src ├── trigger.ts ├── isEffect.ts ├── objectIs.ts ├── isSignal.ts ├── untrack.ts ├── createEffect.ts ├── track.ts ├── useCallback.ts ├── destroy.ts ├── index.ts ├── Subscription.ts ├── createSignal.ts ├── type.ts ├── useEffect.ts ├── Effect.ts ├── useLayoutEffect.ts ├── useMemo.ts ├── Signal.ts ├── useSignal.ts └── useReducer.ts ├── .github └── workflows │ ├── size.yml │ └── main.yml ├── LICENSE ├── tsconfig.json ├── package.json └── README.md /test/blah.test.tsx: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /example/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .cache 3 | dist -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = {extends: ['@commitlint/config-angular']}; 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .DS_Store 3 | node_modules 4 | .cache 5 | .parcel-cache 6 | dist 7 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npx --no-install lint-staged 5 | -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npx --no -- commitlint --edit "" 5 | -------------------------------------------------------------------------------- /src/trigger.ts: -------------------------------------------------------------------------------- 1 | import type { ISignal } from './type'; 2 | 3 | export const trigger = (signal: ISignal) => { 4 | const deps = signal.deps; 5 | if (deps) { 6 | deps.forEach((dep) => dep.mark()); 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /src/isEffect.ts: -------------------------------------------------------------------------------- 1 | import type { IEffect } from './type'; 2 | 3 | export function isEffect(effect: IEffect | unknown): effect is IEffect; 4 | export function isEffect(effect: any): effect is IEffect { 5 | return !!(effect && effect.isEffect === true); 6 | } 7 | -------------------------------------------------------------------------------- /src/objectIs.ts: -------------------------------------------------------------------------------- 1 | const is = (value1: any, value2: any) => 2 | (value1 === value2 && (value1 !== 0 || 1 / value1 === 1 / value2)) || 3 | (value1 !== value1 && value2 !== value2); 4 | 5 | export const objectIs = typeof Object.is === 'function' ? Object.is : is; 6 | -------------------------------------------------------------------------------- /src/isSignal.ts: -------------------------------------------------------------------------------- 1 | import type { ISignal } from './type'; 2 | 3 | export function isSignal(signal: ISignal | unknown): signal is ISignal; 4 | export function isSignal(signal: any): signal is ISignal { 5 | return !!(signal && signal.isSignal === true); 6 | } 7 | -------------------------------------------------------------------------------- /src/untrack.ts: -------------------------------------------------------------------------------- 1 | export const untrackRef = { current: false } as { current: boolean }; 2 | 3 | export const untrack = (callback: () => T) => { 4 | try { 5 | untrackRef.current = true; 6 | return callback(); 7 | } finally { 8 | untrackRef.current = false; 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /src/createEffect.ts: -------------------------------------------------------------------------------- 1 | import { Effect } from './Effect'; 2 | import { isEffect } from './isEffect'; 3 | import type { IEffect } from './type'; 4 | 5 | export function createEffect(arg: (() => T) | IEffect): IEffect { 6 | if (isEffect(arg)) { 7 | return arg; 8 | } 9 | return new Effect(); 10 | } 11 | -------------------------------------------------------------------------------- /src/track.ts: -------------------------------------------------------------------------------- 1 | import { effectRef } from './Effect'; 2 | import type { ISignal } from './type'; 3 | 4 | export const track = (signal: ISignal) => { 5 | if (effectRef.current === null) { 6 | return; 7 | } 8 | const deps = signal.deps || (signal.deps = new Set()); 9 | deps.add(effectRef.current); 10 | }; 11 | -------------------------------------------------------------------------------- /.github/workflows/size.yml: -------------------------------------------------------------------------------- 1 | name: size 2 | on: [pull_request] 3 | jobs: 4 | size: 5 | runs-on: ubuntu-latest 6 | env: 7 | CI_JOB_NUMBER: 1 8 | steps: 9 | - uses: actions/checkout@v1 10 | - uses: andresz1/size-limit-action@v1 11 | with: 12 | github_token: ${{ secrets.GITHUB_TOKEN }} 13 | -------------------------------------------------------------------------------- /src/useCallback.ts: -------------------------------------------------------------------------------- 1 | import { useCallback as raw_useCallback, useDebugValue } from 'react'; 2 | import type { DependencyList } from 'react'; 3 | 4 | export const useCallback = ( 5 | callback: T, 6 | deps?: DependencyList, 7 | ) => { 8 | useDebugValue(callback); 9 | return raw_useCallback(callback, deps || []); 10 | }; 11 | -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Playground 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/destroy.ts: -------------------------------------------------------------------------------- 1 | import type { EffectCallback } from 'react'; 2 | 3 | export const destroyRef = { current: false } as { current: boolean }; 4 | 5 | export const destroy = (destructor: ReturnType) => { 6 | return () => { 7 | if (typeof destructor === 'function') { 8 | try { 9 | destroyRef.current = true; 10 | destructor(); 11 | } finally { 12 | destroyRef.current = false; 13 | } 14 | } 15 | }; 16 | }; 17 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export { createSignal } from "./createSignal"; 2 | export { createEffect } from "./createEffect"; 3 | export { useSignal } from "./useSignal"; 4 | export { useReducer } from "./useReducer"; 5 | export { useEffect } from "./useEffect"; 6 | export { useLayoutEffect } from "./useLayoutEffect"; 7 | export { useCallback } from "./useCallback"; 8 | export { useMemo } from "./useMemo"; 9 | export { untrack } from "./untrack"; 10 | export { destroy } from "./destroy"; 11 | -------------------------------------------------------------------------------- /src/Subscription.ts: -------------------------------------------------------------------------------- 1 | export abstract class Subscription { 2 | // properties 3 | private _listeners: Set<(...args: T) => void>; 4 | // constructor 5 | constructor() { 6 | this._listeners = new Set(); 7 | } 8 | // getter 9 | protected get listeners() { 10 | return this._listeners; 11 | } 12 | // methods 13 | subscribe = (listener: (...args: T) => void) => { 14 | this._listeners.add(listener); 15 | return () => this._listeners.delete(listener); 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /src/createSignal.ts: -------------------------------------------------------------------------------- 1 | import { Signal } from './Signal'; 2 | import { isSignal } from './isSignal'; 3 | import type { ISignal } from './type'; 4 | 5 | export function createSignal(): ISignal; 6 | export function createSignal( 7 | initialValue: T | ISignal | (() => T), 8 | ): ISignal; 9 | export function createSignal( 10 | arg?: T | ISignal | (() => T), 11 | ): ISignal { 12 | if (isSignal(arg)) { 13 | return arg; 14 | } 15 | return new Signal(arg); 16 | } 17 | -------------------------------------------------------------------------------- /example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": false, 4 | "target": "es5", 5 | "module": "commonjs", 6 | "jsx": "react", 7 | "moduleResolution": "node", 8 | "noImplicitAny": false, 9 | "noUnusedLocals": false, 10 | "noUnusedParameters": false, 11 | "removeComments": true, 12 | "strictNullChecks": true, 13 | "preserveConstEnums": true, 14 | "sourceMap": true, 15 | "lib": ["es2015", "es2016", "dom"], 16 | "types": ["node"] 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/type.ts: -------------------------------------------------------------------------------- 1 | import type { DependencyList } from 'react'; 2 | 3 | export interface ISignal { 4 | value: T; 5 | snapshot: T; 6 | deps?: Set; 7 | subscribe: (listener: (...args: T[]) => void) => () => boolean; 8 | isSignal: boolean; 9 | } 10 | 11 | export interface IEffect { 12 | isDirty: boolean; 13 | mark(): void; 14 | run(callback: () => T): T; 15 | } 16 | 17 | export interface IEffectRef { 18 | current: IEffect | null; 19 | } 20 | 21 | export interface IDep { 22 | signals: Set; 23 | deps: DependencyList; 24 | isDep: boolean; 25 | } 26 | 27 | export interface IDepRef { 28 | current: IDep | null; 29 | } 30 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "start": "parcel index.html --no-cache", 8 | "build": "parcel build index.html" 9 | }, 10 | "dependencies": { 11 | "react-app-polyfill": "^1.0.0" 12 | }, 13 | "alias": { 14 | "react": "../node_modules/react", 15 | "react-dom": "../node_modules/react-dom/profiling", 16 | "scheduler/tracing": "../node_modules/scheduler/tracing-profiling" 17 | }, 18 | "devDependencies": { 19 | "@types/react": "^18.0.28", 20 | "@types/react-dom": "^18.0.11", 21 | "parcel": "^2.8.3", 22 | "process": "^0.11.10" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/useEffect.ts: -------------------------------------------------------------------------------- 1 | import { 2 | useMemo, 3 | useRef, 4 | useEffect as raw_useEffect, 5 | useDebugValue, 6 | } from 'react'; 7 | import { createEffect } from './createEffect'; 8 | import { destroy } from './destroy'; 9 | import type { EffectCallback, DependencyList } from 'react'; 10 | 11 | export const useEffect = ( 12 | callback: EffectCallback, 13 | deps?: DependencyList | null, 14 | ) => { 15 | const bit = useRef(0); 16 | const effect = useMemo(() => createEffect(callback), []); 17 | const firstDep = effect.isDirty 18 | ? (bit.current = (bit.current + 1) % 3) 19 | : bit.current; 20 | 21 | useDebugValue(callback); 22 | 23 | raw_useEffect( 24 | () => destroy(effect.run(callback)), 25 | deps === null ? undefined : deps ? [firstDep, ...deps] : [firstDep], 26 | ); 27 | }; 28 | -------------------------------------------------------------------------------- /src/Effect.ts: -------------------------------------------------------------------------------- 1 | import type { IEffect, IEffectRef } from './type'; 2 | 3 | export const effectRef: IEffectRef = { current: null }; 4 | 5 | export class Effect implements IEffect { 6 | // properties 7 | private _isDirty: boolean; 8 | private _isEffect: boolean; 9 | // constructor 10 | constructor() { 11 | this._isDirty = false; 12 | this._isEffect = true; 13 | } 14 | // getter 15 | get isDirty() { 16 | return this._isDirty; 17 | } 18 | get isEffect() { 19 | return this._isEffect; 20 | } 21 | // methods 22 | mark() { 23 | this._isDirty = true; 24 | } 25 | run(callback: () => T) { 26 | try { 27 | effectRef.current = this; 28 | return callback(); 29 | } finally { 30 | this._isDirty = false; 31 | effectRef.current = null; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/useLayoutEffect.ts: -------------------------------------------------------------------------------- 1 | import { 2 | useRef, 3 | useMemo, 4 | useLayoutEffect as raw_useLayoutEffect, 5 | useDebugValue, 6 | } from 'react'; 7 | import { createEffect } from './createEffect'; 8 | import { destroy } from './destroy'; 9 | import type { EffectCallback, DependencyList } from 'react'; 10 | 11 | export const useLayoutEffect = ( 12 | callback: EffectCallback, 13 | deps?: DependencyList | null, 14 | ) => { 15 | const bit = useRef(0); 16 | const effect = useMemo(() => createEffect(callback), []); 17 | const firstDep = effect.isDirty 18 | ? (bit.current = (bit.current + 1) % 3) 19 | : bit.current; 20 | 21 | useDebugValue(callback); 22 | 23 | raw_useLayoutEffect( 24 | () => destroy(effect.run(callback)), 25 | deps === null ? undefined : deps ? [firstDep, ...deps] : [firstDep], 26 | ); 27 | }; 28 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: [push] 3 | jobs: 4 | build: 5 | name: Build, lint, and test on Node ${{ matrix.node }} and ${{ matrix.os }} 6 | 7 | runs-on: ${{ matrix.os }} 8 | strategy: 9 | matrix: 10 | node: ['10.x', '12.x', '14.x'] 11 | os: [ubuntu-latest, windows-latest, macOS-latest] 12 | 13 | steps: 14 | - name: Checkout repo 15 | uses: actions/checkout@v2 16 | 17 | - name: Use Node ${{ matrix.node }} 18 | uses: actions/setup-node@v1 19 | with: 20 | node-version: ${{ matrix.node }} 21 | 22 | - name: Install deps and build (with cache) 23 | uses: bahmutov/npm-install@v1 24 | 25 | - name: Lint 26 | run: yarn lint 27 | 28 | - name: Test 29 | run: yarn test --ci --coverage --maxWorkers=2 30 | 31 | - name: Build 32 | run: yarn build 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 ivliu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /src/useMemo.ts: -------------------------------------------------------------------------------- 1 | import { 2 | useRef, 3 | useMemo as raw_useMemo, 4 | useCallback, 5 | useDebugValue, 6 | } from 'react'; 7 | import { createSignal } from './createSignal'; 8 | import { createEffect } from './createEffect'; 9 | import { destroyRef } from './destroy'; 10 | import type { DependencyList } from 'react'; 11 | 12 | export const useMemo = (factory: () => T, deps?: DependencyList) => { 13 | const bit = useRef(0); 14 | const signal = raw_useMemo(() => createSignal(), []); 15 | const effect = raw_useMemo(() => createEffect(factory), []); 16 | const firstDep = effect.isDirty 17 | ? (bit.current = (bit.current + 1) % 3) 18 | : bit.current; 19 | 20 | const get = useCallback( 21 | () => (destroyRef.current === true ? signal.snapshot : signal.value) as T, 22 | [], 23 | ); 24 | 25 | const memoValue = raw_useMemo( 26 | () => { 27 | const newValue = effect.run(factory); 28 | signal.snapshot = signal.value; 29 | signal.value = newValue; 30 | return get; 31 | }, 32 | deps ? [firstDep, ...deps] : [firstDep], 33 | ); 34 | 35 | useDebugValue(signal.value); 36 | 37 | return memoValue; 38 | }; 39 | -------------------------------------------------------------------------------- /src/Signal.ts: -------------------------------------------------------------------------------- 1 | import { Subscription } from './Subscription'; 2 | import { track } from './track'; 3 | import { trigger } from './trigger'; 4 | import { untrackRef } from './untrack'; 5 | import type { ISignal, IEffect } from './type'; 6 | 7 | export class Signal 8 | extends Subscription 9 | implements ISignal 10 | { 11 | // properties 12 | public deps?: Set; 13 | private _value: S; 14 | private _snapshot: S; 15 | private _isSignal: boolean; 16 | // constructor 17 | constructor(initialValue: S | (() => S)) { 18 | super(); 19 | this._value = this._snapshot = 20 | typeof initialValue === 'function' 21 | ? (initialValue as () => S)() 22 | : initialValue; 23 | this._isSignal = true; 24 | } 25 | // getter 26 | get value() { 27 | if (!untrackRef.current) { 28 | track(this); 29 | } 30 | return this._value; 31 | } 32 | get snapshot() { 33 | if (!untrackRef.current) { 34 | track(this); 35 | } 36 | return this._snapshot; 37 | } 38 | get isSignal() { 39 | return this._isSignal; 40 | } 41 | // setter 42 | set value(newValue: S) { 43 | this.listeners.forEach((listener) => listener(newValue)); 44 | this._value = newValue; 45 | trigger(this); 46 | } 47 | set snapshot(newSnapshot: S) { 48 | this._snapshot = newSnapshot; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // see https://www.typescriptlang.org/tsconfig to better understand tsconfigs 3 | "include": ["src", "types"], 4 | "compilerOptions": { 5 | "target": "ES5", 6 | "module": "esnext", 7 | "lib": ["dom", "esnext"], 8 | "importHelpers": true, 9 | // output .d.ts declaration files for consumers 10 | "declaration": true, 11 | // output .js.map sourcemap files for consumers 12 | "sourceMap": true, 13 | // match output dir to input dir. e.g. dist/index instead of dist/src/index 14 | "rootDir": "./src", 15 | // stricter type-checking for stronger correctness. Recommended by TS 16 | "strict": true, 17 | // linter checks for common issues 18 | "noImplicitReturns": true, 19 | "noFallthroughCasesInSwitch": true, 20 | // noUnused* overlap with @typescript-eslint/no-unused-vars, can disable if duplicative 21 | "noUnusedLocals": true, 22 | "noUnusedParameters": true, 23 | // use Node's module resolution algorithm, instead of the legacy TS one 24 | "moduleResolution": "node", 25 | // transpile JSX to React.createElement 26 | "jsx": "react", 27 | // interop between ESM and CJS modules. Recommended by TS 28 | "esModuleInterop": true, 29 | // significant perf increase by skipping checking .d.ts files, particularly those in node_modules. Recommended by TS 30 | "skipLibCheck": true, 31 | // error out if import and file system have a casing mismatch. Recommended by TS 32 | "forceConsistentCasingInFileNames": true, 33 | // `tsdx build` ignores this option, but it is commonly used when type-checking separately with `tsc` 34 | "noEmit": true, 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /example/index.tsx: -------------------------------------------------------------------------------- 1 | import "react-app-polyfill/ie11"; 2 | import * as React from "react"; 3 | import * as ReactDOM from "react-dom"; 4 | import { 5 | createSignal, 6 | useSignal, 7 | useReducer, 8 | useCallback as useCallback2, 9 | useMemo as useMemo2, 10 | useEffect as useEffect2, 11 | untrack, 12 | } from "../."; 13 | 14 | const store = createSignal({ theme: "light" }); 15 | 16 | const App = () => { 17 | // ? [getter, setter] 18 | const [count, setCount] = useSignal(0); 19 | // const [value, setValue] = React.useState(0); 20 | const [value, dispatch] = useReducer((prevValue: number) => { 21 | console.log("reducer"); 22 | return prevValue + 1; 23 | }, 0); 24 | 25 | const { theme } = React.useSyncExternalStore( 26 | store.subscribe, 27 | useCallback2(() => store.value) 28 | ); 29 | 30 | const doubleCount = useMemo2(() => { 31 | return count() * 2; 32 | }); 33 | 34 | // untrack count(); 35 | useEffect2(() => { 36 | const handle = setInterval(() => { 37 | setCount(untrack(() => count()) + 1); 38 | }, 1000); 39 | return () => clearInterval(handle); 40 | }); 41 | // auto track count(); 42 | useEffect2(() => { 43 | console.log("count is", count(), "value is", value()); 44 | }); 45 | // auto track doubleCount(); 46 | useEffect2(() => { 47 | console.log("double count is", doubleCount()); 48 | }); 49 | 50 | return ( 51 | <> 52 |
(store.value = { theme: "dark" })}>{theme}
53 |
setCount(count() + 1)}>count is {count()}
54 |
dispatch()}>value is {value()}
55 | 56 | ); 57 | }; 58 | 59 | ReactDOM.render( 60 | 61 | 62 | , 63 | document.getElementById("root") 64 | ); 65 | -------------------------------------------------------------------------------- /src/useSignal.ts: -------------------------------------------------------------------------------- 1 | import { useState, useCallback, useDebugValue } from 'react'; 2 | import { objectIs } from './objectIs'; 3 | import { createSignal } from './createSignal'; 4 | import { destroyRef } from './destroy'; 5 | import type { Dispatch, SetStateAction } from 'react'; 6 | import type { ISignal } from './type'; 7 | 8 | export function useSignal(): [ 9 | () => S | undefined, 10 | Dispatch>, 11 | ]; 12 | export function useSignal( 13 | initialValue: S | ISignal | (() => S), 14 | ): [() => S, Dispatch>]; 15 | export function useSignal( 16 | initialValue?: S | ISignal | (() => S), 17 | ): [() => S | undefined, Dispatch>] { 18 | const [signal, setSignal] = useState(() => 19 | Object.freeze({ 20 | _signal: createSignal(initialValue), 21 | }), 22 | ); 23 | 24 | const get = useCallback( 25 | () => 26 | destroyRef.current === true 27 | ? signal._signal.snapshot 28 | : signal._signal.value, 29 | [], 30 | ); 31 | 32 | const set = useCallback>>( 33 | (nextValue) => 34 | setSignal((prevSignal) => { 35 | const prevValue = prevSignal._signal.value; 36 | if (typeof nextValue === 'function') { 37 | nextValue = ( 38 | nextValue as (prevValue: S | undefined) => S | undefined 39 | )(prevValue); 40 | } 41 | if (objectIs(prevValue, nextValue)) { 42 | return prevSignal; 43 | } 44 | signal._signal.value = nextValue; 45 | signal._signal.snapshot = prevValue; 46 | return Object.freeze({ 47 | _signal: signal._signal, 48 | }); 49 | }), 50 | [], 51 | ); 52 | 53 | useDebugValue(signal._signal.value); 54 | 55 | return [get, set]; 56 | } 57 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.8", 3 | "license": "MIT", 4 | "main": "dist/index.js", 5 | "typings": "dist/index.d.ts", 6 | "keywords": [ 7 | "javascript", 8 | "typescript", 9 | "js", 10 | "ts", 11 | "react", 12 | "signals", 13 | "react-signals", 14 | "useSignal", 15 | "use-signals", 16 | "solidjs" 17 | ], 18 | "homepage": "https://github.com/IVLIU/react-signal", 19 | "repository": { 20 | "url": "https://github.com/IVLIU/react-signal" 21 | }, 22 | "files": [ 23 | "dist" 24 | ], 25 | "engines": { 26 | "node": ">=10" 27 | }, 28 | "scripts": { 29 | "start": "tsdx watch", 30 | "build": "tsdx build", 31 | "test": "tsdx test --passWithNoTests", 32 | "lint": "tsdx lint", 33 | "publish:patch": "npm version patch && npm publish", 34 | "publish:minor": "npm version minor && npm publish", 35 | "publish:major": "npm version major && npm publish", 36 | "prepare": "tsdx build && husky install", 37 | "size": "size-limit", 38 | "analyze": "size-limit --why", 39 | "preinstall": "npx only-allow pnpm" 40 | }, 41 | "peerDependencies": { 42 | "react": ">=16.8" 43 | }, 44 | "name": "@ivliu/react-signal", 45 | "author": "ivliu", 46 | "module": "dist/react-signal.esm.js", 47 | "size-limit": [ 48 | { 49 | "path": "dist/react-signal.cjs.production.min.js", 50 | "limit": "10 KB" 51 | }, 52 | { 53 | "path": "dist/react-signal.esm.js", 54 | "limit": "10 KB" 55 | } 56 | ], 57 | "lint-staged": { 58 | "**/*.ts?(x)": [ 59 | "npx prettier --parser=typescript --write" 60 | ] 61 | }, 62 | "devDependencies": { 63 | "@commitlint/cli": "^17.4.4", 64 | "@commitlint/config-angular": "^17.4.4", 65 | "@size-limit/preset-small-lib": "^8.2.4", 66 | "@types/react": "^18.0.28", 67 | "@types/react-dom": "^18.0.11", 68 | "husky": "^8.0.0", 69 | "lint-staged": "^13.1.2", 70 | "prettier": "^2.8.4", 71 | "react": "^18.2.0", 72 | "react-dom": "^18.2.0", 73 | "size-limit": "^8.2.4", 74 | "tsdx": "^0.14.1", 75 | "tslib": "^2.5.0", 76 | "typescript": "^4.9.5" 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/useReducer.ts: -------------------------------------------------------------------------------- 1 | import { 2 | useMemo, 3 | useReducer as raw_useReducer, 4 | useCallback, 5 | useDebugValue, 6 | } from 'react'; 7 | import { createSignal } from './createSignal'; 8 | import { destroyRef } from './destroy'; 9 | import { objectIs } from './objectIs'; 10 | import type { 11 | ReducerWithoutAction, 12 | ReducerStateWithoutAction, 13 | DispatchWithoutAction, 14 | Reducer, 15 | ReducerState, 16 | Dispatch, 17 | ReducerAction, 18 | } from 'react'; 19 | import type { ISignal } from './type'; 20 | 21 | export function useReducer, I>( 22 | reducer: R, 23 | initializerArg: I | ISignal, 24 | initializer: (arg: I) => ReducerStateWithoutAction, 25 | ): [() => ReducerStateWithoutAction, DispatchWithoutAction]; 26 | export function useReducer>( 27 | reducer: R, 28 | initializerArg: ReducerStateWithoutAction, 29 | initializer?: undefined, 30 | ): [() => ReducerStateWithoutAction, DispatchWithoutAction]; 31 | export function useReducer, I>( 32 | reducer: R, 33 | initializerArg: (I & ReducerState) | ISignal>, 34 | initializer: (arg: I & ReducerState) => ReducerState, 35 | ): [() => ReducerState, Dispatch>]; 36 | export function useReducer, I>( 37 | reducer: R, 38 | initializerArg: I | ISignal, 39 | initializer: (arg: I) => ReducerState, 40 | ): [() => ReducerState, Dispatch>]; 41 | export function useReducer>( 42 | reducer: R, 43 | initialState: ReducerState, 44 | initializer?: undefined, 45 | ): [() => ReducerState, Dispatch>]; 46 | export function useReducer< 47 | R extends ReducerWithoutAction | Reducer, 48 | >(reducer: R, initializerArgOrState: any, initializer?: any) { 49 | const signal = useMemo( 50 | () => 51 | createSignal( 52 | initializer 53 | ? initializer(initializerArgOrState) 54 | : initializerArgOrState, 55 | ), 56 | [], 57 | ); 58 | const dispatch = raw_useReducer( 59 | (prevValue: ReducerState, action: ReducerAction) => { 60 | const nextValue = reducer(prevValue, action); 61 | if (objectIs(prevValue, nextValue)) { 62 | return prevValue; 63 | } 64 | signal.snapshot = signal.value; 65 | signal.value = nextValue; 66 | return nextValue; 67 | }, 68 | signal.value, 69 | )[1]; 70 | 71 | const get = useCallback( 72 | () => (destroyRef.current === true ? signal.snapshot : signal.value), 73 | [], 74 | ); 75 | 76 | useDebugValue(signal.value); 77 | 78 | return [get, dispatch]; 79 | } 80 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @ivliu/react-signal 2 | 3 | Signal(信号)是一种存储应用状态的形式,类似于 React 中的 useState()。但是,有一些关键性差异使 Signal 更具优势。Vue、Preact、Solid 和 Qwik 等流行 JavaScript 框架都支持 Signal。 4 | 5 | 那么react结合signal能产生什么样的火花,能解决什么问题呢? 6 | 7 | ## Signal 是什么? 8 | 9 | Signal 和 State 之间的主要区别在于 Signal 返回一个 getter 和一个 setter,而非响应式系统返回一个值和一个 setter。 10 | 11 | ```typescript 12 | useState() = value + setter 13 | useSignal() = getter + setter 14 | ``` 15 | 16 | > 注意:有些响应式系统同时返回一个 getter/setter,有些则返回两个单独的引用,但思想是一样的。 17 | 18 | 我们拿solidjs举个例子,因为react-signal的api设计和solidjs保持一致 19 | ```typescript react 20 | const Counter = () => { 21 | const [count, setCount] = createSignal(0); 22 | 23 | return ( 24 | 25 | ) 26 | } 27 | ``` 28 | 29 | 30 | ## 安装 31 | 32 | using pnpm 33 | 34 | ```bash 35 | pnpm add @ivliu/react-signal 36 | ``` 37 | using yarn 38 | 39 | ```bash 40 | yarn add @ivliu/react-signal 41 | ``` 42 | using npm 43 | 44 | ```bash 45 | npm install @ivliu/react-signal --save 46 | ``` 47 | ## 用法 48 | 49 | ```typescript react 50 | import { useSignal, useEffect, untrack } from '@ivliu/react-signal'; 51 | 52 | const App = () => { 53 | // ? [getter, setter] 54 | const [count, setCount] = useSignal(60); 55 | // ? untrack count(); 56 | useEffect(() => { 57 | setInterval(() => { 58 | setCount(untrack(() => count()) - 1); 59 | }, 1000); 60 | }); 61 | // ? auto track count(); 62 | useEffect(() => { 63 | console.log('effect', count()); 64 | return () => console.log('destroy', count()); 65 | }); 66 | // ? useEffect with undefined deps 67 | useEffect(() => { 68 | console.log('update'); 69 | }, null); 70 | 71 | return
{count()}
; 72 | }; 73 | ``` 74 | 75 | ## 调试 76 | 77 | ```bash 78 | # 安装依赖 79 | pnpm install 80 | # 运行 81 | npm start 82 | # 进入example 83 | cd example 84 | # 安装依赖 85 | pnpm install # or yarn 86 | # 运行 87 | npm start 88 | ``` 89 | 打开http://localhost:1234,即可查看,也可更改example/index.tsx来体验 90 | 91 | ## react hooks的问题 92 | 93 | 提起react hooks,我们作为开发者可以说是又爱又恨,爱的是它可以让函数组件拥有类组件的功能,从而更方便地管理组件状态,同时在逻辑复用上相较于HOC或者render props更简单更轻量。恨的是它带来了一些心智负担,尤其是闭包和显式依赖问题。 94 | 95 | react-signal在一定程度上可以解决这些问题 96 | 97 | ## API 98 | 99 | react-signal使用useSignal代替useState,返回了getter和setter。 100 | 101 | 为了实现依赖自动追踪,我们重写了useEffect、useLayoutEffect、useInsertionEffect、useMemo、useCallback,且命名与react保持一致。 102 | 103 | 另外我们还提供了一些高级api,createSignal、untrack、destroy。 104 | 105 | 下面将会详细介绍每一个api。 106 | 107 | #### useSignal 108 | 109 | useSignal用于替换useState,它返回一个getter和setter。 110 | ```typescript 111 | import { useSignal, useEffect } from '@ivliu/react-signal'; 112 | 113 | function App() { 114 | const [count, setCount] = useSignal(0); 115 | 116 | useEffect(() => { 117 | const handle = setTimeout(() => { 118 | // 输出最新值10,而非初次访问的闭包值 119 | console.log(count()) 120 | }, 1000); 121 | return () => clearTimeout(handle); 122 | }) 123 | // useEffect都不需要写依赖了 124 | useEffect(() => { 125 | setCount(10); 126 | }) 127 | 128 | // 取值改为getter方式 129 | return
{count()}
130 | } 131 | ``` 132 | 133 | 如果signal初值初始化成本较高,那么你可以通过函数指定。 134 | ```typescript 135 | // new person仅会初始化一次 136 | useSignal(() => new Person()) 137 | ``` 138 | 139 | 另外还可以用createSignal创建初始值,但是注意createSignal需要声明在组件外部。 140 | 141 | ```typescript 142 | import { createSignal, useSignal, useEffect } from '@ivliu/react-signal'; 143 | 144 | const externalSignal = createSignal(0); 145 | 146 | function App() { 147 | const [count, setCount] = useSignal(externalSignal); 148 | 149 | useEffect(() => { 150 | const handle = setTimeout(() => { 151 | // 输出最新值10,而非初次访问的闭包值 152 | console.log(count()) 153 | }, 1000); 154 | return () => clearTimeout(handle); 155 | }) 156 | // useEffect都不需要写依赖了 157 | useEffect(() => { 158 | setCount(10); 159 | }) 160 | 161 | // 取值改为getter方式 162 | return
{count()}
163 | } 164 | ``` 165 | 166 | #### useReducer 167 | ```typescript react 168 | import { useReducer, useEffect } from '@ivliu/react-signal'; 169 | 170 | function App() { 171 | const [count, dispatch] = useReducer((prevValue) => prevValue + 1, 0); 172 | 173 | // dispatch引用是稳定的,当需要对子组件缓存时很有效果 174 | return
{count()}
175 | } 176 | ``` 177 | 178 | #### useEffect 179 | 180 | useEffect用于替换native useEffect,默认不需要填写依赖。执行时机和react effect一致 181 | ```typescript 182 | useEffect(() => { 183 | /** count()会自动跟踪,count()发生变化时,effect函数会重新执行 */ 184 | console.log(count()) 185 | }) 186 | ``` 187 | 如果想实现等效native Effect不传依赖,即useEffect回调每次渲染都重新执行的效果的话,则依赖项需要显式传入null。 188 | ```typescript 189 | useEffect(() => { 190 | console.log(count()) 191 | }, null) 192 | ``` 193 | useLayoutEffect、useInsertionEffect同理。 194 | 195 | #### useCallback 196 | 197 | ```typescript 198 | const onClick = useCallback(() => { 199 | console.log(count()); 200 | }) 201 | ``` 202 | 203 | 如果函数仅仅依赖signal的话,那么想实现一个引用稳定的函数将轻而易举,这是个附加的feature。 204 | 205 | #### useMemo 206 | 207 | ```typescript 208 | function App() { 209 | const [count, setCount] = useSignal(0); 210 | 211 | const doubleCount = useMemo(() => { 212 | return count() * 2; 213 | }); 214 | 215 | return
setCount(count() + 1)}>{doubleCount()}
216 | } 217 | 218 | ``` 219 | 220 | #### createSignal 221 | 222 | createSignal是脱离react组件创建signal的方式,本意是为了和useSyncExternalStore更好的结合使用。 223 | 224 | 结合useSyncExternalStore 225 | ```typescript react 226 | import { useSyncExternalStore } from 'react'; 227 | import { createSignal, useCallback } from '@ivliu/react-signal'; 228 | 229 | const store = createSignal({ theme: 'light' }); 230 | 231 | function App() { 232 | const { theme } = useSyncExternalStore( 233 | store.subscribe, 234 | useCallback(() => store.value), 235 | ); 236 | 237 | return
store.value = { theme: 'dark' } }>{theme}
238 | } 239 | ``` 240 | 结合useSignal 241 | ```typescript react 242 | import { createSignal, useSignal, useEffect } from '@ivliu/react-signal'; 243 | 244 | const externalSignal = createSignal(0); 245 | 246 | externalSignal.subscribe((value) => console.log(value)); 247 | 248 | function App() { 249 | const [count, setCount] = useSignal(externalSignal); 250 | 251 | useEffect(() => { 252 | const handle = setTimeout(() => { 253 | // 输出最新值10,而非初次访问的闭包值 254 | console.log(count()) 255 | }, 1000); 256 | return () => clearTimeout(handle); 257 | }) 258 | // useEffect都不需要写依赖了 259 | useEffect(() => { 260 | setCount(10); 261 | }) 262 | 263 | // 取值改为getter方式 264 | return
{count()}
265 | } 266 | ``` 267 | 268 | 同时我们可以用它做一些状态保持,比如最常见的页码保持。 269 | 我们有一个列表页,然后在某页进入详情,然后返回,我们肯定希望保持在对应页,利用createSignal就可以轻松实现,因为组件销毁的时候,状态仍然保持在内存里,组件再次挂载时访问的是缓存状态。 270 | 271 | > 注意不要一个external signal供多个useSignal使用。 272 | 273 | #### untrack 274 | 我们实现了effect依赖的自动追踪,那么我们不想追踪某些变量的话,我们可以用untrack包裹 275 | ```typescript 276 | useEffect(() => { 277 | // 此时count()不会追踪,setInterval仅会设置一次 278 | const handle = setInterval(() => { 279 | setCount(untrack(() => count()) - 1); 280 | }, 1000); 281 | return () => clearInterval(handle); 282 | }); 283 | ``` 284 | #### destroy 285 | 先看个问题 286 | ```typescript react 287 | function App() { 288 | const [count, setCount] = useState(0); 289 | const [person, setPerson] = useState({ name: '' }); 290 | 291 | const countRef = useRef(count); 292 | 293 | countRef.current = count; 294 | 295 | useEffect(() => { 296 | // ? person.name每次更新,两次输出的值是否一致 297 | console.log(countRef.current); 298 | return () => console.log(countRef.current); 299 | }, [person.name]); 300 | 301 | return { 302 | setPerson({ name: e.target.name }); 303 | }} /> 304 | } 305 | ``` 306 | 揭晓答案,不一致。因为effect destroy函数是在下一次渲染执行的。 307 | 308 | 因为我们提供了destroy api,它用在native useEffect内部访问signal的情况。 309 | ```typescript 310 | // ! native useEffect 311 | useEffect(() => { 312 | // ? person.name每次更新,两次输出的值保持一致 313 | console.log(count()); 314 | return destroy(() => console.log(count())) 315 | }, [person.name]); 316 | ``` 317 | 318 | ## 渐进接入 319 | react-signal并非脱离react创造新概念,且和细粒度更新没什么关系,它仅仅提供了signal形式的api。 320 | 因为我们可以非常低成本的接入,且支持和native api混用。 321 | ```typescript react 322 | import { useState, useEffect } from 'react'; 323 | import { useSignal, useEffect as useEffect2 } from '@ivliu/react-signal'; 324 | 325 | function App(props: { count3: number }) { 326 | const [count1, setCount1] = useState(0); 327 | const [count2, setCount2] = useSignal(0); 328 | 329 | useEffect(() => { 330 | console.log(count1, count2(), props.count3); 331 | }, [count1, count2, props.count3]); 332 | 333 | useEffect2(() => { 334 | console.log(count1, count2(), props.count3); 335 | // state和props值无法自动追踪,需要显式声明依赖 336 | }, [count1, props.count3]); 337 | 338 | return
{ 339 | setCount1(count1 + 1); 340 | setCount2(count2() + 1); 341 | }}>{count1 + count2() + props.count3}
342 | } 343 | ``` 344 | ## 与useState的不同 345 | 在使用useSignal的时候需要注意和useState的不同 346 | ```typescript react 347 | function App1() { 348 | const [count, setCount] = useState(0); 349 | 350 | return ( 351 |

{ 352 | // 点击一次,count值加1 353 | setCount(count + 1); 354 | setCount(count + 1); 355 | setCount(count + 1); 356 | }}>{count}

357 | ) 358 | } 359 | 360 | function App2() { 361 | const [count, setCount] = useSignal(0); 362 | 363 | return ( 364 |

{ 365 | // 点击一次,count值加3,因为signal是稳定且可变的 366 | setCount(count() + 1); 367 | setCount(count() + 1); 368 | setCount(count() + 1); 369 | // 如果你想保持行为一致,你需要 370 | // const current = count(); 371 | // setCount(current + 1); 372 | // setCount(current + 1); 373 | // setCount(current + 1); 374 | }}>{count}

375 | ) 376 | } 377 | ``` 378 | ## todo 379 | 在native effect中我们可以自由控制监听的粒度,比如 380 | ```typescript 381 | // native effect 382 | useEffect(() => { console.log(person) }, [person.name]); 383 | ``` 384 | 但目前react-signal只能做到signal粒度的自动追踪,我们正在努力实现该feature。 385 | 如果你想实现类似效果,你可以暂时这样做。 386 | ```typescript 387 | useEffect(() => { console.log(untrack(() => person())) }, [person().name]); 388 | ``` 389 | 390 | ## 贡献 391 | 392 | 请随时提交任何问题或请求请求。我将在最快的时间回复你。 393 | 394 | 395 | ## License 396 | 397 | MIT 398 | -------------------------------------------------------------------------------- /example/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.18.6" 7 | resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" 8 | integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== 9 | dependencies: 10 | "@babel/highlight" "^7.18.6" 11 | 12 | "@babel/helper-validator-identifier@^7.18.6": 13 | version "7.19.1" 14 | resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" 15 | integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== 16 | 17 | "@babel/highlight@^7.18.6": 18 | version "7.18.6" 19 | resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" 20 | integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.18.6" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@jridgewell/gen-mapping@^0.3.0": 27 | version "0.3.2" 28 | resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" 29 | integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== 30 | dependencies: 31 | "@jridgewell/set-array" "^1.0.1" 32 | "@jridgewell/sourcemap-codec" "^1.4.10" 33 | "@jridgewell/trace-mapping" "^0.3.9" 34 | 35 | "@jridgewell/resolve-uri@3.1.0": 36 | version "3.1.0" 37 | resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 38 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 39 | 40 | "@jridgewell/set-array@^1.0.1": 41 | version "1.1.2" 42 | resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 43 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 44 | 45 | "@jridgewell/source-map@^0.3.2": 46 | version "0.3.2" 47 | resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" 48 | integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== 49 | dependencies: 50 | "@jridgewell/gen-mapping" "^0.3.0" 51 | "@jridgewell/trace-mapping" "^0.3.9" 52 | 53 | "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": 54 | version "1.4.14" 55 | resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 56 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 57 | 58 | "@jridgewell/trace-mapping@^0.3.9": 59 | version "0.3.17" 60 | resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" 61 | integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== 62 | dependencies: 63 | "@jridgewell/resolve-uri" "3.1.0" 64 | "@jridgewell/sourcemap-codec" "1.4.14" 65 | 66 | "@lezer/common@^0.15.0", "@lezer/common@^0.15.7": 67 | version "0.15.12" 68 | resolved "https://registry.npmmirror.com/@lezer/common/-/common-0.15.12.tgz#2f21aec551dd5fd7d24eb069f90f54d5bc6ee5e9" 69 | integrity sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig== 70 | 71 | "@lezer/lr@^0.15.4": 72 | version "0.15.8" 73 | resolved "https://registry.npmmirror.com/@lezer/lr/-/lr-0.15.8.tgz#1564a911e62b0a0f75ca63794a6aa8c5dc63db21" 74 | integrity sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg== 75 | dependencies: 76 | "@lezer/common" "^0.15.0" 77 | 78 | "@lmdb/lmdb-darwin-arm64@2.5.2": 79 | version "2.5.2" 80 | resolved "https://registry.npmmirror.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz#bc66fa43286b5c082e8fee0eacc17995806b6fbe" 81 | integrity sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A== 82 | 83 | "@lmdb/lmdb-darwin-x64@2.5.2": 84 | version "2.5.2" 85 | resolved "https://registry.npmmirror.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz#89d8390041bce6bab24a82a20392be22faf54ffc" 86 | integrity sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA== 87 | 88 | "@lmdb/lmdb-linux-arm64@2.5.2": 89 | version "2.5.2" 90 | resolved "https://registry.npmmirror.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz#14fe4c96c2bb1285f93797f45915fa35ee047268" 91 | integrity sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ== 92 | 93 | "@lmdb/lmdb-linux-arm@2.5.2": 94 | version "2.5.2" 95 | resolved "https://registry.npmmirror.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz#05bde4573ab10cf21827339fe687148f2590cfa1" 96 | integrity sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw== 97 | 98 | "@lmdb/lmdb-linux-x64@2.5.2": 99 | version "2.5.2" 100 | resolved "https://registry.npmmirror.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz#d2f85afd857d2c33d2caa5b057944574edafcfee" 101 | integrity sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q== 102 | 103 | "@lmdb/lmdb-win32-x64@2.5.2": 104 | version "2.5.2" 105 | resolved "https://registry.npmmirror.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz#28f643fbc0bec30b07fbe95b137879b6b4d1c9c5" 106 | integrity sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA== 107 | 108 | "@mischnic/json-sourcemap@^0.1.0": 109 | version "0.1.0" 110 | resolved "https://registry.npmmirror.com/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz#38af657be4108140a548638267d02a2ea3336507" 111 | integrity sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA== 112 | dependencies: 113 | "@lezer/common" "^0.15.7" 114 | "@lezer/lr" "^0.15.4" 115 | json5 "^2.2.1" 116 | 117 | "@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.0": 118 | version "3.0.0" 119 | resolved "https://registry.npmmirror.com/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.0.tgz#d31a238c943ffc34bab73ad6ce7a6466d65888ef" 120 | integrity sha512-5qpnNHUyyEj9H3sm/4Um/bnx1lrQGhe8iqry/1d+cQYCRd/gzYA0YLeq0ezlk4hKx4vO+dsEsNyeowqRqslwQA== 121 | 122 | "@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.0": 123 | version "3.0.0" 124 | resolved "https://registry.npmmirror.com/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.0.tgz#2f6fbbec3d3f0bbe9c6678c899f1c1a6e25ed980" 125 | integrity sha512-ZphTFFd6SFweNAMKD+QJCrWpgkjf4qBuHltiMkKkD6FFrB3NOTRVmetAGTkJ57pa+s6J0yCH06LujWB9rZe94g== 126 | 127 | "@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.0": 128 | version "3.0.0" 129 | resolved "https://registry.npmmirror.com/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.0.tgz#19875441da50b9aa8f8e726eb097a4cead435a3f" 130 | integrity sha512-NEX6hdSvP4BmVyegaIbrGxvHzHvTzzsPaxXCsUt0mbLbPpEftsvNwaEVKOowXnLoeuGeD4MaqSwL3BUK2elsUA== 131 | 132 | "@msgpackr-extract/msgpackr-extract-linux-arm@3.0.0": 133 | version "3.0.0" 134 | resolved "https://registry.npmmirror.com/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.0.tgz#3b855ac72cc16e89db2f72adf47ddc964c20a53d" 135 | integrity sha512-ztKVV1dO/sSZyGse0PBCq3Pk1PkYjsA/dsEWE7lfrGoAK3i9HpS2o7XjGQ7V4va6nX+xPPOiuYpQwa4Bi6vlww== 136 | 137 | "@msgpackr-extract/msgpackr-extract-linux-x64@3.0.0": 138 | version "3.0.0" 139 | resolved "https://registry.npmmirror.com/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.0.tgz#455f1d5bb00e87f78c67711f26e7bff9f1457684" 140 | integrity sha512-9uvdAkZMOPCY7SPRxZLW8XGqBOVNVEhqlgffenN8shA1XR9FWVsSM13nr/oHtNgXg6iVyML7RwWPyqUeThlwxg== 141 | 142 | "@msgpackr-extract/msgpackr-extract-win32-x64@3.0.0": 143 | version "3.0.0" 144 | resolved "https://registry.npmmirror.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.0.tgz#03c6bfcd3acb179ea69546c20d50895b9d623ada" 145 | integrity sha512-Wg0+9615kHKlr9iLVcG5I+/CHnf6w3x5UADRv8Ad16yA0Bu5l9eVOROjV7aHPG6uC8ZPFIVVaoSjDChD+Y0pzg== 146 | 147 | "@parcel/bundler-default@2.8.3": 148 | version "2.8.3" 149 | resolved "https://registry.npmmirror.com/@parcel/bundler-default/-/bundler-default-2.8.3.tgz#d64739dbc2dbd59d6629861bf77a8083aced5229" 150 | integrity sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg== 151 | dependencies: 152 | "@parcel/diagnostic" "2.8.3" 153 | "@parcel/graph" "2.8.3" 154 | "@parcel/hash" "2.8.3" 155 | "@parcel/plugin" "2.8.3" 156 | "@parcel/utils" "2.8.3" 157 | nullthrows "^1.1.1" 158 | 159 | "@parcel/cache@2.8.3": 160 | version "2.8.3" 161 | resolved "https://registry.npmmirror.com/@parcel/cache/-/cache-2.8.3.tgz#169e130cf59913c0ed9fadce1a450e68f710e16f" 162 | integrity sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ== 163 | dependencies: 164 | "@parcel/fs" "2.8.3" 165 | "@parcel/logger" "2.8.3" 166 | "@parcel/utils" "2.8.3" 167 | lmdb "2.5.2" 168 | 169 | "@parcel/codeframe@2.8.3": 170 | version "2.8.3" 171 | resolved "https://registry.npmmirror.com/@parcel/codeframe/-/codeframe-2.8.3.tgz#84fb529ef70def7f5bc64f6c59b18d24826f5fcc" 172 | integrity sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg== 173 | dependencies: 174 | chalk "^4.1.0" 175 | 176 | "@parcel/compressor-raw@2.8.3": 177 | version "2.8.3" 178 | resolved "https://registry.npmmirror.com/@parcel/compressor-raw/-/compressor-raw-2.8.3.tgz#301753df8c6de967553149639e8a4179b88f0c95" 179 | integrity sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg== 180 | dependencies: 181 | "@parcel/plugin" "2.8.3" 182 | 183 | "@parcel/config-default@2.8.3": 184 | version "2.8.3" 185 | resolved "https://registry.npmmirror.com/@parcel/config-default/-/config-default-2.8.3.tgz#9a43486e7c702e96c68052c37b79098d7240e35b" 186 | integrity sha512-o/A/mbrO6X/BfGS65Sib8d6SSG45NYrNooNBkH/o7zbOBSRQxwyTlysleK1/3Wa35YpvFyLOwgfakqCtbGy4fw== 187 | dependencies: 188 | "@parcel/bundler-default" "2.8.3" 189 | "@parcel/compressor-raw" "2.8.3" 190 | "@parcel/namer-default" "2.8.3" 191 | "@parcel/optimizer-css" "2.8.3" 192 | "@parcel/optimizer-htmlnano" "2.8.3" 193 | "@parcel/optimizer-image" "2.8.3" 194 | "@parcel/optimizer-svgo" "2.8.3" 195 | "@parcel/optimizer-terser" "2.8.3" 196 | "@parcel/packager-css" "2.8.3" 197 | "@parcel/packager-html" "2.8.3" 198 | "@parcel/packager-js" "2.8.3" 199 | "@parcel/packager-raw" "2.8.3" 200 | "@parcel/packager-svg" "2.8.3" 201 | "@parcel/reporter-dev-server" "2.8.3" 202 | "@parcel/resolver-default" "2.8.3" 203 | "@parcel/runtime-browser-hmr" "2.8.3" 204 | "@parcel/runtime-js" "2.8.3" 205 | "@parcel/runtime-react-refresh" "2.8.3" 206 | "@parcel/runtime-service-worker" "2.8.3" 207 | "@parcel/transformer-babel" "2.8.3" 208 | "@parcel/transformer-css" "2.8.3" 209 | "@parcel/transformer-html" "2.8.3" 210 | "@parcel/transformer-image" "2.8.3" 211 | "@parcel/transformer-js" "2.8.3" 212 | "@parcel/transformer-json" "2.8.3" 213 | "@parcel/transformer-postcss" "2.8.3" 214 | "@parcel/transformer-posthtml" "2.8.3" 215 | "@parcel/transformer-raw" "2.8.3" 216 | "@parcel/transformer-react-refresh-wrap" "2.8.3" 217 | "@parcel/transformer-svg" "2.8.3" 218 | 219 | "@parcel/core@2.8.3": 220 | version "2.8.3" 221 | resolved "https://registry.npmmirror.com/@parcel/core/-/core-2.8.3.tgz#22a69f36095d53736ab10bf42697d9aa5f4e382b" 222 | integrity sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ== 223 | dependencies: 224 | "@mischnic/json-sourcemap" "^0.1.0" 225 | "@parcel/cache" "2.8.3" 226 | "@parcel/diagnostic" "2.8.3" 227 | "@parcel/events" "2.8.3" 228 | "@parcel/fs" "2.8.3" 229 | "@parcel/graph" "2.8.3" 230 | "@parcel/hash" "2.8.3" 231 | "@parcel/logger" "2.8.3" 232 | "@parcel/package-manager" "2.8.3" 233 | "@parcel/plugin" "2.8.3" 234 | "@parcel/source-map" "^2.1.1" 235 | "@parcel/types" "2.8.3" 236 | "@parcel/utils" "2.8.3" 237 | "@parcel/workers" "2.8.3" 238 | abortcontroller-polyfill "^1.1.9" 239 | base-x "^3.0.8" 240 | browserslist "^4.6.6" 241 | clone "^2.1.1" 242 | dotenv "^7.0.0" 243 | dotenv-expand "^5.1.0" 244 | json5 "^2.2.0" 245 | msgpackr "^1.5.4" 246 | nullthrows "^1.1.1" 247 | semver "^5.7.1" 248 | 249 | "@parcel/diagnostic@2.8.3": 250 | version "2.8.3" 251 | resolved "https://registry.npmmirror.com/@parcel/diagnostic/-/diagnostic-2.8.3.tgz#d560276d5d2804b48beafa1feaf3fc6b2ac5e39d" 252 | integrity sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ== 253 | dependencies: 254 | "@mischnic/json-sourcemap" "^0.1.0" 255 | nullthrows "^1.1.1" 256 | 257 | "@parcel/events@2.8.3": 258 | version "2.8.3" 259 | resolved "https://registry.npmmirror.com/@parcel/events/-/events-2.8.3.tgz#205f8d874e6ecc2cbdb941bf8d54bae669e571af" 260 | integrity sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w== 261 | 262 | "@parcel/fs-search@2.8.3": 263 | version "2.8.3" 264 | resolved "https://registry.npmmirror.com/@parcel/fs-search/-/fs-search-2.8.3.tgz#1c7d812c110b808758f44c56e61dfffdb09e9451" 265 | integrity sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ== 266 | dependencies: 267 | detect-libc "^1.0.3" 268 | 269 | "@parcel/fs@2.8.3": 270 | version "2.8.3" 271 | resolved "https://registry.npmmirror.com/@parcel/fs/-/fs-2.8.3.tgz#80536afe877fc8a2bd26be5576b9ba27bb4c5754" 272 | integrity sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ== 273 | dependencies: 274 | "@parcel/fs-search" "2.8.3" 275 | "@parcel/types" "2.8.3" 276 | "@parcel/utils" "2.8.3" 277 | "@parcel/watcher" "^2.0.7" 278 | "@parcel/workers" "2.8.3" 279 | 280 | "@parcel/graph@2.8.3": 281 | version "2.8.3" 282 | resolved "https://registry.npmmirror.com/@parcel/graph/-/graph-2.8.3.tgz#00ffe8ec032e74fee57199e54529f1da7322571d" 283 | integrity sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg== 284 | dependencies: 285 | nullthrows "^1.1.1" 286 | 287 | "@parcel/hash@2.8.3": 288 | version "2.8.3" 289 | resolved "https://registry.npmmirror.com/@parcel/hash/-/hash-2.8.3.tgz#bc2499a27395169616cad2a99e19e69b9098f6e9" 290 | integrity sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw== 291 | dependencies: 292 | detect-libc "^1.0.3" 293 | xxhash-wasm "^0.4.2" 294 | 295 | "@parcel/logger@2.8.3": 296 | version "2.8.3" 297 | resolved "https://registry.npmmirror.com/@parcel/logger/-/logger-2.8.3.tgz#e14e4debafb3ca9e87c07c06780f9afc38b2712c" 298 | integrity sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA== 299 | dependencies: 300 | "@parcel/diagnostic" "2.8.3" 301 | "@parcel/events" "2.8.3" 302 | 303 | "@parcel/markdown-ansi@2.8.3": 304 | version "2.8.3" 305 | resolved "https://registry.npmmirror.com/@parcel/markdown-ansi/-/markdown-ansi-2.8.3.tgz#1337d421bb1133ad178f386a8e1b746631bba4a1" 306 | integrity sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ== 307 | dependencies: 308 | chalk "^4.1.0" 309 | 310 | "@parcel/namer-default@2.8.3": 311 | version "2.8.3" 312 | resolved "https://registry.npmmirror.com/@parcel/namer-default/-/namer-default-2.8.3.tgz#5304bee74beb4b9c1880781bdbe35be0656372f4" 313 | integrity sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw== 314 | dependencies: 315 | "@parcel/diagnostic" "2.8.3" 316 | "@parcel/plugin" "2.8.3" 317 | nullthrows "^1.1.1" 318 | 319 | "@parcel/node-resolver-core@2.8.3": 320 | version "2.8.3" 321 | resolved "https://registry.npmmirror.com/@parcel/node-resolver-core/-/node-resolver-core-2.8.3.tgz#581df074a27646400b3fed9da95297b616a7db8f" 322 | integrity sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww== 323 | dependencies: 324 | "@parcel/diagnostic" "2.8.3" 325 | "@parcel/utils" "2.8.3" 326 | nullthrows "^1.1.1" 327 | semver "^5.7.1" 328 | 329 | "@parcel/optimizer-css@2.8.3": 330 | version "2.8.3" 331 | resolved "https://registry.npmmirror.com/@parcel/optimizer-css/-/optimizer-css-2.8.3.tgz#420a333f4b78f7ff15e69217dfed34421b1143ee" 332 | integrity sha512-JotGAWo8JhuXsQDK0UkzeQB0UR5hDAKvAviXrjqB4KM9wZNLhLleeEAW4Hk8R9smCeQFP6Xg/N/NkLDpqMwT3g== 333 | dependencies: 334 | "@parcel/diagnostic" "2.8.3" 335 | "@parcel/plugin" "2.8.3" 336 | "@parcel/source-map" "^2.1.1" 337 | "@parcel/utils" "2.8.3" 338 | browserslist "^4.6.6" 339 | lightningcss "^1.16.1" 340 | nullthrows "^1.1.1" 341 | 342 | "@parcel/optimizer-htmlnano@2.8.3": 343 | version "2.8.3" 344 | resolved "https://registry.npmmirror.com/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.8.3.tgz#a71ab6f0f24160ef9f573266064438eff65e96d0" 345 | integrity sha512-L8/fHbEy8Id2a2E0fwR5eKGlv9VYDjrH9PwdJE9Za9v1O/vEsfl/0T/79/x129l5O0yB6EFQkFa20MiK3b+vOg== 346 | dependencies: 347 | "@parcel/plugin" "2.8.3" 348 | htmlnano "^2.0.0" 349 | nullthrows "^1.1.1" 350 | posthtml "^0.16.5" 351 | svgo "^2.4.0" 352 | 353 | "@parcel/optimizer-image@2.8.3": 354 | version "2.8.3" 355 | resolved "https://registry.npmmirror.com/@parcel/optimizer-image/-/optimizer-image-2.8.3.tgz#ea49b4245b4f7d60b38c7585c6311fb21d341baa" 356 | integrity sha512-SD71sSH27SkCDNUNx9A3jizqB/WIJr3dsfp+JZGZC42tpD/Siim6Rqy9M4To/BpMMQIIiEXa5ofwS+DgTEiEHQ== 357 | dependencies: 358 | "@parcel/diagnostic" "2.8.3" 359 | "@parcel/plugin" "2.8.3" 360 | "@parcel/utils" "2.8.3" 361 | "@parcel/workers" "2.8.3" 362 | detect-libc "^1.0.3" 363 | 364 | "@parcel/optimizer-svgo@2.8.3": 365 | version "2.8.3" 366 | resolved "https://registry.npmmirror.com/@parcel/optimizer-svgo/-/optimizer-svgo-2.8.3.tgz#04da4efec6b623679539a84961bff6998034ba8a" 367 | integrity sha512-9KQed99NZnQw3/W4qBYVQ7212rzA9EqrQG019TIWJzkA9tjGBMIm2c/nXpK1tc3hQ3e7KkXkFCQ3C+ibVUnHNA== 368 | dependencies: 369 | "@parcel/diagnostic" "2.8.3" 370 | "@parcel/plugin" "2.8.3" 371 | "@parcel/utils" "2.8.3" 372 | svgo "^2.4.0" 373 | 374 | "@parcel/optimizer-terser@2.8.3": 375 | version "2.8.3" 376 | resolved "https://registry.npmmirror.com/@parcel/optimizer-terser/-/optimizer-terser-2.8.3.tgz#3a06d98d09386a1a0ae1be85376a8739bfba9618" 377 | integrity sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA== 378 | dependencies: 379 | "@parcel/diagnostic" "2.8.3" 380 | "@parcel/plugin" "2.8.3" 381 | "@parcel/source-map" "^2.1.1" 382 | "@parcel/utils" "2.8.3" 383 | nullthrows "^1.1.1" 384 | terser "^5.2.0" 385 | 386 | "@parcel/package-manager@2.8.3": 387 | version "2.8.3" 388 | resolved "https://registry.npmmirror.com/@parcel/package-manager/-/package-manager-2.8.3.tgz#ddd0d62feae3cf0fb6cc0537791b3a16296ad458" 389 | integrity sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA== 390 | dependencies: 391 | "@parcel/diagnostic" "2.8.3" 392 | "@parcel/fs" "2.8.3" 393 | "@parcel/logger" "2.8.3" 394 | "@parcel/types" "2.8.3" 395 | "@parcel/utils" "2.8.3" 396 | "@parcel/workers" "2.8.3" 397 | semver "^5.7.1" 398 | 399 | "@parcel/packager-css@2.8.3": 400 | version "2.8.3" 401 | resolved "https://registry.npmmirror.com/@parcel/packager-css/-/packager-css-2.8.3.tgz#0eff34268cb4f5dfb53c1bbca85f5567aeb1835a" 402 | integrity sha512-WyvkMmsurlHG8d8oUVm7S+D+cC/T3qGeqogb7sTI52gB6uiywU7lRCizLNqGFyFGIxcVTVHWnSHqItBcLN76lA== 403 | dependencies: 404 | "@parcel/plugin" "2.8.3" 405 | "@parcel/source-map" "^2.1.1" 406 | "@parcel/utils" "2.8.3" 407 | nullthrows "^1.1.1" 408 | 409 | "@parcel/packager-html@2.8.3": 410 | version "2.8.3" 411 | resolved "https://registry.npmmirror.com/@parcel/packager-html/-/packager-html-2.8.3.tgz#f9263b891aa4dd46c6e2fa2b07025a482132fff1" 412 | integrity sha512-OhPu1Hx1RRKJodpiu86ZqL8el2Aa4uhBHF6RAL1Pcrh2EhRRlPf70Sk0tC22zUpYL7es+iNKZ/n0Rl+OWSHWEw== 413 | dependencies: 414 | "@parcel/plugin" "2.8.3" 415 | "@parcel/types" "2.8.3" 416 | "@parcel/utils" "2.8.3" 417 | nullthrows "^1.1.1" 418 | posthtml "^0.16.5" 419 | 420 | "@parcel/packager-js@2.8.3": 421 | version "2.8.3" 422 | resolved "https://registry.npmmirror.com/@parcel/packager-js/-/packager-js-2.8.3.tgz#3ed11565915d73d12192b6901c75a6b820e4a83a" 423 | integrity sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw== 424 | dependencies: 425 | "@parcel/diagnostic" "2.8.3" 426 | "@parcel/hash" "2.8.3" 427 | "@parcel/plugin" "2.8.3" 428 | "@parcel/source-map" "^2.1.1" 429 | "@parcel/utils" "2.8.3" 430 | globals "^13.2.0" 431 | nullthrows "^1.1.1" 432 | 433 | "@parcel/packager-raw@2.8.3": 434 | version "2.8.3" 435 | resolved "https://registry.npmmirror.com/@parcel/packager-raw/-/packager-raw-2.8.3.tgz#bdec826df991e186cb58691cc45d12ad5c06676e" 436 | integrity sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA== 437 | dependencies: 438 | "@parcel/plugin" "2.8.3" 439 | 440 | "@parcel/packager-svg@2.8.3": 441 | version "2.8.3" 442 | resolved "https://registry.npmmirror.com/@parcel/packager-svg/-/packager-svg-2.8.3.tgz#7233315296001c531cb55ca96b5f2ef672343630" 443 | integrity sha512-mvIoHpmv5yzl36OjrklTDFShLUfPFTwrmp1eIwiszGdEBuQaX7JVI3Oo2jbVQgcN4W7J6SENzGQ3Q5hPTW3pMw== 444 | dependencies: 445 | "@parcel/plugin" "2.8.3" 446 | "@parcel/types" "2.8.3" 447 | "@parcel/utils" "2.8.3" 448 | posthtml "^0.16.4" 449 | 450 | "@parcel/plugin@2.8.3": 451 | version "2.8.3" 452 | resolved "https://registry.npmmirror.com/@parcel/plugin/-/plugin-2.8.3.tgz#7bb30a5775eaa6473c27f002a0a3ee7308d6d669" 453 | integrity sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw== 454 | dependencies: 455 | "@parcel/types" "2.8.3" 456 | 457 | "@parcel/reporter-cli@2.8.3": 458 | version "2.8.3" 459 | resolved "https://registry.npmmirror.com/@parcel/reporter-cli/-/reporter-cli-2.8.3.tgz#12a4743b51b8fe6837f53c20e01bbf1f7336e8e4" 460 | integrity sha512-3sJkS6tFFzgIOz3u3IpD/RsmRxvOKKiQHOTkiiqRt1l44mMDGKS7zANRnJYsQzdCsgwc9SOP30XFgJwtoVlMbw== 461 | dependencies: 462 | "@parcel/plugin" "2.8.3" 463 | "@parcel/types" "2.8.3" 464 | "@parcel/utils" "2.8.3" 465 | chalk "^4.1.0" 466 | term-size "^2.2.1" 467 | 468 | "@parcel/reporter-dev-server@2.8.3": 469 | version "2.8.3" 470 | resolved "https://registry.npmmirror.com/@parcel/reporter-dev-server/-/reporter-dev-server-2.8.3.tgz#a0daa5cc015642684cea561f4e0e7116bbffdc1c" 471 | integrity sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ== 472 | dependencies: 473 | "@parcel/plugin" "2.8.3" 474 | "@parcel/utils" "2.8.3" 475 | 476 | "@parcel/resolver-default@2.8.3": 477 | version "2.8.3" 478 | resolved "https://registry.npmmirror.com/@parcel/resolver-default/-/resolver-default-2.8.3.tgz#5ae41e537ae4a793c1abb47f094482b9e2ac3535" 479 | integrity sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A== 480 | dependencies: 481 | "@parcel/node-resolver-core" "2.8.3" 482 | "@parcel/plugin" "2.8.3" 483 | 484 | "@parcel/runtime-browser-hmr@2.8.3": 485 | version "2.8.3" 486 | resolved "https://registry.npmmirror.com/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.8.3.tgz#1fa74e1fbd1030b0a920c58afa3a9eb7dc4bcd1e" 487 | integrity sha512-2O1PYi2j/Q0lTyGNV3JdBYwg4rKo6TEVFlYGdd5wCYU9ZIN9RRuoCnWWH2qCPj3pjIVtBeppYxzfVjPEHINWVg== 488 | dependencies: 489 | "@parcel/plugin" "2.8.3" 490 | "@parcel/utils" "2.8.3" 491 | 492 | "@parcel/runtime-js@2.8.3": 493 | version "2.8.3" 494 | resolved "https://registry.npmmirror.com/@parcel/runtime-js/-/runtime-js-2.8.3.tgz#0baa4c8fbf77eabce05d01ccc186614968ffc0cd" 495 | integrity sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ== 496 | dependencies: 497 | "@parcel/plugin" "2.8.3" 498 | "@parcel/utils" "2.8.3" 499 | nullthrows "^1.1.1" 500 | 501 | "@parcel/runtime-react-refresh@2.8.3": 502 | version "2.8.3" 503 | resolved "https://registry.npmmirror.com/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.8.3.tgz#381a942fb81e8f5ac6c7e0ee1b91dbf34763c3f8" 504 | integrity sha512-2v/qFKp00MfG0234OdOgQNAo6TLENpFYZMbVbAsPMY9ITiqG73MrEsrGXVoGbYiGTMB/Toer/lSWlJxtacOCuA== 505 | dependencies: 506 | "@parcel/plugin" "2.8.3" 507 | "@parcel/utils" "2.8.3" 508 | react-error-overlay "6.0.9" 509 | react-refresh "^0.9.0" 510 | 511 | "@parcel/runtime-service-worker@2.8.3": 512 | version "2.8.3" 513 | resolved "https://registry.npmmirror.com/@parcel/runtime-service-worker/-/runtime-service-worker-2.8.3.tgz#54d92da9ff1dfbd27db0e84164a22fa59e99b348" 514 | integrity sha512-/Skkw+EeRiwzOJso5fQtK8c9b452uWLNhQH1ISTodbmlcyB4YalAiSsyHCtMYD0c3/t5Sx4ZS7vxBAtQd0RvOw== 515 | dependencies: 516 | "@parcel/plugin" "2.8.3" 517 | "@parcel/utils" "2.8.3" 518 | nullthrows "^1.1.1" 519 | 520 | "@parcel/source-map@^2.1.1": 521 | version "2.1.1" 522 | resolved "https://registry.npmmirror.com/@parcel/source-map/-/source-map-2.1.1.tgz#fb193b82dba6dd62cc7a76b326f57bb35000a782" 523 | integrity sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew== 524 | dependencies: 525 | detect-libc "^1.0.3" 526 | 527 | "@parcel/transformer-babel@2.8.3": 528 | version "2.8.3" 529 | resolved "https://registry.npmmirror.com/@parcel/transformer-babel/-/transformer-babel-2.8.3.tgz#286bc6cb9afe4c0259f0b28e0f2f47322a24b130" 530 | integrity sha512-L6lExfpvvC7T/g3pxf3CIJRouQl+sgrSzuWQ0fD4PemUDHvHchSP4SNUVnd6gOytF3Y1KpnEZIunQGi5xVqQCQ== 531 | dependencies: 532 | "@parcel/diagnostic" "2.8.3" 533 | "@parcel/plugin" "2.8.3" 534 | "@parcel/source-map" "^2.1.1" 535 | "@parcel/utils" "2.8.3" 536 | browserslist "^4.6.6" 537 | json5 "^2.2.0" 538 | nullthrows "^1.1.1" 539 | semver "^5.7.0" 540 | 541 | "@parcel/transformer-css@2.8.3": 542 | version "2.8.3" 543 | resolved "https://registry.npmmirror.com/@parcel/transformer-css/-/transformer-css-2.8.3.tgz#d6c44100204e73841ad8e0f90472172ea8b9120c" 544 | integrity sha512-xTqFwlSXtnaYen9ivAgz+xPW7yRl/u4QxtnDyDpz5dr8gSeOpQYRcjkd4RsYzKsWzZcGtB5EofEk8ayUbWKEUg== 545 | dependencies: 546 | "@parcel/diagnostic" "2.8.3" 547 | "@parcel/plugin" "2.8.3" 548 | "@parcel/source-map" "^2.1.1" 549 | "@parcel/utils" "2.8.3" 550 | browserslist "^4.6.6" 551 | lightningcss "^1.16.1" 552 | nullthrows "^1.1.1" 553 | 554 | "@parcel/transformer-html@2.8.3": 555 | version "2.8.3" 556 | resolved "https://registry.npmmirror.com/@parcel/transformer-html/-/transformer-html-2.8.3.tgz#5c68b28ee6b8c7a13b8aee87f7957ad3227bd83f" 557 | integrity sha512-kIZO3qsMYTbSnSpl9cnZog+SwL517ffWH54JeB410OSAYF1ouf4n5v9qBnALZbuCCmPwJRGs4jUtE452hxwN4g== 558 | dependencies: 559 | "@parcel/diagnostic" "2.8.3" 560 | "@parcel/hash" "2.8.3" 561 | "@parcel/plugin" "2.8.3" 562 | nullthrows "^1.1.1" 563 | posthtml "^0.16.5" 564 | posthtml-parser "^0.10.1" 565 | posthtml-render "^3.0.0" 566 | semver "^5.7.1" 567 | srcset "4" 568 | 569 | "@parcel/transformer-image@2.8.3": 570 | version "2.8.3" 571 | resolved "https://registry.npmmirror.com/@parcel/transformer-image/-/transformer-image-2.8.3.tgz#73805b2bfc3c8919d7737544e5f8be39e3f303fe" 572 | integrity sha512-cO4uptcCGTi5H6bvTrAWEFUsTNhA4kCo8BSvRSCHA2sf/4C5tGQPHt3JhdO0GQLPwZRCh/R41EkJs5HZ8A8DAg== 573 | dependencies: 574 | "@parcel/plugin" "2.8.3" 575 | "@parcel/utils" "2.8.3" 576 | "@parcel/workers" "2.8.3" 577 | nullthrows "^1.1.1" 578 | 579 | "@parcel/transformer-js@2.8.3": 580 | version "2.8.3" 581 | resolved "https://registry.npmmirror.com/@parcel/transformer-js/-/transformer-js-2.8.3.tgz#fe400df428394d1e7fe5afb6dea5c7c858e44f03" 582 | integrity sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ== 583 | dependencies: 584 | "@parcel/diagnostic" "2.8.3" 585 | "@parcel/plugin" "2.8.3" 586 | "@parcel/source-map" "^2.1.1" 587 | "@parcel/utils" "2.8.3" 588 | "@parcel/workers" "2.8.3" 589 | "@swc/helpers" "^0.4.12" 590 | browserslist "^4.6.6" 591 | detect-libc "^1.0.3" 592 | nullthrows "^1.1.1" 593 | regenerator-runtime "^0.13.7" 594 | semver "^5.7.1" 595 | 596 | "@parcel/transformer-json@2.8.3": 597 | version "2.8.3" 598 | resolved "https://registry.npmmirror.com/@parcel/transformer-json/-/transformer-json-2.8.3.tgz#25deb3a5138cc70a83269fc5d39d564609354d36" 599 | integrity sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg== 600 | dependencies: 601 | "@parcel/plugin" "2.8.3" 602 | json5 "^2.2.0" 603 | 604 | "@parcel/transformer-postcss@2.8.3": 605 | version "2.8.3" 606 | resolved "https://registry.npmmirror.com/@parcel/transformer-postcss/-/transformer-postcss-2.8.3.tgz#df4fdc1c90893823445f2a8eb8e2bdd0349ccc58" 607 | integrity sha512-e8luB/poIlz6jBsD1Izms+6ElbyzuoFVa4lFVLZnTAChI3UxPdt9p/uTsIO46HyBps/Bk8ocvt3J4YF84jzmvg== 608 | dependencies: 609 | "@parcel/diagnostic" "2.8.3" 610 | "@parcel/hash" "2.8.3" 611 | "@parcel/plugin" "2.8.3" 612 | "@parcel/utils" "2.8.3" 613 | clone "^2.1.1" 614 | nullthrows "^1.1.1" 615 | postcss-value-parser "^4.2.0" 616 | semver "^5.7.1" 617 | 618 | "@parcel/transformer-posthtml@2.8.3": 619 | version "2.8.3" 620 | resolved "https://registry.npmmirror.com/@parcel/transformer-posthtml/-/transformer-posthtml-2.8.3.tgz#7c3912a5a631cb26485f6464e0d6eeabb6f1e718" 621 | integrity sha512-pkzf9Smyeaw4uaRLsT41RGrPLT5Aip8ZPcntawAfIo+KivBQUV0erY1IvHYjyfFzq1ld/Fo2Ith9He6mxpPifA== 622 | dependencies: 623 | "@parcel/plugin" "2.8.3" 624 | "@parcel/utils" "2.8.3" 625 | nullthrows "^1.1.1" 626 | posthtml "^0.16.5" 627 | posthtml-parser "^0.10.1" 628 | posthtml-render "^3.0.0" 629 | semver "^5.7.1" 630 | 631 | "@parcel/transformer-raw@2.8.3": 632 | version "2.8.3" 633 | resolved "https://registry.npmmirror.com/@parcel/transformer-raw/-/transformer-raw-2.8.3.tgz#3a22213fe18a5f83fd78889cb49f06e059cfead7" 634 | integrity sha512-G+5cXnd2/1O3nV/pgRxVKZY/HcGSseuhAe71gQdSQftb8uJEURyUHoQ9Eh0JUD3MgWh9V+nIKoyFEZdf9T0sUQ== 635 | dependencies: 636 | "@parcel/plugin" "2.8.3" 637 | 638 | "@parcel/transformer-react-refresh-wrap@2.8.3": 639 | version "2.8.3" 640 | resolved "https://registry.npmmirror.com/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.8.3.tgz#8b0392638405dd470a886002229f7889d5464822" 641 | integrity sha512-q8AAoEvBnCf/nPvgOwFwKZfEl/thwq7c2duxXkhl+tTLDRN2vGmyz4355IxCkavSX+pLWSQ5MexklSEeMkgthg== 642 | dependencies: 643 | "@parcel/plugin" "2.8.3" 644 | "@parcel/utils" "2.8.3" 645 | react-refresh "^0.9.0" 646 | 647 | "@parcel/transformer-svg@2.8.3": 648 | version "2.8.3" 649 | resolved "https://registry.npmmirror.com/@parcel/transformer-svg/-/transformer-svg-2.8.3.tgz#4df959cba4ebf45d7aaddd540f752e6e84df38b2" 650 | integrity sha512-3Zr/gBzxi1ZH1fftH/+KsZU7w5GqkmxlB0ZM8ovS5E/Pl1lq1t0xvGJue9m2VuQqP8Mxfpl5qLFmsKlhaZdMIQ== 651 | dependencies: 652 | "@parcel/diagnostic" "2.8.3" 653 | "@parcel/hash" "2.8.3" 654 | "@parcel/plugin" "2.8.3" 655 | nullthrows "^1.1.1" 656 | posthtml "^0.16.5" 657 | posthtml-parser "^0.10.1" 658 | posthtml-render "^3.0.0" 659 | semver "^5.7.1" 660 | 661 | "@parcel/types@2.8.3": 662 | version "2.8.3" 663 | resolved "https://registry.npmmirror.com/@parcel/types/-/types-2.8.3.tgz#3306bc5391b6913bd619914894b8cd84a24b30fa" 664 | integrity sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw== 665 | dependencies: 666 | "@parcel/cache" "2.8.3" 667 | "@parcel/diagnostic" "2.8.3" 668 | "@parcel/fs" "2.8.3" 669 | "@parcel/package-manager" "2.8.3" 670 | "@parcel/source-map" "^2.1.1" 671 | "@parcel/workers" "2.8.3" 672 | utility-types "^3.10.0" 673 | 674 | "@parcel/utils@2.8.3": 675 | version "2.8.3" 676 | resolved "https://registry.npmmirror.com/@parcel/utils/-/utils-2.8.3.tgz#0d56c9e8e22c119590a5e044a0e01031965da40e" 677 | integrity sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA== 678 | dependencies: 679 | "@parcel/codeframe" "2.8.3" 680 | "@parcel/diagnostic" "2.8.3" 681 | "@parcel/hash" "2.8.3" 682 | "@parcel/logger" "2.8.3" 683 | "@parcel/markdown-ansi" "2.8.3" 684 | "@parcel/source-map" "^2.1.1" 685 | chalk "^4.1.0" 686 | 687 | "@parcel/watcher@^2.0.7": 688 | version "2.1.0" 689 | resolved "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.1.0.tgz#5f32969362db4893922c526a842d8af7a8538545" 690 | integrity sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw== 691 | dependencies: 692 | is-glob "^4.0.3" 693 | micromatch "^4.0.5" 694 | node-addon-api "^3.2.1" 695 | node-gyp-build "^4.3.0" 696 | 697 | "@parcel/workers@2.8.3": 698 | version "2.8.3" 699 | resolved "https://registry.npmmirror.com/@parcel/workers/-/workers-2.8.3.tgz#255450ccf4db234082407e4ddda5fd575f08c235" 700 | integrity sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg== 701 | dependencies: 702 | "@parcel/diagnostic" "2.8.3" 703 | "@parcel/logger" "2.8.3" 704 | "@parcel/types" "2.8.3" 705 | "@parcel/utils" "2.8.3" 706 | chrome-trace-event "^1.0.2" 707 | nullthrows "^1.1.1" 708 | 709 | "@swc/helpers@^0.4.12": 710 | version "0.4.14" 711 | resolved "https://registry.npmmirror.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" 712 | integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== 713 | dependencies: 714 | tslib "^2.4.0" 715 | 716 | "@trysound/sax@0.2.0": 717 | version "0.2.0" 718 | resolved "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" 719 | integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== 720 | 721 | "@types/parse-json@^4.0.0": 722 | version "4.0.0" 723 | resolved "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" 724 | integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== 725 | 726 | "@types/prop-types@*": 727 | version "15.7.5" 728 | resolved "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" 729 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== 730 | 731 | "@types/react-dom@^18.0.11": 732 | version "18.0.11" 733 | resolved "https://registry.npmmirror.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33" 734 | integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw== 735 | dependencies: 736 | "@types/react" "*" 737 | 738 | "@types/react@*", "@types/react@^18.0.28": 739 | version "18.0.28" 740 | resolved "https://registry.npmmirror.com/@types/react/-/react-18.0.28.tgz#accaeb8b86f4908057ad629a26635fe641480065" 741 | integrity sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew== 742 | dependencies: 743 | "@types/prop-types" "*" 744 | "@types/scheduler" "*" 745 | csstype "^3.0.2" 746 | 747 | "@types/scheduler@*": 748 | version "0.16.2" 749 | resolved "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" 750 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== 751 | 752 | abortcontroller-polyfill@^1.1.9: 753 | version "1.7.5" 754 | resolved "https://registry.npmmirror.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" 755 | integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== 756 | 757 | acorn@^8.5.0: 758 | version "8.8.2" 759 | resolved "https://registry.npmmirror.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" 760 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== 761 | 762 | ansi-styles@^3.2.1: 763 | version "3.2.1" 764 | resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 765 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 766 | dependencies: 767 | color-convert "^1.9.0" 768 | 769 | ansi-styles@^4.1.0: 770 | version "4.3.0" 771 | resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 772 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 773 | dependencies: 774 | color-convert "^2.0.1" 775 | 776 | asap@~2.0.6: 777 | version "2.0.6" 778 | resolved "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 779 | integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== 780 | 781 | base-x@^3.0.8: 782 | version "3.0.9" 783 | resolved "https://registry.npmmirror.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" 784 | integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== 785 | dependencies: 786 | safe-buffer "^5.0.1" 787 | 788 | boolbase@^1.0.0: 789 | version "1.0.0" 790 | resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 791 | integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== 792 | 793 | braces@^3.0.2: 794 | version "3.0.2" 795 | resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 796 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 797 | dependencies: 798 | fill-range "^7.0.1" 799 | 800 | browserslist@^4.6.6: 801 | version "4.21.5" 802 | resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" 803 | integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== 804 | dependencies: 805 | caniuse-lite "^1.0.30001449" 806 | electron-to-chromium "^1.4.284" 807 | node-releases "^2.0.8" 808 | update-browserslist-db "^1.0.10" 809 | 810 | buffer-from@^1.0.0: 811 | version "1.1.2" 812 | resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 813 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 814 | 815 | callsites@^3.0.0: 816 | version "3.1.0" 817 | resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 818 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 819 | 820 | caniuse-lite@^1.0.30001449: 821 | version "1.0.30001457" 822 | resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz#6af34bb5d720074e2099432aa522c21555a18301" 823 | integrity sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA== 824 | 825 | chalk@^2.0.0: 826 | version "2.4.2" 827 | resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 828 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 829 | dependencies: 830 | ansi-styles "^3.2.1" 831 | escape-string-regexp "^1.0.5" 832 | supports-color "^5.3.0" 833 | 834 | chalk@^4.1.0: 835 | version "4.1.2" 836 | resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 837 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 838 | dependencies: 839 | ansi-styles "^4.1.0" 840 | supports-color "^7.1.0" 841 | 842 | chrome-trace-event@^1.0.2: 843 | version "1.0.3" 844 | resolved "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" 845 | integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== 846 | 847 | clone@^2.1.1: 848 | version "2.1.2" 849 | resolved "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" 850 | integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== 851 | 852 | color-convert@^1.9.0: 853 | version "1.9.3" 854 | resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 855 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 856 | dependencies: 857 | color-name "1.1.3" 858 | 859 | color-convert@^2.0.1: 860 | version "2.0.1" 861 | resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 862 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 863 | dependencies: 864 | color-name "~1.1.4" 865 | 866 | color-name@1.1.3: 867 | version "1.1.3" 868 | resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 869 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 870 | 871 | color-name@~1.1.4: 872 | version "1.1.4" 873 | resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 874 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 875 | 876 | commander@^2.20.0: 877 | version "2.20.3" 878 | resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 879 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 880 | 881 | commander@^7.0.0, commander@^7.2.0: 882 | version "7.2.0" 883 | resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" 884 | integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== 885 | 886 | core-js@^3.5.0: 887 | version "3.28.0" 888 | resolved "https://registry.npmmirror.com/core-js/-/core-js-3.28.0.tgz#ed8b9e99c273879fdfff0edfc77ee709a5800e4a" 889 | integrity sha512-GiZn9D4Z/rSYvTeg1ljAIsEqFm0LaN9gVtwDCrKL80zHtS31p9BAjmTxVqTQDMpwlMolJZOFntUG2uwyj7DAqw== 890 | 891 | cosmiconfig@^7.0.1: 892 | version "7.1.0" 893 | resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" 894 | integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== 895 | dependencies: 896 | "@types/parse-json" "^4.0.0" 897 | import-fresh "^3.2.1" 898 | parse-json "^5.0.0" 899 | path-type "^4.0.0" 900 | yaml "^1.10.0" 901 | 902 | css-select@^4.1.3: 903 | version "4.3.0" 904 | resolved "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" 905 | integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== 906 | dependencies: 907 | boolbase "^1.0.0" 908 | css-what "^6.0.1" 909 | domhandler "^4.3.1" 910 | domutils "^2.8.0" 911 | nth-check "^2.0.1" 912 | 913 | css-tree@^1.1.2, css-tree@^1.1.3: 914 | version "1.1.3" 915 | resolved "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" 916 | integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== 917 | dependencies: 918 | mdn-data "2.0.14" 919 | source-map "^0.6.1" 920 | 921 | css-what@^6.0.1: 922 | version "6.1.0" 923 | resolved "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" 924 | integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== 925 | 926 | csso@^4.2.0: 927 | version "4.2.0" 928 | resolved "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" 929 | integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== 930 | dependencies: 931 | css-tree "^1.1.2" 932 | 933 | csstype@^3.0.2: 934 | version "3.1.1" 935 | resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" 936 | integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== 937 | 938 | detect-libc@^1.0.3: 939 | version "1.0.3" 940 | resolved "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 941 | integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== 942 | 943 | dom-serializer@^1.0.1: 944 | version "1.4.1" 945 | resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" 946 | integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== 947 | dependencies: 948 | domelementtype "^2.0.1" 949 | domhandler "^4.2.0" 950 | entities "^2.0.0" 951 | 952 | domelementtype@^2.0.1, domelementtype@^2.2.0: 953 | version "2.3.0" 954 | resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" 955 | integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== 956 | 957 | domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.1: 958 | version "4.3.1" 959 | resolved "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" 960 | integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== 961 | dependencies: 962 | domelementtype "^2.2.0" 963 | 964 | domutils@^2.8.0: 965 | version "2.8.0" 966 | resolved "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" 967 | integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== 968 | dependencies: 969 | dom-serializer "^1.0.1" 970 | domelementtype "^2.2.0" 971 | domhandler "^4.2.0" 972 | 973 | dotenv-expand@^5.1.0: 974 | version "5.1.0" 975 | resolved "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" 976 | integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== 977 | 978 | dotenv@^7.0.0: 979 | version "7.0.0" 980 | resolved "https://registry.npmmirror.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" 981 | integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== 982 | 983 | electron-to-chromium@^1.4.284: 984 | version "1.4.311" 985 | resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.311.tgz#953bc9a4767f5ce8ec125f9a1ad8e00e8f67e479" 986 | integrity sha512-RoDlZufvrtr2Nx3Yx5MB8jX3aHIxm8nRWPJm3yVvyHmyKaRvn90RjzB6hNnt0AkhS3IInJdyRfQb4mWhPvUjVw== 987 | 988 | entities@^2.0.0: 989 | version "2.2.0" 990 | resolved "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" 991 | integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== 992 | 993 | entities@^3.0.1: 994 | version "3.0.1" 995 | resolved "https://registry.npmmirror.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" 996 | integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== 997 | 998 | error-ex@^1.3.1: 999 | version "1.3.2" 1000 | resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1001 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1002 | dependencies: 1003 | is-arrayish "^0.2.1" 1004 | 1005 | escalade@^3.1.1: 1006 | version "3.1.1" 1007 | resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1008 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1009 | 1010 | escape-string-regexp@^1.0.5: 1011 | version "1.0.5" 1012 | resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1013 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 1014 | 1015 | fill-range@^7.0.1: 1016 | version "7.0.1" 1017 | resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1018 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1019 | dependencies: 1020 | to-regex-range "^5.0.1" 1021 | 1022 | get-port@^4.2.0: 1023 | version "4.2.0" 1024 | resolved "https://registry.npmmirror.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" 1025 | integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== 1026 | 1027 | globals@^13.2.0: 1028 | version "13.20.0" 1029 | resolved "https://registry.npmmirror.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" 1030 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== 1031 | dependencies: 1032 | type-fest "^0.20.2" 1033 | 1034 | has-flag@^3.0.0: 1035 | version "3.0.0" 1036 | resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1037 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1038 | 1039 | has-flag@^4.0.0: 1040 | version "4.0.0" 1041 | resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1042 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1043 | 1044 | htmlnano@^2.0.0: 1045 | version "2.0.3" 1046 | resolved "https://registry.npmmirror.com/htmlnano/-/htmlnano-2.0.3.tgz#50ee639ed63357d4a6c01309f52a35892e4edc2e" 1047 | integrity sha512-S4PGGj9RbdgW8LhbILNK7W9JhmYP8zmDY7KDV/8eCiJBQJlbmltp5I0gv8c5ntLljfdxxfmJ+UJVSqyH4mb41A== 1048 | dependencies: 1049 | cosmiconfig "^7.0.1" 1050 | posthtml "^0.16.5" 1051 | timsort "^0.3.0" 1052 | 1053 | htmlparser2@^7.1.1: 1054 | version "7.2.0" 1055 | resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" 1056 | integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== 1057 | dependencies: 1058 | domelementtype "^2.0.1" 1059 | domhandler "^4.2.2" 1060 | domutils "^2.8.0" 1061 | entities "^3.0.1" 1062 | 1063 | import-fresh@^3.2.1: 1064 | version "3.3.0" 1065 | resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1066 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1067 | dependencies: 1068 | parent-module "^1.0.0" 1069 | resolve-from "^4.0.0" 1070 | 1071 | is-arrayish@^0.2.1: 1072 | version "0.2.1" 1073 | resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1074 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== 1075 | 1076 | is-extglob@^2.1.1: 1077 | version "2.1.1" 1078 | resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1079 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1080 | 1081 | is-glob@^4.0.3: 1082 | version "4.0.3" 1083 | resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1084 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1085 | dependencies: 1086 | is-extglob "^2.1.1" 1087 | 1088 | is-json@^2.0.1: 1089 | version "2.0.1" 1090 | resolved "https://registry.npmmirror.com/is-json/-/is-json-2.0.1.tgz#6be166d144828a131d686891b983df62c39491ff" 1091 | integrity sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA== 1092 | 1093 | is-number@^7.0.0: 1094 | version "7.0.0" 1095 | resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1096 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1097 | 1098 | js-tokens@^4.0.0: 1099 | version "4.0.0" 1100 | resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1101 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1102 | 1103 | json-parse-even-better-errors@^2.3.0: 1104 | version "2.3.1" 1105 | resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1106 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1107 | 1108 | json5@^2.2.0, json5@^2.2.1: 1109 | version "2.2.3" 1110 | resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" 1111 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== 1112 | 1113 | lightningcss-darwin-arm64@1.19.0: 1114 | version "1.19.0" 1115 | resolved "https://registry.npmmirror.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz#56ab071e932f845dbb7667f44f5b78441175a343" 1116 | integrity sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg== 1117 | 1118 | lightningcss-darwin-x64@1.19.0: 1119 | version "1.19.0" 1120 | resolved "https://registry.npmmirror.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz#c867308b88859ba61a2c46c82b1ca52ff73a1bd0" 1121 | integrity sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw== 1122 | 1123 | lightningcss-linux-arm-gnueabihf@1.19.0: 1124 | version "1.19.0" 1125 | resolved "https://registry.npmmirror.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz#0f921dc45f2e5c3aea70fab98844ac0e5f2f81be" 1126 | integrity sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig== 1127 | 1128 | lightningcss-linux-arm64-gnu@1.19.0: 1129 | version "1.19.0" 1130 | resolved "https://registry.npmmirror.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz#027f9df9c7f4ffa127c37a71726245a5794d7ba2" 1131 | integrity sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww== 1132 | 1133 | lightningcss-linux-arm64-musl@1.19.0: 1134 | version "1.19.0" 1135 | resolved "https://registry.npmmirror.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz#85ea987da868524eac6db94f8e1eaa23d0b688a3" 1136 | integrity sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA== 1137 | 1138 | lightningcss-linux-x64-gnu@1.19.0: 1139 | version "1.19.0" 1140 | resolved "https://registry.npmmirror.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz#02bec89579ab4153dccc0def755d1fd9e3ee7f3c" 1141 | integrity sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ== 1142 | 1143 | lightningcss-linux-x64-musl@1.19.0: 1144 | version "1.19.0" 1145 | resolved "https://registry.npmmirror.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz#e36a5df8193ae961d22974635e4c100a1823bb8c" 1146 | integrity sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg== 1147 | 1148 | lightningcss-win32-x64-msvc@1.19.0: 1149 | version "1.19.0" 1150 | resolved "https://registry.npmmirror.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz#0854dbd153035eca1396e2227c708ad43655a61c" 1151 | integrity sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg== 1152 | 1153 | lightningcss@^1.16.1: 1154 | version "1.19.0" 1155 | resolved "https://registry.npmmirror.com/lightningcss/-/lightningcss-1.19.0.tgz#fbbad0975de66252e38d96b5bdd2a62f2dd0ffbf" 1156 | integrity sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA== 1157 | dependencies: 1158 | detect-libc "^1.0.3" 1159 | optionalDependencies: 1160 | lightningcss-darwin-arm64 "1.19.0" 1161 | lightningcss-darwin-x64 "1.19.0" 1162 | lightningcss-linux-arm-gnueabihf "1.19.0" 1163 | lightningcss-linux-arm64-gnu "1.19.0" 1164 | lightningcss-linux-arm64-musl "1.19.0" 1165 | lightningcss-linux-x64-gnu "1.19.0" 1166 | lightningcss-linux-x64-musl "1.19.0" 1167 | lightningcss-win32-x64-msvc "1.19.0" 1168 | 1169 | lines-and-columns@^1.1.6: 1170 | version "1.2.4" 1171 | resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" 1172 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 1173 | 1174 | lmdb@2.5.2: 1175 | version "2.5.2" 1176 | resolved "https://registry.npmmirror.com/lmdb/-/lmdb-2.5.2.tgz#37e28a9fb43405f4dc48c44cec0e13a14c4a6ff1" 1177 | integrity sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA== 1178 | dependencies: 1179 | msgpackr "^1.5.4" 1180 | node-addon-api "^4.3.0" 1181 | node-gyp-build-optional-packages "5.0.3" 1182 | ordered-binary "^1.2.4" 1183 | weak-lru-cache "^1.2.2" 1184 | optionalDependencies: 1185 | "@lmdb/lmdb-darwin-arm64" "2.5.2" 1186 | "@lmdb/lmdb-darwin-x64" "2.5.2" 1187 | "@lmdb/lmdb-linux-arm" "2.5.2" 1188 | "@lmdb/lmdb-linux-arm64" "2.5.2" 1189 | "@lmdb/lmdb-linux-x64" "2.5.2" 1190 | "@lmdb/lmdb-win32-x64" "2.5.2" 1191 | 1192 | mdn-data@2.0.14: 1193 | version "2.0.14" 1194 | resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" 1195 | integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== 1196 | 1197 | micromatch@^4.0.5: 1198 | version "4.0.5" 1199 | resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1200 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1201 | dependencies: 1202 | braces "^3.0.2" 1203 | picomatch "^2.3.1" 1204 | 1205 | msgpackr-extract@^3.0.0: 1206 | version "3.0.0" 1207 | resolved "https://registry.npmmirror.com/msgpackr-extract/-/msgpackr-extract-3.0.0.tgz#5b5c5fbfff25be5ee5b5a82a9cbe02e37f72bed0" 1208 | integrity sha512-oy6KCk1+X4Bn5m6Ycq5N1EWl9npqG/cLrE8ga8NX7ZqfqYUUBS08beCQaGq80fjbKBySur0E6x//yZjzNJDt3A== 1209 | dependencies: 1210 | node-gyp-build-optional-packages "5.0.7" 1211 | optionalDependencies: 1212 | "@msgpackr-extract/msgpackr-extract-darwin-arm64" "3.0.0" 1213 | "@msgpackr-extract/msgpackr-extract-darwin-x64" "3.0.0" 1214 | "@msgpackr-extract/msgpackr-extract-linux-arm" "3.0.0" 1215 | "@msgpackr-extract/msgpackr-extract-linux-arm64" "3.0.0" 1216 | "@msgpackr-extract/msgpackr-extract-linux-x64" "3.0.0" 1217 | "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.0" 1218 | 1219 | msgpackr@^1.5.4: 1220 | version "1.8.3" 1221 | resolved "https://registry.npmmirror.com/msgpackr/-/msgpackr-1.8.3.tgz#78c1b91359f72707f4abeaca40cc423bd2d75185" 1222 | integrity sha512-m2JefwcKNzoHYXkH/5jzHRxAw7XLWsAdvu0FOJ+OLwwozwOV/J6UA62iLkfIMbg7G8+dIuRwgg6oz+QoQ4YkoA== 1223 | optionalDependencies: 1224 | msgpackr-extract "^3.0.0" 1225 | 1226 | node-addon-api@^3.2.1: 1227 | version "3.2.1" 1228 | resolved "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" 1229 | integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== 1230 | 1231 | node-addon-api@^4.3.0: 1232 | version "4.3.0" 1233 | resolved "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" 1234 | integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== 1235 | 1236 | node-gyp-build-optional-packages@5.0.3: 1237 | version "5.0.3" 1238 | resolved "https://registry.npmmirror.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz#92a89d400352c44ad3975010368072b41ad66c17" 1239 | integrity sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA== 1240 | 1241 | node-gyp-build-optional-packages@5.0.7: 1242 | version "5.0.7" 1243 | resolved "https://registry.npmmirror.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz#5d2632bbde0ab2f6e22f1bbac2199b07244ae0b3" 1244 | integrity sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w== 1245 | 1246 | node-gyp-build@^4.3.0: 1247 | version "4.6.0" 1248 | resolved "https://registry.npmmirror.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" 1249 | integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== 1250 | 1251 | node-releases@^2.0.8: 1252 | version "2.0.10" 1253 | resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" 1254 | integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== 1255 | 1256 | nth-check@^2.0.1: 1257 | version "2.1.1" 1258 | resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" 1259 | integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== 1260 | dependencies: 1261 | boolbase "^1.0.0" 1262 | 1263 | nullthrows@^1.1.1: 1264 | version "1.1.1" 1265 | resolved "https://registry.npmmirror.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" 1266 | integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== 1267 | 1268 | object-assign@^4.1.1: 1269 | version "4.1.1" 1270 | resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1271 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 1272 | 1273 | ordered-binary@^1.2.4: 1274 | version "1.4.0" 1275 | resolved "https://registry.npmmirror.com/ordered-binary/-/ordered-binary-1.4.0.tgz#6bb53d44925f3b8afc33d1eed0fa15693b211389" 1276 | integrity sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ== 1277 | 1278 | parcel@^2.8.3: 1279 | version "2.8.3" 1280 | resolved "https://registry.npmmirror.com/parcel/-/parcel-2.8.3.tgz#1ff71d7317274fd367379bc7310a52c6b75d30c2" 1281 | integrity sha512-5rMBpbNE72g6jZvkdR5gS2nyhwIXaJy8i65osOqs/+5b7zgf3eMKgjSsDrv6bhz3gzifsba6MBJiZdBckl+vnA== 1282 | dependencies: 1283 | "@parcel/config-default" "2.8.3" 1284 | "@parcel/core" "2.8.3" 1285 | "@parcel/diagnostic" "2.8.3" 1286 | "@parcel/events" "2.8.3" 1287 | "@parcel/fs" "2.8.3" 1288 | "@parcel/logger" "2.8.3" 1289 | "@parcel/package-manager" "2.8.3" 1290 | "@parcel/reporter-cli" "2.8.3" 1291 | "@parcel/reporter-dev-server" "2.8.3" 1292 | "@parcel/utils" "2.8.3" 1293 | chalk "^4.1.0" 1294 | commander "^7.0.0" 1295 | get-port "^4.2.0" 1296 | v8-compile-cache "^2.0.0" 1297 | 1298 | parent-module@^1.0.0: 1299 | version "1.0.1" 1300 | resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1301 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1302 | dependencies: 1303 | callsites "^3.0.0" 1304 | 1305 | parse-json@^5.0.0: 1306 | version "5.2.0" 1307 | resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 1308 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 1309 | dependencies: 1310 | "@babel/code-frame" "^7.0.0" 1311 | error-ex "^1.3.1" 1312 | json-parse-even-better-errors "^2.3.0" 1313 | lines-and-columns "^1.1.6" 1314 | 1315 | path-type@^4.0.0: 1316 | version "4.0.0" 1317 | resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1318 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1319 | 1320 | performance-now@^2.1.0: 1321 | version "2.1.0" 1322 | resolved "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 1323 | integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== 1324 | 1325 | picocolors@^1.0.0: 1326 | version "1.0.0" 1327 | resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 1328 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1329 | 1330 | picomatch@^2.3.1: 1331 | version "2.3.1" 1332 | resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1333 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1334 | 1335 | postcss-value-parser@^4.2.0: 1336 | version "4.2.0" 1337 | resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" 1338 | integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== 1339 | 1340 | posthtml-parser@^0.10.1: 1341 | version "0.10.2" 1342 | resolved "https://registry.npmmirror.com/posthtml-parser/-/posthtml-parser-0.10.2.tgz#df364d7b179f2a6bf0466b56be7b98fd4e97c573" 1343 | integrity sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg== 1344 | dependencies: 1345 | htmlparser2 "^7.1.1" 1346 | 1347 | posthtml-parser@^0.11.0: 1348 | version "0.11.0" 1349 | resolved "https://registry.npmmirror.com/posthtml-parser/-/posthtml-parser-0.11.0.tgz#25d1c7bf811ea83559bc4c21c189a29747a24b7a" 1350 | integrity sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw== 1351 | dependencies: 1352 | htmlparser2 "^7.1.1" 1353 | 1354 | posthtml-render@^3.0.0: 1355 | version "3.0.0" 1356 | resolved "https://registry.npmmirror.com/posthtml-render/-/posthtml-render-3.0.0.tgz#97be44931496f495b4f07b99e903cc70ad6a3205" 1357 | integrity sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA== 1358 | dependencies: 1359 | is-json "^2.0.1" 1360 | 1361 | posthtml@^0.16.4, posthtml@^0.16.5: 1362 | version "0.16.6" 1363 | resolved "https://registry.npmmirror.com/posthtml/-/posthtml-0.16.6.tgz#e2fc407f67a64d2fa3567afe770409ffdadafe59" 1364 | integrity sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ== 1365 | dependencies: 1366 | posthtml-parser "^0.11.0" 1367 | posthtml-render "^3.0.0" 1368 | 1369 | process@^0.11.10: 1370 | version "0.11.10" 1371 | resolved "https://registry.npmmirror.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 1372 | integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== 1373 | 1374 | promise@^8.0.3: 1375 | version "8.3.0" 1376 | resolved "https://registry.npmmirror.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" 1377 | integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== 1378 | dependencies: 1379 | asap "~2.0.6" 1380 | 1381 | raf@^3.4.1: 1382 | version "3.4.1" 1383 | resolved "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" 1384 | integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== 1385 | dependencies: 1386 | performance-now "^2.1.0" 1387 | 1388 | react-app-polyfill@^1.0.0: 1389 | version "1.0.6" 1390 | resolved "https://registry.npmmirror.com/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz#890f8d7f2842ce6073f030b117de9130a5f385f0" 1391 | integrity sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g== 1392 | dependencies: 1393 | core-js "^3.5.0" 1394 | object-assign "^4.1.1" 1395 | promise "^8.0.3" 1396 | raf "^3.4.1" 1397 | regenerator-runtime "^0.13.3" 1398 | whatwg-fetch "^3.0.0" 1399 | 1400 | react-error-overlay@6.0.9: 1401 | version "6.0.9" 1402 | resolved "https://registry.npmmirror.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" 1403 | integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== 1404 | 1405 | react-refresh@^0.9.0: 1406 | version "0.9.0" 1407 | resolved "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" 1408 | integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== 1409 | 1410 | regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.7: 1411 | version "0.13.11" 1412 | resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" 1413 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== 1414 | 1415 | resolve-from@^4.0.0: 1416 | version "4.0.0" 1417 | resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1418 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1419 | 1420 | safe-buffer@^5.0.1: 1421 | version "5.2.1" 1422 | resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1423 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1424 | 1425 | semver@^5.7.0, semver@^5.7.1: 1426 | version "5.7.1" 1427 | resolved "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1428 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1429 | 1430 | source-map-support@~0.5.20: 1431 | version "0.5.21" 1432 | resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 1433 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 1434 | dependencies: 1435 | buffer-from "^1.0.0" 1436 | source-map "^0.6.0" 1437 | 1438 | source-map@^0.6.0, source-map@^0.6.1: 1439 | version "0.6.1" 1440 | resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1441 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1442 | 1443 | srcset@4: 1444 | version "4.0.0" 1445 | resolved "https://registry.npmmirror.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4" 1446 | integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== 1447 | 1448 | stable@^0.1.8: 1449 | version "0.1.8" 1450 | resolved "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" 1451 | integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== 1452 | 1453 | supports-color@^5.3.0: 1454 | version "5.5.0" 1455 | resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1456 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1457 | dependencies: 1458 | has-flag "^3.0.0" 1459 | 1460 | supports-color@^7.1.0: 1461 | version "7.2.0" 1462 | resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1463 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1464 | dependencies: 1465 | has-flag "^4.0.0" 1466 | 1467 | svgo@^2.4.0: 1468 | version "2.8.0" 1469 | resolved "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" 1470 | integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== 1471 | dependencies: 1472 | "@trysound/sax" "0.2.0" 1473 | commander "^7.2.0" 1474 | css-select "^4.1.3" 1475 | css-tree "^1.1.3" 1476 | csso "^4.2.0" 1477 | picocolors "^1.0.0" 1478 | stable "^0.1.8" 1479 | 1480 | term-size@^2.2.1: 1481 | version "2.2.1" 1482 | resolved "https://registry.npmmirror.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" 1483 | integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== 1484 | 1485 | terser@^5.2.0: 1486 | version "5.16.5" 1487 | resolved "https://registry.npmmirror.com/terser/-/terser-5.16.5.tgz#1c285ca0655f467f92af1bbab46ab72d1cb08e5a" 1488 | integrity sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg== 1489 | dependencies: 1490 | "@jridgewell/source-map" "^0.3.2" 1491 | acorn "^8.5.0" 1492 | commander "^2.20.0" 1493 | source-map-support "~0.5.20" 1494 | 1495 | timsort@^0.3.0: 1496 | version "0.3.0" 1497 | resolved "https://registry.npmmirror.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" 1498 | integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A== 1499 | 1500 | to-regex-range@^5.0.1: 1501 | version "5.0.1" 1502 | resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1503 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1504 | dependencies: 1505 | is-number "^7.0.0" 1506 | 1507 | tslib@^2.4.0: 1508 | version "2.5.0" 1509 | resolved "https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" 1510 | integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== 1511 | 1512 | type-fest@^0.20.2: 1513 | version "0.20.2" 1514 | resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1515 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1516 | 1517 | update-browserslist-db@^1.0.10: 1518 | version "1.0.10" 1519 | resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" 1520 | integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== 1521 | dependencies: 1522 | escalade "^3.1.1" 1523 | picocolors "^1.0.0" 1524 | 1525 | utility-types@^3.10.0: 1526 | version "3.10.0" 1527 | resolved "https://registry.npmmirror.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" 1528 | integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== 1529 | 1530 | v8-compile-cache@^2.0.0: 1531 | version "2.3.0" 1532 | resolved "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 1533 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 1534 | 1535 | weak-lru-cache@^1.2.2: 1536 | version "1.2.2" 1537 | resolved "https://registry.npmmirror.com/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz#fdbb6741f36bae9540d12f480ce8254060dccd19" 1538 | integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw== 1539 | 1540 | whatwg-fetch@^3.0.0: 1541 | version "3.6.2" 1542 | resolved "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" 1543 | integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== 1544 | 1545 | xxhash-wasm@^0.4.2: 1546 | version "0.4.2" 1547 | resolved "https://registry.npmmirror.com/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz#752398c131a4dd407b5132ba62ad372029be6f79" 1548 | integrity sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA== 1549 | 1550 | yaml@^1.10.0: 1551 | version "1.10.2" 1552 | resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" 1553 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== 1554 | --------------------------------------------------------------------------------