├── .dockerignore
├── .eslintrc.cjs
├── .gitignore
├── .prettierrc
├── .yarnrc.yml
├── Dockerfile
├── README.md
├── dbs
└── .gitkeep
├── fly.toml
├── index.html
├── package.json
├── pnpm-lock.yaml
├── public
└── vite.svg
├── server.js
├── src
├── schemas
│ └── main.sql
├── todomvc-p2p
│ ├── App.tsx
│ ├── Peers.tsx
│ ├── ctx.ts
│ └── main.tsx
├── todomvc
│ ├── App.tsx
│ ├── SyncEndpoints.ts
│ ├── base.css
│ ├── id.ts
│ ├── main.tsx
│ ├── style.css
│ └── sync-worker.ts
└── vite-env.d.ts
├── todomvc-p2p.html
├── todomvc.html
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts
/.dockerignore:
--------------------------------------------------------------------------------
1 | fly.toml
2 | Dockerfile
3 | .dockerignore
4 | node_modules
5 | .git
6 | dbs
--------------------------------------------------------------------------------
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: { browser: true, es2020: true },
3 | extends: [
4 | 'eslint:recommended',
5 | 'plugin:@typescript-eslint/recommended',
6 | 'plugin:react-hooks/recommended',
7 | ],
8 | parser: '@typescript-eslint/parser',
9 | parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
10 | plugins: ['react-refresh'],
11 | rules: {
12 | 'react-refresh/only-export-components': 'warn',
13 | },
14 | }
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 | dbs/
26 |
27 | public/assets/crsqlite-*.wasm
28 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "es5",
3 | "tabWidth": 2,
4 | "singleQuote": false
5 | }
6 |
--------------------------------------------------------------------------------
/.yarnrc.yml:
--------------------------------------------------------------------------------
1 | nodeLinker: node-modules
2 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM debian:bullseye as builder
2 |
3 | ENV PATH=/usr/local/node/bin:$PATH
4 | ARG NODE_VERSION=19.0.1
5 |
6 | RUN apt-get update; apt install -y curl python-is-python3 pkg-config build-essential && \
7 | curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz -C /tmp/ && \
8 | /tmp/node-build-master/bin/node-build "${NODE_VERSION}" /usr/local/node && \
9 | rm -rf /tmp/node-build-master
10 |
11 | RUN mkdir /app
12 | WORKDIR /app
13 |
14 | COPY . .
15 |
16 | RUN npm install -g pnpm
17 | RUN pnpm install
18 | RUN pnpm run build
19 |
20 |
21 | FROM debian:bullseye-slim
22 |
23 | LABEL fly_launch_runtime="nodejs"
24 |
25 | COPY --from=builder /usr/local/node /usr/local/node
26 | COPY --from=builder /app /app
27 |
28 | WORKDIR /app
29 | ENV NODE_ENV production
30 | ENV PATH /usr/local/node/bin:$PATH
31 |
32 | CMD [ "pnpm", "run", "start" ]
33 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vlcn-live-examples
2 |
3 | ## Note: The `vite-starters` are the most up to date examples.
4 | - https://github.com/vlcn-io/vite-starter
5 | - https://github.com/vlcn-io/example-rest
6 |
7 |
8 | Example apps. Deployed to https://vlcn-live-examples.fly.dev
9 |
10 | - TodoMVC: https://vlcn-live-examples.fly.dev/todomvc.html
11 | - After opening a todo list, share the link with others to collaborate on that list.
12 | - TodoMVC p2p: https://vlcn-live-examples.fly.dev/todomvc-p2p.html
13 | - Copy a peer id from one peer, connect to it from another peer
14 |
15 | ---
16 |
17 | Running locally:
18 |
19 | ```
20 | git clone git@github.com:vlcn-io/live-examples.git
21 | cd live-examples
22 | npm install
23 | npm run dev
24 | ```
25 |
--------------------------------------------------------------------------------
/dbs/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vlcn-io/live-examples/51ea1ad409adf5602fc0d338b1b0b16bf3d6e5b2/dbs/.gitkeep
--------------------------------------------------------------------------------
/fly.toml:
--------------------------------------------------------------------------------
1 | # fly.toml file generated for vite-starter on 2023-05-18T15:37:10-04:00
2 |
3 | app = "vlcn-live-examples"
4 | kill_signal = "SIGINT"
5 | kill_timeout = 5
6 | primary_region = "iad"
7 | processes = []
8 |
9 | [env]
10 | PORT = "8080"
11 |
12 | [experimental]
13 | auto_rollback = true
14 |
15 | [mounts]
16 | destination = "/app/dbs"
17 | source = "dbs"
18 |
19 | [[services]]
20 | http_checks = []
21 | internal_port = 8080
22 | processes = ["app"]
23 | protocol = "tcp"
24 | script_checks = []
25 | [services.concurrency]
26 | hard_limit = 250
27 | soft_limit = 200
28 | type = "connections"
29 |
30 | [[services.ports]]
31 | force_https = true
32 | handlers = ["http"]
33 | port = 80
34 |
35 | [[services.ports]]
36 | handlers = ["tls", "http"]
37 | port = 443
38 |
39 | [[services.tcp_checks]]
40 | grace_period = "1s"
41 | interval = "15s"
42 | restart_limit = 0
43 | timeout = "2s"
44 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vlcn-vite-starter",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev:server": "node ./server.js",
8 | "dev:ui": "vite",
9 | "start": "NODE_ENV=production node ./server.js",
10 | "build": "tsc && vite build",
11 | "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0"
12 | },
13 | "dependencies": {
14 | "@vlcn.io/crsqlite-wasm": "0.15.2",
15 | "@vlcn.io/react": "3.0.3",
16 | "@vlcn.io/rx-tbl": "0.14.1",
17 | "@vlcn.io/sync-p2p": "0.13.1",
18 | "@vlcn.io/ws-browserdb": "0.1.2",
19 | "@vlcn.io/ws-client": "0.1.2",
20 | "@vlcn.io/ws-server": "0.1.2",
21 | "@vlcn.io/xplat-api": "0.14.1",
22 | "cors": "^2.8.5",
23 | "express": "^4.18.2",
24 | "nanoid": "^4.0.2",
25 | "react": "^18.2.0",
26 | "react-dom": "^18.2.0",
27 | "uuid": "^9.0.0"
28 | },
29 | "devDependencies": {
30 | "@types/node": "^20.5.0",
31 | "@types/react": "^18.2.20",
32 | "@types/react-dom": "^18.2.7",
33 | "@typescript-eslint/eslint-plugin": "^5.62.0",
34 | "@typescript-eslint/parser": "^5.62.0",
35 | "@vitejs/plugin-react": "^4.0.4",
36 | "eslint": "^8.47.0",
37 | "eslint-plugin-react-hooks": "^4.6.0",
38 | "eslint-plugin-react-refresh": "^0.3.5",
39 | "typescript": "^5.1.6",
40 | "vite": "^4.4.9"
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | '@vlcn.io/crsqlite-wasm':
9 | specifier: 0.15.2
10 | version: 0.15.2
11 | '@vlcn.io/react':
12 | specifier: 3.0.3
13 | version: 3.0.3(react@18.2.0)
14 | '@vlcn.io/rx-tbl':
15 | specifier: 0.14.1
16 | version: 0.14.1
17 | '@vlcn.io/sync-p2p':
18 | specifier: 0.13.1
19 | version: 0.13.1
20 | '@vlcn.io/ws-browserdb':
21 | specifier: 0.1.2
22 | version: 0.1.2
23 | '@vlcn.io/ws-client':
24 | specifier: 0.1.2
25 | version: 0.1.2
26 | '@vlcn.io/ws-server':
27 | specifier: 0.1.2
28 | version: 0.1.2
29 | '@vlcn.io/xplat-api':
30 | specifier: 0.14.1
31 | version: 0.14.1
32 | cors:
33 | specifier: ^2.8.5
34 | version: 2.8.5
35 | express:
36 | specifier: ^4.18.2
37 | version: 4.18.2
38 | nanoid:
39 | specifier: ^4.0.2
40 | version: 4.0.2
41 | react:
42 | specifier: ^18.2.0
43 | version: 18.2.0
44 | react-dom:
45 | specifier: ^18.2.0
46 | version: 18.2.0(react@18.2.0)
47 | uuid:
48 | specifier: ^9.0.0
49 | version: 9.0.0
50 |
51 | devDependencies:
52 | '@types/node':
53 | specifier: ^20.5.0
54 | version: 20.5.0
55 | '@types/react':
56 | specifier: ^18.2.20
57 | version: 18.2.20
58 | '@types/react-dom':
59 | specifier: ^18.2.7
60 | version: 18.2.7
61 | '@typescript-eslint/eslint-plugin':
62 | specifier: ^5.62.0
63 | version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.47.0)(typescript@5.1.6)
64 | '@typescript-eslint/parser':
65 | specifier: ^5.62.0
66 | version: 5.62.0(eslint@8.47.0)(typescript@5.1.6)
67 | '@vitejs/plugin-react':
68 | specifier: ^4.0.4
69 | version: 4.0.4(vite@4.4.9)
70 | eslint:
71 | specifier: ^8.47.0
72 | version: 8.47.0
73 | eslint-plugin-react-hooks:
74 | specifier: ^4.6.0
75 | version: 4.6.0(eslint@8.47.0)
76 | eslint-plugin-react-refresh:
77 | specifier: ^0.3.5
78 | version: 0.3.5(eslint@8.47.0)
79 | typescript:
80 | specifier: ^5.1.6
81 | version: 5.1.6
82 | vite:
83 | specifier: ^4.4.9
84 | version: 4.4.9(@types/node@20.5.0)
85 |
86 | packages:
87 |
88 | /@aashutoshrathi/word-wrap@1.2.6:
89 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
90 | engines: {node: '>=0.10.0'}
91 | dev: true
92 |
93 | /@ampproject/remapping@2.2.1:
94 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
95 | engines: {node: '>=6.0.0'}
96 | dependencies:
97 | '@jridgewell/gen-mapping': 0.3.3
98 | '@jridgewell/trace-mapping': 0.3.19
99 | dev: true
100 |
101 | /@babel/code-frame@7.22.10:
102 | resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==}
103 | engines: {node: '>=6.9.0'}
104 | dependencies:
105 | '@babel/highlight': 7.22.10
106 | chalk: 2.4.2
107 | dev: true
108 |
109 | /@babel/compat-data@7.22.9:
110 | resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==}
111 | engines: {node: '>=6.9.0'}
112 | dev: true
113 |
114 | /@babel/core@7.22.10:
115 | resolution: {integrity: sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==}
116 | engines: {node: '>=6.9.0'}
117 | dependencies:
118 | '@ampproject/remapping': 2.2.1
119 | '@babel/code-frame': 7.22.10
120 | '@babel/generator': 7.22.10
121 | '@babel/helper-compilation-targets': 7.22.10
122 | '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.10)
123 | '@babel/helpers': 7.22.10
124 | '@babel/parser': 7.22.10
125 | '@babel/template': 7.22.5
126 | '@babel/traverse': 7.22.10
127 | '@babel/types': 7.22.10
128 | convert-source-map: 1.9.0
129 | debug: 4.3.4
130 | gensync: 1.0.0-beta.2
131 | json5: 2.2.3
132 | semver: 6.3.1
133 | transitivePeerDependencies:
134 | - supports-color
135 | dev: true
136 |
137 | /@babel/generator@7.22.10:
138 | resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==}
139 | engines: {node: '>=6.9.0'}
140 | dependencies:
141 | '@babel/types': 7.22.10
142 | '@jridgewell/gen-mapping': 0.3.3
143 | '@jridgewell/trace-mapping': 0.3.19
144 | jsesc: 2.5.2
145 | dev: true
146 |
147 | /@babel/helper-compilation-targets@7.22.10:
148 | resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==}
149 | engines: {node: '>=6.9.0'}
150 | dependencies:
151 | '@babel/compat-data': 7.22.9
152 | '@babel/helper-validator-option': 7.22.5
153 | browserslist: 4.21.10
154 | lru-cache: 5.1.1
155 | semver: 6.3.1
156 | dev: true
157 |
158 | /@babel/helper-environment-visitor@7.22.5:
159 | resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==}
160 | engines: {node: '>=6.9.0'}
161 | dev: true
162 |
163 | /@babel/helper-function-name@7.22.5:
164 | resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==}
165 | engines: {node: '>=6.9.0'}
166 | dependencies:
167 | '@babel/template': 7.22.5
168 | '@babel/types': 7.22.10
169 | dev: true
170 |
171 | /@babel/helper-hoist-variables@7.22.5:
172 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
173 | engines: {node: '>=6.9.0'}
174 | dependencies:
175 | '@babel/types': 7.22.10
176 | dev: true
177 |
178 | /@babel/helper-module-imports@7.22.5:
179 | resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==}
180 | engines: {node: '>=6.9.0'}
181 | dependencies:
182 | '@babel/types': 7.22.10
183 | dev: true
184 |
185 | /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.10):
186 | resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==}
187 | engines: {node: '>=6.9.0'}
188 | peerDependencies:
189 | '@babel/core': ^7.0.0
190 | dependencies:
191 | '@babel/core': 7.22.10
192 | '@babel/helper-environment-visitor': 7.22.5
193 | '@babel/helper-module-imports': 7.22.5
194 | '@babel/helper-simple-access': 7.22.5
195 | '@babel/helper-split-export-declaration': 7.22.6
196 | '@babel/helper-validator-identifier': 7.22.5
197 | dev: true
198 |
199 | /@babel/helper-plugin-utils@7.22.5:
200 | resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
201 | engines: {node: '>=6.9.0'}
202 | dev: true
203 |
204 | /@babel/helper-simple-access@7.22.5:
205 | resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
206 | engines: {node: '>=6.9.0'}
207 | dependencies:
208 | '@babel/types': 7.22.10
209 | dev: true
210 |
211 | /@babel/helper-split-export-declaration@7.22.6:
212 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
213 | engines: {node: '>=6.9.0'}
214 | dependencies:
215 | '@babel/types': 7.22.10
216 | dev: true
217 |
218 | /@babel/helper-string-parser@7.22.5:
219 | resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
220 | engines: {node: '>=6.9.0'}
221 | dev: true
222 |
223 | /@babel/helper-validator-identifier@7.22.5:
224 | resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
225 | engines: {node: '>=6.9.0'}
226 | dev: true
227 |
228 | /@babel/helper-validator-option@7.22.5:
229 | resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==}
230 | engines: {node: '>=6.9.0'}
231 | dev: true
232 |
233 | /@babel/helpers@7.22.10:
234 | resolution: {integrity: sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==}
235 | engines: {node: '>=6.9.0'}
236 | dependencies:
237 | '@babel/template': 7.22.5
238 | '@babel/traverse': 7.22.10
239 | '@babel/types': 7.22.10
240 | transitivePeerDependencies:
241 | - supports-color
242 | dev: true
243 |
244 | /@babel/highlight@7.22.10:
245 | resolution: {integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==}
246 | engines: {node: '>=6.9.0'}
247 | dependencies:
248 | '@babel/helper-validator-identifier': 7.22.5
249 | chalk: 2.4.2
250 | js-tokens: 4.0.0
251 | dev: true
252 |
253 | /@babel/parser@7.22.10:
254 | resolution: {integrity: sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==}
255 | engines: {node: '>=6.0.0'}
256 | hasBin: true
257 | dependencies:
258 | '@babel/types': 7.22.10
259 | dev: true
260 |
261 | /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.10):
262 | resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==}
263 | engines: {node: '>=6.9.0'}
264 | peerDependencies:
265 | '@babel/core': ^7.0.0-0
266 | dependencies:
267 | '@babel/core': 7.22.10
268 | '@babel/helper-plugin-utils': 7.22.5
269 | dev: true
270 |
271 | /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.10):
272 | resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==}
273 | engines: {node: '>=6.9.0'}
274 | peerDependencies:
275 | '@babel/core': ^7.0.0-0
276 | dependencies:
277 | '@babel/core': 7.22.10
278 | '@babel/helper-plugin-utils': 7.22.5
279 | dev: true
280 |
281 | /@babel/template@7.22.5:
282 | resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==}
283 | engines: {node: '>=6.9.0'}
284 | dependencies:
285 | '@babel/code-frame': 7.22.10
286 | '@babel/parser': 7.22.10
287 | '@babel/types': 7.22.10
288 | dev: true
289 |
290 | /@babel/traverse@7.22.10:
291 | resolution: {integrity: sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==}
292 | engines: {node: '>=6.9.0'}
293 | dependencies:
294 | '@babel/code-frame': 7.22.10
295 | '@babel/generator': 7.22.10
296 | '@babel/helper-environment-visitor': 7.22.5
297 | '@babel/helper-function-name': 7.22.5
298 | '@babel/helper-hoist-variables': 7.22.5
299 | '@babel/helper-split-export-declaration': 7.22.6
300 | '@babel/parser': 7.22.10
301 | '@babel/types': 7.22.10
302 | debug: 4.3.4
303 | globals: 11.12.0
304 | transitivePeerDependencies:
305 | - supports-color
306 | dev: true
307 |
308 | /@babel/types@7.22.10:
309 | resolution: {integrity: sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==}
310 | engines: {node: '>=6.9.0'}
311 | dependencies:
312 | '@babel/helper-string-parser': 7.22.5
313 | '@babel/helper-validator-identifier': 7.22.5
314 | to-fast-properties: 2.0.0
315 | dev: true
316 |
317 | /@cbor-extract/cbor-extract-darwin-arm64@2.1.1:
318 | resolution: {integrity: sha512-blVBy5MXz6m36Vx0DfLd7PChOQKEs8lK2bD1WJn/vVgG4FXZiZmZb2GECHFvVPA5T7OnODd9xZiL3nMCv6QUhA==}
319 | cpu: [arm64]
320 | os: [darwin]
321 | requiresBuild: true
322 | dev: false
323 | optional: true
324 |
325 | /@cbor-extract/cbor-extract-darwin-x64@2.1.1:
326 | resolution: {integrity: sha512-h6KFOzqk8jXTvkOftyRIWGrd7sKQzQv2jVdTL9nKSf3D2drCvQB/LHUxAOpPXo3pv2clDtKs3xnHalpEh3rDsw==}
327 | cpu: [x64]
328 | os: [darwin]
329 | requiresBuild: true
330 | dev: false
331 | optional: true
332 |
333 | /@cbor-extract/cbor-extract-linux-arm64@2.1.1:
334 | resolution: {integrity: sha512-SxAaRcYf8S0QHaMc7gvRSiTSr7nUYMqbUdErBEu+HYA4Q6UNydx1VwFE68hGcp1qvxcy9yT5U7gA+a5XikfwSQ==}
335 | cpu: [arm64]
336 | os: [linux]
337 | requiresBuild: true
338 | dev: false
339 | optional: true
340 |
341 | /@cbor-extract/cbor-extract-linux-arm@2.1.1:
342 | resolution: {integrity: sha512-ds0uikdcIGUjPyraV4oJqyVE5gl/qYBpa/Wnh6l6xLE2lj/hwnjT2XcZCChdXwW/YFZ1LUHs6waoYN8PmK0nKQ==}
343 | cpu: [arm]
344 | os: [linux]
345 | requiresBuild: true
346 | dev: false
347 | optional: true
348 |
349 | /@cbor-extract/cbor-extract-linux-x64@2.1.1:
350 | resolution: {integrity: sha512-GVK+8fNIE9lJQHAlhOROYiI0Yd4bAZ4u++C2ZjlkS3YmO6hi+FUxe6Dqm+OKWTcMpL/l71N6CQAmaRcb4zyJuA==}
351 | cpu: [x64]
352 | os: [linux]
353 | requiresBuild: true
354 | dev: false
355 | optional: true
356 |
357 | /@cbor-extract/cbor-extract-win32-x64@2.1.1:
358 | resolution: {integrity: sha512-2Niq1C41dCRIDeD8LddiH+mxGlO7HJ612Ll3D/E73ZWBmycued+8ghTr/Ho3CMOWPUEr08XtyBMVXAjqF+TcKw==}
359 | cpu: [x64]
360 | os: [win32]
361 | requiresBuild: true
362 | dev: false
363 | optional: true
364 |
365 | /@colors/colors@1.5.0:
366 | resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
367 | engines: {node: '>=0.1.90'}
368 | dev: false
369 |
370 | /@dabh/diagnostics@2.0.3:
371 | resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==}
372 | dependencies:
373 | colorspace: 1.1.4
374 | enabled: 2.0.0
375 | kuler: 2.0.0
376 | dev: false
377 |
378 | /@esbuild/android-arm64@0.18.20:
379 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
380 | engines: {node: '>=12'}
381 | cpu: [arm64]
382 | os: [android]
383 | requiresBuild: true
384 | dev: true
385 | optional: true
386 |
387 | /@esbuild/android-arm@0.18.20:
388 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
389 | engines: {node: '>=12'}
390 | cpu: [arm]
391 | os: [android]
392 | requiresBuild: true
393 | dev: true
394 | optional: true
395 |
396 | /@esbuild/android-x64@0.18.20:
397 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
398 | engines: {node: '>=12'}
399 | cpu: [x64]
400 | os: [android]
401 | requiresBuild: true
402 | dev: true
403 | optional: true
404 |
405 | /@esbuild/darwin-arm64@0.18.20:
406 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
407 | engines: {node: '>=12'}
408 | cpu: [arm64]
409 | os: [darwin]
410 | requiresBuild: true
411 | dev: true
412 | optional: true
413 |
414 | /@esbuild/darwin-x64@0.18.20:
415 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
416 | engines: {node: '>=12'}
417 | cpu: [x64]
418 | os: [darwin]
419 | requiresBuild: true
420 | dev: true
421 | optional: true
422 |
423 | /@esbuild/freebsd-arm64@0.18.20:
424 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
425 | engines: {node: '>=12'}
426 | cpu: [arm64]
427 | os: [freebsd]
428 | requiresBuild: true
429 | dev: true
430 | optional: true
431 |
432 | /@esbuild/freebsd-x64@0.18.20:
433 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
434 | engines: {node: '>=12'}
435 | cpu: [x64]
436 | os: [freebsd]
437 | requiresBuild: true
438 | dev: true
439 | optional: true
440 |
441 | /@esbuild/linux-arm64@0.18.20:
442 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
443 | engines: {node: '>=12'}
444 | cpu: [arm64]
445 | os: [linux]
446 | requiresBuild: true
447 | dev: true
448 | optional: true
449 |
450 | /@esbuild/linux-arm@0.18.20:
451 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
452 | engines: {node: '>=12'}
453 | cpu: [arm]
454 | os: [linux]
455 | requiresBuild: true
456 | dev: true
457 | optional: true
458 |
459 | /@esbuild/linux-ia32@0.18.20:
460 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
461 | engines: {node: '>=12'}
462 | cpu: [ia32]
463 | os: [linux]
464 | requiresBuild: true
465 | dev: true
466 | optional: true
467 |
468 | /@esbuild/linux-loong64@0.18.20:
469 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
470 | engines: {node: '>=12'}
471 | cpu: [loong64]
472 | os: [linux]
473 | requiresBuild: true
474 | dev: true
475 | optional: true
476 |
477 | /@esbuild/linux-mips64el@0.18.20:
478 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
479 | engines: {node: '>=12'}
480 | cpu: [mips64el]
481 | os: [linux]
482 | requiresBuild: true
483 | dev: true
484 | optional: true
485 |
486 | /@esbuild/linux-ppc64@0.18.20:
487 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
488 | engines: {node: '>=12'}
489 | cpu: [ppc64]
490 | os: [linux]
491 | requiresBuild: true
492 | dev: true
493 | optional: true
494 |
495 | /@esbuild/linux-riscv64@0.18.20:
496 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
497 | engines: {node: '>=12'}
498 | cpu: [riscv64]
499 | os: [linux]
500 | requiresBuild: true
501 | dev: true
502 | optional: true
503 |
504 | /@esbuild/linux-s390x@0.18.20:
505 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
506 | engines: {node: '>=12'}
507 | cpu: [s390x]
508 | os: [linux]
509 | requiresBuild: true
510 | dev: true
511 | optional: true
512 |
513 | /@esbuild/linux-x64@0.18.20:
514 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
515 | engines: {node: '>=12'}
516 | cpu: [x64]
517 | os: [linux]
518 | requiresBuild: true
519 | dev: true
520 | optional: true
521 |
522 | /@esbuild/netbsd-x64@0.18.20:
523 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
524 | engines: {node: '>=12'}
525 | cpu: [x64]
526 | os: [netbsd]
527 | requiresBuild: true
528 | dev: true
529 | optional: true
530 |
531 | /@esbuild/openbsd-x64@0.18.20:
532 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
533 | engines: {node: '>=12'}
534 | cpu: [x64]
535 | os: [openbsd]
536 | requiresBuild: true
537 | dev: true
538 | optional: true
539 |
540 | /@esbuild/sunos-x64@0.18.20:
541 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
542 | engines: {node: '>=12'}
543 | cpu: [x64]
544 | os: [sunos]
545 | requiresBuild: true
546 | dev: true
547 | optional: true
548 |
549 | /@esbuild/win32-arm64@0.18.20:
550 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
551 | engines: {node: '>=12'}
552 | cpu: [arm64]
553 | os: [win32]
554 | requiresBuild: true
555 | dev: true
556 | optional: true
557 |
558 | /@esbuild/win32-ia32@0.18.20:
559 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
560 | engines: {node: '>=12'}
561 | cpu: [ia32]
562 | os: [win32]
563 | requiresBuild: true
564 | dev: true
565 | optional: true
566 |
567 | /@esbuild/win32-x64@0.18.20:
568 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
569 | engines: {node: '>=12'}
570 | cpu: [x64]
571 | os: [win32]
572 | requiresBuild: true
573 | dev: true
574 | optional: true
575 |
576 | /@eslint-community/eslint-utils@4.4.0(eslint@8.47.0):
577 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
578 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
579 | peerDependencies:
580 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
581 | dependencies:
582 | eslint: 8.47.0
583 | eslint-visitor-keys: 3.4.3
584 | dev: true
585 |
586 | /@eslint-community/regexpp@4.6.2:
587 | resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==}
588 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
589 | dev: true
590 |
591 | /@eslint/eslintrc@2.1.2:
592 | resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==}
593 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
594 | dependencies:
595 | ajv: 6.12.6
596 | debug: 4.3.4
597 | espree: 9.6.1
598 | globals: 13.21.0
599 | ignore: 5.2.4
600 | import-fresh: 3.3.0
601 | js-yaml: 4.1.0
602 | minimatch: 3.1.2
603 | strip-json-comments: 3.1.1
604 | transitivePeerDependencies:
605 | - supports-color
606 | dev: true
607 |
608 | /@eslint/js@8.47.0:
609 | resolution: {integrity: sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==}
610 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
611 | dev: true
612 |
613 | /@humanwhocodes/config-array@0.11.10:
614 | resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==}
615 | engines: {node: '>=10.10.0'}
616 | dependencies:
617 | '@humanwhocodes/object-schema': 1.2.1
618 | debug: 4.3.4
619 | minimatch: 3.1.2
620 | transitivePeerDependencies:
621 | - supports-color
622 | dev: true
623 |
624 | /@humanwhocodes/module-importer@1.0.1:
625 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
626 | engines: {node: '>=12.22'}
627 | dev: true
628 |
629 | /@humanwhocodes/object-schema@1.2.1:
630 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
631 | dev: true
632 |
633 | /@jridgewell/gen-mapping@0.3.3:
634 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
635 | engines: {node: '>=6.0.0'}
636 | dependencies:
637 | '@jridgewell/set-array': 1.1.2
638 | '@jridgewell/sourcemap-codec': 1.4.15
639 | '@jridgewell/trace-mapping': 0.3.19
640 | dev: true
641 |
642 | /@jridgewell/resolve-uri@3.1.1:
643 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
644 | engines: {node: '>=6.0.0'}
645 | dev: true
646 |
647 | /@jridgewell/set-array@1.1.2:
648 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
649 | engines: {node: '>=6.0.0'}
650 | dev: true
651 |
652 | /@jridgewell/sourcemap-codec@1.4.15:
653 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
654 | dev: true
655 |
656 | /@jridgewell/trace-mapping@0.3.19:
657 | resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==}
658 | dependencies:
659 | '@jridgewell/resolve-uri': 3.1.1
660 | '@jridgewell/sourcemap-codec': 1.4.15
661 | dev: true
662 |
663 | /@msgpack/msgpack@2.8.0:
664 | resolution: {integrity: sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==}
665 | engines: {node: '>= 10'}
666 | dev: false
667 |
668 | /@nodelib/fs.scandir@2.1.5:
669 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
670 | engines: {node: '>= 8'}
671 | dependencies:
672 | '@nodelib/fs.stat': 2.0.5
673 | run-parallel: 1.2.0
674 | dev: true
675 |
676 | /@nodelib/fs.stat@2.0.5:
677 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
678 | engines: {node: '>= 8'}
679 | dev: true
680 |
681 | /@nodelib/fs.walk@1.2.8:
682 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
683 | engines: {node: '>= 8'}
684 | dependencies:
685 | '@nodelib/fs.scandir': 2.1.5
686 | fastq: 1.15.0
687 | dev: true
688 |
689 | /@types/json-schema@7.0.12:
690 | resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==}
691 | dev: true
692 |
693 | /@types/node@20.5.0:
694 | resolution: {integrity: sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==}
695 | dev: true
696 |
697 | /@types/prop-types@15.7.5:
698 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
699 | dev: true
700 |
701 | /@types/react-dom@18.2.7:
702 | resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==}
703 | dependencies:
704 | '@types/react': 18.2.20
705 | dev: true
706 |
707 | /@types/react@18.2.20:
708 | resolution: {integrity: sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==}
709 | dependencies:
710 | '@types/prop-types': 15.7.5
711 | '@types/scheduler': 0.16.3
712 | csstype: 3.1.2
713 | dev: true
714 |
715 | /@types/scheduler@0.16.3:
716 | resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
717 | dev: true
718 |
719 | /@types/semver@7.5.0:
720 | resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==}
721 | dev: true
722 |
723 | /@types/throttle-debounce@5.0.0:
724 | resolution: {integrity: sha512-Pb7k35iCGFcGPECoNE4DYp3Oyf2xcTd3FbFQxXUI9hEYKUl6YX+KLf7HrBmgVcD05nl50LIH6i+80js4iYmWbw==}
725 | dev: false
726 |
727 | /@types/triple-beam@1.3.3:
728 | resolution: {integrity: sha512-6tOUG+nVHn0cJbVp25JFayS5UE6+xlbcNF9Lo9mU7U0zk3zeUShZied4YEQZjy1JBF043FSkdXw8YkUJuVtB5g==}
729 | dev: false
730 |
731 | /@types/uuid@9.0.4:
732 | resolution: {integrity: sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA==}
733 | dev: false
734 |
735 | /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.47.0)(typescript@5.1.6):
736 | resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==}
737 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
738 | peerDependencies:
739 | '@typescript-eslint/parser': ^5.0.0
740 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
741 | typescript: '*'
742 | peerDependenciesMeta:
743 | typescript:
744 | optional: true
745 | dependencies:
746 | '@eslint-community/regexpp': 4.6.2
747 | '@typescript-eslint/parser': 5.62.0(eslint@8.47.0)(typescript@5.1.6)
748 | '@typescript-eslint/scope-manager': 5.62.0
749 | '@typescript-eslint/type-utils': 5.62.0(eslint@8.47.0)(typescript@5.1.6)
750 | '@typescript-eslint/utils': 5.62.0(eslint@8.47.0)(typescript@5.1.6)
751 | debug: 4.3.4
752 | eslint: 8.47.0
753 | graphemer: 1.4.0
754 | ignore: 5.2.4
755 | natural-compare-lite: 1.4.0
756 | semver: 7.5.4
757 | tsutils: 3.21.0(typescript@5.1.6)
758 | typescript: 5.1.6
759 | transitivePeerDependencies:
760 | - supports-color
761 | dev: true
762 |
763 | /@typescript-eslint/parser@5.62.0(eslint@8.47.0)(typescript@5.1.6):
764 | resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==}
765 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
766 | peerDependencies:
767 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
768 | typescript: '*'
769 | peerDependenciesMeta:
770 | typescript:
771 | optional: true
772 | dependencies:
773 | '@typescript-eslint/scope-manager': 5.62.0
774 | '@typescript-eslint/types': 5.62.0
775 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6)
776 | debug: 4.3.4
777 | eslint: 8.47.0
778 | typescript: 5.1.6
779 | transitivePeerDependencies:
780 | - supports-color
781 | dev: true
782 |
783 | /@typescript-eslint/scope-manager@5.62.0:
784 | resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
785 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
786 | dependencies:
787 | '@typescript-eslint/types': 5.62.0
788 | '@typescript-eslint/visitor-keys': 5.62.0
789 | dev: true
790 |
791 | /@typescript-eslint/type-utils@5.62.0(eslint@8.47.0)(typescript@5.1.6):
792 | resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==}
793 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
794 | peerDependencies:
795 | eslint: '*'
796 | typescript: '*'
797 | peerDependenciesMeta:
798 | typescript:
799 | optional: true
800 | dependencies:
801 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6)
802 | '@typescript-eslint/utils': 5.62.0(eslint@8.47.0)(typescript@5.1.6)
803 | debug: 4.3.4
804 | eslint: 8.47.0
805 | tsutils: 3.21.0(typescript@5.1.6)
806 | typescript: 5.1.6
807 | transitivePeerDependencies:
808 | - supports-color
809 | dev: true
810 |
811 | /@typescript-eslint/types@5.62.0:
812 | resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
813 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
814 | dev: true
815 |
816 | /@typescript-eslint/typescript-estree@5.62.0(typescript@5.1.6):
817 | resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
818 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
819 | peerDependencies:
820 | typescript: '*'
821 | peerDependenciesMeta:
822 | typescript:
823 | optional: true
824 | dependencies:
825 | '@typescript-eslint/types': 5.62.0
826 | '@typescript-eslint/visitor-keys': 5.62.0
827 | debug: 4.3.4
828 | globby: 11.1.0
829 | is-glob: 4.0.3
830 | semver: 7.5.4
831 | tsutils: 3.21.0(typescript@5.1.6)
832 | typescript: 5.1.6
833 | transitivePeerDependencies:
834 | - supports-color
835 | dev: true
836 |
837 | /@typescript-eslint/utils@5.62.0(eslint@8.47.0)(typescript@5.1.6):
838 | resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
839 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
840 | peerDependencies:
841 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
842 | dependencies:
843 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0)
844 | '@types/json-schema': 7.0.12
845 | '@types/semver': 7.5.0
846 | '@typescript-eslint/scope-manager': 5.62.0
847 | '@typescript-eslint/types': 5.62.0
848 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6)
849 | eslint: 8.47.0
850 | eslint-scope: 5.1.1
851 | semver: 7.5.4
852 | transitivePeerDependencies:
853 | - supports-color
854 | - typescript
855 | dev: true
856 |
857 | /@typescript-eslint/visitor-keys@5.62.0:
858 | resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
859 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
860 | dependencies:
861 | '@typescript-eslint/types': 5.62.0
862 | eslint-visitor-keys: 3.4.3
863 | dev: true
864 |
865 | /@vitejs/plugin-react@4.0.4(vite@4.4.9):
866 | resolution: {integrity: sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==}
867 | engines: {node: ^14.18.0 || >=16.0.0}
868 | peerDependencies:
869 | vite: ^4.2.0
870 | dependencies:
871 | '@babel/core': 7.22.10
872 | '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.10)
873 | '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.10)
874 | react-refresh: 0.14.0
875 | vite: 4.4.9(@types/node@20.5.0)
876 | transitivePeerDependencies:
877 | - supports-color
878 | dev: true
879 |
880 | /@vlcn.io/crsqlite-wasm@0.15.2:
881 | resolution: {integrity: sha512-yftBNDo6oMUJmEpUYFeh5iftJVoYiXpECvjvAFVXaWX7FPaV+kTKtWK3I4x4mB9rXXu1gk1+12E78HNZO1a55w==}
882 | dependencies:
883 | '@vlcn.io/wa-sqlite': 0.21.0
884 | '@vlcn.io/xplat-api': 0.14.1
885 | async-mutex: 0.4.0
886 | dev: false
887 |
888 | /@vlcn.io/crsqlite@0.15.1:
889 | resolution: {integrity: sha512-TE5Vks7/aOqfhSZ1BPV0+C+X4Mz6aTZ7SqwDUNAMTrxdkC3wgzaXB+8MbsEpfFyd7dcAMjdE1bBnFXNFANGNeQ==}
890 | requiresBuild: true
891 | dev: false
892 |
893 | /@vlcn.io/logger-provider@0.1.2:
894 | resolution: {integrity: sha512-vLYcd3bR97rG8ePEvMDd0xgOinTWaF8quxdSQ939Fa9oIYbcUtLZw5dJ9KsJD6H7Axz8xfltQmgayqdXwiqBsQ==}
895 | dependencies:
896 | winston: 3.10.0
897 | dev: false
898 |
899 | /@vlcn.io/react@3.0.3(react@18.2.0):
900 | resolution: {integrity: sha512-fodFg+/XtGJdeO3q/agfl30MXmoBs/xC4653Cuzys+WlQjL5tfzJlEPW9hOByVNa+SWffzbPm+RIeBKksoTlMg==}
901 | peerDependencies:
902 | react: ^18
903 | dependencies:
904 | '@vlcn.io/crsqlite-wasm': 0.15.2
905 | '@vlcn.io/rx-tbl': 0.14.1
906 | '@vlcn.io/typed-sql': 0.2.13
907 | '@vlcn.io/ws-client': 0.1.2
908 | '@vlcn.io/xplat-api': 0.14.1
909 | async-mutex: 0.4.0
910 | react: 18.2.0
911 | dev: false
912 |
913 | /@vlcn.io/rx-tbl@0.14.1:
914 | resolution: {integrity: sha512-sUDMzZR0SWSUOSUOZ+raTSVTQXlN/z0Gk4A0Kol6gMfhnZCJW5hu5wMOjGu2EMR+wWdDVJTfvRsw47Nz10Kb8A==}
915 | dependencies:
916 | '@vlcn.io/xplat-api': 0.14.1
917 | dev: false
918 |
919 | /@vlcn.io/sync-p2p@0.13.1:
920 | resolution: {integrity: sha512-MXWjm9uYVshpaDfgFJLiZVTftnDQYgy/mUmdSm8Ro/57poks01YmyLvmoe82vJd19s1iVXDy4GkY70YwZPyiCQ==}
921 | dependencies:
922 | '@types/uuid': 9.0.4
923 | '@vlcn.io/xplat-api': 0.14.1
924 | peerjs: 1.5.0
925 | uuid: 9.0.0
926 | dev: false
927 |
928 | /@vlcn.io/typed-sql@0.2.13:
929 | resolution: {integrity: sha512-gPwhZ4nmkA9+S5gUGJ5DH/O9EKDXroSB0LiF7nBXtAluISwrb/h+VI6FQY8Pc8TBQcLYbCKHDIF2rWXaFWPrig==}
930 | dev: false
931 |
932 | /@vlcn.io/wa-sqlite@0.21.0:
933 | resolution: {integrity: sha512-aCeTGIGyi+HOv8wzJQ8n4lG9XqjjBEKVAPLXq/dekW6AM/x0ITA5vAQ7YUhpn9xNq3U1cp5DPIX+vzMkpsRNww==}
934 | dev: false
935 |
936 | /@vlcn.io/ws-browserdb@0.1.2:
937 | resolution: {integrity: sha512-5LqRH0UpoWIzjCYzr4tyd9NRwenKea3nI1+cerhOIIvpCgcw2QqmW2a5PKr/lh8I9FIV1VgXSfBibOOIFkCaYg==}
938 | dependencies:
939 | '@types/throttle-debounce': 5.0.0
940 | '@vlcn.io/crsqlite-wasm': 0.15.2
941 | '@vlcn.io/rx-tbl': 0.14.1
942 | '@vlcn.io/ws-client': 0.1.2
943 | '@vlcn.io/ws-common': 0.1.2
944 | '@vlcn.io/xplat-api': 0.14.1
945 | dev: false
946 |
947 | /@vlcn.io/ws-client@0.1.2:
948 | resolution: {integrity: sha512-DFrb4rocRVEoYk/Fwm68+bzZaUkAlOo8Eu3J2W20C01IvNM2LS69BgAQv5A2DhBv5DuKSvbuFNwxRAzYpZkxUA==}
949 | dependencies:
950 | '@types/throttle-debounce': 5.0.0
951 | '@vlcn.io/ws-common': 0.1.2
952 | dev: false
953 |
954 | /@vlcn.io/ws-common@0.1.2:
955 | resolution: {integrity: sha512-rUx/1HsVZB1AMS2eldXljbF+P72DtVvUip+qybavJuho57LVtcJQfqJSfyXaMgVVuvvtqlECssS7e9SF41CMWA==}
956 | dependencies:
957 | lib0: 0.2.85
958 | dev: false
959 |
960 | /@vlcn.io/ws-server@0.1.2:
961 | resolution: {integrity: sha512-ZJg1Q6JEQsIIp6zP7PidKx8GWZfcHs8T4YPGzxHNgOAR79Zcitd0BmjZWrbsFwrKd6I7GrJ9srEt0+Br+tTMfw==}
962 | dependencies:
963 | '@vlcn.io/crsqlite': 0.15.1
964 | '@vlcn.io/logger-provider': 0.1.2
965 | '@vlcn.io/ws-common': 0.1.2
966 | better-sqlite3: 8.6.0
967 | chokidar: 3.5.3
968 | throttle-debounce: 5.0.0
969 | winston: 3.10.0
970 | ws: 8.14.1
971 | transitivePeerDependencies:
972 | - bufferutil
973 | - utf-8-validate
974 | dev: false
975 |
976 | /@vlcn.io/xplat-api@0.14.1:
977 | resolution: {integrity: sha512-Y63WDk0kkt6i1WzlD6StiFXXHP+YJaDO/SW0S9+dyoEZDvkDLHr1HrKsfBn1JreBnbCd5fOhm/gRP49m1Ksfhg==}
978 | dependencies:
979 | comlink: 4.4.1
980 | dev: false
981 |
982 | /accepts@1.3.8:
983 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
984 | engines: {node: '>= 0.6'}
985 | dependencies:
986 | mime-types: 2.1.35
987 | negotiator: 0.6.3
988 | dev: false
989 |
990 | /acorn-jsx@5.3.2(acorn@8.10.0):
991 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
992 | peerDependencies:
993 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
994 | dependencies:
995 | acorn: 8.10.0
996 | dev: true
997 |
998 | /acorn@8.10.0:
999 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
1000 | engines: {node: '>=0.4.0'}
1001 | hasBin: true
1002 | dev: true
1003 |
1004 | /ajv@6.12.6:
1005 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
1006 | dependencies:
1007 | fast-deep-equal: 3.1.3
1008 | fast-json-stable-stringify: 2.1.0
1009 | json-schema-traverse: 0.4.1
1010 | uri-js: 4.4.1
1011 | dev: true
1012 |
1013 | /ansi-regex@5.0.1:
1014 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
1015 | engines: {node: '>=8'}
1016 | dev: true
1017 |
1018 | /ansi-styles@3.2.1:
1019 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
1020 | engines: {node: '>=4'}
1021 | dependencies:
1022 | color-convert: 1.9.3
1023 | dev: true
1024 |
1025 | /ansi-styles@4.3.0:
1026 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
1027 | engines: {node: '>=8'}
1028 | dependencies:
1029 | color-convert: 2.0.1
1030 | dev: true
1031 |
1032 | /anymatch@3.1.3:
1033 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
1034 | engines: {node: '>= 8'}
1035 | dependencies:
1036 | normalize-path: 3.0.0
1037 | picomatch: 2.3.1
1038 | dev: false
1039 |
1040 | /argparse@2.0.1:
1041 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
1042 | dev: true
1043 |
1044 | /array-flatten@1.1.1:
1045 | resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
1046 | dev: false
1047 |
1048 | /array-union@2.1.0:
1049 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
1050 | engines: {node: '>=8'}
1051 | dev: true
1052 |
1053 | /async-mutex@0.4.0:
1054 | resolution: {integrity: sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==}
1055 | dependencies:
1056 | tslib: 2.6.2
1057 | dev: false
1058 |
1059 | /async@3.2.4:
1060 | resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==}
1061 | dev: false
1062 |
1063 | /balanced-match@1.0.2:
1064 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
1065 | dev: true
1066 |
1067 | /base64-js@1.5.1:
1068 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
1069 | dev: false
1070 |
1071 | /better-sqlite3@8.6.0:
1072 | resolution: {integrity: sha512-jwAudeiTMTSyby+/SfbHDebShbmC2MCH8mU2+DXi0WJfv13ypEJm47cd3kljmy/H130CazEvkf2Li//ewcMJ1g==}
1073 | requiresBuild: true
1074 | dependencies:
1075 | bindings: 1.5.0
1076 | prebuild-install: 7.1.1
1077 | dev: false
1078 |
1079 | /binary-extensions@2.2.0:
1080 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
1081 | engines: {node: '>=8'}
1082 | dev: false
1083 |
1084 | /bindings@1.5.0:
1085 | resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
1086 | dependencies:
1087 | file-uri-to-path: 1.0.0
1088 | dev: false
1089 |
1090 | /bl@4.1.0:
1091 | resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
1092 | dependencies:
1093 | buffer: 5.7.1
1094 | inherits: 2.0.4
1095 | readable-stream: 3.6.2
1096 | dev: false
1097 |
1098 | /body-parser@1.20.1:
1099 | resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
1100 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
1101 | dependencies:
1102 | bytes: 3.1.2
1103 | content-type: 1.0.5
1104 | debug: 2.6.9
1105 | depd: 2.0.0
1106 | destroy: 1.2.0
1107 | http-errors: 2.0.0
1108 | iconv-lite: 0.4.24
1109 | on-finished: 2.4.1
1110 | qs: 6.11.0
1111 | raw-body: 2.5.1
1112 | type-is: 1.6.18
1113 | unpipe: 1.0.0
1114 | transitivePeerDependencies:
1115 | - supports-color
1116 | dev: false
1117 |
1118 | /brace-expansion@1.1.11:
1119 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
1120 | dependencies:
1121 | balanced-match: 1.0.2
1122 | concat-map: 0.0.1
1123 | dev: true
1124 |
1125 | /braces@3.0.2:
1126 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
1127 | engines: {node: '>=8'}
1128 | dependencies:
1129 | fill-range: 7.0.1
1130 |
1131 | /browserslist@4.21.10:
1132 | resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==}
1133 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
1134 | hasBin: true
1135 | dependencies:
1136 | caniuse-lite: 1.0.30001521
1137 | electron-to-chromium: 1.4.494
1138 | node-releases: 2.0.13
1139 | update-browserslist-db: 1.0.11(browserslist@4.21.10)
1140 | dev: true
1141 |
1142 | /buffer@5.7.1:
1143 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
1144 | dependencies:
1145 | base64-js: 1.5.1
1146 | ieee754: 1.2.1
1147 | dev: false
1148 |
1149 | /bytes@3.1.2:
1150 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
1151 | engines: {node: '>= 0.8'}
1152 | dev: false
1153 |
1154 | /call-bind@1.0.2:
1155 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
1156 | dependencies:
1157 | function-bind: 1.1.1
1158 | get-intrinsic: 1.2.1
1159 | dev: false
1160 |
1161 | /callsites@3.1.0:
1162 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
1163 | engines: {node: '>=6'}
1164 | dev: true
1165 |
1166 | /caniuse-lite@1.0.30001521:
1167 | resolution: {integrity: sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==}
1168 | dev: true
1169 |
1170 | /cbor-extract@2.1.1:
1171 | resolution: {integrity: sha512-1UX977+L+zOJHsp0mWFG13GLwO6ucKgSmSW6JTl8B9GUvACvHeIVpFqhU92299Z6PfD09aTXDell5p+lp1rUFA==}
1172 | hasBin: true
1173 | requiresBuild: true
1174 | dependencies:
1175 | node-gyp-build-optional-packages: 5.0.3
1176 | optionalDependencies:
1177 | '@cbor-extract/cbor-extract-darwin-arm64': 2.1.1
1178 | '@cbor-extract/cbor-extract-darwin-x64': 2.1.1
1179 | '@cbor-extract/cbor-extract-linux-arm': 2.1.1
1180 | '@cbor-extract/cbor-extract-linux-arm64': 2.1.1
1181 | '@cbor-extract/cbor-extract-linux-x64': 2.1.1
1182 | '@cbor-extract/cbor-extract-win32-x64': 2.1.1
1183 | dev: false
1184 | optional: true
1185 |
1186 | /cbor-x@1.5.4:
1187 | resolution: {integrity: sha512-PVKILDn+Rf6MRhhcyzGXi5eizn1i0i3F8Fe6UMMxXBnWkalq9+C5+VTmlIjAYM4iF2IYF2N+zToqAfYOp+3rfw==}
1188 | optionalDependencies:
1189 | cbor-extract: 2.1.1
1190 | dev: false
1191 |
1192 | /chalk@2.4.2:
1193 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
1194 | engines: {node: '>=4'}
1195 | dependencies:
1196 | ansi-styles: 3.2.1
1197 | escape-string-regexp: 1.0.5
1198 | supports-color: 5.5.0
1199 | dev: true
1200 |
1201 | /chalk@4.1.2:
1202 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
1203 | engines: {node: '>=10'}
1204 | dependencies:
1205 | ansi-styles: 4.3.0
1206 | supports-color: 7.2.0
1207 | dev: true
1208 |
1209 | /chokidar@3.5.3:
1210 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
1211 | engines: {node: '>= 8.10.0'}
1212 | dependencies:
1213 | anymatch: 3.1.3
1214 | braces: 3.0.2
1215 | glob-parent: 5.1.2
1216 | is-binary-path: 2.1.0
1217 | is-glob: 4.0.3
1218 | normalize-path: 3.0.0
1219 | readdirp: 3.6.0
1220 | optionalDependencies:
1221 | fsevents: 2.3.2
1222 | dev: false
1223 |
1224 | /chownr@1.1.4:
1225 | resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
1226 | dev: false
1227 |
1228 | /color-convert@1.9.3:
1229 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
1230 | dependencies:
1231 | color-name: 1.1.3
1232 |
1233 | /color-convert@2.0.1:
1234 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1235 | engines: {node: '>=7.0.0'}
1236 | dependencies:
1237 | color-name: 1.1.4
1238 | dev: true
1239 |
1240 | /color-name@1.1.3:
1241 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
1242 |
1243 | /color-name@1.1.4:
1244 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1245 |
1246 | /color-string@1.9.1:
1247 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
1248 | dependencies:
1249 | color-name: 1.1.4
1250 | simple-swizzle: 0.2.2
1251 | dev: false
1252 |
1253 | /color@3.2.1:
1254 | resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==}
1255 | dependencies:
1256 | color-convert: 1.9.3
1257 | color-string: 1.9.1
1258 | dev: false
1259 |
1260 | /colorspace@1.1.4:
1261 | resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==}
1262 | dependencies:
1263 | color: 3.2.1
1264 | text-hex: 1.0.0
1265 | dev: false
1266 |
1267 | /comlink@4.4.1:
1268 | resolution: {integrity: sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==}
1269 | dev: false
1270 |
1271 | /concat-map@0.0.1:
1272 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
1273 | dev: true
1274 |
1275 | /content-disposition@0.5.4:
1276 | resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
1277 | engines: {node: '>= 0.6'}
1278 | dependencies:
1279 | safe-buffer: 5.2.1
1280 | dev: false
1281 |
1282 | /content-type@1.0.5:
1283 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
1284 | engines: {node: '>= 0.6'}
1285 | dev: false
1286 |
1287 | /convert-source-map@1.9.0:
1288 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
1289 | dev: true
1290 |
1291 | /cookie-signature@1.0.6:
1292 | resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=}
1293 | dev: false
1294 |
1295 | /cookie@0.5.0:
1296 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
1297 | engines: {node: '>= 0.6'}
1298 | dev: false
1299 |
1300 | /cors@2.8.5:
1301 | resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
1302 | engines: {node: '>= 0.10'}
1303 | dependencies:
1304 | object-assign: 4.1.1
1305 | vary: 1.1.2
1306 | dev: false
1307 |
1308 | /cross-spawn@7.0.3:
1309 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
1310 | engines: {node: '>= 8'}
1311 | dependencies:
1312 | path-key: 3.1.1
1313 | shebang-command: 2.0.0
1314 | which: 2.0.2
1315 | dev: true
1316 |
1317 | /csstype@3.1.2:
1318 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
1319 | dev: true
1320 |
1321 | /debug@2.6.9:
1322 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
1323 | peerDependencies:
1324 | supports-color: '*'
1325 | peerDependenciesMeta:
1326 | supports-color:
1327 | optional: true
1328 | dependencies:
1329 | ms: 2.0.0
1330 | dev: false
1331 |
1332 | /debug@4.3.4:
1333 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
1334 | engines: {node: '>=6.0'}
1335 | peerDependencies:
1336 | supports-color: '*'
1337 | peerDependenciesMeta:
1338 | supports-color:
1339 | optional: true
1340 | dependencies:
1341 | ms: 2.1.2
1342 | dev: true
1343 |
1344 | /decompress-response@6.0.0:
1345 | resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
1346 | engines: {node: '>=10'}
1347 | dependencies:
1348 | mimic-response: 3.1.0
1349 | dev: false
1350 |
1351 | /deep-extend@0.6.0:
1352 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
1353 | engines: {node: '>=4.0.0'}
1354 | dev: false
1355 |
1356 | /deep-is@0.1.4:
1357 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
1358 | dev: true
1359 |
1360 | /depd@2.0.0:
1361 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
1362 | engines: {node: '>= 0.8'}
1363 | dev: false
1364 |
1365 | /destroy@1.2.0:
1366 | resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
1367 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
1368 | dev: false
1369 |
1370 | /detect-libc@2.0.2:
1371 | resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==}
1372 | engines: {node: '>=8'}
1373 | dev: false
1374 |
1375 | /dir-glob@3.0.1:
1376 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
1377 | engines: {node: '>=8'}
1378 | dependencies:
1379 | path-type: 4.0.0
1380 | dev: true
1381 |
1382 | /doctrine@3.0.0:
1383 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
1384 | engines: {node: '>=6.0.0'}
1385 | dependencies:
1386 | esutils: 2.0.3
1387 | dev: true
1388 |
1389 | /ee-first@1.1.1:
1390 | resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
1391 | dev: false
1392 |
1393 | /electron-to-chromium@1.4.494:
1394 | resolution: {integrity: sha512-KF7wtsFFDu4ws1ZsSOt4pdmO1yWVNWCFtijVYZPUeW4SV7/hy/AESjLn/+qIWgq7mHscNOKAwN5AIM1+YAy+Ww==}
1395 | dev: true
1396 |
1397 | /enabled@2.0.0:
1398 | resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==}
1399 | dev: false
1400 |
1401 | /encodeurl@1.0.2:
1402 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
1403 | engines: {node: '>= 0.8'}
1404 | dev: false
1405 |
1406 | /end-of-stream@1.4.4:
1407 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
1408 | dependencies:
1409 | once: 1.4.0
1410 | dev: false
1411 |
1412 | /esbuild@0.18.20:
1413 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
1414 | engines: {node: '>=12'}
1415 | hasBin: true
1416 | requiresBuild: true
1417 | optionalDependencies:
1418 | '@esbuild/android-arm': 0.18.20
1419 | '@esbuild/android-arm64': 0.18.20
1420 | '@esbuild/android-x64': 0.18.20
1421 | '@esbuild/darwin-arm64': 0.18.20
1422 | '@esbuild/darwin-x64': 0.18.20
1423 | '@esbuild/freebsd-arm64': 0.18.20
1424 | '@esbuild/freebsd-x64': 0.18.20
1425 | '@esbuild/linux-arm': 0.18.20
1426 | '@esbuild/linux-arm64': 0.18.20
1427 | '@esbuild/linux-ia32': 0.18.20
1428 | '@esbuild/linux-loong64': 0.18.20
1429 | '@esbuild/linux-mips64el': 0.18.20
1430 | '@esbuild/linux-ppc64': 0.18.20
1431 | '@esbuild/linux-riscv64': 0.18.20
1432 | '@esbuild/linux-s390x': 0.18.20
1433 | '@esbuild/linux-x64': 0.18.20
1434 | '@esbuild/netbsd-x64': 0.18.20
1435 | '@esbuild/openbsd-x64': 0.18.20
1436 | '@esbuild/sunos-x64': 0.18.20
1437 | '@esbuild/win32-arm64': 0.18.20
1438 | '@esbuild/win32-ia32': 0.18.20
1439 | '@esbuild/win32-x64': 0.18.20
1440 | dev: true
1441 |
1442 | /escalade@3.1.1:
1443 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
1444 | engines: {node: '>=6'}
1445 | dev: true
1446 |
1447 | /escape-html@1.0.3:
1448 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
1449 | dev: false
1450 |
1451 | /escape-string-regexp@1.0.5:
1452 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
1453 | engines: {node: '>=0.8.0'}
1454 | dev: true
1455 |
1456 | /escape-string-regexp@4.0.0:
1457 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1458 | engines: {node: '>=10'}
1459 | dev: true
1460 |
1461 | /eslint-plugin-react-hooks@4.6.0(eslint@8.47.0):
1462 | resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
1463 | engines: {node: '>=10'}
1464 | peerDependencies:
1465 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
1466 | dependencies:
1467 | eslint: 8.47.0
1468 | dev: true
1469 |
1470 | /eslint-plugin-react-refresh@0.3.5(eslint@8.47.0):
1471 | resolution: {integrity: sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==}
1472 | peerDependencies:
1473 | eslint: '>=7'
1474 | dependencies:
1475 | eslint: 8.47.0
1476 | dev: true
1477 |
1478 | /eslint-scope@5.1.1:
1479 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
1480 | engines: {node: '>=8.0.0'}
1481 | dependencies:
1482 | esrecurse: 4.3.0
1483 | estraverse: 4.3.0
1484 | dev: true
1485 |
1486 | /eslint-scope@7.2.2:
1487 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
1488 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1489 | dependencies:
1490 | esrecurse: 4.3.0
1491 | estraverse: 5.3.0
1492 | dev: true
1493 |
1494 | /eslint-visitor-keys@3.4.3:
1495 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
1496 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1497 | dev: true
1498 |
1499 | /eslint@8.47.0:
1500 | resolution: {integrity: sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==}
1501 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1502 | hasBin: true
1503 | dependencies:
1504 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0)
1505 | '@eslint-community/regexpp': 4.6.2
1506 | '@eslint/eslintrc': 2.1.2
1507 | '@eslint/js': 8.47.0
1508 | '@humanwhocodes/config-array': 0.11.10
1509 | '@humanwhocodes/module-importer': 1.0.1
1510 | '@nodelib/fs.walk': 1.2.8
1511 | ajv: 6.12.6
1512 | chalk: 4.1.2
1513 | cross-spawn: 7.0.3
1514 | debug: 4.3.4
1515 | doctrine: 3.0.0
1516 | escape-string-regexp: 4.0.0
1517 | eslint-scope: 7.2.2
1518 | eslint-visitor-keys: 3.4.3
1519 | espree: 9.6.1
1520 | esquery: 1.5.0
1521 | esutils: 2.0.3
1522 | fast-deep-equal: 3.1.3
1523 | file-entry-cache: 6.0.1
1524 | find-up: 5.0.0
1525 | glob-parent: 6.0.2
1526 | globals: 13.21.0
1527 | graphemer: 1.4.0
1528 | ignore: 5.2.4
1529 | imurmurhash: 0.1.4
1530 | is-glob: 4.0.3
1531 | is-path-inside: 3.0.3
1532 | js-yaml: 4.1.0
1533 | json-stable-stringify-without-jsonify: 1.0.1
1534 | levn: 0.4.1
1535 | lodash.merge: 4.6.2
1536 | minimatch: 3.1.2
1537 | natural-compare: 1.4.0
1538 | optionator: 0.9.3
1539 | strip-ansi: 6.0.1
1540 | text-table: 0.2.0
1541 | transitivePeerDependencies:
1542 | - supports-color
1543 | dev: true
1544 |
1545 | /espree@9.6.1:
1546 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
1547 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1548 | dependencies:
1549 | acorn: 8.10.0
1550 | acorn-jsx: 5.3.2(acorn@8.10.0)
1551 | eslint-visitor-keys: 3.4.3
1552 | dev: true
1553 |
1554 | /esquery@1.5.0:
1555 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
1556 | engines: {node: '>=0.10'}
1557 | dependencies:
1558 | estraverse: 5.3.0
1559 | dev: true
1560 |
1561 | /esrecurse@4.3.0:
1562 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
1563 | engines: {node: '>=4.0'}
1564 | dependencies:
1565 | estraverse: 5.3.0
1566 | dev: true
1567 |
1568 | /estraverse@4.3.0:
1569 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
1570 | engines: {node: '>=4.0'}
1571 | dev: true
1572 |
1573 | /estraverse@5.3.0:
1574 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1575 | engines: {node: '>=4.0'}
1576 | dev: true
1577 |
1578 | /esutils@2.0.3:
1579 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1580 | engines: {node: '>=0.10.0'}
1581 | dev: true
1582 |
1583 | /etag@1.8.1:
1584 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
1585 | engines: {node: '>= 0.6'}
1586 | dev: false
1587 |
1588 | /eventemitter3@4.0.7:
1589 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
1590 | dev: false
1591 |
1592 | /expand-template@2.0.3:
1593 | resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
1594 | engines: {node: '>=6'}
1595 | dev: false
1596 |
1597 | /express@4.18.2:
1598 | resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
1599 | engines: {node: '>= 0.10.0'}
1600 | dependencies:
1601 | accepts: 1.3.8
1602 | array-flatten: 1.1.1
1603 | body-parser: 1.20.1
1604 | content-disposition: 0.5.4
1605 | content-type: 1.0.5
1606 | cookie: 0.5.0
1607 | cookie-signature: 1.0.6
1608 | debug: 2.6.9
1609 | depd: 2.0.0
1610 | encodeurl: 1.0.2
1611 | escape-html: 1.0.3
1612 | etag: 1.8.1
1613 | finalhandler: 1.2.0
1614 | fresh: 0.5.2
1615 | http-errors: 2.0.0
1616 | merge-descriptors: 1.0.1
1617 | methods: 1.1.2
1618 | on-finished: 2.4.1
1619 | parseurl: 1.3.3
1620 | path-to-regexp: 0.1.7
1621 | proxy-addr: 2.0.7
1622 | qs: 6.11.0
1623 | range-parser: 1.2.1
1624 | safe-buffer: 5.2.1
1625 | send: 0.18.0
1626 | serve-static: 1.15.0
1627 | setprototypeof: 1.2.0
1628 | statuses: 2.0.1
1629 | type-is: 1.6.18
1630 | utils-merge: 1.0.1
1631 | vary: 1.1.2
1632 | transitivePeerDependencies:
1633 | - supports-color
1634 | dev: false
1635 |
1636 | /fast-deep-equal@3.1.3:
1637 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1638 | dev: true
1639 |
1640 | /fast-glob@3.3.1:
1641 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
1642 | engines: {node: '>=8.6.0'}
1643 | dependencies:
1644 | '@nodelib/fs.stat': 2.0.5
1645 | '@nodelib/fs.walk': 1.2.8
1646 | glob-parent: 5.1.2
1647 | merge2: 1.4.1
1648 | micromatch: 4.0.5
1649 | dev: true
1650 |
1651 | /fast-json-stable-stringify@2.1.0:
1652 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1653 | dev: true
1654 |
1655 | /fast-levenshtein@2.0.6:
1656 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1657 | dev: true
1658 |
1659 | /fastq@1.15.0:
1660 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
1661 | dependencies:
1662 | reusify: 1.0.4
1663 | dev: true
1664 |
1665 | /fecha@4.2.3:
1666 | resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==}
1667 | dev: false
1668 |
1669 | /file-entry-cache@6.0.1:
1670 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
1671 | engines: {node: ^10.12.0 || >=12.0.0}
1672 | dependencies:
1673 | flat-cache: 3.0.4
1674 | dev: true
1675 |
1676 | /file-uri-to-path@1.0.0:
1677 | resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
1678 | dev: false
1679 |
1680 | /fill-range@7.0.1:
1681 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1682 | engines: {node: '>=8'}
1683 | dependencies:
1684 | to-regex-range: 5.0.1
1685 |
1686 | /finalhandler@1.2.0:
1687 | resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
1688 | engines: {node: '>= 0.8'}
1689 | dependencies:
1690 | debug: 2.6.9
1691 | encodeurl: 1.0.2
1692 | escape-html: 1.0.3
1693 | on-finished: 2.4.1
1694 | parseurl: 1.3.3
1695 | statuses: 2.0.1
1696 | unpipe: 1.0.0
1697 | transitivePeerDependencies:
1698 | - supports-color
1699 | dev: false
1700 |
1701 | /find-up@5.0.0:
1702 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1703 | engines: {node: '>=10'}
1704 | dependencies:
1705 | locate-path: 6.0.0
1706 | path-exists: 4.0.0
1707 | dev: true
1708 |
1709 | /flat-cache@3.0.4:
1710 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
1711 | engines: {node: ^10.12.0 || >=12.0.0}
1712 | dependencies:
1713 | flatted: 3.2.7
1714 | rimraf: 3.0.2
1715 | dev: true
1716 |
1717 | /flatted@3.2.7:
1718 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
1719 | dev: true
1720 |
1721 | /fn.name@1.1.0:
1722 | resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==}
1723 | dev: false
1724 |
1725 | /forwarded@0.2.0:
1726 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
1727 | engines: {node: '>= 0.6'}
1728 | dev: false
1729 |
1730 | /fresh@0.5.2:
1731 | resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
1732 | engines: {node: '>= 0.6'}
1733 | dev: false
1734 |
1735 | /fs-constants@1.0.0:
1736 | resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
1737 | dev: false
1738 |
1739 | /fs.realpath@1.0.0:
1740 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1741 | dev: true
1742 |
1743 | /fsevents@2.3.2:
1744 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
1745 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1746 | os: [darwin]
1747 | requiresBuild: true
1748 | optional: true
1749 |
1750 | /function-bind@1.1.1:
1751 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1752 | dev: false
1753 |
1754 | /gensync@1.0.0-beta.2:
1755 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
1756 | engines: {node: '>=6.9.0'}
1757 | dev: true
1758 |
1759 | /get-intrinsic@1.2.1:
1760 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
1761 | dependencies:
1762 | function-bind: 1.1.1
1763 | has: 1.0.3
1764 | has-proto: 1.0.1
1765 | has-symbols: 1.0.3
1766 | dev: false
1767 |
1768 | /github-from-package@0.0.0:
1769 | resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
1770 | dev: false
1771 |
1772 | /glob-parent@5.1.2:
1773 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1774 | engines: {node: '>= 6'}
1775 | dependencies:
1776 | is-glob: 4.0.3
1777 |
1778 | /glob-parent@6.0.2:
1779 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1780 | engines: {node: '>=10.13.0'}
1781 | dependencies:
1782 | is-glob: 4.0.3
1783 | dev: true
1784 |
1785 | /glob@7.2.3:
1786 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1787 | dependencies:
1788 | fs.realpath: 1.0.0
1789 | inflight: 1.0.6
1790 | inherits: 2.0.4
1791 | minimatch: 3.1.2
1792 | once: 1.4.0
1793 | path-is-absolute: 1.0.1
1794 | dev: true
1795 |
1796 | /globals@11.12.0:
1797 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
1798 | engines: {node: '>=4'}
1799 | dev: true
1800 |
1801 | /globals@13.21.0:
1802 | resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==}
1803 | engines: {node: '>=8'}
1804 | dependencies:
1805 | type-fest: 0.20.2
1806 | dev: true
1807 |
1808 | /globby@11.1.0:
1809 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1810 | engines: {node: '>=10'}
1811 | dependencies:
1812 | array-union: 2.1.0
1813 | dir-glob: 3.0.1
1814 | fast-glob: 3.3.1
1815 | ignore: 5.2.4
1816 | merge2: 1.4.1
1817 | slash: 3.0.0
1818 | dev: true
1819 |
1820 | /graphemer@1.4.0:
1821 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
1822 | dev: true
1823 |
1824 | /has-flag@3.0.0:
1825 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
1826 | engines: {node: '>=4'}
1827 | dev: true
1828 |
1829 | /has-flag@4.0.0:
1830 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1831 | engines: {node: '>=8'}
1832 | dev: true
1833 |
1834 | /has-proto@1.0.1:
1835 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
1836 | engines: {node: '>= 0.4'}
1837 | dev: false
1838 |
1839 | /has-symbols@1.0.3:
1840 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
1841 | engines: {node: '>= 0.4'}
1842 | dev: false
1843 |
1844 | /has@1.0.3:
1845 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
1846 | engines: {node: '>= 0.4.0'}
1847 | dependencies:
1848 | function-bind: 1.1.1
1849 | dev: false
1850 |
1851 | /http-errors@2.0.0:
1852 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
1853 | engines: {node: '>= 0.8'}
1854 | dependencies:
1855 | depd: 2.0.0
1856 | inherits: 2.0.4
1857 | setprototypeof: 1.2.0
1858 | statuses: 2.0.1
1859 | toidentifier: 1.0.1
1860 | dev: false
1861 |
1862 | /iconv-lite@0.4.24:
1863 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
1864 | engines: {node: '>=0.10.0'}
1865 | dependencies:
1866 | safer-buffer: 2.1.2
1867 | dev: false
1868 |
1869 | /ieee754@1.2.1:
1870 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
1871 | dev: false
1872 |
1873 | /ignore@5.2.4:
1874 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
1875 | engines: {node: '>= 4'}
1876 | dev: true
1877 |
1878 | /import-fresh@3.3.0:
1879 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
1880 | engines: {node: '>=6'}
1881 | dependencies:
1882 | parent-module: 1.0.1
1883 | resolve-from: 4.0.0
1884 | dev: true
1885 |
1886 | /imurmurhash@0.1.4:
1887 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1888 | engines: {node: '>=0.8.19'}
1889 | dev: true
1890 |
1891 | /inflight@1.0.6:
1892 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1893 | dependencies:
1894 | once: 1.4.0
1895 | wrappy: 1.0.2
1896 | dev: true
1897 |
1898 | /inherits@2.0.4:
1899 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1900 |
1901 | /ini@1.3.8:
1902 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
1903 | dev: false
1904 |
1905 | /ipaddr.js@1.9.1:
1906 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
1907 | engines: {node: '>= 0.10'}
1908 | dev: false
1909 |
1910 | /is-arrayish@0.3.2:
1911 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
1912 | dev: false
1913 |
1914 | /is-binary-path@2.1.0:
1915 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1916 | engines: {node: '>=8'}
1917 | dependencies:
1918 | binary-extensions: 2.2.0
1919 | dev: false
1920 |
1921 | /is-extglob@2.1.1:
1922 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1923 | engines: {node: '>=0.10.0'}
1924 |
1925 | /is-glob@4.0.3:
1926 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1927 | engines: {node: '>=0.10.0'}
1928 | dependencies:
1929 | is-extglob: 2.1.1
1930 |
1931 | /is-number@7.0.0:
1932 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1933 | engines: {node: '>=0.12.0'}
1934 |
1935 | /is-path-inside@3.0.3:
1936 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
1937 | engines: {node: '>=8'}
1938 | dev: true
1939 |
1940 | /is-stream@2.0.1:
1941 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
1942 | engines: {node: '>=8'}
1943 | dev: false
1944 |
1945 | /isexe@2.0.0:
1946 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1947 | dev: true
1948 |
1949 | /isomorphic.js@0.2.5:
1950 | resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==}
1951 | dev: false
1952 |
1953 | /js-tokens@4.0.0:
1954 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1955 |
1956 | /js-yaml@4.1.0:
1957 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1958 | hasBin: true
1959 | dependencies:
1960 | argparse: 2.0.1
1961 | dev: true
1962 |
1963 | /jsesc@2.5.2:
1964 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
1965 | engines: {node: '>=4'}
1966 | hasBin: true
1967 | dev: true
1968 |
1969 | /json-schema-traverse@0.4.1:
1970 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1971 | dev: true
1972 |
1973 | /json-stable-stringify-without-jsonify@1.0.1:
1974 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1975 | dev: true
1976 |
1977 | /json5@2.2.3:
1978 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
1979 | engines: {node: '>=6'}
1980 | hasBin: true
1981 | dev: true
1982 |
1983 | /kuler@2.0.0:
1984 | resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==}
1985 | dev: false
1986 |
1987 | /levn@0.4.1:
1988 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1989 | engines: {node: '>= 0.8.0'}
1990 | dependencies:
1991 | prelude-ls: 1.2.1
1992 | type-check: 0.4.0
1993 | dev: true
1994 |
1995 | /lib0@0.2.85:
1996 | resolution: {integrity: sha512-vtAhVttLXCu3ps2OIsTz8CdKYKdcMo7ds1MNBIcSXz6vrY8sxASqpTi4vmsAIn7xjWvyT7haKcWW6woP6jebjQ==}
1997 | engines: {node: '>=16'}
1998 | hasBin: true
1999 | dependencies:
2000 | isomorphic.js: 0.2.5
2001 | dev: false
2002 |
2003 | /locate-path@6.0.0:
2004 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
2005 | engines: {node: '>=10'}
2006 | dependencies:
2007 | p-locate: 5.0.0
2008 | dev: true
2009 |
2010 | /lodash.merge@4.6.2:
2011 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
2012 | dev: true
2013 |
2014 | /logform@2.5.1:
2015 | resolution: {integrity: sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==}
2016 | dependencies:
2017 | '@colors/colors': 1.5.0
2018 | '@types/triple-beam': 1.3.3
2019 | fecha: 4.2.3
2020 | ms: 2.1.3
2021 | safe-stable-stringify: 2.4.3
2022 | triple-beam: 1.4.1
2023 | dev: false
2024 |
2025 | /loose-envify@1.4.0:
2026 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
2027 | hasBin: true
2028 | dependencies:
2029 | js-tokens: 4.0.0
2030 | dev: false
2031 |
2032 | /lru-cache@5.1.1:
2033 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
2034 | dependencies:
2035 | yallist: 3.1.1
2036 | dev: true
2037 |
2038 | /lru-cache@6.0.0:
2039 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
2040 | engines: {node: '>=10'}
2041 | dependencies:
2042 | yallist: 4.0.0
2043 |
2044 | /media-typer@0.3.0:
2045 | resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
2046 | engines: {node: '>= 0.6'}
2047 | dev: false
2048 |
2049 | /merge-descriptors@1.0.1:
2050 | resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=}
2051 | dev: false
2052 |
2053 | /merge2@1.4.1:
2054 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
2055 | engines: {node: '>= 8'}
2056 | dev: true
2057 |
2058 | /methods@1.1.2:
2059 | resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
2060 | engines: {node: '>= 0.6'}
2061 | dev: false
2062 |
2063 | /micromatch@4.0.5:
2064 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
2065 | engines: {node: '>=8.6'}
2066 | dependencies:
2067 | braces: 3.0.2
2068 | picomatch: 2.3.1
2069 | dev: true
2070 |
2071 | /mime-db@1.52.0:
2072 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
2073 | engines: {node: '>= 0.6'}
2074 | dev: false
2075 |
2076 | /mime-types@2.1.35:
2077 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
2078 | engines: {node: '>= 0.6'}
2079 | dependencies:
2080 | mime-db: 1.52.0
2081 | dev: false
2082 |
2083 | /mime@1.6.0:
2084 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
2085 | engines: {node: '>=4'}
2086 | hasBin: true
2087 | dev: false
2088 |
2089 | /mimic-response@3.1.0:
2090 | resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
2091 | engines: {node: '>=10'}
2092 | dev: false
2093 |
2094 | /minimatch@3.1.2:
2095 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
2096 | dependencies:
2097 | brace-expansion: 1.1.11
2098 | dev: true
2099 |
2100 | /minimist@1.2.8:
2101 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
2102 | dev: false
2103 |
2104 | /mkdirp-classic@0.5.3:
2105 | resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
2106 | dev: false
2107 |
2108 | /ms@2.0.0:
2109 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
2110 | dev: false
2111 |
2112 | /ms@2.1.2:
2113 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
2114 | dev: true
2115 |
2116 | /ms@2.1.3:
2117 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
2118 | dev: false
2119 |
2120 | /nanoid@3.3.6:
2121 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
2122 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
2123 | hasBin: true
2124 | dev: true
2125 |
2126 | /nanoid@4.0.2:
2127 | resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==}
2128 | engines: {node: ^14 || ^16 || >=18}
2129 | hasBin: true
2130 | dev: false
2131 |
2132 | /napi-build-utils@1.0.2:
2133 | resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
2134 | dev: false
2135 |
2136 | /natural-compare-lite@1.4.0:
2137 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
2138 | dev: true
2139 |
2140 | /natural-compare@1.4.0:
2141 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
2142 | dev: true
2143 |
2144 | /negotiator@0.6.3:
2145 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
2146 | engines: {node: '>= 0.6'}
2147 | dev: false
2148 |
2149 | /node-abi@3.47.0:
2150 | resolution: {integrity: sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==}
2151 | engines: {node: '>=10'}
2152 | dependencies:
2153 | semver: 7.5.4
2154 | dev: false
2155 |
2156 | /node-gyp-build-optional-packages@5.0.3:
2157 | resolution: {integrity: sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==}
2158 | hasBin: true
2159 | dev: false
2160 | optional: true
2161 |
2162 | /node-releases@2.0.13:
2163 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
2164 | dev: true
2165 |
2166 | /normalize-path@3.0.0:
2167 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
2168 | engines: {node: '>=0.10.0'}
2169 | dev: false
2170 |
2171 | /object-assign@4.1.1:
2172 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
2173 | engines: {node: '>=0.10.0'}
2174 | dev: false
2175 |
2176 | /object-inspect@1.12.3:
2177 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
2178 | dev: false
2179 |
2180 | /on-finished@2.4.1:
2181 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
2182 | engines: {node: '>= 0.8'}
2183 | dependencies:
2184 | ee-first: 1.1.1
2185 | dev: false
2186 |
2187 | /once@1.4.0:
2188 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
2189 | dependencies:
2190 | wrappy: 1.0.2
2191 |
2192 | /one-time@1.0.0:
2193 | resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==}
2194 | dependencies:
2195 | fn.name: 1.1.0
2196 | dev: false
2197 |
2198 | /optionator@0.9.3:
2199 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
2200 | engines: {node: '>= 0.8.0'}
2201 | dependencies:
2202 | '@aashutoshrathi/word-wrap': 1.2.6
2203 | deep-is: 0.1.4
2204 | fast-levenshtein: 2.0.6
2205 | levn: 0.4.1
2206 | prelude-ls: 1.2.1
2207 | type-check: 0.4.0
2208 | dev: true
2209 |
2210 | /p-limit@3.1.0:
2211 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
2212 | engines: {node: '>=10'}
2213 | dependencies:
2214 | yocto-queue: 0.1.0
2215 | dev: true
2216 |
2217 | /p-locate@5.0.0:
2218 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
2219 | engines: {node: '>=10'}
2220 | dependencies:
2221 | p-limit: 3.1.0
2222 | dev: true
2223 |
2224 | /parent-module@1.0.1:
2225 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
2226 | engines: {node: '>=6'}
2227 | dependencies:
2228 | callsites: 3.1.0
2229 | dev: true
2230 |
2231 | /parseurl@1.3.3:
2232 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
2233 | engines: {node: '>= 0.8'}
2234 | dev: false
2235 |
2236 | /path-exists@4.0.0:
2237 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
2238 | engines: {node: '>=8'}
2239 | dev: true
2240 |
2241 | /path-is-absolute@1.0.1:
2242 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
2243 | engines: {node: '>=0.10.0'}
2244 | dev: true
2245 |
2246 | /path-key@3.1.1:
2247 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
2248 | engines: {node: '>=8'}
2249 | dev: true
2250 |
2251 | /path-to-regexp@0.1.7:
2252 | resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
2253 | dev: false
2254 |
2255 | /path-type@4.0.0:
2256 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
2257 | engines: {node: '>=8'}
2258 | dev: true
2259 |
2260 | /peerjs-js-binarypack@2.0.0:
2261 | resolution: {integrity: sha512-wu+L0Qeg4IH2DXm3B6xKP5ODeCIovwEEO/Fu3MVqApPQeVLzSdZpFzQzPobh+sdhUWMQGEO7YxHeiwpPngLjqQ==}
2262 | engines: {node: '>= 14.0.0'}
2263 | dev: false
2264 |
2265 | /peerjs@1.5.0:
2266 | resolution: {integrity: sha512-NLZ73jRNE4aLq2pmVTiSkWmwf6cvt9cH72qJHnzaLH+I2CtoWVvY42U9/O0/tYE6UYwRYJ1ktKRs2DdZ1Jrgcg==}
2267 | engines: {node: '>= 14'}
2268 | dependencies:
2269 | '@msgpack/msgpack': 2.8.0
2270 | cbor-x: 1.5.4
2271 | eventemitter3: 4.0.7
2272 | peerjs-js-binarypack: 2.0.0
2273 | webrtc-adapter: 8.2.3
2274 | dev: false
2275 |
2276 | /picocolors@1.0.0:
2277 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
2278 | dev: true
2279 |
2280 | /picomatch@2.3.1:
2281 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
2282 | engines: {node: '>=8.6'}
2283 |
2284 | /postcss@8.4.28:
2285 | resolution: {integrity: sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==}
2286 | engines: {node: ^10 || ^12 || >=14}
2287 | dependencies:
2288 | nanoid: 3.3.6
2289 | picocolors: 1.0.0
2290 | source-map-js: 1.0.2
2291 | dev: true
2292 |
2293 | /prebuild-install@7.1.1:
2294 | resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==}
2295 | engines: {node: '>=10'}
2296 | hasBin: true
2297 | dependencies:
2298 | detect-libc: 2.0.2
2299 | expand-template: 2.0.3
2300 | github-from-package: 0.0.0
2301 | minimist: 1.2.8
2302 | mkdirp-classic: 0.5.3
2303 | napi-build-utils: 1.0.2
2304 | node-abi: 3.47.0
2305 | pump: 3.0.0
2306 | rc: 1.2.8
2307 | simple-get: 4.0.1
2308 | tar-fs: 2.1.1
2309 | tunnel-agent: 0.6.0
2310 | dev: false
2311 |
2312 | /prelude-ls@1.2.1:
2313 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
2314 | engines: {node: '>= 0.8.0'}
2315 | dev: true
2316 |
2317 | /proxy-addr@2.0.7:
2318 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
2319 | engines: {node: '>= 0.10'}
2320 | dependencies:
2321 | forwarded: 0.2.0
2322 | ipaddr.js: 1.9.1
2323 | dev: false
2324 |
2325 | /pump@3.0.0:
2326 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
2327 | dependencies:
2328 | end-of-stream: 1.4.4
2329 | once: 1.4.0
2330 | dev: false
2331 |
2332 | /punycode@2.3.0:
2333 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
2334 | engines: {node: '>=6'}
2335 | dev: true
2336 |
2337 | /qs@6.11.0:
2338 | resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
2339 | engines: {node: '>=0.6'}
2340 | dependencies:
2341 | side-channel: 1.0.4
2342 | dev: false
2343 |
2344 | /queue-microtask@1.2.3:
2345 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
2346 | dev: true
2347 |
2348 | /range-parser@1.2.1:
2349 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
2350 | engines: {node: '>= 0.6'}
2351 | dev: false
2352 |
2353 | /raw-body@2.5.1:
2354 | resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
2355 | engines: {node: '>= 0.8'}
2356 | dependencies:
2357 | bytes: 3.1.2
2358 | http-errors: 2.0.0
2359 | iconv-lite: 0.4.24
2360 | unpipe: 1.0.0
2361 | dev: false
2362 |
2363 | /rc@1.2.8:
2364 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
2365 | hasBin: true
2366 | dependencies:
2367 | deep-extend: 0.6.0
2368 | ini: 1.3.8
2369 | minimist: 1.2.8
2370 | strip-json-comments: 2.0.1
2371 | dev: false
2372 |
2373 | /react-dom@18.2.0(react@18.2.0):
2374 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
2375 | peerDependencies:
2376 | react: ^18.2.0
2377 | dependencies:
2378 | loose-envify: 1.4.0
2379 | react: 18.2.0
2380 | scheduler: 0.23.0
2381 | dev: false
2382 |
2383 | /react-refresh@0.14.0:
2384 | resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
2385 | engines: {node: '>=0.10.0'}
2386 | dev: true
2387 |
2388 | /react@18.2.0:
2389 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
2390 | engines: {node: '>=0.10.0'}
2391 | dependencies:
2392 | loose-envify: 1.4.0
2393 | dev: false
2394 |
2395 | /readable-stream@3.6.2:
2396 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
2397 | engines: {node: '>= 6'}
2398 | dependencies:
2399 | inherits: 2.0.4
2400 | string_decoder: 1.3.0
2401 | util-deprecate: 1.0.2
2402 | dev: false
2403 |
2404 | /readdirp@3.6.0:
2405 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
2406 | engines: {node: '>=8.10.0'}
2407 | dependencies:
2408 | picomatch: 2.3.1
2409 | dev: false
2410 |
2411 | /resolve-from@4.0.0:
2412 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
2413 | engines: {node: '>=4'}
2414 | dev: true
2415 |
2416 | /reusify@1.0.4:
2417 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
2418 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
2419 | dev: true
2420 |
2421 | /rimraf@3.0.2:
2422 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
2423 | hasBin: true
2424 | dependencies:
2425 | glob: 7.2.3
2426 | dev: true
2427 |
2428 | /rollup@3.28.0:
2429 | resolution: {integrity: sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==}
2430 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
2431 | hasBin: true
2432 | optionalDependencies:
2433 | fsevents: 2.3.2
2434 | dev: true
2435 |
2436 | /run-parallel@1.2.0:
2437 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
2438 | dependencies:
2439 | queue-microtask: 1.2.3
2440 | dev: true
2441 |
2442 | /safe-buffer@5.2.1:
2443 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
2444 | dev: false
2445 |
2446 | /safe-stable-stringify@2.4.3:
2447 | resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==}
2448 | engines: {node: '>=10'}
2449 | dev: false
2450 |
2451 | /safer-buffer@2.1.2:
2452 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
2453 | dev: false
2454 |
2455 | /scheduler@0.23.0:
2456 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
2457 | dependencies:
2458 | loose-envify: 1.4.0
2459 | dev: false
2460 |
2461 | /sdp@3.2.0:
2462 | resolution: {integrity: sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==}
2463 | dev: false
2464 |
2465 | /semver@6.3.1:
2466 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
2467 | hasBin: true
2468 | dev: true
2469 |
2470 | /semver@7.5.4:
2471 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
2472 | engines: {node: '>=10'}
2473 | hasBin: true
2474 | dependencies:
2475 | lru-cache: 6.0.0
2476 |
2477 | /send@0.18.0:
2478 | resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
2479 | engines: {node: '>= 0.8.0'}
2480 | dependencies:
2481 | debug: 2.6.9
2482 | depd: 2.0.0
2483 | destroy: 1.2.0
2484 | encodeurl: 1.0.2
2485 | escape-html: 1.0.3
2486 | etag: 1.8.1
2487 | fresh: 0.5.2
2488 | http-errors: 2.0.0
2489 | mime: 1.6.0
2490 | ms: 2.1.3
2491 | on-finished: 2.4.1
2492 | range-parser: 1.2.1
2493 | statuses: 2.0.1
2494 | transitivePeerDependencies:
2495 | - supports-color
2496 | dev: false
2497 |
2498 | /serve-static@1.15.0:
2499 | resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
2500 | engines: {node: '>= 0.8.0'}
2501 | dependencies:
2502 | encodeurl: 1.0.2
2503 | escape-html: 1.0.3
2504 | parseurl: 1.3.3
2505 | send: 0.18.0
2506 | transitivePeerDependencies:
2507 | - supports-color
2508 | dev: false
2509 |
2510 | /setprototypeof@1.2.0:
2511 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
2512 | dev: false
2513 |
2514 | /shebang-command@2.0.0:
2515 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
2516 | engines: {node: '>=8'}
2517 | dependencies:
2518 | shebang-regex: 3.0.0
2519 | dev: true
2520 |
2521 | /shebang-regex@3.0.0:
2522 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
2523 | engines: {node: '>=8'}
2524 | dev: true
2525 |
2526 | /side-channel@1.0.4:
2527 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
2528 | dependencies:
2529 | call-bind: 1.0.2
2530 | get-intrinsic: 1.2.1
2531 | object-inspect: 1.12.3
2532 | dev: false
2533 |
2534 | /simple-concat@1.0.1:
2535 | resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
2536 | dev: false
2537 |
2538 | /simple-get@4.0.1:
2539 | resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
2540 | dependencies:
2541 | decompress-response: 6.0.0
2542 | once: 1.4.0
2543 | simple-concat: 1.0.1
2544 | dev: false
2545 |
2546 | /simple-swizzle@0.2.2:
2547 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
2548 | dependencies:
2549 | is-arrayish: 0.3.2
2550 | dev: false
2551 |
2552 | /slash@3.0.0:
2553 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
2554 | engines: {node: '>=8'}
2555 | dev: true
2556 |
2557 | /source-map-js@1.0.2:
2558 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
2559 | engines: {node: '>=0.10.0'}
2560 | dev: true
2561 |
2562 | /stack-trace@0.0.10:
2563 | resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==}
2564 | dev: false
2565 |
2566 | /statuses@2.0.1:
2567 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
2568 | engines: {node: '>= 0.8'}
2569 | dev: false
2570 |
2571 | /string_decoder@1.3.0:
2572 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
2573 | dependencies:
2574 | safe-buffer: 5.2.1
2575 | dev: false
2576 |
2577 | /strip-ansi@6.0.1:
2578 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
2579 | engines: {node: '>=8'}
2580 | dependencies:
2581 | ansi-regex: 5.0.1
2582 | dev: true
2583 |
2584 | /strip-json-comments@2.0.1:
2585 | resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
2586 | engines: {node: '>=0.10.0'}
2587 | dev: false
2588 |
2589 | /strip-json-comments@3.1.1:
2590 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
2591 | engines: {node: '>=8'}
2592 | dev: true
2593 |
2594 | /supports-color@5.5.0:
2595 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
2596 | engines: {node: '>=4'}
2597 | dependencies:
2598 | has-flag: 3.0.0
2599 | dev: true
2600 |
2601 | /supports-color@7.2.0:
2602 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
2603 | engines: {node: '>=8'}
2604 | dependencies:
2605 | has-flag: 4.0.0
2606 | dev: true
2607 |
2608 | /tar-fs@2.1.1:
2609 | resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
2610 | dependencies:
2611 | chownr: 1.1.4
2612 | mkdirp-classic: 0.5.3
2613 | pump: 3.0.0
2614 | tar-stream: 2.2.0
2615 | dev: false
2616 |
2617 | /tar-stream@2.2.0:
2618 | resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
2619 | engines: {node: '>=6'}
2620 | dependencies:
2621 | bl: 4.1.0
2622 | end-of-stream: 1.4.4
2623 | fs-constants: 1.0.0
2624 | inherits: 2.0.4
2625 | readable-stream: 3.6.2
2626 | dev: false
2627 |
2628 | /text-hex@1.0.0:
2629 | resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==}
2630 | dev: false
2631 |
2632 | /text-table@0.2.0:
2633 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
2634 | dev: true
2635 |
2636 | /throttle-debounce@5.0.0:
2637 | resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==}
2638 | engines: {node: '>=12.22'}
2639 | dev: false
2640 |
2641 | /to-fast-properties@2.0.0:
2642 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
2643 | engines: {node: '>=4'}
2644 | dev: true
2645 |
2646 | /to-regex-range@5.0.1:
2647 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
2648 | engines: {node: '>=8.0'}
2649 | dependencies:
2650 | is-number: 7.0.0
2651 |
2652 | /toidentifier@1.0.1:
2653 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
2654 | engines: {node: '>=0.6'}
2655 | dev: false
2656 |
2657 | /triple-beam@1.4.1:
2658 | resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==}
2659 | engines: {node: '>= 14.0.0'}
2660 | dev: false
2661 |
2662 | /tslib@1.14.1:
2663 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
2664 | dev: true
2665 |
2666 | /tslib@2.6.2:
2667 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
2668 | dev: false
2669 |
2670 | /tsutils@3.21.0(typescript@5.1.6):
2671 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
2672 | engines: {node: '>= 6'}
2673 | peerDependencies:
2674 | 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'
2675 | dependencies:
2676 | tslib: 1.14.1
2677 | typescript: 5.1.6
2678 | dev: true
2679 |
2680 | /tunnel-agent@0.6.0:
2681 | resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
2682 | dependencies:
2683 | safe-buffer: 5.2.1
2684 | dev: false
2685 |
2686 | /type-check@0.4.0:
2687 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
2688 | engines: {node: '>= 0.8.0'}
2689 | dependencies:
2690 | prelude-ls: 1.2.1
2691 | dev: true
2692 |
2693 | /type-fest@0.20.2:
2694 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
2695 | engines: {node: '>=10'}
2696 | dev: true
2697 |
2698 | /type-is@1.6.18:
2699 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
2700 | engines: {node: '>= 0.6'}
2701 | dependencies:
2702 | media-typer: 0.3.0
2703 | mime-types: 2.1.35
2704 | dev: false
2705 |
2706 | /typescript@5.1.6:
2707 | resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==}
2708 | engines: {node: '>=14.17'}
2709 | hasBin: true
2710 | dev: true
2711 |
2712 | /unpipe@1.0.0:
2713 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
2714 | engines: {node: '>= 0.8'}
2715 | dev: false
2716 |
2717 | /update-browserslist-db@1.0.11(browserslist@4.21.10):
2718 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
2719 | hasBin: true
2720 | peerDependencies:
2721 | browserslist: '>= 4.21.0'
2722 | dependencies:
2723 | browserslist: 4.21.10
2724 | escalade: 3.1.1
2725 | picocolors: 1.0.0
2726 | dev: true
2727 |
2728 | /uri-js@4.4.1:
2729 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
2730 | dependencies:
2731 | punycode: 2.3.0
2732 | dev: true
2733 |
2734 | /util-deprecate@1.0.2:
2735 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
2736 | dev: false
2737 |
2738 | /utils-merge@1.0.1:
2739 | resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=}
2740 | engines: {node: '>= 0.4.0'}
2741 | dev: false
2742 |
2743 | /uuid@9.0.0:
2744 | resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==}
2745 | hasBin: true
2746 | dev: false
2747 |
2748 | /vary@1.1.2:
2749 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
2750 | engines: {node: '>= 0.8'}
2751 | dev: false
2752 |
2753 | /vite@4.4.9(@types/node@20.5.0):
2754 | resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==}
2755 | engines: {node: ^14.18.0 || >=16.0.0}
2756 | hasBin: true
2757 | peerDependencies:
2758 | '@types/node': '>= 14'
2759 | less: '*'
2760 | lightningcss: ^1.21.0
2761 | sass: '*'
2762 | stylus: '*'
2763 | sugarss: '*'
2764 | terser: ^5.4.0
2765 | peerDependenciesMeta:
2766 | '@types/node':
2767 | optional: true
2768 | less:
2769 | optional: true
2770 | lightningcss:
2771 | optional: true
2772 | sass:
2773 | optional: true
2774 | stylus:
2775 | optional: true
2776 | sugarss:
2777 | optional: true
2778 | terser:
2779 | optional: true
2780 | dependencies:
2781 | '@types/node': 20.5.0
2782 | esbuild: 0.18.20
2783 | postcss: 8.4.28
2784 | rollup: 3.28.0
2785 | optionalDependencies:
2786 | fsevents: 2.3.2
2787 | dev: true
2788 |
2789 | /webrtc-adapter@8.2.3:
2790 | resolution: {integrity: sha512-gnmRz++suzmvxtp3ehQts6s2JtAGPuDPjA1F3a9ckNpG1kYdYuHWYpazoAnL9FS5/B21tKlhkorbdCXat0+4xQ==}
2791 | engines: {node: '>=6.0.0', npm: '>=3.10.0'}
2792 | dependencies:
2793 | sdp: 3.2.0
2794 | dev: false
2795 |
2796 | /which@2.0.2:
2797 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2798 | engines: {node: '>= 8'}
2799 | hasBin: true
2800 | dependencies:
2801 | isexe: 2.0.0
2802 | dev: true
2803 |
2804 | /winston-transport@4.5.0:
2805 | resolution: {integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==}
2806 | engines: {node: '>= 6.4.0'}
2807 | dependencies:
2808 | logform: 2.5.1
2809 | readable-stream: 3.6.2
2810 | triple-beam: 1.4.1
2811 | dev: false
2812 |
2813 | /winston@3.10.0:
2814 | resolution: {integrity: sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==}
2815 | engines: {node: '>= 12.0.0'}
2816 | dependencies:
2817 | '@colors/colors': 1.5.0
2818 | '@dabh/diagnostics': 2.0.3
2819 | async: 3.2.4
2820 | is-stream: 2.0.1
2821 | logform: 2.5.1
2822 | one-time: 1.0.0
2823 | readable-stream: 3.6.2
2824 | safe-stable-stringify: 2.4.3
2825 | stack-trace: 0.0.10
2826 | triple-beam: 1.4.1
2827 | winston-transport: 4.5.0
2828 | dev: false
2829 |
2830 | /wrappy@1.0.2:
2831 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
2832 |
2833 | /ws@8.14.1:
2834 | resolution: {integrity: sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==}
2835 | engines: {node: '>=10.0.0'}
2836 | peerDependencies:
2837 | bufferutil: ^4.0.1
2838 | utf-8-validate: '>=5.0.2'
2839 | peerDependenciesMeta:
2840 | bufferutil:
2841 | optional: true
2842 | utf-8-validate:
2843 | optional: true
2844 | dev: false
2845 |
2846 | /yallist@3.1.1:
2847 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
2848 | dev: true
2849 |
2850 | /yallist@4.0.0:
2851 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
2852 |
2853 | /yocto-queue@0.1.0:
2854 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
2855 | engines: {node: '>=10'}
2856 | dev: true
2857 |
--------------------------------------------------------------------------------
/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/server.js:
--------------------------------------------------------------------------------
1 | import express from "express";
2 | import { attachWebsocketServer } from "@vlcn.io/ws-server";
3 | import * as http from "http";
4 |
5 | const PORT = parseInt(process.env.PORT || "8080");
6 |
7 | const app = express();
8 | const server = http.createServer(app);
9 |
10 | const wsConfig = {
11 | dbFolder: "./dbs",
12 | schemaFolder: "./src/schemas",
13 | pathPattern: /\/sync/,
14 | };
15 |
16 | attachWebsocketServer(server, wsConfig);
17 |
18 | if (process.env.NODE_ENV === "production") {
19 | express.static("dist");
20 | }
21 |
22 | server.listen(PORT, () =>
23 | console.log("info", `listening on http://localhost:${PORT}!`)
24 | );
25 |
--------------------------------------------------------------------------------
/src/schemas/main.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE IF NOT EXISTS "todo" ("id" PRIMARY KEY, "text", "completed");
2 | CREATE TABLE IF NOT EXISTS "presence" (id primary key, name, x, y);
3 |
4 | SELECT crsql_as_crr('todo');
5 | SELECT crsql_as_crr('presence');
--------------------------------------------------------------------------------
/src/todomvc-p2p/App.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 | import { useQuery } from "@vlcn.io/react";
3 | import { Ctx } from "./ctx.js";
4 | import { useState, useCallback } from "react";
5 | import { nanoid } from "nanoid";
6 | import Peers from "./Peers";
7 |
8 | type Todo = {
9 | id: string;
10 | text: string;
11 | completed: boolean;
12 | };
13 |
14 | type Filter = "all" | "active" | "completed";
15 | type TodoList = {
16 | filter: Filter;
17 | editing: string | null;
18 | };
19 |
20 | function Header({ ctx }: { ctx: Ctx }) {
21 | const [newText, setNewText] = React.useState("");
22 | return (
23 |
45 | );
46 | }
47 |
48 | const TodoView = ({
49 | todo,
50 | editing,
51 | startEditing,
52 | saveTodo,
53 | ctx,
54 | }: {
55 | key?: any;
56 | todo: Todo;
57 | editing: boolean;
58 | startEditing: (t: Todo) => void;
59 | saveTodo: (todo: Todo, text: string) => void;
60 | ctx: Ctx;
61 | }) => {
62 | let body;
63 |
64 | const [text, setText] = useState(todo.text);
65 | const deleteTodo = () => {
66 | ctx.db.exec(`DELETE FROM todo WHERE id = ?`, [todo.id]);
67 | };
68 | const toggleTodo = () => {
69 | ctx.db.exec(`UPDATE todo SET completed = ? WHERE id = ?`, [
70 | todo.completed ? 0 : 1,
71 | todo.id,
72 | ]);
73 | };
74 |
75 | if (editing) {
76 | body = (
77 | saveTodo(todo, text)}
83 | onKeyUp={(e) => e.key === "Enter" && saveTodo(todo, text)}
84 | onChange={(e) => setText(e.target.value)}
85 | />
86 | );
87 | } else {
88 | body = (
89 |
90 |
96 |
104 |
105 |
106 | );
107 | }
108 | return (
109 |
114 | {body}
115 |
116 | );
117 | };
118 |
119 | function Footer({
120 | remaining,
121 | todos,
122 | clearCompleted,
123 | todoList,
124 | setFilter,
125 | }: {
126 | remaining: number;
127 | todos: readonly Todo[];
128 | clearCompleted: () => void;
129 | todoList: TodoList;
130 | setFilter: (f: Filter) => void;
131 | }) {
132 | let clearCompletedButton;
133 | if (remaining !== todos.length) {
134 | clearCompletedButton = (
135 |
138 | );
139 | }
140 |
141 | const updateFilter = (filter: Filter) => {
142 | setFilter(filter);
143 | };
144 |
145 | return (
146 |
180 | );
181 | }
182 |
183 | export default function App({ ctx }: { ctx: Ctx }) {
184 | const [list, setList] = useState({
185 | editing: null,
186 | filter: "all",
187 | });
188 | const clearCompleted = () => {
189 | ctx.db.exec(`DELETE FROM todo WHERE completed = true`);
190 | };
191 | const startEditing = useCallback(
192 | (todo: Todo) => {
193 | setList((old) => ({
194 | ...old,
195 | editing: todo.id,
196 | }));
197 | },
198 | [list]
199 | );
200 | const saveTodo = useCallback(
201 | (todo: Todo, text: string) => {
202 | ctx.db.exec(`UPDATE todo SET text = ? WHERE id = ?`, [text, todo.id]);
203 | setList((old) => ({
204 | ...old,
205 | editing: null,
206 | }));
207 | },
208 | [list]
209 | );
210 | const toggleAll = () => {
211 | if (remaining === 0) {
212 | // uncomplete all
213 | ctx.db.exec(`UPDATE todo SET completed = false WHERE completed = true`);
214 | } else {
215 | // complete all
216 | ctx.db.exec(`UPDATE todo SET completed = true WHERE completed = false`);
217 | }
218 | };
219 | let toggleAllCheck;
220 |
221 | const allTodos: readonly Todo[] = useQuery(
222 | ctx,
223 | "SELECT * FROM todo ORDER BY id DESC"
224 | ).data;
225 | const completeTodos = allTodos.filter((t) => t.completed);
226 | const activeTodos = allTodos.filter((t) => !t.completed);
227 |
228 | const remaining = activeTodos.length;
229 | let todos =
230 | list.filter === "active"
231 | ? activeTodos
232 | : list.filter === "completed"
233 | ? completeTodos
234 | : allTodos;
235 |
236 | if (allTodos.length) {
237 | toggleAllCheck = (
238 | <>
239 |
246 |
247 | >
248 | );
249 | }
250 |
251 | return (
252 |
253 |
254 |
{
257 | navigator.clipboard.writeText(ctx.siteid);
258 | }}
259 | >
260 | PeerID: {ctx.siteid}
261 |
262 |
263 |
0 ? {} : { display: "none" }}
266 | >
267 | {toggleAllCheck}
268 |
269 | {todos.map((t) => (
270 |
278 | ))}
279 |
280 |
293 |
294 | );
295 | }
296 |
--------------------------------------------------------------------------------
/src/todomvc-p2p/Peers.tsx:
--------------------------------------------------------------------------------
1 | import { useState, useEffect } from "react";
2 | import { Ctx } from "./ctx.js";
3 |
4 | export default function Peers({ ctx }: { ctx: Ctx }) {
5 | const [peerId, setPeerId] = useState("");
6 | const [pending, setPending] = useState([]);
7 | const [established, setEstablished] = useState([]);
8 |
9 | useEffect(() => {
10 | const cleanup = ctx.rtc.onConnectionsChanged((pending, established) => {
11 | console.log("conns changes");
12 | setPending(pending);
13 | setEstablished(established);
14 | });
15 | return () => {
16 | cleanup();
17 | };
18 | }, [ctx.rtc]);
19 | return (
20 |
45 | );
46 | }
47 |
--------------------------------------------------------------------------------
/src/todomvc-p2p/ctx.ts:
--------------------------------------------------------------------------------
1 | import { wdbRtc } from "@vlcn.io/sync-p2p";
2 | import tblrx from "@vlcn.io/rx-tbl";
3 | import { DB } from "@vlcn.io/crsqlite-wasm";
4 |
5 | export type Ctx = {
6 | db: DB;
7 | siteid: string;
8 | rtc: Awaited>;
9 | rx: Awaited>;
10 | };
11 |
--------------------------------------------------------------------------------
/src/todomvc-p2p/main.tsx:
--------------------------------------------------------------------------------
1 | import { createRoot } from "react-dom/client";
2 | // @ts-ignore
3 | import { stringify as uuidStringify } from "uuid";
4 |
5 | import "../todomvc/base.css";
6 | import "../todomvc/style.css";
7 |
8 | import App from "./App";
9 | import { Ctx } from "./ctx.js";
10 | import sqliteWasm from "@vlcn.io/crsqlite-wasm";
11 | import tblrx from "@vlcn.io/rx-tbl";
12 | import { wdbRtc } from "@vlcn.io/sync-p2p";
13 |
14 | import wasmUrl from "@vlcn.io/crsqlite-wasm/crsqlite.wasm?url";
15 |
16 | async function main() {
17 | const sqlite = await sqliteWasm(() => wasmUrl);
18 |
19 | const db = await sqlite.open("p2p-wdb-todomvc-11");
20 | (window as any).db = db;
21 |
22 | await db.exec(
23 | "CREATE TABLE IF NOT EXISTS todo (id primary key, text, completed)"
24 | );
25 | await db.exec("SELECT crsql_as_crr('todo')");
26 | const r = await db.execA("SELECT crsql_site_id()");
27 | const siteid = uuidStringify(r[0][0]);
28 |
29 | const rx = await tblrx(db);
30 | const rtc = await wdbRtc(
31 | db,
32 | // window.location.hostname === "localhost"
33 | // ? {
34 | // host: "localhost",
35 | // port: 9000,
36 | // path: "/examples",
37 | // }
38 | // : undefined
39 | undefined
40 | );
41 |
42 | window.onbeforeunload = () => {
43 | db.close();
44 | };
45 |
46 | startApp({
47 | db,
48 | siteid,
49 | rtc,
50 | rx,
51 | });
52 | }
53 |
54 | function startApp(ctx: Ctx) {
55 | (window as any).ctx = ctx;
56 | const root = createRoot(document.getElementById("container")!);
57 | root.render();
58 | }
59 |
60 | main();
61 |
--------------------------------------------------------------------------------
/src/todomvc/App.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useCallback } from "react";
2 | import { useDB, useQuery, useSync } from "@vlcn.io/react";
3 | import { newId } from "./id";
4 | import { DBAsync } from "@vlcn.io/xplat-api";
5 | import SyncWorker from "./sync-worker.js?worker";
6 |
7 | type Todo = {
8 | id: string;
9 | text: string;
10 | completed: boolean;
11 | };
12 |
13 | type Filter = "all" | "active" | "completed";
14 | type TodoList = {
15 | filter: Filter;
16 | editing: string | null;
17 | };
18 |
19 | function Header({ db }: { db: DBAsync }) {
20 | const [newText, setNewText] = React.useState("");
21 | return (
22 |
45 | );
46 | }
47 |
48 | const TodoView = ({
49 | todo,
50 | editing,
51 | startEditing,
52 | saveTodo,
53 | db,
54 | }: {
55 | key?: string;
56 | todo: Todo;
57 | editing: boolean;
58 | startEditing: (t: Todo) => void;
59 | saveTodo: (todo: Todo, text: string) => void;
60 | db: DBAsync;
61 | }) => {
62 | let body;
63 |
64 | const [text, setText] = useState(todo.text);
65 | const deleteTodo = () => {
66 | db.exec(`DELETE FROM todo WHERE id = ?`, [todo.id]);
67 | };
68 | const toggleTodo = () => {
69 | db.exec(`UPDATE todo SET completed = ? WHERE id = ?`, [
70 | todo.completed ? 0 : 1,
71 | todo.id,
72 | ]);
73 | };
74 |
75 | if (editing) {
76 | body = (
77 | saveTodo(todo, text)}
83 | onKeyUp={(e) => e.key === "Enter" && saveTodo(todo, text)}
84 | onChange={(e) => setText(e.target.value)}
85 | />
86 | );
87 | } else {
88 | body = (
89 |
90 |
96 |
104 |
105 |
106 | );
107 | }
108 | return (
109 |
114 | {body}
115 |
116 | );
117 | };
118 |
119 | function Footer({
120 | remaining,
121 | todos,
122 | clearCompleted,
123 | todoList,
124 | setFilter,
125 | }: {
126 | remaining: number;
127 | todos: readonly Todo[];
128 | clearCompleted: () => void;
129 | todoList: TodoList;
130 | setFilter: (f: Filter) => void;
131 | }) {
132 | let clearCompletedButton;
133 | if (remaining !== todos.length) {
134 | clearCompletedButton = (
135 |
138 | );
139 | }
140 |
141 | const updateFilter = (filter: Filter) => {
142 | setFilter(filter);
143 | };
144 |
145 | return (
146 |
180 | );
181 | }
182 |
183 | const worker = new SyncWorker();
184 | function getEndpoint() {
185 | let proto = "ws:";
186 | const hostname = window.location.hostname;
187 | if (window.location.protocol === "https:") {
188 | proto = "wss:";
189 | }
190 | let port = "";
191 | if (hostname == "localhost") {
192 | port = ":8080";
193 | }
194 |
195 | return `${proto}//${hostname}${port}/sync`;
196 | }
197 | const syncEndpoint = getEndpoint();
198 | export default function TodoList({ dbid }: { dbid: string }) {
199 | const ctx = useDB(dbid);
200 | const db = ctx.db;
201 | useSync({
202 | dbname: dbid,
203 | endpoint: syncEndpoint,
204 | room: dbid,
205 | worker,
206 | });
207 | const [list, setList] = useState({
208 | editing: null,
209 | filter: "all",
210 | });
211 | const startEditing = useCallback((todo: Todo) => {
212 | setList((old) => ({
213 | ...old,
214 | editing: todo.id,
215 | }));
216 | }, []);
217 | const saveTodo = useCallback((todo: Todo, text: string) => {
218 | db.exec(`UPDATE todo SET text = ? WHERE id = ?`, [text, todo.id]);
219 | setList((old) => ({
220 | ...old,
221 | editing: null,
222 | }));
223 | }, []);
224 |
225 | const clearCompleted = () => {
226 | db.exec(`DELETE FROM todo WHERE completed = true`);
227 | };
228 |
229 | const toggleAll = () => {
230 | if (remaining === 0) {
231 | // uncomplete all
232 | db.exec(`UPDATE todo SET completed = false WHERE completed = true`);
233 | } else {
234 | // complete all
235 | db.exec(`UPDATE todo SET completed = true WHERE completed = false`);
236 | }
237 | };
238 | let toggleAllCheck;
239 |
240 | const allTodos: readonly Todo[] = useQuery(
241 | ctx,
242 | "SELECT * FROM todo ORDER BY id DESC"
243 | ).data;
244 | const completeTodos = allTodos.filter((t) => t.completed);
245 | const activeTodos = allTodos.filter((t) => !t.completed);
246 |
247 | const remaining = activeTodos.length;
248 | const todos =
249 | list.filter === "active"
250 | ? activeTodos
251 | : list.filter === "completed"
252 | ? completeTodos
253 | : allTodos;
254 |
255 | if (allTodos.length) {
256 | toggleAllCheck = (
257 | <>
258 |
265 |
266 | >
267 | );
268 | }
269 |
270 | return (
271 | <>
272 |
273 | Share the current URL with others to collaborate on this list.
274 |
275 |
276 | 0 ? {} : { display: "none" }}
279 | >
280 | {toggleAllCheck}
281 |
282 | {todos.map((t) => (
283 |
291 | ))}
292 |
293 |
306 | >
307 | );
308 | }
309 |
--------------------------------------------------------------------------------
/src/todomvc/SyncEndpoints.ts:
--------------------------------------------------------------------------------
1 | import worker from "@vlcn.io/direct-connect-browser/dedicated.worker.js?url";
2 | import wasm from "@vlcn.io/crsqlite-wasm/crsqlite.wasm?url";
3 |
4 | export const endpoints = {
5 | createOrMigrate: updatePort(
6 | new URL("/sync/create-or-migrate", window.location.origin)
7 | ),
8 | applyChanges: updatePort(new URL("/sync/changes", window.location.origin)),
9 | startOutboundStream: updatePort(
10 | new URL("/sync/start-outbound-stream", window.location.origin)
11 | ),
12 | // this conditional on dev mode is to work around a bug in Vite.
13 | worker: import.meta.env.DEV ? worker : undefined,
14 | wasm,
15 | };
16 |
17 | function updatePort(u: URL) {
18 | if (import.meta.env.DEV) {
19 | u.port = "8080";
20 | }
21 | return u;
22 | }
23 |
--------------------------------------------------------------------------------
/src/todomvc/base.css:
--------------------------------------------------------------------------------
1 | hr {
2 | margin: 20px 0;
3 | border: 0;
4 | border-top: 1px dashed #c5c5c5;
5 | border-bottom: 1px dashed #f7f7f7;
6 | }
7 |
8 | .learn a {
9 | font-weight: normal;
10 | text-decoration: none;
11 | color: #b83f45;
12 | }
13 |
14 | .learn a:hover {
15 | text-decoration: underline;
16 | color: #787e7e;
17 | }
18 |
19 | .learn h3,
20 | .learn h4,
21 | .learn h5 {
22 | margin: 10px 0;
23 | font-weight: 500;
24 | line-height: 1.2;
25 | color: #000;
26 | }
27 |
28 | .learn h3 {
29 | font-size: 24px;
30 | }
31 |
32 | .learn h4 {
33 | font-size: 18px;
34 | }
35 |
36 | .learn h5 {
37 | margin-bottom: 0;
38 | font-size: 14px;
39 | }
40 |
41 | .learn ul {
42 | padding: 0;
43 | margin: 0 0 30px 25px;
44 | }
45 |
46 | .learn li {
47 | line-height: 20px;
48 | }
49 |
50 | .learn p {
51 | font-size: 15px;
52 | font-weight: 300;
53 | line-height: 1.3;
54 | margin-top: 0;
55 | margin-bottom: 0;
56 | }
57 |
58 | #issue-count {
59 | display: none;
60 | }
61 |
62 | .quote {
63 | border: none;
64 | margin: 20px 0 60px 0;
65 | }
66 |
67 | .quote p {
68 | font-style: italic;
69 | }
70 |
71 | .quote p:before {
72 | content: "“";
73 | font-size: 50px;
74 | opacity: 0.15;
75 | position: absolute;
76 | top: -20px;
77 | left: 3px;
78 | }
79 |
80 | .quote p:after {
81 | content: "”";
82 | font-size: 50px;
83 | opacity: 0.15;
84 | position: absolute;
85 | bottom: -42px;
86 | right: 3px;
87 | }
88 |
89 | .quote footer {
90 | position: absolute;
91 | bottom: -40px;
92 | right: 0;
93 | }
94 |
95 | .quote footer img {
96 | border-radius: 3px;
97 | }
98 |
99 | .quote footer a {
100 | margin-left: 5px;
101 | vertical-align: middle;
102 | }
103 |
104 | .speech-bubble {
105 | position: relative;
106 | padding: 10px;
107 | background: rgba(0, 0, 0, 0.04);
108 | border-radius: 5px;
109 | }
110 |
111 | .speech-bubble:after {
112 | content: "";
113 | position: absolute;
114 | top: 100%;
115 | right: 30px;
116 | border: 13px solid transparent;
117 | border-top-color: rgba(0, 0, 0, 0.04);
118 | }
119 |
120 | .learn-bar > .learn {
121 | position: absolute;
122 | width: 272px;
123 | top: 8px;
124 | left: -300px;
125 | padding: 10px;
126 | border-radius: 5px;
127 | background-color: rgba(255, 255, 255, 0.6);
128 | transition-property: left;
129 | transition-duration: 500ms;
130 | }
131 |
132 | @media (min-width: 899px) {
133 | .learn-bar {
134 | width: auto;
135 | padding-left: 300px;
136 | }
137 |
138 | .learn-bar > .learn {
139 | left: 8px;
140 | }
141 | }
142 |
--------------------------------------------------------------------------------
/src/todomvc/id.ts:
--------------------------------------------------------------------------------
1 | export type DeviceId = string;
2 |
3 | // 32 bit random var in decimal
4 | let randomVariable = Math.floor(Number.MAX_SAFE_INTEGER * Math.random());
5 |
6 | export function newId(
7 | deviceId: DeviceId,
8 | base: "hex" | "decimal" = "hex"
9 | ): ID_of {
10 | invariant(isHex(deviceId), "Device ID must be a hex string");
11 | invariant(deviceId.length >= 4, "Device ids must be at least 2 bytes");
12 |
13 | // 32 bits, hex
14 | const hi32 = Math.floor(Date.now() / 1000).toString(16);
15 |
16 | // low 16 bits of device, in hex
17 | const partialDevice = deviceId.substring(deviceId.length - 4);
18 | // low 16 bits of the random variable, in hex
19 | const random = (++randomVariable & 0xffff).toString(16);
20 |
21 | const low32 = partialDevice + random;
22 | const hex = (hi32 + low32) as ID_of;
23 |
24 | if (base === "hex") {
25 | return hex;
26 | }
27 |
28 | if (base === "decimal") {
29 | return BigInt("0x" + hex).toString() as ID_of;
30 | }
31 |
32 | throw new Error("unreachable");
33 | }
34 |
35 | export function asId(id: string): ID_of {
36 | return id as ID_of;
37 | }
38 |
39 | export function truncateForDisplay(id: string) {
40 | return id.substring(id.length - 6);
41 | }
42 |
43 | const hexReg = /^[0-9A-Fa-f]+$/;
44 | function isHex(h: string) {
45 | return hexReg.exec(h) != null;
46 | }
47 |
48 | export type Opaque = BaseType & {
49 | readonly [Symbols.base]: BaseType;
50 | readonly [Symbols.brand]: BrandType;
51 | };
52 |
53 | namespace Symbols {
54 | export declare const base: unique symbol;
55 | export declare const brand: unique symbol;
56 | }
57 |
58 | export type ID_of = Opaque;
59 |
60 | function invariant(condition: boolean, msg: string) {
61 | if (!condition) {
62 | throw new Error(msg);
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/src/todomvc/main.tsx:
--------------------------------------------------------------------------------
1 | import ReactDOM from "react-dom/client";
2 | import "./base.css";
3 | import "./style.css";
4 |
5 | import schemaContent from "../schemas/main.sql?raw";
6 | import { DBProvider } from "@vlcn.io/react";
7 | import TodoList from "./App.tsx";
8 |
9 | /**
10 | * Returns the ID of a remote database to sync with or creates a new one
11 | * if none exists.
12 | *
13 | * This ID should be a 16 byte hex string.
14 | *
15 | * Ways you can get a remote db:
16 | * - Harcode the id in your app (not recommended)
17 | * - Return a DBID for the user after they log in
18 | * - Get it through link sharing, qr code, etc.
19 | *
20 | * Here we look at the URL for a DBID. If one does not exist we check localStorage if the user
21 | * ever opened one. If not, we randomly generate one and return it.
22 | *
23 | * Randomly generating a DBID will cause new databases to be created on both the client
24 | * and server.
25 | */
26 | function getRemoteDbid(hash: HashBag): string {
27 | return hash.dbid || localStorage.getItem("todoRoom") || newDbid();
28 | }
29 |
30 | const hash = parseHash();
31 | const dbid = getRemoteDbid(hash);
32 | if (dbid != hash.dbid) {
33 | hash.dbid = dbid;
34 | window.location.hash = writeHash(hash);
35 | }
36 | localStorage.setItem("todoRoom", dbid);
37 |
38 | // Launch our app.
39 | ReactDOM.createRoot(document.getElementById("container") as HTMLElement).render(
40 | }
47 | >
48 | );
49 |
50 | type HashBag = { [key: string]: string };
51 | function parseHash(): HashBag {
52 | const hash = window.location.hash;
53 | const ret: { [key: string]: string } = {};
54 | if (hash.length > 1) {
55 | const substr = hash.substring(1);
56 | const parts = substr.split(",");
57 | for (const part of parts) {
58 | const [key, value] = part.split("=");
59 | ret[key] = value;
60 | }
61 | }
62 |
63 | return ret;
64 | }
65 |
66 | function writeHash(hash: HashBag) {
67 | const parts = [];
68 | for (const key in hash) {
69 | parts.push(`${key}=${hash[key]}`);
70 | }
71 | return parts.join(",");
72 | }
73 |
74 | function newDbid() {
75 | return crypto.randomUUID().replaceAll("-", "");
76 | }
77 |
--------------------------------------------------------------------------------
/src/todomvc/style.css:
--------------------------------------------------------------------------------
1 | html,
2 | body {
3 | margin: 0;
4 | padding: 0;
5 | }
6 |
7 | button {
8 | margin: 0;
9 | padding: 0;
10 | border: 0;
11 | background: none;
12 | font-size: 100%;
13 | vertical-align: baseline;
14 | font-family: inherit;
15 | font-weight: inherit;
16 | color: inherit;
17 | -webkit-appearance: none;
18 | appearance: none;
19 | -webkit-font-smoothing: antialiased;
20 | -moz-osx-font-smoothing: grayscale;
21 | cursor: pointer;
22 | }
23 |
24 | body {
25 | font: 14px "Helvetica Neue", Helvetica, Arial, sans-serif;
26 | line-height: 1.4em;
27 | background: #f5f5f5;
28 | color: #111111;
29 | min-width: 230px;
30 | max-width: 550px;
31 | margin: 0 auto;
32 | -webkit-font-smoothing: antialiased;
33 | -moz-osx-font-smoothing: grayscale;
34 | font-weight: 300;
35 | }
36 |
37 | :focus {
38 | outline: 0;
39 | }
40 |
41 | .hidden {
42 | display: none;
43 | }
44 |
45 | .todoapp {
46 | background: #fff;
47 | margin: 130px 0 40px 0;
48 | position: relative;
49 | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1);
50 | }
51 |
52 | .todoapp input::-webkit-input-placeholder {
53 | font-style: italic;
54 | font-weight: 300;
55 | color: rgba(0, 0, 0, 0.4);
56 | }
57 |
58 | .todoapp input::-moz-placeholder {
59 | font-style: italic;
60 | font-weight: 300;
61 | color: rgba(0, 0, 0, 0.4);
62 | }
63 |
64 | .todoapp input::input-placeholder {
65 | font-style: italic;
66 | font-weight: 300;
67 | color: rgba(0, 0, 0, 0.4);
68 | }
69 |
70 | .todoapp h1 {
71 | position: absolute;
72 | top: -140px;
73 | width: 100%;
74 | font-size: 80px;
75 | font-weight: 200;
76 | text-align: center;
77 | color: #b83f45;
78 | -webkit-text-rendering: optimizeLegibility;
79 | -moz-text-rendering: optimizeLegibility;
80 | text-rendering: optimizeLegibility;
81 | }
82 |
83 | .new-todo,
84 | .edit {
85 | position: relative;
86 | margin: 0;
87 | width: 100%;
88 | font-size: 24px;
89 | font-family: inherit;
90 | font-weight: inherit;
91 | line-height: 1.4em;
92 | color: inherit;
93 | padding: 6px;
94 | border: 1px solid #999;
95 | box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
96 | box-sizing: border-box;
97 | -webkit-font-smoothing: antialiased;
98 | -moz-osx-font-smoothing: grayscale;
99 | }
100 |
101 | .new-todo {
102 | padding: 16px 16px 16px 60px;
103 | border: none;
104 | background: rgba(0, 0, 0, 0.003);
105 | box-shadow: inset 0 -2px 1px rgba(0, 0, 0, 0.03);
106 | }
107 |
108 | .main {
109 | position: relative;
110 | z-index: 2;
111 | border-top: 1px solid #e6e6e6;
112 | }
113 |
114 | .toggle-all {
115 | width: 1px;
116 | height: 1px;
117 | border: none; /* Mobile Safari */
118 | opacity: 0;
119 | position: absolute;
120 | right: 100%;
121 | bottom: 100%;
122 | }
123 |
124 | .toggle-all + label {
125 | width: 60px;
126 | height: 34px;
127 | font-size: 0;
128 | position: absolute;
129 | top: -52px;
130 | left: -13px;
131 | -webkit-transform: rotate(90deg);
132 | transform: rotate(90deg);
133 | }
134 |
135 | .toggle-all + label:before {
136 | content: "❯";
137 | font-size: 22px;
138 | color: #e6e6e6;
139 | padding: 10px 27px 10px 27px;
140 | }
141 |
142 | .toggle-all:checked + label:before {
143 | color: #737373;
144 | }
145 |
146 | .todo-list {
147 | margin: 0;
148 | padding: 0;
149 | list-style: none;
150 | }
151 |
152 | .todo-list li {
153 | position: relative;
154 | font-size: 24px;
155 | border-bottom: 1px solid #ededed;
156 | }
157 |
158 | .todo-list li:last-child {
159 | border-bottom: none;
160 | }
161 |
162 | .todo-list li.editing {
163 | border-bottom: none;
164 | padding: 0;
165 | }
166 |
167 | .todo-list li.editing .edit {
168 | display: block;
169 | width: calc(100% - 43px);
170 | padding: 12px 16px;
171 | margin: 0 0 0 43px;
172 | }
173 |
174 | .todo-list li.editing .view {
175 | display: none;
176 | }
177 |
178 | .todo-list li .toggle {
179 | text-align: center;
180 | width: 40px;
181 | /* auto, since non-WebKit browsers doesn't support input styling */
182 | height: auto;
183 | position: absolute;
184 | top: 0;
185 | bottom: 0;
186 | margin: auto 0;
187 | border: none; /* Mobile Safari */
188 | -webkit-appearance: none;
189 | appearance: none;
190 | }
191 |
192 | .todo-list li .toggle {
193 | opacity: 0;
194 | }
195 |
196 | .todo-list li .toggle + label {
197 | /*
198 | Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433
199 | IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/
200 | */
201 | 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");
202 | background-repeat: no-repeat;
203 | background-position: center left;
204 | }
205 |
206 | .todo-list li .toggle:checked + label {
207 | 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");
208 | }
209 |
210 | .todo-list li label {
211 | word-break: break-all;
212 | padding: 15px 15px 15px 60px;
213 | display: block;
214 | line-height: 1.2;
215 | transition: color 0.4s;
216 | font-weight: 400;
217 | color: #4d4d4d;
218 | }
219 |
220 | .todo-list li.completed label {
221 | color: #cdcdcd;
222 | text-decoration: line-through;
223 | }
224 |
225 | .todo-list li .destroy {
226 | display: none;
227 | position: absolute;
228 | top: 0;
229 | right: 10px;
230 | bottom: 0;
231 | width: 40px;
232 | height: 40px;
233 | margin: auto 0;
234 | font-size: 30px;
235 | color: #cc9a9a;
236 | margin-bottom: 11px;
237 | transition: color 0.2s ease-out;
238 | }
239 |
240 | .todo-list li .destroy:hover {
241 | color: #af5b5e;
242 | }
243 |
244 | .todo-list li .destroy:after {
245 | content: "×";
246 | }
247 |
248 | .todo-list li:hover .destroy {
249 | display: block;
250 | }
251 |
252 | .todo-list li .edit {
253 | display: none;
254 | }
255 |
256 | .todo-list li.editing:last-child {
257 | margin-bottom: -1px;
258 | }
259 |
260 | .footer {
261 | padding: 10px 15px;
262 | height: 20px;
263 | text-align: center;
264 | font-size: 15px;
265 | border-top: 1px solid #e6e6e6;
266 | }
267 |
268 | .footer:before {
269 | content: "";
270 | position: absolute;
271 | right: 0;
272 | bottom: 0;
273 | left: 0;
274 | height: 50px;
275 | overflow: hidden;
276 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 8px 0 -3px #f6f6f6,
277 | 0 9px 1px -3px rgba(0, 0, 0, 0.2), 0 16px 0 -6px #f6f6f6,
278 | 0 17px 2px -6px rgba(0, 0, 0, 0.2);
279 | }
280 |
281 | .todo-count {
282 | float: left;
283 | text-align: left;
284 | }
285 |
286 | .todo-count strong {
287 | font-weight: 300;
288 | }
289 |
290 | .filters {
291 | margin: 0;
292 | padding: 0;
293 | list-style: none;
294 | position: absolute;
295 | right: 0;
296 | left: 0;
297 | }
298 |
299 | .filters li {
300 | display: inline;
301 | }
302 |
303 | .filters li a {
304 | color: inherit;
305 | margin: 3px;
306 | padding: 3px 7px;
307 | text-decoration: none;
308 | border: 1px solid transparent;
309 | border-radius: 3px;
310 | cursor: pointer;
311 | }
312 |
313 | .filters li a:hover {
314 | border-color: rgba(175, 47, 47, 0.1);
315 | }
316 |
317 | .filters li a.selected {
318 | border-color: rgba(175, 47, 47, 0.2);
319 | }
320 |
321 | .clear-completed,
322 | html .clear-completed:active {
323 | float: right;
324 | position: relative;
325 | line-height: 20px;
326 | text-decoration: none;
327 | cursor: pointer;
328 | }
329 |
330 | .clear-completed:hover {
331 | text-decoration: underline;
332 | }
333 |
334 | /*
335 | Hack to remove background from Mobile Safari.
336 | Can't use it globally since it destroys checkboxes in Firefox
337 | */
338 | @media screen and (-webkit-min-device-pixel-ratio: 0) {
339 | .toggle-all,
340 | .todo-list li .toggle {
341 | background: none;
342 | }
343 |
344 | .todo-list li .toggle {
345 | height: 40px;
346 | }
347 | }
348 |
349 | @media (max-width: 430px) {
350 | .footer {
351 | height: 50px;
352 | }
353 |
354 | .filters {
355 | bottom: 10px;
356 | }
357 | }
358 |
359 | .peers {
360 | position: absolute;
361 | right: 0px;
362 | top: -100px;
363 | width: 150px;
364 | height: 100px;
365 | text-align: right;
366 | z-index: 100;
367 | }
368 |
369 | .siteid {
370 | position: absolute;
371 | top: -100px;
372 | left: 0px;
373 | z-index: 100;
374 | width: 150px;
375 | cursor: pointer;
376 | }
377 |
378 | .pending {
379 | color: #af5f13;
380 | list-style: none;
381 | }
382 |
383 | .established {
384 | color: green;
385 | list-style: none;
386 | }
387 |
--------------------------------------------------------------------------------
/src/todomvc/sync-worker.ts:
--------------------------------------------------------------------------------
1 | import { Config, defaultConfig } from "@vlcn.io/ws-client";
2 | import { start } from "@vlcn.io/ws-client/worker.js";
3 | import { createDbProvider } from "@vlcn.io/ws-browserdb";
4 |
5 | export const config: Config = {
6 | dbProvider: createDbProvider(),
7 | transportProvider: defaultConfig.transportProvider,
8 | };
9 |
10 | start(config);
11 |
--------------------------------------------------------------------------------
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/todomvc-p2p.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | vlcn • TodoMVC P2P
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/todomvc.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | vlcn • TodoMVC
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ESNext",
4 | "lib": ["DOM", "DOM.Iterable", "ESNext"],
5 | "module": "ESNext",
6 | "skipLibCheck": true,
7 | "allowJs": true,
8 |
9 | /* Bundler mode */
10 | "moduleResolution": "bundler",
11 | "allowImportingTsExtensions": true,
12 | "resolveJsonModule": true,
13 | "isolatedModules": true,
14 | "noEmit": true,
15 | "jsx": "react-jsx",
16 |
17 | /* Linting */
18 | "strict": true,
19 | "noUnusedLocals": true,
20 | "noUnusedParameters": true,
21 | "noFallthroughCasesInSwitch": true
22 | },
23 | "include": ["src"],
24 | "references": [{ "path": "./tsconfig.node.json" }]
25 | }
26 |
--------------------------------------------------------------------------------
/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 | import { resolve } from "node:path";
3 | import react from "@vitejs/plugin-react";
4 | import * as url from "url";
5 | const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
6 |
7 | // https://vitejs.dev/config/
8 | export default defineConfig({
9 | build: {
10 | target: "esnext",
11 | rollupOptions: {
12 | input: {
13 | index: resolve(__dirname, "index.html"),
14 | todomvc: resolve(__dirname, "todomvc.html"),
15 | todomvcp2p: resolve(__dirname, "todomvc-p2p.html"),
16 | },
17 | },
18 | },
19 | optimizeDeps: {
20 | exclude: ["@vite/client", "@vite/env", "@vlcn.io/crsqlite-wasm"],
21 | esbuildOptions: {
22 | target: "esnext",
23 | },
24 | },
25 | plugins: [react()],
26 | server: {
27 | fs: {
28 | strict: false,
29 | },
30 | },
31 | });
32 |
--------------------------------------------------------------------------------