├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .github └── workflows │ └── test.yml ├── .gitignore ├── .prettierrc.json ├── README.md ├── api └── index.ts ├── client ├── .postcssrc.json ├── .stylelintignore ├── .stylelintrc ├── index.html ├── package.json ├── src │ ├── App.tsx │ ├── components │ │ ├── ControlPanel │ │ │ ├── ControlPanel.module.css │ │ │ └── ControlPanel.tsx │ │ ├── Layout │ │ │ ├── Layout.module.css │ │ │ └── Layout.tsx │ │ ├── LoginForm │ │ │ ├── LoginForm.module.css │ │ │ └── LoginForm.tsx │ │ ├── Routes │ │ │ └── Routes.tsx │ │ ├── TextField │ │ │ ├── TextField.module.css │ │ │ └── TextField.tsx │ │ ├── TodosList │ │ │ ├── TodosList.module.css │ │ │ ├── TodosList.tsx │ │ │ └── TodosListItem.tsx │ │ └── ToggleAction │ │ │ ├── ToggleAction.module.css │ │ │ └── ToggleAction.tsx │ ├── lib │ │ └── api.ts │ ├── main.tsx │ ├── pages │ │ ├── AccessDeniedPage.tsx │ │ ├── ErrorPage.tsx │ │ ├── LoginPage.tsx │ │ ├── LogoutPage.tsx │ │ ├── MainPage.tsx │ │ └── NotFoundPage.tsx │ ├── stores │ │ ├── auth.ts │ │ ├── filter.ts │ │ ├── logux-client.ts │ │ ├── router.ts │ │ └── tasks.ts │ ├── styles │ │ ├── base.css │ │ └── theme.css │ └── vite-env.d.ts └── vite.config.ts ├── package.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── server ├── db.ts ├── index.ts ├── modules │ ├── auth.ts │ └── tasks.ts └── package.json └── tsconfig.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | dist 2 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@logux/eslint-config/ts", 3 | "rules": { 4 | "prefer-let/prefer-let": "off" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | on: 3 | push: 4 | branches: 5 | - main 6 | pull_request: 7 | permissions: 8 | contents: read 9 | jobs: 10 | test: 11 | name: Test 12 | runs-on: ubuntu-latest 13 | permissions: 14 | contents: read 15 | steps: 16 | - name: Checkout the repository 17 | uses: actions/checkout@v3 18 | - name: Install pnpm 19 | uses: pnpm/action-setup@v2 20 | with: 21 | version: 8 22 | - name: Install Node.js 23 | uses: actions/setup-node@v3 24 | with: 25 | node-version: 20 26 | cache: pnpm 27 | - name: Install dependencies 28 | run: pnpm install --frozen-lockfile --ignore-scripts 29 | - name: Run tests 30 | run: pnpm test 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | pnpm-debug.log* 3 | 4 | dist 5 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "avoid", 3 | "jsxSingleQuote": false, 4 | "quoteProps": "consistent", 5 | "semi": false, 6 | "singleQuote": true, 7 | "trailingComma": "none" 8 | } 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Logux Examples -------------------------------------------------------------------------------- /api/index.ts: -------------------------------------------------------------------------------- 1 | export const subprotocol = '1.0.0' 2 | 3 | export type User = { 4 | id: string 5 | name: string 6 | password: string 7 | } 8 | 9 | export type Task = { 10 | text: string 11 | completed: boolean 12 | authorId?: string 13 | } 14 | -------------------------------------------------------------------------------- /client/.postcssrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": { 3 | "postcss-normalize": {}, 4 | "postcss-nested": {}, 5 | "autoprefixer": {} 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /client/.stylelintignore: -------------------------------------------------------------------------------- 1 | dist 2 | -------------------------------------------------------------------------------- /client/.stylelintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "@logux/stylelint-config" 4 | ], 5 | "rules": { 6 | "at-rule-no-unknown": [ 7 | true, 8 | { 9 | "ignoreAtRules": [ 10 | "import-normalize" 11 | ] 12 | } 13 | ] 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /client/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Logux ToDo Example 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "logux-to-do-example-client", 3 | "private": true, 4 | "engines": { 5 | "node": ">=16" 6 | }, 7 | "scripts": { 8 | "start": "vite", 9 | "build": "tsc && vite build", 10 | "preview": "vite preview", 11 | "lint": "stylelint **/*.css" 12 | }, 13 | "dependencies": { 14 | "@logux/client": "^0.18.4", 15 | "@logux/core": "^0.8.4", 16 | "@nanostores/react": "^0.4.1", 17 | "@nanostores/router": "^0.8.3", 18 | "@vitejs/plugin-react": "^3.1.0", 19 | "autoprefixer": "^10.4.14", 20 | "browserslist": "^4.21.10", 21 | "classnames": "^2.3.2", 22 | "nanoid": "^4.0.2", 23 | "nanostores": "^0.7.4", 24 | "postcss": "^8.4.27", 25 | "postcss-nested": "^6.0.1", 26 | "postcss-normalize": "^10.0.1", 27 | "react": "^18.2.0", 28 | "react-dom": "^18.2.0", 29 | "stylelint": "^14.16.1", 30 | "vite": "^4.4.8" 31 | }, 32 | "devDependencies": { 33 | "@logux/stylelint-config": "^0.13.0", 34 | "@types/react": "^18.2.18", 35 | "@types/react-dom": "^18.2.7", 36 | "typescript": "^4.9.5" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /client/src/App.tsx: -------------------------------------------------------------------------------- 1 | import { ClientContext, ErrorsContext } from '@logux/client/react' 2 | import { useStore } from '@nanostores/react' 3 | 4 | import './styles/theme.css' 5 | import './styles/base.css' 6 | 7 | import { AccessDeniedPage } from './pages/AccessDeniedPage.js' 8 | import { ErrorPage } from './pages/ErrorPage.js' 9 | import { NotFoundPage } from './pages/NotFoundPage.js' 10 | import { Layout } from './components/Layout/Layout.js' 11 | import Routes from './components/Routes/Routes.js' 12 | import { clientStore } from './stores/logux-client.js' 13 | 14 | const errorPages = { 15 | NotFound: NotFoundPage, 16 | AccessDenied: AccessDeniedPage, 17 | Error: ErrorPage 18 | } 19 | 20 | export const App = (): JSX.Element => { 21 | let client = useStore(clientStore) 22 | 23 | return ( 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | ) 32 | } 33 | -------------------------------------------------------------------------------- /client/src/components/ControlPanel/ControlPanel.module.css: -------------------------------------------------------------------------------- 1 | .control-panel { 2 | position: relative; 3 | display: grid; 4 | grid-template-columns: repeat(3, 1fr); 5 | padding: 10px 15px; 6 | color: var(--dark-gray); 7 | border-top: 1px solid var(--light-gray); 8 | 9 | &::before { 10 | position: absolute; 11 | right: 0; 12 | bottom: 0; 13 | left: 0; 14 | height: 50px; 15 | content: ""; 16 | box-shadow: 17 | 0 1px 1px var(--gray), 18 | 0 8px 0 -3px var(--light-gray-100), 19 | 0 9px 1px -3px var(--gray), 20 | 0 16px 0 -6px var(--light-gray-100), 21 | 0 17px 2px -6px var(--gray); 22 | } 23 | } 24 | 25 | .items-count { 26 | position: relative; 27 | align-self: center; 28 | justify-self: start; 29 | } 30 | 31 | .filters { 32 | position: relative; 33 | display: flex; 34 | justify-self: center; 35 | padding: 0; 36 | margin: 0; 37 | list-style: none; 38 | } 39 | 40 | .filters-item-content { 41 | padding: 3px 7px; 42 | margin: 3px; 43 | font-weight: 300; 44 | color: var(--dark-gray); 45 | text-decoration: none; 46 | background: transparent; 47 | border: 1px solid transparent; 48 | border-radius: 3px; 49 | 50 | &:hover { 51 | border-color: var(--accent-300); 52 | } 53 | 54 | &:focus { 55 | border-color: var(--accent-200); 56 | outline: none; 57 | } 58 | 59 | &_selected { 60 | border-color: var(--accent-200); 61 | } 62 | } 63 | 64 | .clear-action { 65 | position: relative; 66 | justify-self: end; 67 | padding: 3px 7px; 68 | font-weight: 300; 69 | color: var(--dark-gray); 70 | background: transparent; 71 | border: 1px solid transparent; 72 | border-radius: 3px; 73 | 74 | &:hover, 75 | &:focus { 76 | border-color: var(--accent-300); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /client/src/components/ControlPanel/ControlPanel.tsx: -------------------------------------------------------------------------------- 1 | import { useStore } from '@nanostores/react' 2 | import cn from 'classnames' 3 | import { useClient, useFilter } from '@logux/client/react' 4 | import { deleteSyncMapById } from '@logux/client' 5 | import { useCallback } from 'react' 6 | 7 | import { Filter, filterStore } from '../../stores/filter.js' 8 | import { tasksStore } from '../../stores/tasks.js' 9 | import { authStore } from '../../stores/auth.js' 10 | import styles from './ControlPanel.module.css' 11 | 12 | export const ControlPanel = (): JSX.Element => { 13 | const client = useClient() 14 | const filter = useStore(filterStore) 15 | const { id: authorId } = useStore(authStore) 16 | const tasks = useFilter(tasksStore, { authorId }) 17 | const activeTasksCount = tasks.list.filter(task => !task.completed).length 18 | 19 | const handleClearCompletedClick = useCallback(() => { 20 | const tasksToDelete = tasks.list.filter(task => task.completed) 21 | 22 | tasksToDelete.forEach(task => 23 | deleteSyncMapById(client, tasksStore, task.id) 24 | ) 25 | }, [client, tasks]) 26 | 27 | return ( 28 | 82 | ) 83 | } 84 | -------------------------------------------------------------------------------- /client/src/components/Layout/Layout.module.css: -------------------------------------------------------------------------------- 1 | .layout { 2 | width: 550px; 3 | margin: 0 auto; 4 | } 5 | 6 | .title { 7 | display: block; 8 | margin: 8px 0; 9 | font-size: 100px; 10 | font-weight: 100; 11 | color: var(--accent-200); 12 | text-align: center; 13 | } 14 | 15 | .footer { 16 | margin: 65px auto 0; 17 | font-size: 14px; 18 | color: var(--gray); 19 | text-align: center; 20 | } 21 | 22 | .footer-link { 23 | font-weight: 400; 24 | color: inherit; 25 | text-decoration: none; 26 | 27 | &:hover { 28 | text-decoration: underline; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /client/src/components/Layout/Layout.tsx: -------------------------------------------------------------------------------- 1 | import { ReactNode } from 'react' 2 | import { getPagePath } from '@nanostores/router' 3 | import { useStore } from '@nanostores/react' 4 | 5 | import { authStore } from '../../stores/auth.js' 6 | import { router } from '../../stores/router.js' 7 | import styles from './Layout.module.css' 8 | 9 | type Props = { 10 | children: ReactNode 11 | } 12 | 13 | export const Layout = ({ children }: Props): JSX.Element => { 14 | const { id: userId } = useStore(authStore) 15 | 16 | return ( 17 |
18 |
19 |

todos

20 |
21 | 22 |
{children}
23 | 24 | 51 |
52 | ) 53 | } 54 | -------------------------------------------------------------------------------- /client/src/components/LoginForm/LoginForm.module.css: -------------------------------------------------------------------------------- 1 | .form { 2 | display: flex; 3 | flex-direction: column; 4 | } 5 | 6 | .field { 7 | display: flex; 8 | flex-direction: column; 9 | margin-bottom: 8px; 10 | 11 | &:last-child { 12 | margin-bottom: 0; 13 | } 14 | 15 | & + .action { 16 | margin-top: 12px; 17 | } 18 | } 19 | 20 | .label { 21 | margin-bottom: 4px; 22 | } 23 | -------------------------------------------------------------------------------- /client/src/components/LoginForm/LoginForm.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react' 2 | 3 | import { auth } from '../../stores/auth.js' 4 | import { TextField } from '../TextField/TextField.js' 5 | import styles from './LoginForm.module.css' 6 | 7 | export const LoginForm = (): JSX.Element => { 8 | const [login, setLogin] = useState('admin') 9 | const [password, setPassword] = useState('admin') 10 | 11 | return ( 12 |
{ 14 | event.preventDefault() 15 | auth({ 16 | name: event.currentTarget.login.value, 17 | password: event.currentTarget.password.value 18 | }) 19 | }} 20 | className={styles.form} 21 | > 22 |
23 | { 29 | setLogin(event.target.value) 30 | }} 31 | autoComplete="username" 32 | /> 33 |
34 |
35 | { 43 | setPassword(event.target.value) 44 | }} 45 | /> 46 |
47 |
48 | 49 |
50 |
51 | ) 52 | } 53 | -------------------------------------------------------------------------------- /client/src/components/Routes/Routes.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { useStore } from '@nanostores/react' 3 | import { redirectPage } from '@nanostores/router' 4 | 5 | import { MainPage } from '../../pages/MainPage.js' 6 | import { LoginPage } from '../../pages/LoginPage.js' 7 | import { LogoutPage } from '../../pages/LogoutPage.js' 8 | import { NotFoundPage } from '../../pages/NotFoundPage.js' 9 | import { router } from '../../stores/router.js' 10 | import { authStore } from '../../stores/auth.js' 11 | 12 | const Routes = (): JSX.Element | null => { 13 | const page = useStore(router) 14 | const { id: userId } = useStore(authStore) 15 | 16 | if (!page) { 17 | return 18 | } 19 | 20 | if (!userId) { 21 | redirectPage(router, 'login') 22 | } else if (page.route === 'login') { 23 | redirectPage(router, 'main') 24 | } 25 | 26 | switch (page.route) { 27 | case 'login': 28 | return 29 | case 'main': 30 | return 31 | case 'logout': 32 | return 33 | } 34 | 35 | return null 36 | } 37 | 38 | export default Routes 39 | -------------------------------------------------------------------------------- /client/src/components/TextField/TextField.module.css: -------------------------------------------------------------------------------- 1 | .input { 2 | position: relative; 3 | box-sizing: border-box; 4 | width: 100%; 5 | font-family: inherit; 6 | font-size: 24px; 7 | font-weight: inherit; 8 | line-height: 34px; 9 | 10 | &:hover, 11 | &:focus { 12 | outline: 2px solid var(--accent-200); 13 | } 14 | 15 | &::placeholder { 16 | font-style: italic; 17 | font-weight: 300; 18 | color: var(--gray); 19 | } 20 | } 21 | 22 | .label { 23 | display: block; 24 | margin-bottom: 4px; 25 | } 26 | 27 | .field { 28 | &_theme_default { 29 | & .input { 30 | padding: 14px 16px; 31 | border: 1px solid var(--dark-gray-100); 32 | } 33 | } 34 | 35 | &_theme_flat { 36 | & .input { 37 | padding: 15px 15px 15px 60px; 38 | border: none; 39 | box-shadow: inset 0 -2px 1px var(--light-gray-100); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /client/src/components/TextField/TextField.tsx: -------------------------------------------------------------------------------- 1 | import cn from 'classnames' 2 | import { 3 | ChangeEvent, 4 | ForwardedRef, 5 | forwardRef, 6 | KeyboardEvent, 7 | useCallback 8 | } from 'react' 9 | 10 | import styles from './TextField.module.css' 11 | 12 | type Props = { 13 | value: string 14 | id: string 15 | className?: string 16 | label: string 17 | placeholder?: string 18 | theme: 'default' | 'flat' 19 | hiddenLabel?: boolean 20 | type?: string 21 | autoComplete?: string 22 | onKeyDown?: (event: KeyboardEvent) => void 23 | onChange: (event: ChangeEvent) => void 24 | } 25 | 26 | export const TextField = forwardRef( 27 | ( 28 | { 29 | className, 30 | id, 31 | label, 32 | placeholder, 33 | theme, 34 | hiddenLabel, 35 | value, 36 | type, 37 | autoComplete, 38 | onChange, 39 | onKeyDown 40 | }: Props, 41 | ref: ForwardedRef 42 | ): JSX.Element => { 43 | const handleChange = useCallback( 44 | (event: ChangeEvent) => { 45 | onChange(event) 46 | }, 47 | [onChange] 48 | ) 49 | 50 | return ( 51 |
54 | {!hiddenLabel && } 55 | 67 |
68 | ) 69 | } 70 | ) 71 | -------------------------------------------------------------------------------- /client/src/components/TodosList/TodosList.module.css: -------------------------------------------------------------------------------- 1 | .todos-list { 2 | position: relative; 3 | background: var(--white); 4 | box-shadow: 0 2px 4px 0 var(--gray), 0 25px 50px 0 var(--light-gray); 5 | } 6 | 7 | .toggle-action { 8 | position: absolute; 9 | top: 20px; 10 | left: 15px; 11 | } 12 | 13 | .create-action { 14 | display: none; 15 | } 16 | 17 | .list { 18 | padding: 0; 19 | margin: 0; 20 | list-style: none; 21 | } 22 | 23 | .label { 24 | display: block; 25 | padding: 15px 15px 15px 60px; 26 | font-size: 24px; 27 | line-height: 34px; 28 | word-break: break-all; 29 | background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E"); 30 | background-repeat: no-repeat; 31 | background-position: center left; 32 | transition: color 0.4s; 33 | } 34 | 35 | .note { 36 | position: relative; 37 | 38 | &_completed { 39 | .label { 40 | color: var(--light-gray); 41 | text-decoration: line-through; 42 | } 43 | } 44 | 45 | &_type_skeleton { 46 | & .label { 47 | &::before { 48 | display: block; 49 | width: 170px; 50 | height: 34px; 51 | content: ""; 52 | background: var(--light-gray); 53 | } 54 | 55 | background-color: var(--white); 56 | } 57 | } 58 | } 59 | 60 | .text-input { 61 | display: none; 62 | width: 506px; 63 | margin: 0 0 0 43px; 64 | } 65 | 66 | .delete-control { 67 | position: absolute; 68 | top: 50%; 69 | right: 10px; 70 | bottom: 0; 71 | display: none; 72 | width: 40px; 73 | height: 40px; 74 | font-size: 0; 75 | line-height: 40px; 76 | color: var(--accent-100); 77 | background: transparent; 78 | border: none; 79 | transition: color 0.2s ease-out; 80 | transform: translateY(-50%); 81 | 82 | &:hover { 83 | color: var(--accent); 84 | } 85 | 86 | &:focus { 87 | outline: 2px solid var(--accent-200); 88 | } 89 | 90 | &::after { 91 | font-size: 30px; 92 | content: "×"; 93 | } 94 | } 95 | 96 | .list-item { 97 | font-size: 24px; 98 | border-bottom: 1px solid var(--light-gray); 99 | 100 | &:last-child { 101 | border-bottom: none; 102 | } 103 | 104 | &_editable { 105 | padding: 0; 106 | border-bottom-color: transparent; 107 | 108 | .text-input { 109 | display: block; 110 | } 111 | 112 | .note { 113 | display: none; 114 | } 115 | } 116 | 117 | &:hover { 118 | .delete-control { 119 | display: block; 120 | } 121 | } 122 | } 123 | 124 | .checkbox { 125 | position: absolute; 126 | top: 0; 127 | bottom: 0; 128 | width: 40px; 129 | height: auto; 130 | margin: auto 0; 131 | text-align: center; 132 | border: none; 133 | opacity: 0; 134 | 135 | &:checked + .label { 136 | background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E"); 137 | } 138 | } 139 | -------------------------------------------------------------------------------- /client/src/components/TodosList/TodosList.tsx: -------------------------------------------------------------------------------- 1 | import cn from 'classnames' 2 | import { useClient, useFilter } from '@logux/client/react' 3 | import { createSyncMap } from '@logux/client' 4 | import { useState } from 'react' 5 | import { useStore } from '@nanostores/react' 6 | import { nanoid } from 'nanoid' 7 | 8 | import { ControlPanel } from '../ControlPanel/ControlPanel.js' 9 | import { TextField } from '../TextField/TextField.js' 10 | import { ToggleAction } from '../ToggleAction/ToggleAction.js' 11 | import { TodosListItem } from './TodosListItem.js' 12 | import { authStore } from '../../stores/auth.js' 13 | import { tasksStore } from '../../stores/tasks.js' 14 | import { Filter, filterStore } from '../../stores/filter.js' 15 | import styles from './TodosList.module.css' 16 | 17 | export const TodosList = (): JSX.Element => { 18 | const client = useClient() 19 | const filter = useStore(filterStore) 20 | const { id: authorId } = useStore(authStore) 21 | const [newTaskTitle, setNewTaskTitle] = useState('') 22 | 23 | const tasks = useFilter(tasksStore, { 24 | authorId, 25 | ...(filter === Filter.all ? {} : { completed: filter === Filter.completed }) 26 | }) 27 | 28 | return ( 29 |
30 |
{ 32 | event.preventDefault() 33 | 34 | createSyncMap(client, tasksStore, { 35 | id: nanoid(), 36 | text: newTaskTitle, 37 | completed: false, 38 | authorId 39 | }) 40 | 41 | setNewTaskTitle('') 42 | }} 43 | > 44 | { 51 | setNewTaskTitle(event.target.value) 52 | }} 53 | hiddenLabel 54 | /> 55 | 58 | 59 | 60 |
61 | 62 |
63 | 64 | {tasks.isLoading ? ( 65 |
66 | 67 |
68 | ) : ( 69 |
    70 | {tasks.list.map(todo => ( 71 | 77 | ))} 78 |
79 | )} 80 | 81 | 82 |
83 | ) 84 | } 85 | -------------------------------------------------------------------------------- /client/src/components/TodosList/TodosListItem.tsx: -------------------------------------------------------------------------------- 1 | import cn from 'classnames' 2 | import { useClient } from '@logux/client/react' 3 | import { changeSyncMapById, deleteSyncMapById } from '@logux/client' 4 | import { useCallback, useRef, useState } from 'react' 5 | 6 | import { TextField } from '../TextField/TextField.js' 7 | import { tasksStore } from '../../stores/tasks.js' 8 | import styles from './TodosList.module.css' 9 | 10 | type Props = { 11 | id: string 12 | completed: boolean 13 | text: string 14 | } 15 | 16 | export const TodosListItem = ({ id, completed, text }: Props): JSX.Element => { 17 | const client = useClient() 18 | const [editableItemId, setEditableItemId] = useState('') 19 | const [editableInitialValue, setEditableInitialValue] = useState('') 20 | const inputElement = useRef(null) 21 | 22 | const handleItemOutsideClick = useCallback( 23 | (event: MouseEvent) => { 24 | if (event.target === inputElement.current) return 25 | 26 | setEditableItemId('') 27 | document.removeEventListener('click', handleItemOutsideClick) 28 | }, 29 | [inputElement] 30 | ) 31 | 32 | return ( 33 |
  • 39 |
    40 | { 45 | changeSyncMapById(client, tasksStore, id, { 46 | completed: Boolean(event.target.checked) 47 | }) 48 | }} 49 | checked={completed} 50 | /> 51 | 66 | 75 |
    76 | { 85 | if (event.key === 'Escape') { 86 | changeSyncMapById(client, tasksStore, id, { 87 | text: editableInitialValue 88 | }) 89 | 90 | setEditableItemId('') 91 | } else if (event.key === 'Enter') { 92 | setEditableItemId('') 93 | } 94 | }} 95 | onChange={event => { 96 | changeSyncMapById(client, tasksStore, id, { 97 | text: event.target.value 98 | }) 99 | }} 100 | /> 101 |
  • 102 | ) 103 | } 104 | -------------------------------------------------------------------------------- /client/src/components/ToggleAction/ToggleAction.module.css: -------------------------------------------------------------------------------- 1 | .label { 2 | display: block; 3 | font-size: 0; 4 | transform: rotate(90deg); 5 | 6 | &::before { 7 | font-size: 22px; 8 | color: var(--light-gray); 9 | content: "❯"; 10 | } 11 | } 12 | 13 | .action { 14 | display: none; 15 | text-align: center; 16 | 17 | &:checked + .label::before { 18 | color: var(--dark-gray); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /client/src/components/ToggleAction/ToggleAction.tsx: -------------------------------------------------------------------------------- 1 | import { ChangeEvent, useCallback } from 'react' 2 | import { changeSyncMapById } from '@logux/client' 3 | import { useClient, useFilter } from '@logux/client/react' 4 | import { useStore } from '@nanostores/react' 5 | 6 | import { tasksStore } from '../../stores/tasks.js' 7 | import { authStore } from '../../stores/auth.js' 8 | import styles from './ToggleAction.module.css' 9 | 10 | export const ToggleAction = (): JSX.Element => { 11 | const client = useClient() 12 | const { id: authorId } = useStore(authStore) 13 | const tasks = useFilter(tasksStore, { authorId }) 14 | 15 | const handleToggleAction = useCallback( 16 | (event: ChangeEvent) => { 17 | tasks.list.forEach(task => 18 | changeSyncMapById(client, tasksStore, task.id, { 19 | completed: event.target.checked 20 | }) 21 | ) 22 | }, 23 | [client, tasks] 24 | ) 25 | 26 | return ( 27 | <> 28 | 34 | 37 | 38 | ) 39 | } 40 | -------------------------------------------------------------------------------- /client/src/lib/api.ts: -------------------------------------------------------------------------------- 1 | export async function signIn({ 2 | name, 3 | password 4 | }: { 5 | name: string 6 | password: string 7 | }): Promise { 8 | return await fetch('/api/auth', { 9 | method: 'POST', 10 | headers: { 11 | 'Content-Type': 'application/json' 12 | }, 13 | body: JSON.stringify({ name, password }) 14 | }) 15 | } 16 | 17 | export async function logout(): Promise { 18 | return await fetch('/api/auth', { 19 | method: 'DELETE' 20 | }) 21 | } 22 | -------------------------------------------------------------------------------- /client/src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { createRoot } from 'react-dom/client' 3 | 4 | import { App } from './App.js' 5 | 6 | const container = document.getElementById('root') 7 | 8 | if (container) { 9 | const root = createRoot(container) 10 | root.render( 11 | 12 | 13 | 14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /client/src/pages/AccessDeniedPage.tsx: -------------------------------------------------------------------------------- 1 | export const AccessDeniedPage = (): JSX.Element => { 2 | return

    Access denied

    3 | } 4 | -------------------------------------------------------------------------------- /client/src/pages/ErrorPage.tsx: -------------------------------------------------------------------------------- 1 | export const ErrorPage = (): JSX.Element => { 2 | return

    Error

    3 | } 4 | -------------------------------------------------------------------------------- /client/src/pages/LoginPage.tsx: -------------------------------------------------------------------------------- 1 | import { LoginForm } from '../components/LoginForm/LoginForm.js' 2 | 3 | export const LoginPage = (): JSX.Element => { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /client/src/pages/LogoutPage.tsx: -------------------------------------------------------------------------------- 1 | import { useStore } from '@nanostores/react' 2 | import { useEffect } from 'react' 3 | import { redirectPage } from '@nanostores/router' 4 | 5 | import { authStore, logout } from '../stores/auth.js' 6 | import { router } from '../stores/router.js' 7 | 8 | export const LogoutPage = (): null => { 9 | const { id: userId } = useStore(authStore) 10 | 11 | useEffect(() => { 12 | if (userId) { 13 | logout() 14 | } else { 15 | redirectPage(router, 'main') 16 | } 17 | }, [userId]) 18 | 19 | return null 20 | } 21 | -------------------------------------------------------------------------------- /client/src/pages/MainPage.tsx: -------------------------------------------------------------------------------- 1 | import { TodosList } from '../components/TodosList/TodosList.js' 2 | 3 | export const MainPage = (): JSX.Element => { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /client/src/pages/NotFoundPage.tsx: -------------------------------------------------------------------------------- 1 | export const NotFoundPage = (): JSX.Element => { 2 | return

    Not found

    3 | } 4 | -------------------------------------------------------------------------------- /client/src/stores/auth.ts: -------------------------------------------------------------------------------- 1 | import { map } from 'nanostores' 2 | 3 | import { signIn, logout as logoutRequest } from '../lib/api.js' 4 | 5 | export const authStore = map<{ id?: string }>({ 6 | id: localStorage.getItem('id') ?? undefined 7 | }) 8 | 9 | export async function auth(data: { 10 | name: string 11 | password: string 12 | }): Promise { 13 | const res = await signIn(data) 14 | const userData = await res.json() 15 | if (res.ok) { 16 | authStore.setKey('id', userData.id) 17 | } 18 | } 19 | 20 | export function logout(): void { 21 | logoutRequest() 22 | authStore.setKey('id', undefined) 23 | } 24 | 25 | authStore.subscribe( 26 | ({ id }: { id?: string }, changedKey: string | undefined) => { 27 | if (changedKey === 'id') { 28 | if (id) { 29 | localStorage.setItem('id', id) 30 | } else { 31 | localStorage.removeItem('id') 32 | } 33 | } 34 | } 35 | ) 36 | -------------------------------------------------------------------------------- /client/src/stores/filter.ts: -------------------------------------------------------------------------------- 1 | import { atom } from 'nanostores' 2 | 3 | export enum Filter { 4 | all = 'all', 5 | active = 'active', 6 | completed = 'completed' 7 | } 8 | 9 | export const filterStore = atom(Filter.all) 10 | -------------------------------------------------------------------------------- /client/src/stores/logux-client.ts: -------------------------------------------------------------------------------- 1 | import { badge, badgeEn, confirm, CrossTabClient, log } from '@logux/client' 2 | import { badgeStyles } from '@logux/client/badge/styles' 3 | import { atom, onMount } from 'nanostores' 4 | import { Client } from '@logux/client/client' 5 | 6 | import { subprotocol } from '../../../api/index.js' 7 | import { authStore, logout } from './auth.js' 8 | 9 | const loguxServer = `${ 10 | window.location.protocol.endsWith('s') ? 'wss' : 'ws' 11 | }://${window.location.host}/logux` 12 | 13 | const fakeClient = new CrossTabClient({ 14 | subprotocol, 15 | userId: '', 16 | server: loguxServer, 17 | allowDangerousProtocol: true 18 | }) 19 | 20 | export const clientStore = atom(fakeClient) 21 | 22 | onMount(clientStore, () => { 23 | const client = new CrossTabClient({ 24 | subprotocol, 25 | userId: '', 26 | server: loguxServer, 27 | allowDangerousProtocol: true 28 | }) 29 | 30 | badge(client, { messages: badgeEn, styles: badgeStyles }) 31 | log(client) 32 | confirm(client) 33 | 34 | let started = false 35 | 36 | clientStore.set(client) 37 | 38 | let authUnsubscribe = authStore.subscribe(({ id }, changedKey) => { 39 | if (!changedKey) { 40 | if (id) { 41 | client.changeUser(id) 42 | 43 | if (started) { 44 | client.node.connection.connect() 45 | } else { 46 | client.start() 47 | started = true 48 | } 49 | } else if (client.node.connected) { 50 | client.node.connection.disconnect() 51 | client.changeUser('') 52 | } 53 | } 54 | }) 55 | 56 | client.node.catch(error => { 57 | if (error.type === 'wrong-credentials') { 58 | logout() 59 | } 60 | }) 61 | 62 | return () => { 63 | authUnsubscribe() 64 | client.destroy() 65 | } 66 | }) 67 | -------------------------------------------------------------------------------- /client/src/stores/router.ts: -------------------------------------------------------------------------------- 1 | import { createRouter } from '@nanostores/router' 2 | 3 | export const router = createRouter({ 4 | main: '/', 5 | login: '/login', 6 | logout: '/logout' 7 | } as const) 8 | -------------------------------------------------------------------------------- /client/src/stores/tasks.ts: -------------------------------------------------------------------------------- 1 | import { syncMapTemplate } from '@logux/client' 2 | 3 | import { Task } from '../../../api/index.js' 4 | 5 | export const tasksStore = syncMapTemplate('tasks') 6 | -------------------------------------------------------------------------------- /client/src/styles/base.css: -------------------------------------------------------------------------------- 1 | @import-normalize "normalize/opinionated.css"; 2 | 3 | body { 4 | font: 14px "Helvetica Neue", Helvetica, Arial, sans-serif; 5 | font-weight: 300; 6 | color: var(--black); 7 | background: var(--light-gray-100); 8 | } 9 | -------------------------------------------------------------------------------- /client/src/styles/theme.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --black: rgb(77 77 77); 3 | --white: rgb(255 255 255); 4 | --dark-gray: rgb(119 119 119); 5 | --dark-gray-100: rgb(153 153 153); 6 | --gray: rgb(191 191 191); 7 | --light-gray: rgb(230 230 230); 8 | --light-gray-100: rgb(246 246 246); 9 | --accent: rgb(175 91 94); 10 | --accent-100: rgb(204 154 154); 11 | --accent-200: rgb(175 47 47 / 0.2); 12 | --accent-300: rgb(175 47 47 / 0.1); 13 | } 14 | -------------------------------------------------------------------------------- /client/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /client/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | export default defineConfig({ 5 | plugins: [react()], 6 | css: { 7 | modules: { 8 | localsConvention: 'camelCase' 9 | } 10 | }, 11 | 12 | server: { 13 | proxy: { 14 | '/logux': { 15 | target: 'ws://127.0.0.1:31337', 16 | changeOrigin: true, 17 | ws: true, 18 | rewrite: path => path.replace(/^\/logux/, '') 19 | }, 20 | '/api': { 21 | target: 'http://127.0.0.1:31337', 22 | changeOrigin: true, 23 | rewrite: path => path.replace(/^\/api/, '') 24 | } 25 | } 26 | } 27 | }) 28 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "logux-to-do-example", 3 | "private": true, 4 | "scripts": { 5 | "start": "pnpm -r start", 6 | "test": "pnpm -r --include-workspace-root lint", 7 | "lint": "tsc --noEmit && eslint ." 8 | }, 9 | "type": "module", 10 | "devDependencies": { 11 | "@logux/eslint-config": "^48.0.0", 12 | "@typescript-eslint/eslint-plugin": "^5.62.0", 13 | "@typescript-eslint/parser": "^5.62.0", 14 | "eslint": "^8.46.0", 15 | "eslint-config-standard": "^17.1.0", 16 | "eslint-plugin-import": "^2.28.0", 17 | "eslint-plugin-n": "^15.7.0", 18 | "eslint-plugin-prefer-let": "^3.0.1", 19 | "eslint-plugin-promise": "^6.1.1", 20 | "typescript": "^4.9.5" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@logux/eslint-config': 12 | specifier: ^48.0.0 13 | version: 48.0.0(eslint-config-standard@17.1.0)(eslint-plugin-import@2.28.0)(eslint-plugin-n@15.7.0)(eslint-plugin-prefer-let@3.0.1)(eslint-plugin-promise@6.1.1)(eslint@8.46.0) 14 | '@typescript-eslint/eslint-plugin': 15 | specifier: ^5.62.0 16 | version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@4.9.5) 17 | '@typescript-eslint/parser': 18 | specifier: ^5.62.0 19 | version: 5.62.0(eslint@8.46.0)(typescript@4.9.5) 20 | eslint: 21 | specifier: ^8.46.0 22 | version: 8.46.0 23 | eslint-config-standard: 24 | specifier: ^17.1.0 25 | version: 17.1.0(eslint-plugin-import@2.28.0)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.46.0) 26 | eslint-plugin-import: 27 | specifier: ^2.28.0 28 | version: 2.28.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0) 29 | eslint-plugin-n: 30 | specifier: ^15.7.0 31 | version: 15.7.0(eslint@8.46.0) 32 | eslint-plugin-prefer-let: 33 | specifier: ^3.0.1 34 | version: 3.0.1 35 | eslint-plugin-promise: 36 | specifier: ^6.1.1 37 | version: 6.1.1(eslint@8.46.0) 38 | typescript: 39 | specifier: ^4.9.5 40 | version: 4.9.5 41 | 42 | client: 43 | dependencies: 44 | '@logux/client': 45 | specifier: ^0.18.4 46 | version: 0.18.4(@logux/core@0.8.4)(@nanostores/react@0.4.1)(nanostores@0.7.4)(react-dom@18.2.0)(react@18.2.0) 47 | '@logux/core': 48 | specifier: ^0.8.4 49 | version: 0.8.4 50 | '@nanostores/react': 51 | specifier: ^0.4.1 52 | version: 0.4.1(nanostores@0.7.4)(react@18.2.0) 53 | '@nanostores/router': 54 | specifier: ^0.8.3 55 | version: 0.8.3(nanostores@0.7.4) 56 | '@vitejs/plugin-react': 57 | specifier: ^3.1.0 58 | version: 3.1.0(vite@4.4.8) 59 | autoprefixer: 60 | specifier: ^10.4.14 61 | version: 10.4.14(postcss@8.4.27) 62 | browserslist: 63 | specifier: ^4.21.10 64 | version: 4.21.10 65 | classnames: 66 | specifier: ^2.3.2 67 | version: 2.3.2 68 | nanoid: 69 | specifier: ^4.0.2 70 | version: 4.0.2 71 | nanostores: 72 | specifier: ^0.7.4 73 | version: 0.7.4 74 | postcss: 75 | specifier: ^8.4.27 76 | version: 8.4.27 77 | postcss-nested: 78 | specifier: ^6.0.1 79 | version: 6.0.1(postcss@8.4.27) 80 | postcss-normalize: 81 | specifier: ^10.0.1 82 | version: 10.0.1(browserslist@4.21.10)(postcss@8.4.27) 83 | react: 84 | specifier: ^18.2.0 85 | version: 18.2.0 86 | react-dom: 87 | specifier: ^18.2.0 88 | version: 18.2.0(react@18.2.0) 89 | stylelint: 90 | specifier: ^14.16.1 91 | version: 14.16.1 92 | vite: 93 | specifier: ^4.4.8 94 | version: 4.4.8 95 | devDependencies: 96 | '@logux/stylelint-config': 97 | specifier: ^0.13.0 98 | version: 0.13.0(stylelint@14.16.1) 99 | '@types/react': 100 | specifier: ^18.2.18 101 | version: 18.2.18 102 | '@types/react-dom': 103 | specifier: ^18.2.7 104 | version: 18.2.7 105 | typescript: 106 | specifier: ^4.9.5 107 | version: 4.9.5 108 | 109 | server: 110 | dependencies: 111 | '@logux/actions': 112 | specifier: ^0.3.1 113 | version: 0.3.1(@logux/core@0.8.4) 114 | '@logux/core': 115 | specifier: ^0.8.4 116 | version: 0.8.4 117 | '@logux/server': 118 | specifier: github:logux/server#main 119 | version: github.com/logux/server/1b649580cf7f5f9ae1598ce2f3bfba00482dc471 120 | devDependencies: 121 | '@types/node': 122 | specifier: ^18.17.2 123 | version: 18.17.2 124 | tsm: 125 | specifier: ^2.3.0 126 | version: 2.3.0 127 | 128 | packages: 129 | 130 | /@aashutoshrathi/word-wrap@1.2.6: 131 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 132 | engines: {node: '>=0.10.0'} 133 | dev: true 134 | 135 | /@ampproject/remapping@2.2.1: 136 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} 137 | engines: {node: '>=6.0.0'} 138 | dependencies: 139 | '@jridgewell/gen-mapping': 0.3.3 140 | '@jridgewell/trace-mapping': 0.3.18 141 | dev: false 142 | 143 | /@babel/code-frame@7.22.5: 144 | resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} 145 | engines: {node: '>=6.9.0'} 146 | dependencies: 147 | '@babel/highlight': 7.22.5 148 | 149 | /@babel/compat-data@7.22.9: 150 | resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} 151 | engines: {node: '>=6.9.0'} 152 | dev: false 153 | 154 | /@babel/core@7.22.9: 155 | resolution: {integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==} 156 | engines: {node: '>=6.9.0'} 157 | dependencies: 158 | '@ampproject/remapping': 2.2.1 159 | '@babel/code-frame': 7.22.5 160 | '@babel/generator': 7.22.9 161 | '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) 162 | '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) 163 | '@babel/helpers': 7.22.6 164 | '@babel/parser': 7.22.7 165 | '@babel/template': 7.22.5 166 | '@babel/traverse': 7.22.8 167 | '@babel/types': 7.22.5 168 | convert-source-map: 1.9.0 169 | debug: 4.3.4 170 | gensync: 1.0.0-beta.2 171 | json5: 2.2.3 172 | semver: 6.3.1 173 | transitivePeerDependencies: 174 | - supports-color 175 | dev: false 176 | 177 | /@babel/generator@7.22.9: 178 | resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==} 179 | engines: {node: '>=6.9.0'} 180 | dependencies: 181 | '@babel/types': 7.22.5 182 | '@jridgewell/gen-mapping': 0.3.3 183 | '@jridgewell/trace-mapping': 0.3.18 184 | jsesc: 2.5.2 185 | dev: false 186 | 187 | /@babel/helper-compilation-targets@7.22.9(@babel/core@7.22.9): 188 | resolution: {integrity: sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==} 189 | engines: {node: '>=6.9.0'} 190 | peerDependencies: 191 | '@babel/core': ^7.0.0 192 | dependencies: 193 | '@babel/compat-data': 7.22.9 194 | '@babel/core': 7.22.9 195 | '@babel/helper-validator-option': 7.22.5 196 | browserslist: 4.21.10 197 | lru-cache: 5.1.1 198 | semver: 6.3.1 199 | dev: false 200 | 201 | /@babel/helper-environment-visitor@7.22.5: 202 | resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} 203 | engines: {node: '>=6.9.0'} 204 | dev: false 205 | 206 | /@babel/helper-function-name@7.22.5: 207 | resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} 208 | engines: {node: '>=6.9.0'} 209 | dependencies: 210 | '@babel/template': 7.22.5 211 | '@babel/types': 7.22.5 212 | dev: false 213 | 214 | /@babel/helper-hoist-variables@7.22.5: 215 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} 216 | engines: {node: '>=6.9.0'} 217 | dependencies: 218 | '@babel/types': 7.22.5 219 | dev: false 220 | 221 | /@babel/helper-module-imports@7.22.5: 222 | resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} 223 | engines: {node: '>=6.9.0'} 224 | dependencies: 225 | '@babel/types': 7.22.5 226 | dev: false 227 | 228 | /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.9): 229 | resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} 230 | engines: {node: '>=6.9.0'} 231 | peerDependencies: 232 | '@babel/core': ^7.0.0 233 | dependencies: 234 | '@babel/core': 7.22.9 235 | '@babel/helper-environment-visitor': 7.22.5 236 | '@babel/helper-module-imports': 7.22.5 237 | '@babel/helper-simple-access': 7.22.5 238 | '@babel/helper-split-export-declaration': 7.22.6 239 | '@babel/helper-validator-identifier': 7.22.5 240 | dev: false 241 | 242 | /@babel/helper-plugin-utils@7.22.5: 243 | resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} 244 | engines: {node: '>=6.9.0'} 245 | dev: false 246 | 247 | /@babel/helper-simple-access@7.22.5: 248 | resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} 249 | engines: {node: '>=6.9.0'} 250 | dependencies: 251 | '@babel/types': 7.22.5 252 | dev: false 253 | 254 | /@babel/helper-split-export-declaration@7.22.6: 255 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} 256 | engines: {node: '>=6.9.0'} 257 | dependencies: 258 | '@babel/types': 7.22.5 259 | dev: false 260 | 261 | /@babel/helper-string-parser@7.22.5: 262 | resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} 263 | engines: {node: '>=6.9.0'} 264 | dev: false 265 | 266 | /@babel/helper-validator-identifier@7.22.5: 267 | resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} 268 | engines: {node: '>=6.9.0'} 269 | 270 | /@babel/helper-validator-option@7.22.5: 271 | resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} 272 | engines: {node: '>=6.9.0'} 273 | dev: false 274 | 275 | /@babel/helpers@7.22.6: 276 | resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} 277 | engines: {node: '>=6.9.0'} 278 | dependencies: 279 | '@babel/template': 7.22.5 280 | '@babel/traverse': 7.22.8 281 | '@babel/types': 7.22.5 282 | transitivePeerDependencies: 283 | - supports-color 284 | dev: false 285 | 286 | /@babel/highlight@7.22.5: 287 | resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} 288 | engines: {node: '>=6.9.0'} 289 | dependencies: 290 | '@babel/helper-validator-identifier': 7.22.5 291 | chalk: 2.4.2 292 | js-tokens: 4.0.0 293 | 294 | /@babel/parser@7.22.7: 295 | resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} 296 | engines: {node: '>=6.0.0'} 297 | hasBin: true 298 | dependencies: 299 | '@babel/types': 7.22.5 300 | dev: false 301 | 302 | /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.9): 303 | resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==} 304 | engines: {node: '>=6.9.0'} 305 | peerDependencies: 306 | '@babel/core': ^7.0.0-0 307 | dependencies: 308 | '@babel/core': 7.22.9 309 | '@babel/helper-plugin-utils': 7.22.5 310 | dev: false 311 | 312 | /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.9): 313 | resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==} 314 | engines: {node: '>=6.9.0'} 315 | peerDependencies: 316 | '@babel/core': ^7.0.0-0 317 | dependencies: 318 | '@babel/core': 7.22.9 319 | '@babel/helper-plugin-utils': 7.22.5 320 | dev: false 321 | 322 | /@babel/template@7.22.5: 323 | resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} 324 | engines: {node: '>=6.9.0'} 325 | dependencies: 326 | '@babel/code-frame': 7.22.5 327 | '@babel/parser': 7.22.7 328 | '@babel/types': 7.22.5 329 | dev: false 330 | 331 | /@babel/traverse@7.22.8: 332 | resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==} 333 | engines: {node: '>=6.9.0'} 334 | dependencies: 335 | '@babel/code-frame': 7.22.5 336 | '@babel/generator': 7.22.9 337 | '@babel/helper-environment-visitor': 7.22.5 338 | '@babel/helper-function-name': 7.22.5 339 | '@babel/helper-hoist-variables': 7.22.5 340 | '@babel/helper-split-export-declaration': 7.22.6 341 | '@babel/parser': 7.22.7 342 | '@babel/types': 7.22.5 343 | debug: 4.3.4 344 | globals: 11.12.0 345 | transitivePeerDependencies: 346 | - supports-color 347 | dev: false 348 | 349 | /@babel/types@7.22.5: 350 | resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} 351 | engines: {node: '>=6.9.0'} 352 | dependencies: 353 | '@babel/helper-string-parser': 7.22.5 354 | '@babel/helper-validator-identifier': 7.22.5 355 | to-fast-properties: 2.0.0 356 | dev: false 357 | 358 | /@csstools/normalize.css@12.0.0: 359 | resolution: {integrity: sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==} 360 | dev: false 361 | 362 | /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.13): 363 | resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} 364 | engines: {node: ^14 || ^16 || >=18} 365 | peerDependencies: 366 | postcss-selector-parser: ^6.0.10 367 | dependencies: 368 | postcss-selector-parser: 6.0.13 369 | 370 | /@esbuild/android-arm64@0.18.17: 371 | resolution: {integrity: sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==} 372 | engines: {node: '>=12'} 373 | cpu: [arm64] 374 | os: [android] 375 | requiresBuild: true 376 | dev: false 377 | optional: true 378 | 379 | /@esbuild/android-arm@0.15.18: 380 | resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} 381 | engines: {node: '>=12'} 382 | cpu: [arm] 383 | os: [android] 384 | requiresBuild: true 385 | dev: true 386 | optional: true 387 | 388 | /@esbuild/android-arm@0.18.17: 389 | resolution: {integrity: sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==} 390 | engines: {node: '>=12'} 391 | cpu: [arm] 392 | os: [android] 393 | requiresBuild: true 394 | dev: false 395 | optional: true 396 | 397 | /@esbuild/android-x64@0.18.17: 398 | resolution: {integrity: sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==} 399 | engines: {node: '>=12'} 400 | cpu: [x64] 401 | os: [android] 402 | requiresBuild: true 403 | dev: false 404 | optional: true 405 | 406 | /@esbuild/darwin-arm64@0.18.17: 407 | resolution: {integrity: sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==} 408 | engines: {node: '>=12'} 409 | cpu: [arm64] 410 | os: [darwin] 411 | requiresBuild: true 412 | dev: false 413 | optional: true 414 | 415 | /@esbuild/darwin-x64@0.18.17: 416 | resolution: {integrity: sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==} 417 | engines: {node: '>=12'} 418 | cpu: [x64] 419 | os: [darwin] 420 | requiresBuild: true 421 | dev: false 422 | optional: true 423 | 424 | /@esbuild/freebsd-arm64@0.18.17: 425 | resolution: {integrity: sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==} 426 | engines: {node: '>=12'} 427 | cpu: [arm64] 428 | os: [freebsd] 429 | requiresBuild: true 430 | dev: false 431 | optional: true 432 | 433 | /@esbuild/freebsd-x64@0.18.17: 434 | resolution: {integrity: sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==} 435 | engines: {node: '>=12'} 436 | cpu: [x64] 437 | os: [freebsd] 438 | requiresBuild: true 439 | dev: false 440 | optional: true 441 | 442 | /@esbuild/linux-arm64@0.18.17: 443 | resolution: {integrity: sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==} 444 | engines: {node: '>=12'} 445 | cpu: [arm64] 446 | os: [linux] 447 | requiresBuild: true 448 | dev: false 449 | optional: true 450 | 451 | /@esbuild/linux-arm@0.18.17: 452 | resolution: {integrity: sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==} 453 | engines: {node: '>=12'} 454 | cpu: [arm] 455 | os: [linux] 456 | requiresBuild: true 457 | dev: false 458 | optional: true 459 | 460 | /@esbuild/linux-ia32@0.18.17: 461 | resolution: {integrity: sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==} 462 | engines: {node: '>=12'} 463 | cpu: [ia32] 464 | os: [linux] 465 | requiresBuild: true 466 | dev: false 467 | optional: true 468 | 469 | /@esbuild/linux-loong64@0.15.18: 470 | resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} 471 | engines: {node: '>=12'} 472 | cpu: [loong64] 473 | os: [linux] 474 | requiresBuild: true 475 | dev: true 476 | optional: true 477 | 478 | /@esbuild/linux-loong64@0.18.17: 479 | resolution: {integrity: sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==} 480 | engines: {node: '>=12'} 481 | cpu: [loong64] 482 | os: [linux] 483 | requiresBuild: true 484 | dev: false 485 | optional: true 486 | 487 | /@esbuild/linux-mips64el@0.18.17: 488 | resolution: {integrity: sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==} 489 | engines: {node: '>=12'} 490 | cpu: [mips64el] 491 | os: [linux] 492 | requiresBuild: true 493 | dev: false 494 | optional: true 495 | 496 | /@esbuild/linux-ppc64@0.18.17: 497 | resolution: {integrity: sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==} 498 | engines: {node: '>=12'} 499 | cpu: [ppc64] 500 | os: [linux] 501 | requiresBuild: true 502 | dev: false 503 | optional: true 504 | 505 | /@esbuild/linux-riscv64@0.18.17: 506 | resolution: {integrity: sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==} 507 | engines: {node: '>=12'} 508 | cpu: [riscv64] 509 | os: [linux] 510 | requiresBuild: true 511 | dev: false 512 | optional: true 513 | 514 | /@esbuild/linux-s390x@0.18.17: 515 | resolution: {integrity: sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==} 516 | engines: {node: '>=12'} 517 | cpu: [s390x] 518 | os: [linux] 519 | requiresBuild: true 520 | dev: false 521 | optional: true 522 | 523 | /@esbuild/linux-x64@0.18.17: 524 | resolution: {integrity: sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==} 525 | engines: {node: '>=12'} 526 | cpu: [x64] 527 | os: [linux] 528 | requiresBuild: true 529 | dev: false 530 | optional: true 531 | 532 | /@esbuild/netbsd-x64@0.18.17: 533 | resolution: {integrity: sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==} 534 | engines: {node: '>=12'} 535 | cpu: [x64] 536 | os: [netbsd] 537 | requiresBuild: true 538 | dev: false 539 | optional: true 540 | 541 | /@esbuild/openbsd-x64@0.18.17: 542 | resolution: {integrity: sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==} 543 | engines: {node: '>=12'} 544 | cpu: [x64] 545 | os: [openbsd] 546 | requiresBuild: true 547 | dev: false 548 | optional: true 549 | 550 | /@esbuild/sunos-x64@0.18.17: 551 | resolution: {integrity: sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==} 552 | engines: {node: '>=12'} 553 | cpu: [x64] 554 | os: [sunos] 555 | requiresBuild: true 556 | dev: false 557 | optional: true 558 | 559 | /@esbuild/win32-arm64@0.18.17: 560 | resolution: {integrity: sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==} 561 | engines: {node: '>=12'} 562 | cpu: [arm64] 563 | os: [win32] 564 | requiresBuild: true 565 | dev: false 566 | optional: true 567 | 568 | /@esbuild/win32-ia32@0.18.17: 569 | resolution: {integrity: sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==} 570 | engines: {node: '>=12'} 571 | cpu: [ia32] 572 | os: [win32] 573 | requiresBuild: true 574 | dev: false 575 | optional: true 576 | 577 | /@esbuild/win32-x64@0.18.17: 578 | resolution: {integrity: sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==} 579 | engines: {node: '>=12'} 580 | cpu: [x64] 581 | os: [win32] 582 | requiresBuild: true 583 | dev: false 584 | optional: true 585 | 586 | /@eslint-community/eslint-utils@4.4.0(eslint@8.46.0): 587 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 588 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 589 | peerDependencies: 590 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 591 | dependencies: 592 | eslint: 8.46.0 593 | eslint-visitor-keys: 3.4.2 594 | dev: true 595 | 596 | /@eslint-community/regexpp@4.6.2: 597 | resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} 598 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 599 | dev: true 600 | 601 | /@eslint/eslintrc@2.1.1: 602 | resolution: {integrity: sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==} 603 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 604 | dependencies: 605 | ajv: 6.12.6 606 | debug: 4.3.4 607 | espree: 9.6.1 608 | globals: 13.20.0 609 | ignore: 5.2.4 610 | import-fresh: 3.3.0 611 | js-yaml: 4.1.0 612 | minimatch: 3.1.2 613 | strip-json-comments: 3.1.1 614 | transitivePeerDependencies: 615 | - supports-color 616 | dev: true 617 | 618 | /@eslint/js@8.46.0: 619 | resolution: {integrity: sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==} 620 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 621 | dev: true 622 | 623 | /@humanwhocodes/config-array@0.11.10: 624 | resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} 625 | engines: {node: '>=10.10.0'} 626 | dependencies: 627 | '@humanwhocodes/object-schema': 1.2.1 628 | debug: 4.3.4 629 | minimatch: 3.1.2 630 | transitivePeerDependencies: 631 | - supports-color 632 | dev: true 633 | 634 | /@humanwhocodes/module-importer@1.0.1: 635 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 636 | engines: {node: '>=12.22'} 637 | dev: true 638 | 639 | /@humanwhocodes/object-schema@1.2.1: 640 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 641 | dev: true 642 | 643 | /@jridgewell/gen-mapping@0.3.3: 644 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 645 | engines: {node: '>=6.0.0'} 646 | dependencies: 647 | '@jridgewell/set-array': 1.1.2 648 | '@jridgewell/sourcemap-codec': 1.4.15 649 | '@jridgewell/trace-mapping': 0.3.18 650 | dev: false 651 | 652 | /@jridgewell/resolve-uri@3.1.0: 653 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 654 | engines: {node: '>=6.0.0'} 655 | dev: false 656 | 657 | /@jridgewell/set-array@1.1.2: 658 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 659 | engines: {node: '>=6.0.0'} 660 | dev: false 661 | 662 | /@jridgewell/sourcemap-codec@1.4.14: 663 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 664 | dev: false 665 | 666 | /@jridgewell/sourcemap-codec@1.4.15: 667 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 668 | dev: false 669 | 670 | /@jridgewell/trace-mapping@0.3.18: 671 | resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} 672 | dependencies: 673 | '@jridgewell/resolve-uri': 3.1.0 674 | '@jridgewell/sourcemap-codec': 1.4.14 675 | dev: false 676 | 677 | /@logux/actions@0.3.1(@logux/core@0.8.4): 678 | resolution: {integrity: sha512-9NU+3he2DaOYXlQjaZWornrnMsbw+8mvgUHtTyKcBotvpS5me5VVxVo9y02G7k2byz4FXtvafq9KPVStyag3oA==} 679 | engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} 680 | peerDependencies: 681 | '@logux/core': ^0.8.0 682 | dependencies: 683 | '@logux/core': 0.8.4 684 | dev: false 685 | 686 | /@logux/client@0.18.4(@logux/core@0.8.4)(@nanostores/react@0.4.1)(nanostores@0.7.4)(react-dom@18.2.0)(react@18.2.0): 687 | resolution: {integrity: sha512-gFOU22dxxxR1psxmQH1EO82nSgqkfSgVtKsMpwdLQCvgidjoYLAQYmiv8w5wfo5Kk53V/QvK9irMvr/0N7IW7Q==} 688 | engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} 689 | peerDependencies: 690 | '@logux/core': ^0.8.0 691 | '@nanostores/preact': '>=0.0.0' 692 | '@nanostores/react': '>=0.0.0' 693 | '@nanostores/vue': '>=0.0.0' 694 | nanostores: ^0.6.0 || ^0.7.0 695 | preact: '>=10.0.0' 696 | react: '>=18.0.0' 697 | react-dom: '>=16.8.0' 698 | vue: '>=3.2.30' 699 | peerDependenciesMeta: 700 | '@nanostores/preact': 701 | optional: true 702 | '@nanostores/react': 703 | optional: true 704 | '@nanostores/vue': 705 | optional: true 706 | preact: 707 | optional: true 708 | react: 709 | optional: true 710 | react-dom: 711 | optional: true 712 | vue: 713 | optional: true 714 | dependencies: 715 | '@logux/actions': 0.3.1(@logux/core@0.8.4) 716 | '@logux/core': 0.8.4 717 | '@nanostores/react': 0.4.1(nanostores@0.7.4)(react@18.2.0) 718 | fast-json-stable-stringify: 2.1.0 719 | nanodelay: 2.0.2 720 | nanoevents: 7.0.1 721 | nanoid: 4.0.2 722 | nanostores: 0.7.4 723 | react: 18.2.0 724 | react-dom: 18.2.0(react@18.2.0) 725 | dev: false 726 | 727 | /@logux/core@0.8.4: 728 | resolution: {integrity: sha512-dw/Wq+6iBLN1lalKf98WOsiksO1WtN0kH3SN8LcpWGF+wGP6x+N8jpqP8ZPKFOyduvb3r1T50gvk3xyr2mDLuQ==} 729 | engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} 730 | dependencies: 731 | nanoevents: 7.0.1 732 | dev: false 733 | 734 | /@logux/eslint-config@48.0.0(eslint-config-standard@17.1.0)(eslint-plugin-import@2.28.0)(eslint-plugin-n@15.7.0)(eslint-plugin-prefer-let@3.0.1)(eslint-plugin-promise@6.1.1)(eslint@8.46.0): 735 | resolution: {integrity: sha512-4Lwgy14TmEbrp0Xsm7YjiptitLkigOAdqrnkYaNIgeMEe54hO6I99KueeS0348CFWqVAaV9g0eJQaPF6vCJGJg==} 736 | engines: {node: '>=10.0.0'} 737 | peerDependencies: 738 | eslint: ^8.27.0 739 | eslint-config-standard: ^17.0.0 740 | eslint-plugin-import: ^2.26.0 741 | eslint-plugin-n: ^15.5.0 742 | eslint-plugin-prefer-let: ^3.0.1 743 | eslint-plugin-promise: ^6.1.1 744 | dependencies: 745 | eslint: 8.46.0 746 | eslint-config-standard: 17.1.0(eslint-plugin-import@2.28.0)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.46.0) 747 | eslint-plugin-import: 2.28.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0) 748 | eslint-plugin-n: 15.7.0(eslint@8.46.0) 749 | eslint-plugin-prefer-let: 3.0.1 750 | eslint-plugin-promise: 6.1.1(eslint@8.46.0) 751 | dev: true 752 | 753 | /@logux/stylelint-config@0.13.0(stylelint@14.16.1): 754 | resolution: {integrity: sha512-2IzekKL3YKPD6GSrd89RzCJ7FbGODzBafoNpqsqZfq3Qx2sdXQZZUR2F40YM0c6yx+pSJCRCZHVB4Qc699pM7w==} 755 | peerDependencies: 756 | stylelint: ^14.16.0 757 | dependencies: 758 | stylelint: 14.16.1 759 | stylelint-config-recess-order: 3.1.0(stylelint@14.16.1) 760 | stylelint-config-standard: 29.0.0(stylelint@14.16.1) 761 | stylelint-gamut: 1.3.3(stylelint@14.16.1) 762 | stylelint-order: 5.0.0(stylelint@14.16.1) 763 | dev: true 764 | 765 | /@nanostores/react@0.4.1(nanostores@0.7.4)(react@18.2.0): 766 | resolution: {integrity: sha512-lsv0CYrMxczbXtoV/mxFVEoL/uVjEjseoP89srO/5yNAOkJka+dSFS7LYyWEbuvCPO7EgbtkvRpO5V+OztKQOw==} 767 | engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} 768 | peerDependencies: 769 | nanostores: ^0.7.0 770 | react: '>=18.0.0' 771 | dependencies: 772 | nanostores: 0.7.4 773 | react: 18.2.0 774 | use-sync-external-store: 1.2.0(react@18.2.0) 775 | dev: false 776 | 777 | /@nanostores/router@0.8.3(nanostores@0.7.4): 778 | resolution: {integrity: sha512-AEGqyQQITIYgp232mIzwaG1wbP0yghCbEUi4ziy4kQaEfM8mRiaz/rrlnbDddd0MkwDZIWs3L3c3VodR5X9dUQ==} 779 | engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} 780 | peerDependencies: 781 | nanostores: ^0.7.0 782 | dependencies: 783 | nanostores: 0.7.4 784 | dev: false 785 | 786 | /@nodelib/fs.scandir@2.1.5: 787 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 788 | engines: {node: '>= 8'} 789 | dependencies: 790 | '@nodelib/fs.stat': 2.0.5 791 | run-parallel: 1.2.0 792 | 793 | /@nodelib/fs.stat@2.0.5: 794 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 795 | engines: {node: '>= 8'} 796 | 797 | /@nodelib/fs.walk@1.2.8: 798 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 799 | engines: {node: '>= 8'} 800 | dependencies: 801 | '@nodelib/fs.scandir': 2.1.5 802 | fastq: 1.15.0 803 | 804 | /@types/json-schema@7.0.12: 805 | resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} 806 | dev: true 807 | 808 | /@types/json5@0.0.29: 809 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 810 | dev: true 811 | 812 | /@types/minimist@1.2.2: 813 | resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} 814 | 815 | /@types/node@18.17.2: 816 | resolution: {integrity: sha512-wBo3KqP/PBqje5TI9UTiuL3yWfP6sdPtjtygSOqcYZWT232dfDeDOnkDps5wqZBP9NgGgYrNejinl0faAuE+HQ==} 817 | dev: true 818 | 819 | /@types/normalize-package-data@2.4.1: 820 | resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} 821 | 822 | /@types/parse-json@4.0.0: 823 | resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} 824 | 825 | /@types/prop-types@15.7.5: 826 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} 827 | dev: true 828 | 829 | /@types/react-dom@18.2.7: 830 | resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} 831 | dependencies: 832 | '@types/react': 18.2.18 833 | dev: true 834 | 835 | /@types/react@18.2.18: 836 | resolution: {integrity: sha512-da4NTSeBv/P34xoZPhtcLkmZuJ+oYaCxHmyHzwaDQo9RQPBeXV+06gEk2FpqEcsX9XrnNLvRpVh6bdavDSjtiQ==} 837 | dependencies: 838 | '@types/prop-types': 15.7.5 839 | '@types/scheduler': 0.16.3 840 | csstype: 3.1.2 841 | dev: true 842 | 843 | /@types/scheduler@0.16.3: 844 | resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} 845 | dev: true 846 | 847 | /@types/semver@7.5.0: 848 | resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} 849 | dev: true 850 | 851 | /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@4.9.5): 852 | resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} 853 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 854 | peerDependencies: 855 | '@typescript-eslint/parser': ^5.0.0 856 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 857 | typescript: '*' 858 | peerDependenciesMeta: 859 | typescript: 860 | optional: true 861 | dependencies: 862 | '@eslint-community/regexpp': 4.6.2 863 | '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 864 | '@typescript-eslint/scope-manager': 5.62.0 865 | '@typescript-eslint/type-utils': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 866 | '@typescript-eslint/utils': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 867 | debug: 4.3.4 868 | eslint: 8.46.0 869 | graphemer: 1.4.0 870 | ignore: 5.2.4 871 | natural-compare-lite: 1.4.0 872 | semver: 7.5.4 873 | tsutils: 3.21.0(typescript@4.9.5) 874 | typescript: 4.9.5 875 | transitivePeerDependencies: 876 | - supports-color 877 | dev: true 878 | 879 | /@typescript-eslint/parser@5.62.0(eslint@8.46.0)(typescript@4.9.5): 880 | resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} 881 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 882 | peerDependencies: 883 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 884 | typescript: '*' 885 | peerDependenciesMeta: 886 | typescript: 887 | optional: true 888 | dependencies: 889 | '@typescript-eslint/scope-manager': 5.62.0 890 | '@typescript-eslint/types': 5.62.0 891 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) 892 | debug: 4.3.4 893 | eslint: 8.46.0 894 | typescript: 4.9.5 895 | transitivePeerDependencies: 896 | - supports-color 897 | dev: true 898 | 899 | /@typescript-eslint/scope-manager@5.62.0: 900 | resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} 901 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 902 | dependencies: 903 | '@typescript-eslint/types': 5.62.0 904 | '@typescript-eslint/visitor-keys': 5.62.0 905 | dev: true 906 | 907 | /@typescript-eslint/type-utils@5.62.0(eslint@8.46.0)(typescript@4.9.5): 908 | resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} 909 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 910 | peerDependencies: 911 | eslint: '*' 912 | typescript: '*' 913 | peerDependenciesMeta: 914 | typescript: 915 | optional: true 916 | dependencies: 917 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) 918 | '@typescript-eslint/utils': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 919 | debug: 4.3.4 920 | eslint: 8.46.0 921 | tsutils: 3.21.0(typescript@4.9.5) 922 | typescript: 4.9.5 923 | transitivePeerDependencies: 924 | - supports-color 925 | dev: true 926 | 927 | /@typescript-eslint/types@5.62.0: 928 | resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} 929 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 930 | dev: true 931 | 932 | /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): 933 | resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} 934 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 935 | peerDependencies: 936 | typescript: '*' 937 | peerDependenciesMeta: 938 | typescript: 939 | optional: true 940 | dependencies: 941 | '@typescript-eslint/types': 5.62.0 942 | '@typescript-eslint/visitor-keys': 5.62.0 943 | debug: 4.3.4 944 | globby: 11.1.0 945 | is-glob: 4.0.3 946 | semver: 7.5.4 947 | tsutils: 3.21.0(typescript@4.9.5) 948 | typescript: 4.9.5 949 | transitivePeerDependencies: 950 | - supports-color 951 | dev: true 952 | 953 | /@typescript-eslint/utils@5.62.0(eslint@8.46.0)(typescript@4.9.5): 954 | resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} 955 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 956 | peerDependencies: 957 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 958 | dependencies: 959 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) 960 | '@types/json-schema': 7.0.12 961 | '@types/semver': 7.5.0 962 | '@typescript-eslint/scope-manager': 5.62.0 963 | '@typescript-eslint/types': 5.62.0 964 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) 965 | eslint: 8.46.0 966 | eslint-scope: 5.1.1 967 | semver: 7.5.4 968 | transitivePeerDependencies: 969 | - supports-color 970 | - typescript 971 | dev: true 972 | 973 | /@typescript-eslint/visitor-keys@5.62.0: 974 | resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} 975 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 976 | dependencies: 977 | '@typescript-eslint/types': 5.62.0 978 | eslint-visitor-keys: 3.4.2 979 | dev: true 980 | 981 | /@vitejs/plugin-react@3.1.0(vite@4.4.8): 982 | resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} 983 | engines: {node: ^14.18.0 || >=16.0.0} 984 | peerDependencies: 985 | vite: ^4.1.0-beta.0 986 | dependencies: 987 | '@babel/core': 7.22.9 988 | '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.9) 989 | '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.9) 990 | magic-string: 0.27.0 991 | react-refresh: 0.14.0 992 | vite: 4.4.8 993 | transitivePeerDependencies: 994 | - supports-color 995 | dev: false 996 | 997 | /JSONStream@1.3.5: 998 | resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} 999 | hasBin: true 1000 | dependencies: 1001 | jsonparse: 1.3.1 1002 | through: 2.3.8 1003 | dev: false 1004 | 1005 | /abort-controller@3.0.0: 1006 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 1007 | engines: {node: '>=6.5'} 1008 | dependencies: 1009 | event-target-shim: 5.0.1 1010 | dev: false 1011 | 1012 | /acorn-jsx@5.3.2(acorn@8.10.0): 1013 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 1014 | peerDependencies: 1015 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 1016 | dependencies: 1017 | acorn: 8.10.0 1018 | dev: true 1019 | 1020 | /acorn@8.10.0: 1021 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} 1022 | engines: {node: '>=0.4.0'} 1023 | hasBin: true 1024 | dev: true 1025 | 1026 | /ajv@6.12.6: 1027 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 1028 | dependencies: 1029 | fast-deep-equal: 3.1.3 1030 | fast-json-stable-stringify: 2.1.0 1031 | json-schema-traverse: 0.4.1 1032 | uri-js: 4.4.1 1033 | dev: true 1034 | 1035 | /ajv@8.12.0: 1036 | resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} 1037 | dependencies: 1038 | fast-deep-equal: 3.1.3 1039 | json-schema-traverse: 1.0.0 1040 | require-from-string: 2.0.2 1041 | uri-js: 4.4.1 1042 | 1043 | /ansi-regex@5.0.1: 1044 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 1045 | engines: {node: '>=8'} 1046 | 1047 | /ansi-regex@6.0.1: 1048 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 1049 | engines: {node: '>=12'} 1050 | dev: false 1051 | 1052 | /ansi-styles@3.2.1: 1053 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 1054 | engines: {node: '>=4'} 1055 | dependencies: 1056 | color-convert: 1.9.3 1057 | 1058 | /ansi-styles@4.3.0: 1059 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 1060 | engines: {node: '>=8'} 1061 | dependencies: 1062 | color-convert: 2.0.1 1063 | 1064 | /argparse@2.0.1: 1065 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 1066 | dev: true 1067 | 1068 | /array-buffer-byte-length@1.0.0: 1069 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 1070 | dependencies: 1071 | call-bind: 1.0.2 1072 | is-array-buffer: 3.0.2 1073 | dev: true 1074 | 1075 | /array-includes@3.1.6: 1076 | resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} 1077 | engines: {node: '>= 0.4'} 1078 | dependencies: 1079 | call-bind: 1.0.2 1080 | define-properties: 1.2.0 1081 | es-abstract: 1.22.1 1082 | get-intrinsic: 1.2.1 1083 | is-string: 1.0.7 1084 | dev: true 1085 | 1086 | /array-union@2.1.0: 1087 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 1088 | engines: {node: '>=8'} 1089 | 1090 | /array.prototype.findlastindex@1.2.2: 1091 | resolution: {integrity: sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==} 1092 | engines: {node: '>= 0.4'} 1093 | dependencies: 1094 | call-bind: 1.0.2 1095 | define-properties: 1.2.0 1096 | es-abstract: 1.22.1 1097 | es-shim-unscopables: 1.0.0 1098 | get-intrinsic: 1.2.1 1099 | dev: true 1100 | 1101 | /array.prototype.flat@1.3.1: 1102 | resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} 1103 | engines: {node: '>= 0.4'} 1104 | dependencies: 1105 | call-bind: 1.0.2 1106 | define-properties: 1.2.0 1107 | es-abstract: 1.22.1 1108 | es-shim-unscopables: 1.0.0 1109 | dev: true 1110 | 1111 | /array.prototype.flatmap@1.3.1: 1112 | resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} 1113 | engines: {node: '>= 0.4'} 1114 | dependencies: 1115 | call-bind: 1.0.2 1116 | define-properties: 1.2.0 1117 | es-abstract: 1.22.1 1118 | es-shim-unscopables: 1.0.0 1119 | dev: true 1120 | 1121 | /arraybuffer.prototype.slice@1.0.1: 1122 | resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} 1123 | engines: {node: '>= 0.4'} 1124 | dependencies: 1125 | array-buffer-byte-length: 1.0.0 1126 | call-bind: 1.0.2 1127 | define-properties: 1.2.0 1128 | get-intrinsic: 1.2.1 1129 | is-array-buffer: 3.0.2 1130 | is-shared-array-buffer: 1.0.2 1131 | dev: true 1132 | 1133 | /arrify@1.0.1: 1134 | resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} 1135 | engines: {node: '>=0.10.0'} 1136 | 1137 | /astral-regex@2.0.0: 1138 | resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} 1139 | engines: {node: '>=8'} 1140 | 1141 | /atomic-sleep@1.0.0: 1142 | resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} 1143 | engines: {node: '>=8.0.0'} 1144 | dev: false 1145 | 1146 | /autoprefixer@10.4.14(postcss@8.4.27): 1147 | resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} 1148 | engines: {node: ^10 || ^12 || >=14} 1149 | hasBin: true 1150 | peerDependencies: 1151 | postcss: ^8.1.0 1152 | dependencies: 1153 | browserslist: 4.21.10 1154 | caniuse-lite: 1.0.30001519 1155 | fraction.js: 4.2.0 1156 | normalize-range: 0.1.2 1157 | picocolors: 1.0.0 1158 | postcss: 8.4.27 1159 | postcss-value-parser: 4.2.0 1160 | dev: false 1161 | 1162 | /available-typed-arrays@1.0.5: 1163 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 1164 | engines: {node: '>= 0.4'} 1165 | dev: true 1166 | 1167 | /balanced-match@1.0.2: 1168 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 1169 | 1170 | /balanced-match@2.0.0: 1171 | resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} 1172 | 1173 | /base64-js@1.5.1: 1174 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 1175 | dev: false 1176 | 1177 | /brace-expansion@1.1.11: 1178 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 1179 | dependencies: 1180 | balanced-match: 1.0.2 1181 | concat-map: 0.0.1 1182 | 1183 | /braces@3.0.2: 1184 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 1185 | engines: {node: '>=8'} 1186 | dependencies: 1187 | fill-range: 7.0.1 1188 | 1189 | /browserslist@4.21.10: 1190 | resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} 1191 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1192 | hasBin: true 1193 | dependencies: 1194 | caniuse-lite: 1.0.30001519 1195 | electron-to-chromium: 1.4.485 1196 | node-releases: 2.0.13 1197 | update-browserslist-db: 1.0.11(browserslist@4.21.10) 1198 | dev: false 1199 | 1200 | /buffer@6.0.3: 1201 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 1202 | dependencies: 1203 | base64-js: 1.5.1 1204 | ieee754: 1.2.1 1205 | dev: false 1206 | 1207 | /builtins@5.0.1: 1208 | resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} 1209 | dependencies: 1210 | semver: 7.5.4 1211 | dev: true 1212 | 1213 | /call-bind@1.0.2: 1214 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 1215 | dependencies: 1216 | function-bind: 1.1.1 1217 | get-intrinsic: 1.2.1 1218 | dev: true 1219 | 1220 | /callsites@3.1.0: 1221 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1222 | engines: {node: '>=6'} 1223 | 1224 | /camelcase-keys@6.2.2: 1225 | resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} 1226 | engines: {node: '>=8'} 1227 | dependencies: 1228 | camelcase: 5.3.1 1229 | map-obj: 4.3.0 1230 | quick-lru: 4.0.1 1231 | 1232 | /camelcase@5.3.1: 1233 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 1234 | engines: {node: '>=6'} 1235 | 1236 | /caniuse-lite@1.0.30001519: 1237 | resolution: {integrity: sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==} 1238 | dev: false 1239 | 1240 | /chalk@2.4.2: 1241 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 1242 | engines: {node: '>=4'} 1243 | dependencies: 1244 | ansi-styles: 3.2.1 1245 | escape-string-regexp: 1.0.5 1246 | supports-color: 5.5.0 1247 | 1248 | /chalk@4.1.2: 1249 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1250 | engines: {node: '>=10'} 1251 | dependencies: 1252 | ansi-styles: 4.3.0 1253 | supports-color: 7.2.0 1254 | dev: true 1255 | 1256 | /classnames@2.3.2: 1257 | resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} 1258 | dev: false 1259 | 1260 | /color-convert@1.9.3: 1261 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 1262 | dependencies: 1263 | color-name: 1.1.3 1264 | 1265 | /color-convert@2.0.1: 1266 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1267 | engines: {node: '>=7.0.0'} 1268 | dependencies: 1269 | color-name: 1.1.4 1270 | 1271 | /color-name@1.1.3: 1272 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 1273 | 1274 | /color-name@1.1.4: 1275 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1276 | 1277 | /colord@2.9.3: 1278 | resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} 1279 | 1280 | /colorjs.io@0.4.5: 1281 | resolution: {integrity: sha512-yCtUNCmge7llyfd/Wou19PMAcf5yC3XXhgFoAh6zsO2pGswhUPBaaUh8jzgHnXtXuZyFKzXZNAnyF5i+apICow==} 1282 | dev: true 1283 | 1284 | /concat-map@0.0.1: 1285 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1286 | 1287 | /convert-source-map@1.9.0: 1288 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 1289 | dev: false 1290 | 1291 | /cookie@0.5.0: 1292 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 1293 | engines: {node: '>= 0.6'} 1294 | dev: false 1295 | 1296 | /cosmiconfig@7.1.0: 1297 | resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} 1298 | engines: {node: '>=10'} 1299 | dependencies: 1300 | '@types/parse-json': 4.0.0 1301 | import-fresh: 3.3.0 1302 | parse-json: 5.2.0 1303 | path-type: 4.0.0 1304 | yaml: 1.10.2 1305 | 1306 | /cross-spawn@7.0.3: 1307 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1308 | engines: {node: '>= 8'} 1309 | dependencies: 1310 | path-key: 3.1.1 1311 | shebang-command: 2.0.0 1312 | which: 2.0.2 1313 | dev: true 1314 | 1315 | /css-functions-list@3.2.0: 1316 | resolution: {integrity: sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==} 1317 | engines: {node: '>=12.22'} 1318 | 1319 | /cssesc@3.0.0: 1320 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 1321 | engines: {node: '>=4'} 1322 | hasBin: true 1323 | 1324 | /csstype@3.1.2: 1325 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} 1326 | dev: true 1327 | 1328 | /data-uri-to-buffer@4.0.1: 1329 | resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} 1330 | engines: {node: '>= 12'} 1331 | dev: false 1332 | 1333 | /debug@3.2.7: 1334 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 1335 | peerDependencies: 1336 | supports-color: '*' 1337 | peerDependenciesMeta: 1338 | supports-color: 1339 | optional: true 1340 | dependencies: 1341 | ms: 2.1.3 1342 | dev: true 1343 | 1344 | /debug@4.3.4: 1345 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1346 | engines: {node: '>=6.0'} 1347 | peerDependencies: 1348 | supports-color: '*' 1349 | peerDependenciesMeta: 1350 | supports-color: 1351 | optional: true 1352 | dependencies: 1353 | ms: 2.1.2 1354 | 1355 | /decamelize-keys@1.1.1: 1356 | resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} 1357 | engines: {node: '>=0.10.0'} 1358 | dependencies: 1359 | decamelize: 1.2.0 1360 | map-obj: 1.0.1 1361 | 1362 | /decamelize@1.2.0: 1363 | resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} 1364 | engines: {node: '>=0.10.0'} 1365 | 1366 | /deep-is@0.1.4: 1367 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1368 | dev: true 1369 | 1370 | /define-properties@1.2.0: 1371 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} 1372 | engines: {node: '>= 0.4'} 1373 | dependencies: 1374 | has-property-descriptors: 1.0.0 1375 | object-keys: 1.1.1 1376 | dev: true 1377 | 1378 | /dir-glob@3.0.1: 1379 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1380 | engines: {node: '>=8'} 1381 | dependencies: 1382 | path-type: 4.0.0 1383 | 1384 | /doctrine@2.1.0: 1385 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 1386 | engines: {node: '>=0.10.0'} 1387 | dependencies: 1388 | esutils: 2.0.3 1389 | dev: true 1390 | 1391 | /doctrine@3.0.0: 1392 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1393 | engines: {node: '>=6.0.0'} 1394 | dependencies: 1395 | esutils: 2.0.3 1396 | dev: true 1397 | 1398 | /dotenv@16.3.1: 1399 | resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} 1400 | engines: {node: '>=12'} 1401 | dev: false 1402 | 1403 | /electron-to-chromium@1.4.485: 1404 | resolution: {integrity: sha512-1ndQ5IBNEnFirPwvyud69GHL+31FkE09gH/CJ6m3KCbkx3i0EVOrjwz4UNxRmN9H8OVHbC6vMRZGN1yCvjSs9w==} 1405 | dev: false 1406 | 1407 | /emoji-regex@8.0.0: 1408 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1409 | 1410 | /error-ex@1.3.2: 1411 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1412 | dependencies: 1413 | is-arrayish: 0.2.1 1414 | 1415 | /es-abstract@1.22.1: 1416 | resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} 1417 | engines: {node: '>= 0.4'} 1418 | dependencies: 1419 | array-buffer-byte-length: 1.0.0 1420 | arraybuffer.prototype.slice: 1.0.1 1421 | available-typed-arrays: 1.0.5 1422 | call-bind: 1.0.2 1423 | es-set-tostringtag: 2.0.1 1424 | es-to-primitive: 1.2.1 1425 | function.prototype.name: 1.1.5 1426 | get-intrinsic: 1.2.1 1427 | get-symbol-description: 1.0.0 1428 | globalthis: 1.0.3 1429 | gopd: 1.0.1 1430 | has: 1.0.3 1431 | has-property-descriptors: 1.0.0 1432 | has-proto: 1.0.1 1433 | has-symbols: 1.0.3 1434 | internal-slot: 1.0.5 1435 | is-array-buffer: 3.0.2 1436 | is-callable: 1.2.7 1437 | is-negative-zero: 2.0.2 1438 | is-regex: 1.1.4 1439 | is-shared-array-buffer: 1.0.2 1440 | is-string: 1.0.7 1441 | is-typed-array: 1.1.12 1442 | is-weakref: 1.0.2 1443 | object-inspect: 1.12.3 1444 | object-keys: 1.1.1 1445 | object.assign: 4.1.4 1446 | regexp.prototype.flags: 1.5.0 1447 | safe-array-concat: 1.0.0 1448 | safe-regex-test: 1.0.0 1449 | string.prototype.trim: 1.2.7 1450 | string.prototype.trimend: 1.0.6 1451 | string.prototype.trimstart: 1.0.6 1452 | typed-array-buffer: 1.0.0 1453 | typed-array-byte-length: 1.0.0 1454 | typed-array-byte-offset: 1.0.0 1455 | typed-array-length: 1.0.4 1456 | unbox-primitive: 1.0.2 1457 | which-typed-array: 1.1.11 1458 | dev: true 1459 | 1460 | /es-set-tostringtag@2.0.1: 1461 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} 1462 | engines: {node: '>= 0.4'} 1463 | dependencies: 1464 | get-intrinsic: 1.2.1 1465 | has: 1.0.3 1466 | has-tostringtag: 1.0.0 1467 | dev: true 1468 | 1469 | /es-shim-unscopables@1.0.0: 1470 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} 1471 | dependencies: 1472 | has: 1.0.3 1473 | dev: true 1474 | 1475 | /es-to-primitive@1.2.1: 1476 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 1477 | engines: {node: '>= 0.4'} 1478 | dependencies: 1479 | is-callable: 1.2.7 1480 | is-date-object: 1.0.5 1481 | is-symbol: 1.0.4 1482 | dev: true 1483 | 1484 | /esbuild-android-64@0.15.18: 1485 | resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} 1486 | engines: {node: '>=12'} 1487 | cpu: [x64] 1488 | os: [android] 1489 | requiresBuild: true 1490 | dev: true 1491 | optional: true 1492 | 1493 | /esbuild-android-arm64@0.15.18: 1494 | resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} 1495 | engines: {node: '>=12'} 1496 | cpu: [arm64] 1497 | os: [android] 1498 | requiresBuild: true 1499 | dev: true 1500 | optional: true 1501 | 1502 | /esbuild-darwin-64@0.15.18: 1503 | resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} 1504 | engines: {node: '>=12'} 1505 | cpu: [x64] 1506 | os: [darwin] 1507 | requiresBuild: true 1508 | dev: true 1509 | optional: true 1510 | 1511 | /esbuild-darwin-arm64@0.15.18: 1512 | resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} 1513 | engines: {node: '>=12'} 1514 | cpu: [arm64] 1515 | os: [darwin] 1516 | requiresBuild: true 1517 | dev: true 1518 | optional: true 1519 | 1520 | /esbuild-freebsd-64@0.15.18: 1521 | resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} 1522 | engines: {node: '>=12'} 1523 | cpu: [x64] 1524 | os: [freebsd] 1525 | requiresBuild: true 1526 | dev: true 1527 | optional: true 1528 | 1529 | /esbuild-freebsd-arm64@0.15.18: 1530 | resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} 1531 | engines: {node: '>=12'} 1532 | cpu: [arm64] 1533 | os: [freebsd] 1534 | requiresBuild: true 1535 | dev: true 1536 | optional: true 1537 | 1538 | /esbuild-linux-32@0.15.18: 1539 | resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} 1540 | engines: {node: '>=12'} 1541 | cpu: [ia32] 1542 | os: [linux] 1543 | requiresBuild: true 1544 | dev: true 1545 | optional: true 1546 | 1547 | /esbuild-linux-64@0.15.18: 1548 | resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} 1549 | engines: {node: '>=12'} 1550 | cpu: [x64] 1551 | os: [linux] 1552 | requiresBuild: true 1553 | dev: true 1554 | optional: true 1555 | 1556 | /esbuild-linux-arm64@0.15.18: 1557 | resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} 1558 | engines: {node: '>=12'} 1559 | cpu: [arm64] 1560 | os: [linux] 1561 | requiresBuild: true 1562 | dev: true 1563 | optional: true 1564 | 1565 | /esbuild-linux-arm@0.15.18: 1566 | resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} 1567 | engines: {node: '>=12'} 1568 | cpu: [arm] 1569 | os: [linux] 1570 | requiresBuild: true 1571 | dev: true 1572 | optional: true 1573 | 1574 | /esbuild-linux-mips64le@0.15.18: 1575 | resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} 1576 | engines: {node: '>=12'} 1577 | cpu: [mips64el] 1578 | os: [linux] 1579 | requiresBuild: true 1580 | dev: true 1581 | optional: true 1582 | 1583 | /esbuild-linux-ppc64le@0.15.18: 1584 | resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} 1585 | engines: {node: '>=12'} 1586 | cpu: [ppc64] 1587 | os: [linux] 1588 | requiresBuild: true 1589 | dev: true 1590 | optional: true 1591 | 1592 | /esbuild-linux-riscv64@0.15.18: 1593 | resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} 1594 | engines: {node: '>=12'} 1595 | cpu: [riscv64] 1596 | os: [linux] 1597 | requiresBuild: true 1598 | dev: true 1599 | optional: true 1600 | 1601 | /esbuild-linux-s390x@0.15.18: 1602 | resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} 1603 | engines: {node: '>=12'} 1604 | cpu: [s390x] 1605 | os: [linux] 1606 | requiresBuild: true 1607 | dev: true 1608 | optional: true 1609 | 1610 | /esbuild-netbsd-64@0.15.18: 1611 | resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} 1612 | engines: {node: '>=12'} 1613 | cpu: [x64] 1614 | os: [netbsd] 1615 | requiresBuild: true 1616 | dev: true 1617 | optional: true 1618 | 1619 | /esbuild-openbsd-64@0.15.18: 1620 | resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} 1621 | engines: {node: '>=12'} 1622 | cpu: [x64] 1623 | os: [openbsd] 1624 | requiresBuild: true 1625 | dev: true 1626 | optional: true 1627 | 1628 | /esbuild-sunos-64@0.15.18: 1629 | resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} 1630 | engines: {node: '>=12'} 1631 | cpu: [x64] 1632 | os: [sunos] 1633 | requiresBuild: true 1634 | dev: true 1635 | optional: true 1636 | 1637 | /esbuild-windows-32@0.15.18: 1638 | resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} 1639 | engines: {node: '>=12'} 1640 | cpu: [ia32] 1641 | os: [win32] 1642 | requiresBuild: true 1643 | dev: true 1644 | optional: true 1645 | 1646 | /esbuild-windows-64@0.15.18: 1647 | resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} 1648 | engines: {node: '>=12'} 1649 | cpu: [x64] 1650 | os: [win32] 1651 | requiresBuild: true 1652 | dev: true 1653 | optional: true 1654 | 1655 | /esbuild-windows-arm64@0.15.18: 1656 | resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} 1657 | engines: {node: '>=12'} 1658 | cpu: [arm64] 1659 | os: [win32] 1660 | requiresBuild: true 1661 | dev: true 1662 | optional: true 1663 | 1664 | /esbuild@0.15.18: 1665 | resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} 1666 | engines: {node: '>=12'} 1667 | hasBin: true 1668 | requiresBuild: true 1669 | optionalDependencies: 1670 | '@esbuild/android-arm': 0.15.18 1671 | '@esbuild/linux-loong64': 0.15.18 1672 | esbuild-android-64: 0.15.18 1673 | esbuild-android-arm64: 0.15.18 1674 | esbuild-darwin-64: 0.15.18 1675 | esbuild-darwin-arm64: 0.15.18 1676 | esbuild-freebsd-64: 0.15.18 1677 | esbuild-freebsd-arm64: 0.15.18 1678 | esbuild-linux-32: 0.15.18 1679 | esbuild-linux-64: 0.15.18 1680 | esbuild-linux-arm: 0.15.18 1681 | esbuild-linux-arm64: 0.15.18 1682 | esbuild-linux-mips64le: 0.15.18 1683 | esbuild-linux-ppc64le: 0.15.18 1684 | esbuild-linux-riscv64: 0.15.18 1685 | esbuild-linux-s390x: 0.15.18 1686 | esbuild-netbsd-64: 0.15.18 1687 | esbuild-openbsd-64: 0.15.18 1688 | esbuild-sunos-64: 0.15.18 1689 | esbuild-windows-32: 0.15.18 1690 | esbuild-windows-64: 0.15.18 1691 | esbuild-windows-arm64: 0.15.18 1692 | dev: true 1693 | 1694 | /esbuild@0.18.17: 1695 | resolution: {integrity: sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==} 1696 | engines: {node: '>=12'} 1697 | hasBin: true 1698 | requiresBuild: true 1699 | optionalDependencies: 1700 | '@esbuild/android-arm': 0.18.17 1701 | '@esbuild/android-arm64': 0.18.17 1702 | '@esbuild/android-x64': 0.18.17 1703 | '@esbuild/darwin-arm64': 0.18.17 1704 | '@esbuild/darwin-x64': 0.18.17 1705 | '@esbuild/freebsd-arm64': 0.18.17 1706 | '@esbuild/freebsd-x64': 0.18.17 1707 | '@esbuild/linux-arm': 0.18.17 1708 | '@esbuild/linux-arm64': 0.18.17 1709 | '@esbuild/linux-ia32': 0.18.17 1710 | '@esbuild/linux-loong64': 0.18.17 1711 | '@esbuild/linux-mips64el': 0.18.17 1712 | '@esbuild/linux-ppc64': 0.18.17 1713 | '@esbuild/linux-riscv64': 0.18.17 1714 | '@esbuild/linux-s390x': 0.18.17 1715 | '@esbuild/linux-x64': 0.18.17 1716 | '@esbuild/netbsd-x64': 0.18.17 1717 | '@esbuild/openbsd-x64': 0.18.17 1718 | '@esbuild/sunos-x64': 0.18.17 1719 | '@esbuild/win32-arm64': 0.18.17 1720 | '@esbuild/win32-ia32': 0.18.17 1721 | '@esbuild/win32-x64': 0.18.17 1722 | dev: false 1723 | 1724 | /escalade@3.1.1: 1725 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1726 | engines: {node: '>=6'} 1727 | dev: false 1728 | 1729 | /escape-string-regexp@1.0.5: 1730 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1731 | engines: {node: '>=0.8.0'} 1732 | 1733 | /escape-string-regexp@4.0.0: 1734 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1735 | engines: {node: '>=10'} 1736 | dev: true 1737 | 1738 | /eslint-config-standard@17.1.0(eslint-plugin-import@2.28.0)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.46.0): 1739 | resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} 1740 | engines: {node: '>=12.0.0'} 1741 | peerDependencies: 1742 | eslint: ^8.0.1 1743 | eslint-plugin-import: ^2.25.2 1744 | eslint-plugin-n: '^15.0.0 || ^16.0.0 ' 1745 | eslint-plugin-promise: ^6.0.0 1746 | dependencies: 1747 | eslint: 8.46.0 1748 | eslint-plugin-import: 2.28.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0) 1749 | eslint-plugin-n: 15.7.0(eslint@8.46.0) 1750 | eslint-plugin-promise: 6.1.1(eslint@8.46.0) 1751 | dev: true 1752 | 1753 | /eslint-import-resolver-node@0.3.7: 1754 | resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} 1755 | dependencies: 1756 | debug: 3.2.7 1757 | is-core-module: 2.12.1 1758 | resolve: 1.22.3 1759 | transitivePeerDependencies: 1760 | - supports-color 1761 | dev: true 1762 | 1763 | /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint@8.46.0): 1764 | resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} 1765 | engines: {node: '>=4'} 1766 | peerDependencies: 1767 | '@typescript-eslint/parser': '*' 1768 | eslint: '*' 1769 | eslint-import-resolver-node: '*' 1770 | eslint-import-resolver-typescript: '*' 1771 | eslint-import-resolver-webpack: '*' 1772 | peerDependenciesMeta: 1773 | '@typescript-eslint/parser': 1774 | optional: true 1775 | eslint: 1776 | optional: true 1777 | eslint-import-resolver-node: 1778 | optional: true 1779 | eslint-import-resolver-typescript: 1780 | optional: true 1781 | eslint-import-resolver-webpack: 1782 | optional: true 1783 | dependencies: 1784 | '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 1785 | debug: 3.2.7 1786 | eslint: 8.46.0 1787 | eslint-import-resolver-node: 0.3.7 1788 | transitivePeerDependencies: 1789 | - supports-color 1790 | dev: true 1791 | 1792 | /eslint-plugin-es@4.1.0(eslint@8.46.0): 1793 | resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} 1794 | engines: {node: '>=8.10.0'} 1795 | peerDependencies: 1796 | eslint: '>=4.19.1' 1797 | dependencies: 1798 | eslint: 8.46.0 1799 | eslint-utils: 2.1.0 1800 | regexpp: 3.2.0 1801 | dev: true 1802 | 1803 | /eslint-plugin-import@2.28.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0): 1804 | resolution: {integrity: sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==} 1805 | engines: {node: '>=4'} 1806 | peerDependencies: 1807 | '@typescript-eslint/parser': '*' 1808 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 1809 | peerDependenciesMeta: 1810 | '@typescript-eslint/parser': 1811 | optional: true 1812 | dependencies: 1813 | '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 1814 | array-includes: 3.1.6 1815 | array.prototype.findlastindex: 1.2.2 1816 | array.prototype.flat: 1.3.1 1817 | array.prototype.flatmap: 1.3.1 1818 | debug: 3.2.7 1819 | doctrine: 2.1.0 1820 | eslint: 8.46.0 1821 | eslint-import-resolver-node: 0.3.7 1822 | eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint@8.46.0) 1823 | has: 1.0.3 1824 | is-core-module: 2.12.1 1825 | is-glob: 4.0.3 1826 | minimatch: 3.1.2 1827 | object.fromentries: 2.0.6 1828 | object.groupby: 1.0.0 1829 | object.values: 1.1.6 1830 | resolve: 1.22.3 1831 | semver: 6.3.1 1832 | tsconfig-paths: 3.14.2 1833 | transitivePeerDependencies: 1834 | - eslint-import-resolver-typescript 1835 | - eslint-import-resolver-webpack 1836 | - supports-color 1837 | dev: true 1838 | 1839 | /eslint-plugin-n@15.7.0(eslint@8.46.0): 1840 | resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} 1841 | engines: {node: '>=12.22.0'} 1842 | peerDependencies: 1843 | eslint: '>=7.0.0' 1844 | dependencies: 1845 | builtins: 5.0.1 1846 | eslint: 8.46.0 1847 | eslint-plugin-es: 4.1.0(eslint@8.46.0) 1848 | eslint-utils: 3.0.0(eslint@8.46.0) 1849 | ignore: 5.2.4 1850 | is-core-module: 2.12.1 1851 | minimatch: 3.1.2 1852 | resolve: 1.22.2 1853 | semver: 7.5.4 1854 | dev: true 1855 | 1856 | /eslint-plugin-prefer-let@3.0.1: 1857 | resolution: {integrity: sha512-vbznkkBSXB63d4o1o0NIm5C2ey3V5wKr/25dAvPdydQXdowAcnr69cbLgxd2YAG81IV5eddCO55Lp6gL7wSE4w==} 1858 | engines: {node: '>=0.10.0'} 1859 | dependencies: 1860 | requireindex: 1.2.0 1861 | dev: true 1862 | 1863 | /eslint-plugin-promise@6.1.1(eslint@8.46.0): 1864 | resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} 1865 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1866 | peerDependencies: 1867 | eslint: ^7.0.0 || ^8.0.0 1868 | dependencies: 1869 | eslint: 8.46.0 1870 | dev: true 1871 | 1872 | /eslint-scope@5.1.1: 1873 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1874 | engines: {node: '>=8.0.0'} 1875 | dependencies: 1876 | esrecurse: 4.3.0 1877 | estraverse: 4.3.0 1878 | dev: true 1879 | 1880 | /eslint-scope@7.2.2: 1881 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1882 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1883 | dependencies: 1884 | esrecurse: 4.3.0 1885 | estraverse: 5.3.0 1886 | dev: true 1887 | 1888 | /eslint-utils@2.1.0: 1889 | resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} 1890 | engines: {node: '>=6'} 1891 | dependencies: 1892 | eslint-visitor-keys: 1.3.0 1893 | dev: true 1894 | 1895 | /eslint-utils@3.0.0(eslint@8.46.0): 1896 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 1897 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 1898 | peerDependencies: 1899 | eslint: '>=5' 1900 | dependencies: 1901 | eslint: 8.46.0 1902 | eslint-visitor-keys: 2.1.0 1903 | dev: true 1904 | 1905 | /eslint-visitor-keys@1.3.0: 1906 | resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} 1907 | engines: {node: '>=4'} 1908 | dev: true 1909 | 1910 | /eslint-visitor-keys@2.1.0: 1911 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 1912 | engines: {node: '>=10'} 1913 | dev: true 1914 | 1915 | /eslint-visitor-keys@3.4.2: 1916 | resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==} 1917 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1918 | dev: true 1919 | 1920 | /eslint@8.46.0: 1921 | resolution: {integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==} 1922 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1923 | hasBin: true 1924 | dependencies: 1925 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) 1926 | '@eslint-community/regexpp': 4.6.2 1927 | '@eslint/eslintrc': 2.1.1 1928 | '@eslint/js': 8.46.0 1929 | '@humanwhocodes/config-array': 0.11.10 1930 | '@humanwhocodes/module-importer': 1.0.1 1931 | '@nodelib/fs.walk': 1.2.8 1932 | ajv: 6.12.6 1933 | chalk: 4.1.2 1934 | cross-spawn: 7.0.3 1935 | debug: 4.3.4 1936 | doctrine: 3.0.0 1937 | escape-string-regexp: 4.0.0 1938 | eslint-scope: 7.2.2 1939 | eslint-visitor-keys: 3.4.2 1940 | espree: 9.6.1 1941 | esquery: 1.5.0 1942 | esutils: 2.0.3 1943 | fast-deep-equal: 3.1.3 1944 | file-entry-cache: 6.0.1 1945 | find-up: 5.0.0 1946 | glob-parent: 6.0.2 1947 | globals: 13.20.0 1948 | graphemer: 1.4.0 1949 | ignore: 5.2.4 1950 | imurmurhash: 0.1.4 1951 | is-glob: 4.0.3 1952 | is-path-inside: 3.0.3 1953 | js-yaml: 4.1.0 1954 | json-stable-stringify-without-jsonify: 1.0.1 1955 | levn: 0.4.1 1956 | lodash.merge: 4.6.2 1957 | minimatch: 3.1.2 1958 | natural-compare: 1.4.0 1959 | optionator: 0.9.3 1960 | strip-ansi: 6.0.1 1961 | text-table: 0.2.0 1962 | transitivePeerDependencies: 1963 | - supports-color 1964 | dev: true 1965 | 1966 | /espree@9.6.1: 1967 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1968 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1969 | dependencies: 1970 | acorn: 8.10.0 1971 | acorn-jsx: 5.3.2(acorn@8.10.0) 1972 | eslint-visitor-keys: 3.4.2 1973 | dev: true 1974 | 1975 | /esquery@1.5.0: 1976 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1977 | engines: {node: '>=0.10'} 1978 | dependencies: 1979 | estraverse: 5.3.0 1980 | dev: true 1981 | 1982 | /esrecurse@4.3.0: 1983 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1984 | engines: {node: '>=4.0'} 1985 | dependencies: 1986 | estraverse: 5.3.0 1987 | dev: true 1988 | 1989 | /estraverse@4.3.0: 1990 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1991 | engines: {node: '>=4.0'} 1992 | dev: true 1993 | 1994 | /estraverse@5.3.0: 1995 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1996 | engines: {node: '>=4.0'} 1997 | dev: true 1998 | 1999 | /esutils@2.0.3: 2000 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 2001 | engines: {node: '>=0.10.0'} 2002 | dev: true 2003 | 2004 | /event-target-shim@5.0.1: 2005 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 2006 | engines: {node: '>=6'} 2007 | dev: false 2008 | 2009 | /events@3.3.0: 2010 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 2011 | engines: {node: '>=0.8.x'} 2012 | dev: false 2013 | 2014 | /fast-deep-equal@3.1.3: 2015 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 2016 | 2017 | /fast-glob@3.3.1: 2018 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} 2019 | engines: {node: '>=8.6.0'} 2020 | dependencies: 2021 | '@nodelib/fs.stat': 2.0.5 2022 | '@nodelib/fs.walk': 1.2.8 2023 | glob-parent: 5.1.2 2024 | merge2: 1.4.1 2025 | micromatch: 4.0.5 2026 | 2027 | /fast-json-stable-stringify@2.1.0: 2028 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 2029 | 2030 | /fast-levenshtein@2.0.6: 2031 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 2032 | dev: true 2033 | 2034 | /fast-redact@3.3.0: 2035 | resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} 2036 | engines: {node: '>=6'} 2037 | dev: false 2038 | 2039 | /fastest-levenshtein@1.0.16: 2040 | resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} 2041 | engines: {node: '>= 4.9.1'} 2042 | 2043 | /fastq@1.15.0: 2044 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 2045 | dependencies: 2046 | reusify: 1.0.4 2047 | 2048 | /fetch-blob@3.2.0: 2049 | resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} 2050 | engines: {node: ^12.20 || >= 14.13} 2051 | dependencies: 2052 | node-domexception: 1.0.0 2053 | web-streams-polyfill: 3.2.1 2054 | dev: false 2055 | 2056 | /file-entry-cache@6.0.1: 2057 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 2058 | engines: {node: ^10.12.0 || >=12.0.0} 2059 | dependencies: 2060 | flat-cache: 3.0.4 2061 | 2062 | /fill-range@7.0.1: 2063 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 2064 | engines: {node: '>=8'} 2065 | dependencies: 2066 | to-regex-range: 5.0.1 2067 | 2068 | /find-up@4.1.0: 2069 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 2070 | engines: {node: '>=8'} 2071 | dependencies: 2072 | locate-path: 5.0.0 2073 | path-exists: 4.0.0 2074 | 2075 | /find-up@5.0.0: 2076 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 2077 | engines: {node: '>=10'} 2078 | dependencies: 2079 | locate-path: 6.0.0 2080 | path-exists: 4.0.0 2081 | dev: true 2082 | 2083 | /flat-cache@3.0.4: 2084 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 2085 | engines: {node: ^10.12.0 || >=12.0.0} 2086 | dependencies: 2087 | flatted: 3.2.7 2088 | rimraf: 3.0.2 2089 | 2090 | /flatted@3.2.7: 2091 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 2092 | 2093 | /for-each@0.3.3: 2094 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 2095 | dependencies: 2096 | is-callable: 1.2.7 2097 | dev: true 2098 | 2099 | /formdata-polyfill@4.0.10: 2100 | resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} 2101 | engines: {node: '>=12.20.0'} 2102 | dependencies: 2103 | fetch-blob: 3.2.0 2104 | dev: false 2105 | 2106 | /fraction.js@4.2.0: 2107 | resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} 2108 | dev: false 2109 | 2110 | /fs.realpath@1.0.0: 2111 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 2112 | 2113 | /fsevents@2.3.2: 2114 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 2115 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 2116 | os: [darwin] 2117 | requiresBuild: true 2118 | dev: false 2119 | optional: true 2120 | 2121 | /function-bind@1.1.1: 2122 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 2123 | 2124 | /function.prototype.name@1.1.5: 2125 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} 2126 | engines: {node: '>= 0.4'} 2127 | dependencies: 2128 | call-bind: 1.0.2 2129 | define-properties: 1.2.0 2130 | es-abstract: 1.22.1 2131 | functions-have-names: 1.2.3 2132 | dev: true 2133 | 2134 | /functions-have-names@1.2.3: 2135 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 2136 | dev: true 2137 | 2138 | /gensync@1.0.0-beta.2: 2139 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 2140 | engines: {node: '>=6.9.0'} 2141 | dev: false 2142 | 2143 | /get-intrinsic@1.2.1: 2144 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} 2145 | dependencies: 2146 | function-bind: 1.1.1 2147 | has: 1.0.3 2148 | has-proto: 1.0.1 2149 | has-symbols: 1.0.3 2150 | dev: true 2151 | 2152 | /get-symbol-description@1.0.0: 2153 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 2154 | engines: {node: '>= 0.4'} 2155 | dependencies: 2156 | call-bind: 1.0.2 2157 | get-intrinsic: 1.2.1 2158 | dev: true 2159 | 2160 | /glob-parent@5.1.2: 2161 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 2162 | engines: {node: '>= 6'} 2163 | dependencies: 2164 | is-glob: 4.0.3 2165 | 2166 | /glob-parent@6.0.2: 2167 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 2168 | engines: {node: '>=10.13.0'} 2169 | dependencies: 2170 | is-glob: 4.0.3 2171 | dev: true 2172 | 2173 | /glob@7.2.3: 2174 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 2175 | dependencies: 2176 | fs.realpath: 1.0.0 2177 | inflight: 1.0.6 2178 | inherits: 2.0.4 2179 | minimatch: 3.1.2 2180 | once: 1.4.0 2181 | path-is-absolute: 1.0.1 2182 | 2183 | /global-modules@2.0.0: 2184 | resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} 2185 | engines: {node: '>=6'} 2186 | dependencies: 2187 | global-prefix: 3.0.0 2188 | 2189 | /global-prefix@3.0.0: 2190 | resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} 2191 | engines: {node: '>=6'} 2192 | dependencies: 2193 | ini: 1.3.8 2194 | kind-of: 6.0.3 2195 | which: 1.3.1 2196 | 2197 | /globals@11.12.0: 2198 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 2199 | engines: {node: '>=4'} 2200 | dev: false 2201 | 2202 | /globals@13.20.0: 2203 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} 2204 | engines: {node: '>=8'} 2205 | dependencies: 2206 | type-fest: 0.20.2 2207 | dev: true 2208 | 2209 | /globalthis@1.0.3: 2210 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 2211 | engines: {node: '>= 0.4'} 2212 | dependencies: 2213 | define-properties: 1.2.0 2214 | dev: true 2215 | 2216 | /globby@11.1.0: 2217 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 2218 | engines: {node: '>=10'} 2219 | dependencies: 2220 | array-union: 2.1.0 2221 | dir-glob: 3.0.1 2222 | fast-glob: 3.3.1 2223 | ignore: 5.2.4 2224 | merge2: 1.4.1 2225 | slash: 3.0.0 2226 | 2227 | /globjoin@0.1.4: 2228 | resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} 2229 | 2230 | /gopd@1.0.1: 2231 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 2232 | dependencies: 2233 | get-intrinsic: 1.2.1 2234 | dev: true 2235 | 2236 | /graphemer@1.4.0: 2237 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 2238 | dev: true 2239 | 2240 | /hard-rejection@2.1.0: 2241 | resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} 2242 | engines: {node: '>=6'} 2243 | 2244 | /has-bigints@1.0.2: 2245 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 2246 | dev: true 2247 | 2248 | /has-flag@3.0.0: 2249 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 2250 | engines: {node: '>=4'} 2251 | 2252 | /has-flag@4.0.0: 2253 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 2254 | engines: {node: '>=8'} 2255 | 2256 | /has-property-descriptors@1.0.0: 2257 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 2258 | dependencies: 2259 | get-intrinsic: 1.2.1 2260 | dev: true 2261 | 2262 | /has-proto@1.0.1: 2263 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 2264 | engines: {node: '>= 0.4'} 2265 | dev: true 2266 | 2267 | /has-symbols@1.0.3: 2268 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 2269 | engines: {node: '>= 0.4'} 2270 | dev: true 2271 | 2272 | /has-tostringtag@1.0.0: 2273 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 2274 | engines: {node: '>= 0.4'} 2275 | dependencies: 2276 | has-symbols: 1.0.3 2277 | dev: true 2278 | 2279 | /has@1.0.3: 2280 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 2281 | engines: {node: '>= 0.4.0'} 2282 | dependencies: 2283 | function-bind: 1.1.1 2284 | 2285 | /hosted-git-info@2.8.9: 2286 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 2287 | 2288 | /hosted-git-info@4.1.0: 2289 | resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} 2290 | engines: {node: '>=10'} 2291 | dependencies: 2292 | lru-cache: 6.0.0 2293 | 2294 | /html-tags@3.3.1: 2295 | resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} 2296 | engines: {node: '>=8'} 2297 | 2298 | /ieee754@1.2.1: 2299 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 2300 | dev: false 2301 | 2302 | /ignore@5.2.4: 2303 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 2304 | engines: {node: '>= 4'} 2305 | 2306 | /import-fresh@3.3.0: 2307 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 2308 | engines: {node: '>=6'} 2309 | dependencies: 2310 | parent-module: 1.0.1 2311 | resolve-from: 4.0.0 2312 | 2313 | /import-lazy@4.0.0: 2314 | resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} 2315 | engines: {node: '>=8'} 2316 | 2317 | /imurmurhash@0.1.4: 2318 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 2319 | engines: {node: '>=0.8.19'} 2320 | 2321 | /indent-string@4.0.0: 2322 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 2323 | engines: {node: '>=8'} 2324 | 2325 | /inflight@1.0.6: 2326 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 2327 | dependencies: 2328 | once: 1.4.0 2329 | wrappy: 1.0.2 2330 | 2331 | /inherits@2.0.4: 2332 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 2333 | 2334 | /ini@1.3.8: 2335 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 2336 | 2337 | /internal-slot@1.0.5: 2338 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} 2339 | engines: {node: '>= 0.4'} 2340 | dependencies: 2341 | get-intrinsic: 1.2.1 2342 | has: 1.0.3 2343 | side-channel: 1.0.4 2344 | dev: true 2345 | 2346 | /ip@1.1.8: 2347 | resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} 2348 | dev: false 2349 | 2350 | /is-array-buffer@3.0.2: 2351 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 2352 | dependencies: 2353 | call-bind: 1.0.2 2354 | get-intrinsic: 1.2.1 2355 | is-typed-array: 1.1.12 2356 | dev: true 2357 | 2358 | /is-arrayish@0.2.1: 2359 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 2360 | 2361 | /is-bigint@1.0.4: 2362 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 2363 | dependencies: 2364 | has-bigints: 1.0.2 2365 | dev: true 2366 | 2367 | /is-boolean-object@1.1.2: 2368 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 2369 | engines: {node: '>= 0.4'} 2370 | dependencies: 2371 | call-bind: 1.0.2 2372 | has-tostringtag: 1.0.0 2373 | dev: true 2374 | 2375 | /is-callable@1.2.7: 2376 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 2377 | engines: {node: '>= 0.4'} 2378 | dev: true 2379 | 2380 | /is-core-module@2.12.1: 2381 | resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} 2382 | dependencies: 2383 | has: 1.0.3 2384 | 2385 | /is-date-object@1.0.5: 2386 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 2387 | engines: {node: '>= 0.4'} 2388 | dependencies: 2389 | has-tostringtag: 1.0.0 2390 | dev: true 2391 | 2392 | /is-extglob@2.1.1: 2393 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 2394 | engines: {node: '>=0.10.0'} 2395 | 2396 | /is-fullwidth-code-point@3.0.0: 2397 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 2398 | engines: {node: '>=8'} 2399 | 2400 | /is-glob@4.0.3: 2401 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 2402 | engines: {node: '>=0.10.0'} 2403 | dependencies: 2404 | is-extglob: 2.1.1 2405 | 2406 | /is-negative-zero@2.0.2: 2407 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 2408 | engines: {node: '>= 0.4'} 2409 | dev: true 2410 | 2411 | /is-number-object@1.0.7: 2412 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 2413 | engines: {node: '>= 0.4'} 2414 | dependencies: 2415 | has-tostringtag: 1.0.0 2416 | dev: true 2417 | 2418 | /is-number@7.0.0: 2419 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 2420 | engines: {node: '>=0.12.0'} 2421 | 2422 | /is-path-inside@3.0.3: 2423 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 2424 | engines: {node: '>=8'} 2425 | dev: true 2426 | 2427 | /is-plain-obj@1.1.0: 2428 | resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} 2429 | engines: {node: '>=0.10.0'} 2430 | 2431 | /is-plain-object@5.0.0: 2432 | resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} 2433 | engines: {node: '>=0.10.0'} 2434 | 2435 | /is-regex@1.1.4: 2436 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 2437 | engines: {node: '>= 0.4'} 2438 | dependencies: 2439 | call-bind: 1.0.2 2440 | has-tostringtag: 1.0.0 2441 | dev: true 2442 | 2443 | /is-shared-array-buffer@1.0.2: 2444 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 2445 | dependencies: 2446 | call-bind: 1.0.2 2447 | dev: true 2448 | 2449 | /is-string@1.0.7: 2450 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 2451 | engines: {node: '>= 0.4'} 2452 | dependencies: 2453 | has-tostringtag: 1.0.0 2454 | dev: true 2455 | 2456 | /is-symbol@1.0.4: 2457 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 2458 | engines: {node: '>= 0.4'} 2459 | dependencies: 2460 | has-symbols: 1.0.3 2461 | dev: true 2462 | 2463 | /is-typed-array@1.1.12: 2464 | resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} 2465 | engines: {node: '>= 0.4'} 2466 | dependencies: 2467 | which-typed-array: 1.1.11 2468 | dev: true 2469 | 2470 | /is-weakref@1.0.2: 2471 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 2472 | dependencies: 2473 | call-bind: 1.0.2 2474 | dev: true 2475 | 2476 | /isarray@2.0.5: 2477 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 2478 | dev: true 2479 | 2480 | /isexe@2.0.0: 2481 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 2482 | 2483 | /js-tokens@4.0.0: 2484 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 2485 | 2486 | /js-yaml@4.1.0: 2487 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 2488 | hasBin: true 2489 | dependencies: 2490 | argparse: 2.0.1 2491 | dev: true 2492 | 2493 | /jsesc@2.5.2: 2494 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 2495 | engines: {node: '>=4'} 2496 | hasBin: true 2497 | dev: false 2498 | 2499 | /json-parse-even-better-errors@2.3.1: 2500 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 2501 | 2502 | /json-schema-traverse@0.4.1: 2503 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 2504 | dev: true 2505 | 2506 | /json-schema-traverse@1.0.0: 2507 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 2508 | 2509 | /json-stable-stringify-without-jsonify@1.0.1: 2510 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 2511 | dev: true 2512 | 2513 | /json5@1.0.2: 2514 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 2515 | hasBin: true 2516 | dependencies: 2517 | minimist: 1.2.8 2518 | dev: true 2519 | 2520 | /json5@2.2.3: 2521 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 2522 | engines: {node: '>=6'} 2523 | hasBin: true 2524 | dev: false 2525 | 2526 | /jsonparse@1.3.1: 2527 | resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} 2528 | engines: {'0': node >= 0.2.0} 2529 | dev: false 2530 | 2531 | /kind-of@6.0.3: 2532 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 2533 | engines: {node: '>=0.10.0'} 2534 | 2535 | /known-css-properties@0.26.0: 2536 | resolution: {integrity: sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==} 2537 | 2538 | /levn@0.4.1: 2539 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 2540 | engines: {node: '>= 0.8.0'} 2541 | dependencies: 2542 | prelude-ls: 1.2.1 2543 | type-check: 0.4.0 2544 | dev: true 2545 | 2546 | /lines-and-columns@1.2.4: 2547 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 2548 | 2549 | /locate-path@5.0.0: 2550 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 2551 | engines: {node: '>=8'} 2552 | dependencies: 2553 | p-locate: 4.1.0 2554 | 2555 | /locate-path@6.0.0: 2556 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 2557 | engines: {node: '>=10'} 2558 | dependencies: 2559 | p-locate: 5.0.0 2560 | dev: true 2561 | 2562 | /lodash.merge@4.6.2: 2563 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 2564 | dev: true 2565 | 2566 | /lodash.truncate@4.4.2: 2567 | resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} 2568 | 2569 | /loose-envify@1.4.0: 2570 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 2571 | hasBin: true 2572 | dependencies: 2573 | js-tokens: 4.0.0 2574 | dev: false 2575 | 2576 | /lru-cache@5.1.1: 2577 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 2578 | dependencies: 2579 | yallist: 3.1.1 2580 | dev: false 2581 | 2582 | /lru-cache@6.0.0: 2583 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 2584 | engines: {node: '>=10'} 2585 | dependencies: 2586 | yallist: 4.0.0 2587 | 2588 | /magic-string@0.27.0: 2589 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} 2590 | engines: {node: '>=12'} 2591 | dependencies: 2592 | '@jridgewell/sourcemap-codec': 1.4.15 2593 | dev: false 2594 | 2595 | /map-obj@1.0.1: 2596 | resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} 2597 | engines: {node: '>=0.10.0'} 2598 | 2599 | /map-obj@4.3.0: 2600 | resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} 2601 | engines: {node: '>=8'} 2602 | 2603 | /mathml-tag-names@2.1.3: 2604 | resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} 2605 | 2606 | /meow@9.0.0: 2607 | resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==} 2608 | engines: {node: '>=10'} 2609 | dependencies: 2610 | '@types/minimist': 1.2.2 2611 | camelcase-keys: 6.2.2 2612 | decamelize: 1.2.0 2613 | decamelize-keys: 1.1.1 2614 | hard-rejection: 2.1.0 2615 | minimist-options: 4.1.0 2616 | normalize-package-data: 3.0.3 2617 | read-pkg-up: 7.0.1 2618 | redent: 3.0.0 2619 | trim-newlines: 3.0.1 2620 | type-fest: 0.18.1 2621 | yargs-parser: 20.2.9 2622 | 2623 | /merge2@1.4.1: 2624 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 2625 | engines: {node: '>= 8'} 2626 | 2627 | /micromatch@4.0.5: 2628 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 2629 | engines: {node: '>=8.6'} 2630 | dependencies: 2631 | braces: 3.0.2 2632 | picomatch: 2.3.1 2633 | 2634 | /min-indent@1.0.1: 2635 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 2636 | engines: {node: '>=4'} 2637 | 2638 | /minimatch@3.1.2: 2639 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2640 | dependencies: 2641 | brace-expansion: 1.1.11 2642 | 2643 | /minimist-options@4.1.0: 2644 | resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} 2645 | engines: {node: '>= 6'} 2646 | dependencies: 2647 | arrify: 1.0.1 2648 | is-plain-obj: 1.1.0 2649 | kind-of: 6.0.3 2650 | 2651 | /minimist@1.2.8: 2652 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 2653 | dev: true 2654 | 2655 | /ms@2.1.2: 2656 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2657 | 2658 | /ms@2.1.3: 2659 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 2660 | dev: true 2661 | 2662 | /nanodelay@2.0.2: 2663 | resolution: {integrity: sha512-6AS5aCSXsjoxq2Jr9CdaAeT60yoYDOTp6po9ziqeOeY6vf6uTEHYSqWql6EFILrM3fEfXgkZ4KqE9L0rTm/wlA==} 2664 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 2665 | dev: false 2666 | 2667 | /nanoevents@7.0.1: 2668 | resolution: {integrity: sha512-o6lpKiCxLeijK4hgsqfR6CNToPyRU3keKyyI6uwuHRvpRTbZ0wXw51WRgyldVugZqoJfkGFrjrIenYH3bfEO3Q==} 2669 | engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} 2670 | dev: false 2671 | 2672 | /nanoevents@8.0.0: 2673 | resolution: {integrity: sha512-bYYwNCdNc5ea6/Lwh1uioU1/7aaKa3EPmNQ2weTm8PWSpbWrsaWHePe0Zq4SF+D3F3JX3cn+QdktOPCf1meOqw==} 2674 | engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} 2675 | dev: false 2676 | 2677 | /nanoid@3.3.6: 2678 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 2679 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2680 | hasBin: true 2681 | 2682 | /nanoid@4.0.2: 2683 | resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} 2684 | engines: {node: ^14 || ^16 || >=18} 2685 | hasBin: true 2686 | dev: false 2687 | 2688 | /nanostores@0.7.4: 2689 | resolution: {integrity: sha512-MBeUVt7NBcXqh7AGT+KSr3O0X/995CZsvcP2QEMP+PXFwb07qv3Vjyq+EX0yS8f12Vv3Tn2g/BvK/OZoMhJlOQ==} 2690 | engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} 2691 | dev: false 2692 | 2693 | /natural-compare-lite@1.4.0: 2694 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 2695 | dev: true 2696 | 2697 | /natural-compare@1.4.0: 2698 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 2699 | dev: true 2700 | 2701 | /node-domexception@1.0.0: 2702 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} 2703 | engines: {node: '>=10.5.0'} 2704 | dev: false 2705 | 2706 | /node-fetch@3.3.2: 2707 | resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} 2708 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2709 | dependencies: 2710 | data-uri-to-buffer: 4.0.1 2711 | fetch-blob: 3.2.0 2712 | formdata-polyfill: 4.0.10 2713 | dev: false 2714 | 2715 | /node-releases@2.0.13: 2716 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} 2717 | dev: false 2718 | 2719 | /normalize-package-data@2.5.0: 2720 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 2721 | dependencies: 2722 | hosted-git-info: 2.8.9 2723 | resolve: 1.22.2 2724 | semver: 5.7.2 2725 | validate-npm-package-license: 3.0.4 2726 | 2727 | /normalize-package-data@3.0.3: 2728 | resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} 2729 | engines: {node: '>=10'} 2730 | dependencies: 2731 | hosted-git-info: 4.1.0 2732 | is-core-module: 2.12.1 2733 | semver: 7.5.4 2734 | validate-npm-package-license: 3.0.4 2735 | 2736 | /normalize-path@3.0.0: 2737 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2738 | engines: {node: '>=0.10.0'} 2739 | 2740 | /normalize-range@0.1.2: 2741 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 2742 | engines: {node: '>=0.10.0'} 2743 | dev: false 2744 | 2745 | /object-inspect@1.12.3: 2746 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 2747 | dev: true 2748 | 2749 | /object-keys@1.1.1: 2750 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 2751 | engines: {node: '>= 0.4'} 2752 | dev: true 2753 | 2754 | /object.assign@4.1.4: 2755 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} 2756 | engines: {node: '>= 0.4'} 2757 | dependencies: 2758 | call-bind: 1.0.2 2759 | define-properties: 1.2.0 2760 | has-symbols: 1.0.3 2761 | object-keys: 1.1.1 2762 | dev: true 2763 | 2764 | /object.fromentries@2.0.6: 2765 | resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} 2766 | engines: {node: '>= 0.4'} 2767 | dependencies: 2768 | call-bind: 1.0.2 2769 | define-properties: 1.2.0 2770 | es-abstract: 1.22.1 2771 | dev: true 2772 | 2773 | /object.groupby@1.0.0: 2774 | resolution: {integrity: sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==} 2775 | dependencies: 2776 | call-bind: 1.0.2 2777 | define-properties: 1.2.0 2778 | es-abstract: 1.22.1 2779 | get-intrinsic: 1.2.1 2780 | dev: true 2781 | 2782 | /object.values@1.1.6: 2783 | resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} 2784 | engines: {node: '>= 0.4'} 2785 | dependencies: 2786 | call-bind: 1.0.2 2787 | define-properties: 1.2.0 2788 | es-abstract: 1.22.1 2789 | dev: true 2790 | 2791 | /on-exit-leak-free@2.1.0: 2792 | resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==} 2793 | dev: false 2794 | 2795 | /once@1.4.0: 2796 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2797 | dependencies: 2798 | wrappy: 1.0.2 2799 | 2800 | /optionator@0.9.3: 2801 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 2802 | engines: {node: '>= 0.8.0'} 2803 | dependencies: 2804 | '@aashutoshrathi/word-wrap': 1.2.6 2805 | deep-is: 0.1.4 2806 | fast-levenshtein: 2.0.6 2807 | levn: 0.4.1 2808 | prelude-ls: 1.2.1 2809 | type-check: 0.4.0 2810 | dev: true 2811 | 2812 | /p-limit@2.3.0: 2813 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 2814 | engines: {node: '>=6'} 2815 | dependencies: 2816 | p-try: 2.2.0 2817 | 2818 | /p-limit@3.1.0: 2819 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2820 | engines: {node: '>=10'} 2821 | dependencies: 2822 | yocto-queue: 0.1.0 2823 | dev: true 2824 | 2825 | /p-locate@4.1.0: 2826 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 2827 | engines: {node: '>=8'} 2828 | dependencies: 2829 | p-limit: 2.3.0 2830 | 2831 | /p-locate@5.0.0: 2832 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2833 | engines: {node: '>=10'} 2834 | dependencies: 2835 | p-limit: 3.1.0 2836 | dev: true 2837 | 2838 | /p-try@2.2.0: 2839 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 2840 | engines: {node: '>=6'} 2841 | 2842 | /parent-module@1.0.1: 2843 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2844 | engines: {node: '>=6'} 2845 | dependencies: 2846 | callsites: 3.1.0 2847 | 2848 | /parse-json@5.2.0: 2849 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 2850 | engines: {node: '>=8'} 2851 | dependencies: 2852 | '@babel/code-frame': 7.22.5 2853 | error-ex: 1.3.2 2854 | json-parse-even-better-errors: 2.3.1 2855 | lines-and-columns: 1.2.4 2856 | 2857 | /path-exists@4.0.0: 2858 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2859 | engines: {node: '>=8'} 2860 | 2861 | /path-is-absolute@1.0.1: 2862 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2863 | engines: {node: '>=0.10.0'} 2864 | 2865 | /path-key@3.1.1: 2866 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2867 | engines: {node: '>=8'} 2868 | dev: true 2869 | 2870 | /path-parse@1.0.7: 2871 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2872 | 2873 | /path-type@4.0.0: 2874 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2875 | engines: {node: '>=8'} 2876 | 2877 | /picocolors@1.0.0: 2878 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2879 | 2880 | /picomatch@2.3.1: 2881 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2882 | engines: {node: '>=8.6'} 2883 | 2884 | /pino-abstract-transport@1.0.0: 2885 | resolution: {integrity: sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==} 2886 | dependencies: 2887 | readable-stream: 4.4.2 2888 | split2: 4.2.0 2889 | dev: false 2890 | 2891 | /pino-std-serializers@6.2.2: 2892 | resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} 2893 | dev: false 2894 | 2895 | /pino@8.15.0: 2896 | resolution: {integrity: sha512-olUADJByk4twxccmAxb1RiGKOSvddHugCV3wkqjyv+3Sooa2KLrmXrKEWOKi0XPCLasRR5jBXxioE1jxUa4KzQ==} 2897 | hasBin: true 2898 | dependencies: 2899 | atomic-sleep: 1.0.0 2900 | fast-redact: 3.3.0 2901 | on-exit-leak-free: 2.1.0 2902 | pino-abstract-transport: 1.0.0 2903 | pino-std-serializers: 6.2.2 2904 | process-warning: 2.2.0 2905 | quick-format-unescaped: 4.0.4 2906 | real-require: 0.2.0 2907 | safe-stable-stringify: 2.4.3 2908 | sonic-boom: 3.3.0 2909 | thread-stream: 2.3.0 2910 | dev: false 2911 | 2912 | /postcss-browser-comments@4.0.0(browserslist@4.21.10)(postcss@8.4.27): 2913 | resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} 2914 | engines: {node: '>=8'} 2915 | peerDependencies: 2916 | browserslist: '>=4' 2917 | postcss: '>=8' 2918 | dependencies: 2919 | browserslist: 4.21.10 2920 | postcss: 8.4.27 2921 | dev: false 2922 | 2923 | /postcss-media-query-parser@0.2.3: 2924 | resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} 2925 | 2926 | /postcss-nested@6.0.1(postcss@8.4.27): 2927 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 2928 | engines: {node: '>=12.0'} 2929 | peerDependencies: 2930 | postcss: ^8.2.14 2931 | dependencies: 2932 | postcss: 8.4.27 2933 | postcss-selector-parser: 6.0.13 2934 | dev: false 2935 | 2936 | /postcss-normalize@10.0.1(browserslist@4.21.10)(postcss@8.4.27): 2937 | resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} 2938 | engines: {node: '>= 12'} 2939 | peerDependencies: 2940 | browserslist: '>= 4' 2941 | postcss: '>= 8' 2942 | dependencies: 2943 | '@csstools/normalize.css': 12.0.0 2944 | browserslist: 4.21.10 2945 | postcss: 8.4.27 2946 | postcss-browser-comments: 4.0.0(browserslist@4.21.10)(postcss@8.4.27) 2947 | sanitize.css: 13.0.0 2948 | dev: false 2949 | 2950 | /postcss-resolve-nested-selector@0.1.1: 2951 | resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} 2952 | 2953 | /postcss-safe-parser@6.0.0(postcss@8.4.27): 2954 | resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} 2955 | engines: {node: '>=12.0'} 2956 | peerDependencies: 2957 | postcss: ^8.3.3 2958 | dependencies: 2959 | postcss: 8.4.27 2960 | 2961 | /postcss-selector-parser@6.0.13: 2962 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} 2963 | engines: {node: '>=4'} 2964 | dependencies: 2965 | cssesc: 3.0.0 2966 | util-deprecate: 1.0.2 2967 | 2968 | /postcss-sorting@7.0.1(postcss@8.4.27): 2969 | resolution: {integrity: sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==} 2970 | peerDependencies: 2971 | postcss: ^8.3.9 2972 | dependencies: 2973 | postcss: 8.4.27 2974 | dev: true 2975 | 2976 | /postcss-value-parser@4.2.0: 2977 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 2978 | 2979 | /postcss@8.4.27: 2980 | resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} 2981 | engines: {node: ^10 || ^12 || >=14} 2982 | dependencies: 2983 | nanoid: 3.3.6 2984 | picocolors: 1.0.0 2985 | source-map-js: 1.0.2 2986 | 2987 | /prelude-ls@1.2.1: 2988 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2989 | engines: {node: '>= 0.8.0'} 2990 | dev: true 2991 | 2992 | /process-warning@2.2.0: 2993 | resolution: {integrity: sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==} 2994 | dev: false 2995 | 2996 | /process@0.11.10: 2997 | resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} 2998 | engines: {node: '>= 0.6.0'} 2999 | dev: false 3000 | 3001 | /punycode@2.3.0: 3002 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 3003 | engines: {node: '>=6'} 3004 | 3005 | /queue-microtask@1.2.3: 3006 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 3007 | 3008 | /quick-format-unescaped@4.0.4: 3009 | resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} 3010 | dev: false 3011 | 3012 | /quick-lru@4.0.1: 3013 | resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} 3014 | engines: {node: '>=8'} 3015 | 3016 | /react-dom@18.2.0(react@18.2.0): 3017 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 3018 | peerDependencies: 3019 | react: ^18.2.0 3020 | dependencies: 3021 | loose-envify: 1.4.0 3022 | react: 18.2.0 3023 | scheduler: 0.23.0 3024 | dev: false 3025 | 3026 | /react-refresh@0.14.0: 3027 | resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} 3028 | engines: {node: '>=0.10.0'} 3029 | dev: false 3030 | 3031 | /react@18.2.0: 3032 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 3033 | engines: {node: '>=0.10.0'} 3034 | dependencies: 3035 | loose-envify: 1.4.0 3036 | dev: false 3037 | 3038 | /read-pkg-up@7.0.1: 3039 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 3040 | engines: {node: '>=8'} 3041 | dependencies: 3042 | find-up: 4.1.0 3043 | read-pkg: 5.2.0 3044 | type-fest: 0.8.1 3045 | 3046 | /read-pkg@5.2.0: 3047 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 3048 | engines: {node: '>=8'} 3049 | dependencies: 3050 | '@types/normalize-package-data': 2.4.1 3051 | normalize-package-data: 2.5.0 3052 | parse-json: 5.2.0 3053 | type-fest: 0.6.0 3054 | 3055 | /readable-stream@4.4.2: 3056 | resolution: {integrity: sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==} 3057 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 3058 | dependencies: 3059 | abort-controller: 3.0.0 3060 | buffer: 6.0.3 3061 | events: 3.3.0 3062 | process: 0.11.10 3063 | string_decoder: 1.3.0 3064 | dev: false 3065 | 3066 | /real-require@0.2.0: 3067 | resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} 3068 | engines: {node: '>= 12.13.0'} 3069 | dev: false 3070 | 3071 | /redent@3.0.0: 3072 | resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} 3073 | engines: {node: '>=8'} 3074 | dependencies: 3075 | indent-string: 4.0.0 3076 | strip-indent: 3.0.0 3077 | 3078 | /regexp.prototype.flags@1.5.0: 3079 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} 3080 | engines: {node: '>= 0.4'} 3081 | dependencies: 3082 | call-bind: 1.0.2 3083 | define-properties: 1.2.0 3084 | functions-have-names: 1.2.3 3085 | dev: true 3086 | 3087 | /regexpp@3.2.0: 3088 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} 3089 | engines: {node: '>=8'} 3090 | dev: true 3091 | 3092 | /require-from-string@2.0.2: 3093 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 3094 | engines: {node: '>=0.10.0'} 3095 | 3096 | /requireindex@1.2.0: 3097 | resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} 3098 | engines: {node: '>=0.10.5'} 3099 | dev: true 3100 | 3101 | /resolve-from@4.0.0: 3102 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 3103 | engines: {node: '>=4'} 3104 | 3105 | /resolve-from@5.0.0: 3106 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 3107 | engines: {node: '>=8'} 3108 | 3109 | /resolve@1.22.2: 3110 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} 3111 | hasBin: true 3112 | dependencies: 3113 | is-core-module: 2.12.1 3114 | path-parse: 1.0.7 3115 | supports-preserve-symlinks-flag: 1.0.0 3116 | 3117 | /resolve@1.22.3: 3118 | resolution: {integrity: sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==} 3119 | hasBin: true 3120 | dependencies: 3121 | is-core-module: 2.12.1 3122 | path-parse: 1.0.7 3123 | supports-preserve-symlinks-flag: 1.0.0 3124 | dev: true 3125 | 3126 | /reusify@1.0.4: 3127 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 3128 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 3129 | 3130 | /rimraf@3.0.2: 3131 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 3132 | hasBin: true 3133 | dependencies: 3134 | glob: 7.2.3 3135 | 3136 | /rollup@3.27.2: 3137 | resolution: {integrity: sha512-YGwmHf7h2oUHkVBT248x0yt6vZkYQ3/rvE5iQuVBh3WO8GcJ6BNeOkpoX1yMHIiBm18EMLjBPIoUDkhgnyxGOQ==} 3138 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 3139 | hasBin: true 3140 | optionalDependencies: 3141 | fsevents: 2.3.2 3142 | dev: false 3143 | 3144 | /run-parallel@1.2.0: 3145 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 3146 | dependencies: 3147 | queue-microtask: 1.2.3 3148 | 3149 | /safe-array-concat@1.0.0: 3150 | resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} 3151 | engines: {node: '>=0.4'} 3152 | dependencies: 3153 | call-bind: 1.0.2 3154 | get-intrinsic: 1.2.1 3155 | has-symbols: 1.0.3 3156 | isarray: 2.0.5 3157 | dev: true 3158 | 3159 | /safe-buffer@5.2.1: 3160 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 3161 | dev: false 3162 | 3163 | /safe-regex-test@1.0.0: 3164 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 3165 | dependencies: 3166 | call-bind: 1.0.2 3167 | get-intrinsic: 1.2.1 3168 | is-regex: 1.1.4 3169 | dev: true 3170 | 3171 | /safe-stable-stringify@2.4.3: 3172 | resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} 3173 | engines: {node: '>=10'} 3174 | dev: false 3175 | 3176 | /sanitize.css@13.0.0: 3177 | resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} 3178 | dev: false 3179 | 3180 | /scheduler@0.23.0: 3181 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 3182 | dependencies: 3183 | loose-envify: 1.4.0 3184 | dev: false 3185 | 3186 | /semver@5.7.2: 3187 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 3188 | hasBin: true 3189 | 3190 | /semver@6.3.1: 3191 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 3192 | hasBin: true 3193 | 3194 | /semver@7.5.4: 3195 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 3196 | engines: {node: '>=10'} 3197 | hasBin: true 3198 | dependencies: 3199 | lru-cache: 6.0.0 3200 | 3201 | /shebang-command@2.0.0: 3202 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 3203 | engines: {node: '>=8'} 3204 | dependencies: 3205 | shebang-regex: 3.0.0 3206 | dev: true 3207 | 3208 | /shebang-regex@3.0.0: 3209 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 3210 | engines: {node: '>=8'} 3211 | dev: true 3212 | 3213 | /side-channel@1.0.4: 3214 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 3215 | dependencies: 3216 | call-bind: 1.0.2 3217 | get-intrinsic: 1.2.1 3218 | object-inspect: 1.12.3 3219 | dev: true 3220 | 3221 | /signal-exit@3.0.7: 3222 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 3223 | 3224 | /slash@3.0.0: 3225 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 3226 | engines: {node: '>=8'} 3227 | 3228 | /slice-ansi@4.0.0: 3229 | resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} 3230 | engines: {node: '>=10'} 3231 | dependencies: 3232 | ansi-styles: 4.3.0 3233 | astral-regex: 2.0.0 3234 | is-fullwidth-code-point: 3.0.0 3235 | 3236 | /sonic-boom@3.3.0: 3237 | resolution: {integrity: sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==} 3238 | dependencies: 3239 | atomic-sleep: 1.0.0 3240 | dev: false 3241 | 3242 | /source-map-js@1.0.2: 3243 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 3244 | engines: {node: '>=0.10.0'} 3245 | 3246 | /spdx-correct@3.2.0: 3247 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 3248 | dependencies: 3249 | spdx-expression-parse: 3.0.1 3250 | spdx-license-ids: 3.0.13 3251 | 3252 | /spdx-exceptions@2.3.0: 3253 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} 3254 | 3255 | /spdx-expression-parse@3.0.1: 3256 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 3257 | dependencies: 3258 | spdx-exceptions: 2.3.0 3259 | spdx-license-ids: 3.0.13 3260 | 3261 | /spdx-license-ids@3.0.13: 3262 | resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} 3263 | 3264 | /split2@4.2.0: 3265 | resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} 3266 | engines: {node: '>= 10.x'} 3267 | dev: false 3268 | 3269 | /string-width@4.2.3: 3270 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 3271 | engines: {node: '>=8'} 3272 | dependencies: 3273 | emoji-regex: 8.0.0 3274 | is-fullwidth-code-point: 3.0.0 3275 | strip-ansi: 6.0.1 3276 | 3277 | /string.prototype.trim@1.2.7: 3278 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} 3279 | engines: {node: '>= 0.4'} 3280 | dependencies: 3281 | call-bind: 1.0.2 3282 | define-properties: 1.2.0 3283 | es-abstract: 1.22.1 3284 | dev: true 3285 | 3286 | /string.prototype.trimend@1.0.6: 3287 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} 3288 | dependencies: 3289 | call-bind: 1.0.2 3290 | define-properties: 1.2.0 3291 | es-abstract: 1.22.1 3292 | dev: true 3293 | 3294 | /string.prototype.trimstart@1.0.6: 3295 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} 3296 | dependencies: 3297 | call-bind: 1.0.2 3298 | define-properties: 1.2.0 3299 | es-abstract: 1.22.1 3300 | dev: true 3301 | 3302 | /string_decoder@1.3.0: 3303 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 3304 | dependencies: 3305 | safe-buffer: 5.2.1 3306 | dev: false 3307 | 3308 | /strip-ansi@6.0.1: 3309 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 3310 | engines: {node: '>=8'} 3311 | dependencies: 3312 | ansi-regex: 5.0.1 3313 | 3314 | /strip-ansi@7.1.0: 3315 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 3316 | engines: {node: '>=12'} 3317 | dependencies: 3318 | ansi-regex: 6.0.1 3319 | dev: false 3320 | 3321 | /strip-bom@3.0.0: 3322 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 3323 | engines: {node: '>=4'} 3324 | dev: true 3325 | 3326 | /strip-indent@3.0.0: 3327 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 3328 | engines: {node: '>=8'} 3329 | dependencies: 3330 | min-indent: 1.0.1 3331 | 3332 | /strip-json-comments@3.1.1: 3333 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 3334 | engines: {node: '>=8'} 3335 | dev: true 3336 | 3337 | /style-search@0.1.0: 3338 | resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} 3339 | 3340 | /stylelint-config-recess-order@3.1.0(stylelint@14.16.1): 3341 | resolution: {integrity: sha512-LXR6zD5O9cS1a9gbLbuKvWLs7qmHj4xm5MQ5KhhwZPMhtQP9da3F6Jsp/NAUdsAwDQEnT1ShU16YVdgN6p4a/w==} 3342 | peerDependencies: 3343 | stylelint: '>=14' 3344 | dependencies: 3345 | stylelint: 14.16.1 3346 | stylelint-order: 5.0.0(stylelint@14.16.1) 3347 | dev: true 3348 | 3349 | /stylelint-config-recommended@9.0.0(stylelint@14.16.1): 3350 | resolution: {integrity: sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==} 3351 | peerDependencies: 3352 | stylelint: ^14.10.0 3353 | dependencies: 3354 | stylelint: 14.16.1 3355 | dev: true 3356 | 3357 | /stylelint-config-standard@29.0.0(stylelint@14.16.1): 3358 | resolution: {integrity: sha512-uy8tZLbfq6ZrXy4JKu3W+7lYLgRQBxYTUUB88vPgQ+ZzAxdrvcaSUW9hOMNLYBnwH+9Kkj19M2DHdZ4gKwI7tg==} 3359 | peerDependencies: 3360 | stylelint: ^14.14.0 3361 | dependencies: 3362 | stylelint: 14.16.1 3363 | stylelint-config-recommended: 9.0.0(stylelint@14.16.1) 3364 | dev: true 3365 | 3366 | /stylelint-gamut@1.3.3(stylelint@14.16.1): 3367 | resolution: {integrity: sha512-O7aNt2dgmtwTbA+hdbXAKcKDRfE4AV09VrZDTyO8bMnfFnHQTkflfPhR1fLGM+w2kcn1hep8rIvaDteIryer8A==} 3368 | engines: {node: '>=16.0.0'} 3369 | peerDependencies: 3370 | stylelint: ^14.0.0 || ^15.0.0 3371 | dependencies: 3372 | colorjs.io: 0.4.5 3373 | stylelint: 14.16.1 3374 | dev: true 3375 | 3376 | /stylelint-order@5.0.0(stylelint@14.16.1): 3377 | resolution: {integrity: sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==} 3378 | peerDependencies: 3379 | stylelint: ^14.0.0 3380 | dependencies: 3381 | postcss: 8.4.27 3382 | postcss-sorting: 7.0.1(postcss@8.4.27) 3383 | stylelint: 14.16.1 3384 | dev: true 3385 | 3386 | /stylelint@14.16.1: 3387 | resolution: {integrity: sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==} 3388 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 3389 | hasBin: true 3390 | dependencies: 3391 | '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) 3392 | balanced-match: 2.0.0 3393 | colord: 2.9.3 3394 | cosmiconfig: 7.1.0 3395 | css-functions-list: 3.2.0 3396 | debug: 4.3.4 3397 | fast-glob: 3.3.1 3398 | fastest-levenshtein: 1.0.16 3399 | file-entry-cache: 6.0.1 3400 | global-modules: 2.0.0 3401 | globby: 11.1.0 3402 | globjoin: 0.1.4 3403 | html-tags: 3.3.1 3404 | ignore: 5.2.4 3405 | import-lazy: 4.0.0 3406 | imurmurhash: 0.1.4 3407 | is-plain-object: 5.0.0 3408 | known-css-properties: 0.26.0 3409 | mathml-tag-names: 2.1.3 3410 | meow: 9.0.0 3411 | micromatch: 4.0.5 3412 | normalize-path: 3.0.0 3413 | picocolors: 1.0.0 3414 | postcss: 8.4.27 3415 | postcss-media-query-parser: 0.2.3 3416 | postcss-resolve-nested-selector: 0.1.1 3417 | postcss-safe-parser: 6.0.0(postcss@8.4.27) 3418 | postcss-selector-parser: 6.0.13 3419 | postcss-value-parser: 4.2.0 3420 | resolve-from: 5.0.0 3421 | string-width: 4.2.3 3422 | strip-ansi: 6.0.1 3423 | style-search: 0.1.0 3424 | supports-hyperlinks: 2.3.0 3425 | svg-tags: 1.0.0 3426 | table: 6.8.1 3427 | v8-compile-cache: 2.3.0 3428 | write-file-atomic: 4.0.2 3429 | transitivePeerDependencies: 3430 | - supports-color 3431 | 3432 | /supports-color@5.5.0: 3433 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 3434 | engines: {node: '>=4'} 3435 | dependencies: 3436 | has-flag: 3.0.0 3437 | 3438 | /supports-color@7.2.0: 3439 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 3440 | engines: {node: '>=8'} 3441 | dependencies: 3442 | has-flag: 4.0.0 3443 | 3444 | /supports-hyperlinks@2.3.0: 3445 | resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} 3446 | engines: {node: '>=8'} 3447 | dependencies: 3448 | has-flag: 4.0.0 3449 | supports-color: 7.2.0 3450 | 3451 | /supports-preserve-symlinks-flag@1.0.0: 3452 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 3453 | engines: {node: '>= 0.4'} 3454 | 3455 | /svg-tags@1.0.0: 3456 | resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} 3457 | 3458 | /table@6.8.1: 3459 | resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} 3460 | engines: {node: '>=10.0.0'} 3461 | dependencies: 3462 | ajv: 8.12.0 3463 | lodash.truncate: 4.4.2 3464 | slice-ansi: 4.0.0 3465 | string-width: 4.2.3 3466 | strip-ansi: 6.0.1 3467 | 3468 | /text-table@0.2.0: 3469 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 3470 | dev: true 3471 | 3472 | /thread-stream@2.3.0: 3473 | resolution: {integrity: sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==} 3474 | dependencies: 3475 | real-require: 0.2.0 3476 | dev: false 3477 | 3478 | /through@2.3.8: 3479 | resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} 3480 | dev: false 3481 | 3482 | /to-fast-properties@2.0.0: 3483 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 3484 | engines: {node: '>=4'} 3485 | dev: false 3486 | 3487 | /to-regex-range@5.0.1: 3488 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 3489 | engines: {node: '>=8.0'} 3490 | dependencies: 3491 | is-number: 7.0.0 3492 | 3493 | /trim-newlines@3.0.1: 3494 | resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} 3495 | engines: {node: '>=8'} 3496 | 3497 | /tsconfig-paths@3.14.2: 3498 | resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} 3499 | dependencies: 3500 | '@types/json5': 0.0.29 3501 | json5: 1.0.2 3502 | minimist: 1.2.8 3503 | strip-bom: 3.0.0 3504 | dev: true 3505 | 3506 | /tslib@1.14.1: 3507 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 3508 | dev: true 3509 | 3510 | /tsm@2.3.0: 3511 | resolution: {integrity: sha512-++0HFnmmR+gMpDtKTnW3XJ4yv9kVGi20n+NfyQWB9qwJvTaIWY9kBmzek2YUQK5APTQ/1DTrXmm4QtFPmW9Rzw==} 3512 | engines: {node: '>=12'} 3513 | hasBin: true 3514 | dependencies: 3515 | esbuild: 0.15.18 3516 | dev: true 3517 | 3518 | /tsutils@3.21.0(typescript@4.9.5): 3519 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 3520 | engines: {node: '>= 6'} 3521 | peerDependencies: 3522 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 3523 | dependencies: 3524 | tslib: 1.14.1 3525 | typescript: 4.9.5 3526 | dev: true 3527 | 3528 | /type-check@0.4.0: 3529 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 3530 | engines: {node: '>= 0.8.0'} 3531 | dependencies: 3532 | prelude-ls: 1.2.1 3533 | dev: true 3534 | 3535 | /type-fest@0.18.1: 3536 | resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} 3537 | engines: {node: '>=10'} 3538 | 3539 | /type-fest@0.20.2: 3540 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 3541 | engines: {node: '>=10'} 3542 | dev: true 3543 | 3544 | /type-fest@0.6.0: 3545 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 3546 | engines: {node: '>=8'} 3547 | 3548 | /type-fest@0.8.1: 3549 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 3550 | engines: {node: '>=8'} 3551 | 3552 | /typed-array-buffer@1.0.0: 3553 | resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} 3554 | engines: {node: '>= 0.4'} 3555 | dependencies: 3556 | call-bind: 1.0.2 3557 | get-intrinsic: 1.2.1 3558 | is-typed-array: 1.1.12 3559 | dev: true 3560 | 3561 | /typed-array-byte-length@1.0.0: 3562 | resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} 3563 | engines: {node: '>= 0.4'} 3564 | dependencies: 3565 | call-bind: 1.0.2 3566 | for-each: 0.3.3 3567 | has-proto: 1.0.1 3568 | is-typed-array: 1.1.12 3569 | dev: true 3570 | 3571 | /typed-array-byte-offset@1.0.0: 3572 | resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} 3573 | engines: {node: '>= 0.4'} 3574 | dependencies: 3575 | available-typed-arrays: 1.0.5 3576 | call-bind: 1.0.2 3577 | for-each: 0.3.3 3578 | has-proto: 1.0.1 3579 | is-typed-array: 1.1.12 3580 | dev: true 3581 | 3582 | /typed-array-length@1.0.4: 3583 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 3584 | dependencies: 3585 | call-bind: 1.0.2 3586 | for-each: 0.3.3 3587 | is-typed-array: 1.1.12 3588 | dev: true 3589 | 3590 | /typescript@4.9.5: 3591 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 3592 | engines: {node: '>=4.2.0'} 3593 | hasBin: true 3594 | dev: true 3595 | 3596 | /unbox-primitive@1.0.2: 3597 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 3598 | dependencies: 3599 | call-bind: 1.0.2 3600 | has-bigints: 1.0.2 3601 | has-symbols: 1.0.3 3602 | which-boxed-primitive: 1.0.2 3603 | dev: true 3604 | 3605 | /update-browserslist-db@1.0.11(browserslist@4.21.10): 3606 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} 3607 | hasBin: true 3608 | peerDependencies: 3609 | browserslist: '>= 4.21.0' 3610 | dependencies: 3611 | browserslist: 4.21.10 3612 | escalade: 3.1.1 3613 | picocolors: 1.0.0 3614 | dev: false 3615 | 3616 | /uri-js@4.4.1: 3617 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 3618 | dependencies: 3619 | punycode: 2.3.0 3620 | 3621 | /url-pattern@1.0.3: 3622 | resolution: {integrity: sha512-uQcEj/2puA4aq1R3A2+VNVBgaWYR24FdWjl7VNW83rnWftlhyzOZ/tBjezRiC2UkIzuxC8Top3IekN3vUf1WxA==} 3623 | engines: {node: '>=0.12.0'} 3624 | dev: false 3625 | 3626 | /use-sync-external-store@1.2.0(react@18.2.0): 3627 | resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} 3628 | peerDependencies: 3629 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 3630 | dependencies: 3631 | react: 18.2.0 3632 | dev: false 3633 | 3634 | /util-deprecate@1.0.2: 3635 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 3636 | 3637 | /v8-compile-cache@2.3.0: 3638 | resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} 3639 | 3640 | /validate-npm-package-license@3.0.4: 3641 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 3642 | dependencies: 3643 | spdx-correct: 3.2.0 3644 | spdx-expression-parse: 3.0.1 3645 | 3646 | /vite@4.4.8: 3647 | resolution: {integrity: sha512-LONawOUUjxQridNWGQlNizfKH89qPigK36XhMI7COMGztz8KNY0JHim7/xDd71CZwGT4HtSRgI7Hy+RlhG0Gvg==} 3648 | engines: {node: ^14.18.0 || >=16.0.0} 3649 | hasBin: true 3650 | peerDependencies: 3651 | '@types/node': '>= 14' 3652 | less: '*' 3653 | lightningcss: ^1.21.0 3654 | sass: '*' 3655 | stylus: '*' 3656 | sugarss: '*' 3657 | terser: ^5.4.0 3658 | peerDependenciesMeta: 3659 | '@types/node': 3660 | optional: true 3661 | less: 3662 | optional: true 3663 | lightningcss: 3664 | optional: true 3665 | sass: 3666 | optional: true 3667 | stylus: 3668 | optional: true 3669 | sugarss: 3670 | optional: true 3671 | terser: 3672 | optional: true 3673 | dependencies: 3674 | esbuild: 0.18.17 3675 | postcss: 8.4.27 3676 | rollup: 3.27.2 3677 | optionalDependencies: 3678 | fsevents: 2.3.2 3679 | dev: false 3680 | 3681 | /web-streams-polyfill@3.2.1: 3682 | resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} 3683 | engines: {node: '>= 8'} 3684 | dev: false 3685 | 3686 | /which-boxed-primitive@1.0.2: 3687 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 3688 | dependencies: 3689 | is-bigint: 1.0.4 3690 | is-boolean-object: 1.1.2 3691 | is-number-object: 1.0.7 3692 | is-string: 1.0.7 3693 | is-symbol: 1.0.4 3694 | dev: true 3695 | 3696 | /which-typed-array@1.1.11: 3697 | resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} 3698 | engines: {node: '>= 0.4'} 3699 | dependencies: 3700 | available-typed-arrays: 1.0.5 3701 | call-bind: 1.0.2 3702 | for-each: 0.3.3 3703 | gopd: 1.0.1 3704 | has-tostringtag: 1.0.0 3705 | dev: true 3706 | 3707 | /which@1.3.1: 3708 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 3709 | hasBin: true 3710 | dependencies: 3711 | isexe: 2.0.0 3712 | 3713 | /which@2.0.2: 3714 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 3715 | engines: {node: '>= 8'} 3716 | hasBin: true 3717 | dependencies: 3718 | isexe: 2.0.0 3719 | dev: true 3720 | 3721 | /wrappy@1.0.2: 3722 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3723 | 3724 | /write-file-atomic@4.0.2: 3725 | resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} 3726 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 3727 | dependencies: 3728 | imurmurhash: 0.1.4 3729 | signal-exit: 3.0.7 3730 | 3731 | /ws@8.13.0: 3732 | resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} 3733 | engines: {node: '>=10.0.0'} 3734 | peerDependencies: 3735 | bufferutil: ^4.0.1 3736 | utf-8-validate: '>=5.0.2' 3737 | peerDependenciesMeta: 3738 | bufferutil: 3739 | optional: true 3740 | utf-8-validate: 3741 | optional: true 3742 | dev: false 3743 | 3744 | /yallist@3.1.1: 3745 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 3746 | dev: false 3747 | 3748 | /yallist@4.0.0: 3749 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3750 | 3751 | /yaml@1.10.2: 3752 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 3753 | engines: {node: '>= 6'} 3754 | 3755 | /yargs-parser@20.2.9: 3756 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 3757 | engines: {node: '>=10'} 3758 | 3759 | /yocto-queue@0.1.0: 3760 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3761 | engines: {node: '>=10'} 3762 | dev: true 3763 | 3764 | /yyyy-mm-dd@1.0.2: 3765 | resolution: {integrity: sha512-xHhOFKT1Y29Jc4/6To1hmIUswKhCKplPSbkCyIabAAZ5q/9GmZvlN3WNcafcq3zze3CzYU66XNeSBLCD8Oickw==} 3766 | dev: false 3767 | 3768 | github.com/logux/server/1b649580cf7f5f9ae1598ce2f3bfba00482dc471: 3769 | resolution: {tarball: https://codeload.github.com/logux/server/tar.gz/1b649580cf7f5f9ae1598ce2f3bfba00482dc471} 3770 | name: '@logux/server' 3771 | version: 0.12.4 3772 | engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} 3773 | dependencies: 3774 | '@logux/actions': 0.3.1(@logux/core@0.8.4) 3775 | '@logux/core': 0.8.4 3776 | JSONStream: 1.3.5 3777 | cookie: 0.5.0 3778 | dotenv: 16.3.1 3779 | fast-glob: 3.3.1 3780 | ip: 1.1.8 3781 | nanodelay: 2.0.2 3782 | nanoevents: 8.0.0 3783 | nanoid: 4.0.2 3784 | node-fetch: 3.3.2 3785 | picocolors: 1.0.0 3786 | pino: 8.15.0 3787 | pino-abstract-transport: 1.0.0 3788 | semver: 7.5.4 3789 | strip-ansi: 7.1.0 3790 | url-pattern: 1.0.3 3791 | ws: 8.13.0 3792 | yyyy-mm-dd: 1.0.2 3793 | transitivePeerDependencies: 3794 | - bufferutil 3795 | - utf-8-validate 3796 | dev: false 3797 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - client 3 | - server 4 | -------------------------------------------------------------------------------- /server/db.ts: -------------------------------------------------------------------------------- 1 | import { Task, User } from '../api/index.js' 2 | 3 | export type TaskRecord = { 4 | id: string 5 | textChangeTime: number 6 | completedChangeTime: number 7 | } & Task 8 | 9 | let users = [ 10 | { id: '1', name: 'admin', password: 'admin' }, 11 | { id: '2', name: 'user', password: 'user' } 12 | ] 13 | let tasks: TaskRecord[] = [ 14 | { 15 | id: '1', 16 | text: 'Create logux example app', 17 | textChangeTime: 0, 18 | completed: false, 19 | completedChangeTime: 0, 20 | authorId: '1' 21 | } 22 | ] 23 | let userTasks: Record = { '1': ['1'], '2': [] } 24 | 25 | export function findUser(name: string): User | undefined { 26 | return users.find(it => it.name === name) 27 | } 28 | 29 | export function getUserTasks(userId: string): Promise { 30 | return Promise.resolve(tasks.filter(it => userTasks[userId].includes(it.id))) 31 | } 32 | 33 | export function findTask(taskId: string): Promise { 34 | return Promise.resolve(tasks.find(it => it.id === taskId)) 35 | } 36 | 37 | export function createTask( 38 | userId: string, 39 | task: TaskRecord 40 | ): Promise { 41 | tasks.push(task) 42 | userTasks[userId].push(task.id) 43 | return Promise.resolve(task) 44 | } 45 | 46 | export function changeTask( 47 | taskId: string, 48 | patch: Partial> 49 | ): Promise { 50 | tasks = tasks.map(it => { 51 | if (it.id !== taskId) return it 52 | return { ...it, ...patch } 53 | }) 54 | return Promise.resolve(tasks.find(it => it.id === taskId)!) 55 | } 56 | 57 | export function deleteTask(taskId: string): Promise { 58 | tasks = tasks.filter(it => it.id !== taskId) 59 | 60 | users.forEach(user => { 61 | userTasks[user.id].filter(id => id !== taskId) 62 | }) 63 | 64 | return Promise.resolve() 65 | } 66 | -------------------------------------------------------------------------------- /server/index.ts: -------------------------------------------------------------------------------- 1 | import { Server } from '@logux/server' 2 | 3 | import { subprotocol } from '../api/index.js' 4 | 5 | const server = new Server( 6 | Server.loadOptions(process, { 7 | subprotocol, 8 | supports: subprotocol, 9 | fileUrl: import.meta.url 10 | }) 11 | ) 12 | 13 | server 14 | .autoloadModules( 15 | process.env.NODE_ENV === 'production' 16 | ? 'modules/*.js' 17 | : ['modules/*.ts', '!modules/*.test.ts'] 18 | ) 19 | .then(() => { 20 | server.listen() 21 | }) 22 | -------------------------------------------------------------------------------- /server/modules/auth.ts: -------------------------------------------------------------------------------- 1 | import { BaseServer } from '@logux/server/base-server' 2 | import { IncomingMessage } from 'http' 3 | 4 | import { findUser } from '../db.js' 5 | import { User } from '../../api/index.js' 6 | 7 | const cookieSessionIdKey = 'sessionId' 8 | const activeSessions = new Map() 9 | let lastSessionId = 0 10 | 11 | async function signIn(req: IncomingMessage): Promise<[string, User] | null> { 12 | let data = '' 13 | 14 | req.on('data', chunk => { 15 | data += chunk 16 | }) 17 | 18 | return new Promise(resolve => { 19 | req.on('end', () => { 20 | const parsed = JSON.parse(data) 21 | 22 | const user = findUser(parsed.name) 23 | 24 | if (user && user.password === parsed.password) { 25 | const sessionId = lastSessionId++ 26 | activeSessions.set(sessionId.toString(), true) 27 | resolve([sessionId.toString(), user]) 28 | return 29 | } 30 | 31 | resolve(null) 32 | }) 33 | }) 34 | } 35 | 36 | export default function applyAuth(server: BaseServer): void { 37 | server.http(async (req, res) => { 38 | if (req.url === '/auth') { 39 | if (req.method === 'POST') { 40 | const sessionData = await signIn(req) 41 | 42 | if (sessionData !== null) { 43 | res.setHeader( 44 | 'Set-Cookie', 45 | `${cookieSessionIdKey}=${sessionData[0]}; Path=/; HttpOnly;` 46 | ) 47 | 48 | res.write(JSON.stringify({ id: sessionData[1].id })) 49 | res.end() 50 | } else { 51 | res.statusCode = 400 52 | res.end('Wrong user or password') 53 | } 54 | } 55 | 56 | if (req.method === 'DELETE') { 57 | // TODO move to cookie parsing library in separated PR 58 | const maybeSessionId = req.headers.cookie 59 | ?.split(';') 60 | ?.map(it => it.trim()) 61 | ?.find(it => it.startsWith(cookieSessionIdKey)) 62 | ?.split('=')?.[1] 63 | 64 | if (maybeSessionId) { 65 | activeSessions.delete(maybeSessionId) 66 | res.end() 67 | } else { 68 | res.statusCode = 404 69 | res.end('Session not found') 70 | } 71 | } 72 | } 73 | }) 74 | 75 | server.auth(props => { 76 | return activeSessions.has(props.cookie[cookieSessionIdKey]) 77 | }) 78 | } 79 | -------------------------------------------------------------------------------- /server/modules/tasks.ts: -------------------------------------------------------------------------------- 1 | import { 2 | addSyncMap, 3 | addSyncMapFilter, 4 | BaseServer, 5 | ChangedAt, 6 | NoConflictResolution 7 | } from '@logux/server' 8 | import { defineSyncMapActions, LoguxNotFoundError } from '@logux/actions' 9 | 10 | import { 11 | changeTask, 12 | createTask, 13 | deleteTask, 14 | findTask, 15 | getUserTasks 16 | } from '../db.js' 17 | import { Task } from '../../api/index.js' 18 | 19 | const modelName = 'tasks' 20 | 21 | const [createTaskActionType] = defineSyncMapActions(modelName) 22 | 23 | export default (server: BaseServer): void => { 24 | addSyncMap(server, modelName, { 25 | async access(ctx, id, action) { 26 | if (createTaskActionType.match(action)) { 27 | return ctx.userId === action.fields.authorId 28 | } else { 29 | const task = await findTask(id) 30 | return !!task && ctx.userId === task.authorId 31 | } 32 | }, 33 | 34 | async load(ctx, id) { 35 | const task = await findTask(id) 36 | 37 | if (!task) throw new LoguxNotFoundError() 38 | 39 | return { 40 | id, 41 | text: ChangedAt(task.text, task.textChangeTime), 42 | completed: ChangedAt(task.completed, task.completedChangeTime), 43 | // Since authorId is not changing while todo's lifecycle, no need to use change time here 44 | authorId: NoConflictResolution(task.authorId) 45 | } 46 | }, 47 | 48 | create(ctx, id, fields, time) { 49 | createTask(ctx.userId, { 50 | id, 51 | ...fields, 52 | textChangeTime: time, 53 | completedChangeTime: time 54 | }) 55 | }, 56 | 57 | async change(ctx, id, fields) { 58 | const task = await findTask(id) 59 | 60 | if (!task) throw new LoguxNotFoundError() 61 | 62 | await changeTask(id, fields) 63 | }, 64 | 65 | async delete(ctx, id) { 66 | await deleteTask(id) 67 | } 68 | }) 69 | 70 | addSyncMapFilter(server, modelName, { 71 | access(ctx, id, action) { 72 | return !!action.filter?.authorId && ctx.userId === action.filter.authorId 73 | }, 74 | 75 | async initial(ctx) { 76 | const tasks = await getUserTasks(ctx.userId) 77 | 78 | return tasks.map(task => ({ 79 | id: task.id, 80 | text: ChangedAt(task.text, task.textChangeTime), 81 | completed: ChangedAt(task.completed, task.completedChangeTime), 82 | // Since authorId is not changing while todo's lifecycle, no need to use change time here 83 | authorId: NoConflictResolution(task.authorId) 84 | })) 85 | }, 86 | 87 | actions(filterCtx) { 88 | return (actionCtx, action) => { 89 | if ('fields' in action) { 90 | return action.fields.authorId === filterCtx.userId 91 | } else { 92 | return findTask(action.id).then(task => { 93 | return filterCtx.userId === task?.authorId 94 | }) 95 | } 96 | } 97 | } 98 | }) 99 | } 100 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "logux-to-do-example-server", 3 | "private": true, 4 | "type": "module", 5 | "engines": { 6 | "node": ">=16" 7 | }, 8 | "scripts": { 9 | "start": "node --experimental-specifier-resolution=node --loader tsm ./index.ts" 10 | }, 11 | "dependencies": { 12 | "@logux/actions": "^0.3.1", 13 | "@logux/core": "^0.8.4", 14 | "@logux/server": "github:logux/server#main" 15 | }, 16 | "devDependencies": { 17 | "@types/node": "^18.17.2", 18 | "tsm": "^2.3.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 6 | "allowJs": false, 7 | "skipLibCheck": true, 8 | "esModuleInterop": false, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "ESNext", 13 | "moduleResolution": "Node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "react-jsx" 18 | }, 19 | "include": ["./"], 20 | } 21 | --------------------------------------------------------------------------------