Ron Au commited on
Commit
6c12e37
1 Parent(s): 45f265b

build(app): Add SvelteKit

Browse files
.vscode/settings.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "python.formatting.provider": "black"
3
+ }
app.py CHANGED
@@ -1,17 +1,10 @@
1
  import subprocess
2
 
3
- # subprocess.run("wget https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh && bash install.sh", shell=True)
4
- # subprocess.run(". ~/.bashrc", shell=True)
5
- # subprocess.run("echo 'setting NVM_DIR:' && export NVM_DIR='$HOME/.nvm'", shell=True)
6
- # subprocess.run("[ -s '$NVM_DIR/nvm.sh' ] && \. '$NVM_DIR/nvm.sh'", shell=True)
7
- # subprocess.run("nvm -v", shell=True)
8
- # subprocess.run("nvm install v18", shell=True)
9
-
10
- #subprocess.run("curl -fsSL https://deb.nodesource.com/setup_18.x", shell=True)
11
- #subprocess.run("apt install nodejs", shell=True)
12
- # subprocess.run("sudo apt install npm", shell=True)
13
-
14
- # subprocess.run("cat /etc/os-release", shell=True)
15
  subprocess.run("echo 'node version:' && node --version", shell=True)
16
  subprocess.run("echo 'npm version:' && npm --version", shell=True)
17
- subprocess.run("pwd && ls -al", shell=True)
 
 
 
 
 
 
1
  import subprocess
2
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  subprocess.run("echo 'node version:' && node --version", shell=True)
4
  subprocess.run("echo 'npm version:' && npm --version", shell=True)
5
+ subprocess.run("pwd && ls -al", shell=True)
6
+
7
+ subprocess.run("export PORT=7860", shell=True)
8
+ subprocess.run("npm run build --prefix app/build ", shell=True)
9
+ subprocess.run("node app/build", shell=True)
10
+ subprocess.run("pwd && ls -al", shell=True)
app/.eslintignore ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .DS_Store
2
+ node_modules
3
+ /build
4
+ /.svelte-kit
5
+ /package
6
+ .env
7
+ .env.*
8
+ !.env.example
9
+
10
+ # Ignore files for PNPM, NPM and YARN
11
+ pnpm-lock.yaml
12
+ package-lock.json
13
+ yarn.lock
app/.eslintrc.cjs ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ module.exports = {
2
+ root: true,
3
+ parser: '@typescript-eslint/parser',
4
+ extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'],
5
+ plugins: ['svelte3', '@typescript-eslint'],
6
+ ignorePatterns: ['*.cjs'],
7
+ overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }],
8
+ settings: {
9
+ 'svelte3/typescript': () => require('typescript')
10
+ },
11
+ parserOptions: {
12
+ sourceType: 'module',
13
+ ecmaVersion: 2020
14
+ },
15
+ env: {
16
+ browser: true,
17
+ es2017: true,
18
+ node: true
19
+ }
20
+ };
app/.gitignore ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ .DS_Store
2
+ node_modules
3
+ /build
4
+ /.svelte-kit
5
+ /package
6
+ .env
7
+ .env.*
8
+ !.env.example
9
+ .vercel
10
+ .output
app/.npmrc ADDED
@@ -0,0 +1 @@
 
 
1
+ engine-strict=true
app/.prettierignore ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .DS_Store
2
+ node_modules
3
+ /build
4
+ /.svelte-kit
5
+ /package
6
+ .env
7
+ .env.*
8
+ !.env.example
9
+
10
+ # Ignore files for PNPM, NPM and YARN
11
+ pnpm-lock.yaml
12
+ package-lock.json
13
+ yarn.lock
app/.prettierrc ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "useTabs": true,
3
+ "singleQuote": true,
4
+ "trailingComma": "none",
5
+ "printWidth": 100,
6
+ "plugins": ["prettier-plugin-svelte"],
7
+ "pluginSearchDirs": ["."],
8
+ "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
9
+ }
app/README.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # create-svelte
2
+
3
+ Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte).
4
+
5
+ ## Creating a project
6
+
7
+ If you're seeing this, you've probably already done this step. Congrats!
8
+
9
+ ```bash
10
+ # create a new project in the current directory
11
+ npm create svelte@latest
12
+
13
+ # create a new project in my-app
14
+ npm create svelte@latest my-app
15
+ ```
16
+
17
+ ## Developing
18
+
19
+ Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
20
+
21
+ ```bash
22
+ npm run dev
23
+
24
+ # or start the server and open the app in a new browser tab
25
+ npm run dev -- --open
26
+ ```
27
+
28
+ ## Building
29
+
30
+ To create a production version of your app:
31
+
32
+ ```bash
33
+ npm run build
34
+ ```
35
+
36
+ You can preview the production build with `npm run preview`.
37
+
38
+ > To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.
app/package.json ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "app",
3
+ "version": "0.0.1",
4
+ "scripts": {
5
+ "dev": "vite dev",
6
+ "build": "vite build",
7
+ "preview": "vite preview",
8
+ "test": "playwright test",
9
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
10
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
11
+ "lint": "prettier --plugin-search-dir . --check . && eslint .",
12
+ "format": "prettier --plugin-search-dir . --write ."
13
+ },
14
+ "devDependencies": {
15
+ "@fontsource/fira-mono": "^4.5.0",
16
+ "@neoconfetti/svelte": "^1.0.0",
17
+ "@playwright/test": "1.25.0",
18
+ "@sveltejs/adapter-auto": "next",
19
+ "@sveltejs/adapter-node": "1.0.0-next.100",
20
+ "@sveltejs/kit": "next",
21
+ "@types/cookie": "^0.5.1",
22
+ "@typescript-eslint/eslint-plugin": "^5.27.0",
23
+ "@typescript-eslint/parser": "^5.27.0",
24
+ "eslint": "^8.16.0",
25
+ "eslint-config-prettier": "^8.3.0",
26
+ "eslint-plugin-svelte3": "^4.0.0",
27
+ "prettier": "^2.6.2",
28
+ "prettier-plugin-svelte": "^2.7.0",
29
+ "svelte": "^3.46.0",
30
+ "svelte-check": "^2.7.1",
31
+ "svelte-preprocess": "^4.10.6",
32
+ "tslib": "^2.3.1",
33
+ "typescript": "^4.7.4",
34
+ "vite": "^3.1.0"
35
+ },
36
+ "type": "module"
37
+ }
app/playwright.config.ts ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ import type { PlaywrightTestConfig } from '@playwright/test';
2
+
3
+ const config: PlaywrightTestConfig = {
4
+ webServer: {
5
+ command: 'npm run build && npm run preview',
6
+ port: 4173
7
+ }
8
+ };
9
+
10
+ export default config;
app/pnpm-lock.yaml ADDED
@@ -0,0 +1,2272 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ lockfileVersion: 5.4
2
+
3
+ specifiers:
4
+ '@fontsource/fira-mono': ^4.5.0
5
+ '@neoconfetti/svelte': ^1.0.0
6
+ '@playwright/test': 1.25.0
7
+ '@sveltejs/adapter-auto': next
8
+ '@sveltejs/adapter-node': 1.0.0-next.100
9
+ '@sveltejs/kit': next
10
+ '@types/cookie': ^0.5.1
11
+ '@typescript-eslint/eslint-plugin': ^5.27.0
12
+ '@typescript-eslint/parser': ^5.27.0
13
+ eslint: ^8.16.0
14
+ eslint-config-prettier: ^8.3.0
15
+ eslint-plugin-svelte3: ^4.0.0
16
+ prettier: ^2.6.2
17
+ prettier-plugin-svelte: ^2.7.0
18
+ svelte: ^3.46.0
19
+ svelte-check: ^2.7.1
20
+ svelte-preprocess: ^4.10.6
21
+ tslib: ^2.3.1
22
+ typescript: ^4.7.4
23
+ vite: ^3.1.0
24
+
25
+ devDependencies:
26
+ '@fontsource/fira-mono': 4.5.10
27
+ '@neoconfetti/svelte': 1.0.0
28
+ '@playwright/test': 1.25.0
29
+ '@sveltejs/adapter-auto': 1.0.0-next.86
30
+ '@sveltejs/adapter-node': 1.0.0-next.100
31
+ '@sveltejs/kit': 1.0.0-next.531_svelte@3.52.0+vite@3.2.2
32
+ '@types/cookie': 0.5.1
33
+ '@typescript-eslint/eslint-plugin': 5.42.0_6xw5wg2354iw4zujk2f3vyfrzu
34
+ '@typescript-eslint/parser': 5.42.0_wyqvi574yv7oiwfeinomdzmc3m
35
+ eslint: 8.26.0
36
+ eslint-config-prettier: 8.5.0_eslint@8.26.0
37
+ eslint-plugin-svelte3: 4.0.0_l6ppk7eerpslmlsqymzic46t24
38
+ prettier: 2.7.1
39
+ prettier-plugin-svelte: 2.8.0_lrllcp5xtrkmmdzifit4hd52ze
40
+ svelte: 3.52.0
41
+ svelte-check: 2.9.2_svelte@3.52.0
42
+ svelte-preprocess: 4.10.7_besnmoibwkhwtentvwuriss7pa
43
+ tslib: 2.4.1
44
+ typescript: 4.8.4
45
+ vite: 3.2.2
46
+
47
+ packages:
48
+
49
+ /@cloudflare/workers-types/3.18.0:
50
+ resolution: {integrity: sha512-ehKOJVLMeR+tZkYhWEaLYQxl0TaIZu/kE86HF3/RidR8Xv5LuQxpbh+XXAoKVqsaphWLhIgBhgnlN5HGdheXSQ==}
51
+ dev: true
52
+
53
+ /@esbuild/android-arm/0.15.12:
54
+ resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==}
55
+ engines: {node: '>=12'}
56
+ cpu: [arm]
57
+ os: [android]
58
+ requiresBuild: true
59
+ dev: true
60
+ optional: true
61
+
62
+ /@esbuild/linux-loong64/0.15.12:
63
+ resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==}
64
+ engines: {node: '>=12'}
65
+ cpu: [loong64]
66
+ os: [linux]
67
+ requiresBuild: true
68
+ dev: true
69
+ optional: true
70
+
71
+ /@eslint/eslintrc/1.3.3:
72
+ resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==}
73
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
74
+ dependencies:
75
+ ajv: 6.12.6
76
+ debug: 4.3.4
77
+ espree: 9.4.0
78
+ globals: 13.17.0
79
+ ignore: 5.2.0
80
+ import-fresh: 3.3.0
81
+ js-yaml: 4.1.0
82
+ minimatch: 3.1.2
83
+ strip-json-comments: 3.1.1
84
+ transitivePeerDependencies:
85
+ - supports-color
86
+ dev: true
87
+
88
+ /@fontsource/fira-mono/4.5.10:
89
+ resolution: {integrity: sha512-bxUnRP8xptGRo8YXeY073DSpfK74XpSb0ZyRNpHV9WvLnJ7TwPOjZll8hTMin7zLC6iOp59pDZ8EQDj1gzgAQQ==}
90
+ dev: true
91
+
92
+ /@humanwhocodes/config-array/0.11.7:
93
+ resolution: {integrity: sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==}
94
+ engines: {node: '>=10.10.0'}
95
+ dependencies:
96
+ '@humanwhocodes/object-schema': 1.2.1
97
+ debug: 4.3.4
98
+ minimatch: 3.1.2
99
+ transitivePeerDependencies:
100
+ - supports-color
101
+ dev: true
102
+
103
+ /@humanwhocodes/module-importer/1.0.1:
104
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
105
+ engines: {node: '>=12.22'}
106
+ dev: true
107
+
108
+ /@humanwhocodes/object-schema/1.2.1:
109
+ resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
110
+ dev: true
111
+
112
+ /@iarna/toml/2.2.5:
113
+ resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==}
114
+ dev: true
115
+
116
+ /@jridgewell/resolve-uri/3.1.0:
117
+ resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
118
+ engines: {node: '>=6.0.0'}
119
+ dev: true
120
+
121
+ /@jridgewell/sourcemap-codec/1.4.14:
122
+ resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
123
+ dev: true
124
+
125
+ /@jridgewell/trace-mapping/0.3.17:
126
+ resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
127
+ dependencies:
128
+ '@jridgewell/resolve-uri': 3.1.0
129
+ '@jridgewell/sourcemap-codec': 1.4.14
130
+ dev: true
131
+
132
+ /@mapbox/node-pre-gyp/1.0.10:
133
+ resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==}
134
+ hasBin: true
135
+ dependencies:
136
+ detect-libc: 2.0.1
137
+ https-proxy-agent: 5.0.1
138
+ make-dir: 3.1.0
139
+ node-fetch: 2.6.7
140
+ nopt: 5.0.0
141
+ npmlog: 5.0.1
142
+ rimraf: 3.0.2
143
+ semver: 7.3.8
144
+ tar: 6.1.12
145
+ transitivePeerDependencies:
146
+ - encoding
147
+ - supports-color
148
+ dev: true
149
+
150
+ /@neoconfetti/svelte/1.0.0:
151
+ resolution: {integrity: sha512-SmksyaJAdSlMa9cTidVSIqYo1qti+WTsviNDwgjNVm+KQ3DRP2Df9umDIzC4vCcpEYY+chQe0i2IKnLw03AT8Q==}
152
+ dev: true
153
+
154
+ /@nodelib/fs.scandir/2.1.5:
155
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
156
+ engines: {node: '>= 8'}
157
+ dependencies:
158
+ '@nodelib/fs.stat': 2.0.5
159
+ run-parallel: 1.2.0
160
+ dev: true
161
+
162
+ /@nodelib/fs.stat/2.0.5:
163
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
164
+ engines: {node: '>= 8'}
165
+ dev: true
166
+
167
+ /@nodelib/fs.walk/1.2.8:
168
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
169
+ engines: {node: '>= 8'}
170
+ dependencies:
171
+ '@nodelib/fs.scandir': 2.1.5
172
+ fastq: 1.13.0
173
+ dev: true
174
+
175
+ /@playwright/test/1.25.0:
176
+ resolution: {integrity: sha512-j4EZhTTQI3dBeWblE21EV//swwmBtOpIrLdOIJIRv4uqsLdHgBg1z+JtTg+AeC5o2bAXIE26kDNW5A0TimG8Bg==}
177
+ engines: {node: '>=14'}
178
+ hasBin: true
179
+ dependencies:
180
+ '@types/node': 18.11.9
181
+ playwright-core: 1.25.0
182
+ dev: true
183
+
184
+ /@polka/url/1.0.0-next.21:
185
+ resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
186
+ dev: true
187
+
188
+ /@rollup/plugin-commonjs/23.0.2_rollup@2.79.1:
189
+ resolution: {integrity: sha512-e9ThuiRf93YlVxc4qNIurvv+Hp9dnD+4PjOqQs5vAYfcZ3+AXSrcdzXnVjWxcGQOa6KGJFcRZyUI3ktWLavFjg==}
190
+ engines: {node: '>=14.0.0'}
191
+ peerDependencies:
192
+ rollup: ^2.68.0||^3.0.0
193
+ peerDependenciesMeta:
194
+ rollup:
195
+ optional: true
196
+ dependencies:
197
+ '@rollup/pluginutils': 5.0.2_rollup@2.79.1
198
+ commondir: 1.0.1
199
+ estree-walker: 2.0.2
200
+ glob: 8.0.3
201
+ is-reference: 1.2.1
202
+ magic-string: 0.26.7
203
+ rollup: 2.79.1
204
+ dev: true
205
+
206
+ /@rollup/plugin-json/5.0.1_rollup@2.79.1:
207
+ resolution: {integrity: sha512-QCwhZZLvM8nRcTHyR1vOgyTMiAnjiNj1ebD/BMRvbO1oc/z14lZH6PfxXeegee2B6mky/u9fia4fxRM4TqrUaw==}
208
+ engines: {node: '>=14.0.0'}
209
+ peerDependencies:
210
+ rollup: ^1.20.0||^2.0.0||^3.0.0
211
+ peerDependenciesMeta:
212
+ rollup:
213
+ optional: true
214
+ dependencies:
215
+ '@rollup/pluginutils': 5.0.2_rollup@2.79.1
216
+ rollup: 2.79.1
217
+ dev: true
218
+
219
+ /@rollup/plugin-node-resolve/15.0.1_rollup@2.79.1:
220
+ resolution: {integrity: sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==}
221
+ engines: {node: '>=14.0.0'}
222
+ peerDependencies:
223
+ rollup: ^2.78.0||^3.0.0
224
+ peerDependenciesMeta:
225
+ rollup:
226
+ optional: true
227
+ dependencies:
228
+ '@rollup/pluginutils': 5.0.2_rollup@2.79.1
229
+ '@types/resolve': 1.20.2
230
+ deepmerge: 4.2.2
231
+ is-builtin-module: 3.2.0
232
+ is-module: 1.0.0
233
+ resolve: 1.22.1
234
+ rollup: 2.79.1
235
+ dev: true
236
+
237
+ /@rollup/pluginutils/5.0.2_rollup@2.79.1:
238
+ resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
239
+ engines: {node: '>=14.0.0'}
240
+ peerDependencies:
241
+ rollup: ^1.20.0||^2.0.0||^3.0.0
242
+ peerDependenciesMeta:
243
+ rollup:
244
+ optional: true
245
+ dependencies:
246
+ '@types/estree': 1.0.0
247
+ estree-walker: 2.0.2
248
+ picomatch: 2.3.1
249
+ rollup: 2.79.1
250
+ dev: true
251
+
252
+ /@sveltejs/adapter-auto/1.0.0-next.86:
253
+ resolution: {integrity: sha512-IKW1SUiXPPZ+qumQu5v48VH4aGmYiSLS83qbDlwfNmoRQejgU54f1M5s+isVmnr9kIOwbMQ0CfYhmZWJ7sEv6Q==}
254
+ dependencies:
255
+ '@sveltejs/adapter-cloudflare': 1.0.0-next.40
256
+ '@sveltejs/adapter-netlify': 1.0.0-next.83
257
+ '@sveltejs/adapter-vercel': 1.0.0-next.81
258
+ transitivePeerDependencies:
259
+ - encoding
260
+ - supports-color
261
+ dev: true
262
+
263
+ /@sveltejs/adapter-cloudflare/1.0.0-next.40:
264
+ resolution: {integrity: sha512-KT4TK40T9pl24nPFWHgw1QwAv9AjOkUymjFpS07Ro2zeBHJVgga1Jl0OA1bsiyEiLNRivNRwaWHFySlZ2JJpxQ==}
265
+ dependencies:
266
+ '@cloudflare/workers-types': 3.18.0
267
+ esbuild: 0.15.12
268
+ worktop: 0.8.0-next.14
269
+ dev: true
270
+
271
+ /@sveltejs/adapter-netlify/1.0.0-next.83:
272
+ resolution: {integrity: sha512-4hPKs7T1v81KatpMm8AgPEe4LSvoRNWiooxbSlLL8su/nnVe2FHPlpGgRcdSsE9VUmlkyd+4YIbVFG0ZcYO4LQ==}
273
+ dependencies:
274
+ '@iarna/toml': 2.2.5
275
+ esbuild: 0.15.12
276
+ set-cookie-parser: 2.5.1
277
+ dev: true
278
+
279
+ /@sveltejs/adapter-node/1.0.0-next.100:
280
+ resolution: {integrity: sha512-XtyweoRcrnD3T/hkqv4XAlhU24VM6/QiUqR2mfs7I3Ji/KrBKWSM2GCpSptnfk3mELK193sJ0T4m6Z3x8uf47w==}
281
+ dependencies:
282
+ '@rollup/plugin-commonjs': 23.0.2_rollup@2.79.1
283
+ '@rollup/plugin-json': 5.0.1_rollup@2.79.1
284
+ '@rollup/plugin-node-resolve': 15.0.1_rollup@2.79.1
285
+ rollup: 2.79.1
286
+ dev: true
287
+
288
+ /@sveltejs/adapter-vercel/1.0.0-next.81:
289
+ resolution: {integrity: sha512-cuNolQSqabSs97J2hn9bnRDOscihIO+VEYltsc+POLU/ecv7pbUm1qdRakeG3+ehK1mfZ9dub6vEVuLKhm+Qng==}
290
+ dependencies:
291
+ '@vercel/nft': 0.22.1
292
+ esbuild: 0.15.12
293
+ transitivePeerDependencies:
294
+ - encoding
295
+ - supports-color
296
+ dev: true
297
+
298
+ /@sveltejs/kit/1.0.0-next.531_svelte@3.52.0+vite@3.2.2:
299
+ resolution: {integrity: sha512-8uBJF5BweIFoyw+Kqv0jsDSfndNw2mTF222qi8rDuptOy7gjoWXYFy2F0kd8orNeZUnjFrHE+g/qDNHq7zzEJg==}
300
+ engines: {node: '>=16.14'}
301
+ hasBin: true
302
+ requiresBuild: true
303
+ peerDependencies:
304
+ svelte: ^3.44.0
305
+ vite: ^3.1.0
306
+ dependencies:
307
+ '@sveltejs/vite-plugin-svelte': 1.1.0_svelte@3.52.0+vite@3.2.2
308
+ '@types/cookie': 0.5.1
309
+ cookie: 0.5.0
310
+ devalue: 4.1.0
311
+ kleur: 4.1.5
312
+ magic-string: 0.26.7
313
+ mime: 3.0.0
314
+ sade: 1.8.1
315
+ set-cookie-parser: 2.5.1
316
+ sirv: 2.0.2
317
+ svelte: 3.52.0
318
+ tiny-glob: 0.2.9
319
+ undici: 5.12.0
320
+ vite: 3.2.2
321
+ transitivePeerDependencies:
322
+ - diff-match-patch
323
+ - supports-color
324
+ dev: true
325
+
326
+ /@sveltejs/vite-plugin-svelte/1.1.0_svelte@3.52.0+vite@3.2.2:
327
+ resolution: {integrity: sha512-cFRfEdztubtj1c/rYh7ArK7XCfFJn6wG6+J8/e9amFsKtEJILovoBrK0/mxt1AjPQg0vaX+fHPKvhx+q8mTPaQ==}
328
+ engines: {node: ^14.18.0 || >= 16}
329
+ peerDependencies:
330
+ diff-match-patch: ^1.0.5
331
+ svelte: ^3.44.0
332
+ vite: ^3.0.0
333
+ peerDependenciesMeta:
334
+ diff-match-patch:
335
+ optional: true
336
+ dependencies:
337
+ debug: 4.3.4
338
+ deepmerge: 4.2.2
339
+ kleur: 4.1.5
340
+ magic-string: 0.26.7
341
+ svelte: 3.52.0
342
+ svelte-hmr: 0.15.0_svelte@3.52.0
343
+ vite: 3.2.2
344
+ transitivePeerDependencies:
345
+ - supports-color
346
+ dev: true
347
+
348
+ /@types/cookie/0.5.1:
349
+ resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==}
350
+ dev: true
351
+
352
+ /@types/estree/1.0.0:
353
+ resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
354
+ dev: true
355
+
356
+ /@types/json-schema/7.0.11:
357
+ resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
358
+ dev: true
359
+
360
+ /@types/node/18.11.9:
361
+ resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==}
362
+ dev: true
363
+
364
+ /@types/pug/2.0.6:
365
+ resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
366
+ dev: true
367
+
368
+ /@types/resolve/1.20.2:
369
+ resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
370
+ dev: true
371
+
372
+ /@types/sass/1.43.1:
373
+ resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==}
374
+ dependencies:
375
+ '@types/node': 18.11.9
376
+ dev: true
377
+
378
+ /@types/semver/7.3.13:
379
+ resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
380
+ dev: true
381
+
382
+ /@typescript-eslint/eslint-plugin/5.42.0_6xw5wg2354iw4zujk2f3vyfrzu:
383
+ resolution: {integrity: sha512-5TJh2AgL6+wpL8H/GTSjNb4WrjKoR2rqvFxR/DDTqYNk6uXn8BJMEcncLSpMbf/XV1aS0jAjYwn98uvVCiAywQ==}
384
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
385
+ peerDependencies:
386
+ '@typescript-eslint/parser': ^5.0.0
387
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
388
+ typescript: '*'
389
+ peerDependenciesMeta:
390
+ typescript:
391
+ optional: true
392
+ dependencies:
393
+ '@typescript-eslint/parser': 5.42.0_wyqvi574yv7oiwfeinomdzmc3m
394
+ '@typescript-eslint/scope-manager': 5.42.0
395
+ '@typescript-eslint/type-utils': 5.42.0_wyqvi574yv7oiwfeinomdzmc3m
396
+ '@typescript-eslint/utils': 5.42.0_wyqvi574yv7oiwfeinomdzmc3m
397
+ debug: 4.3.4
398
+ eslint: 8.26.0
399
+ ignore: 5.2.0
400
+ natural-compare-lite: 1.4.0
401
+ regexpp: 3.2.0
402
+ semver: 7.3.8
403
+ tsutils: 3.21.0_typescript@4.8.4
404
+ typescript: 4.8.4
405
+ transitivePeerDependencies:
406
+ - supports-color
407
+ dev: true
408
+
409
+ /@typescript-eslint/parser/5.42.0_wyqvi574yv7oiwfeinomdzmc3m:
410
+ resolution: {integrity: sha512-Ixh9qrOTDRctFg3yIwrLkgf33AHyEIn6lhyf5cCfwwiGtkWhNpVKlEZApi3inGQR/barWnY7qY8FbGKBO7p3JA==}
411
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
412
+ peerDependencies:
413
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
414
+ typescript: '*'
415
+ peerDependenciesMeta:
416
+ typescript:
417
+ optional: true
418
+ dependencies:
419
+ '@typescript-eslint/scope-manager': 5.42.0
420
+ '@typescript-eslint/types': 5.42.0
421
+ '@typescript-eslint/typescript-estree': 5.42.0_typescript@4.8.4
422
+ debug: 4.3.4
423
+ eslint: 8.26.0
424
+ typescript: 4.8.4
425
+ transitivePeerDependencies:
426
+ - supports-color
427
+ dev: true
428
+
429
+ /@typescript-eslint/scope-manager/5.42.0:
430
+ resolution: {integrity: sha512-l5/3IBHLH0Bv04y+H+zlcLiEMEMjWGaCX6WyHE5Uk2YkSGAMlgdUPsT/ywTSKgu9D1dmmKMYgYZijObfA39Wow==}
431
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
432
+ dependencies:
433
+ '@typescript-eslint/types': 5.42.0
434
+ '@typescript-eslint/visitor-keys': 5.42.0
435
+ dev: true
436
+
437
+ /@typescript-eslint/type-utils/5.42.0_wyqvi574yv7oiwfeinomdzmc3m:
438
+ resolution: {integrity: sha512-HW14TXC45dFVZxnVW8rnUGnvYyRC0E/vxXShFCthcC9VhVTmjqOmtqj6H5rm9Zxv+ORxKA/1aLGD7vmlLsdlOg==}
439
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
440
+ peerDependencies:
441
+ eslint: '*'
442
+ typescript: '*'
443
+ peerDependenciesMeta:
444
+ typescript:
445
+ optional: true
446
+ dependencies:
447
+ '@typescript-eslint/typescript-estree': 5.42.0_typescript@4.8.4
448
+ '@typescript-eslint/utils': 5.42.0_wyqvi574yv7oiwfeinomdzmc3m
449
+ debug: 4.3.4
450
+ eslint: 8.26.0
451
+ tsutils: 3.21.0_typescript@4.8.4
452
+ typescript: 4.8.4
453
+ transitivePeerDependencies:
454
+ - supports-color
455
+ dev: true
456
+
457
+ /@typescript-eslint/types/5.42.0:
458
+ resolution: {integrity: sha512-t4lzO9ZOAUcHY6bXQYRuu+3SSYdD9TS8ooApZft4WARt4/f2Cj/YpvbTe8A4GuhT4bNW72goDMOy7SW71mZwGw==}
459
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
460
+ dev: true
461
+
462
+ /@typescript-eslint/typescript-estree/5.42.0_typescript@4.8.4:
463
+ resolution: {integrity: sha512-2O3vSq794x3kZGtV7i4SCWZWCwjEtkWfVqX4m5fbUBomOsEOyd6OAD1qU2lbvV5S8tgy/luJnOYluNyYVeOTTg==}
464
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
465
+ peerDependencies:
466
+ typescript: '*'
467
+ peerDependenciesMeta:
468
+ typescript:
469
+ optional: true
470
+ dependencies:
471
+ '@typescript-eslint/types': 5.42.0
472
+ '@typescript-eslint/visitor-keys': 5.42.0
473
+ debug: 4.3.4
474
+ globby: 11.1.0
475
+ is-glob: 4.0.3
476
+ semver: 7.3.8
477
+ tsutils: 3.21.0_typescript@4.8.4
478
+ typescript: 4.8.4
479
+ transitivePeerDependencies:
480
+ - supports-color
481
+ dev: true
482
+
483
+ /@typescript-eslint/utils/5.42.0_wyqvi574yv7oiwfeinomdzmc3m:
484
+ resolution: {integrity: sha512-JZ++3+h1vbeG1NUECXQZE3hg0kias9kOtcQr3+JVQ3whnjvKuMyktJAAIj6743OeNPnGBmjj7KEmiDL7qsdnCQ==}
485
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
486
+ peerDependencies:
487
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
488
+ dependencies:
489
+ '@types/json-schema': 7.0.11
490
+ '@types/semver': 7.3.13
491
+ '@typescript-eslint/scope-manager': 5.42.0
492
+ '@typescript-eslint/types': 5.42.0
493
+ '@typescript-eslint/typescript-estree': 5.42.0_typescript@4.8.4
494
+ eslint: 8.26.0
495
+ eslint-scope: 5.1.1
496
+ eslint-utils: 3.0.0_eslint@8.26.0
497
+ semver: 7.3.8
498
+ transitivePeerDependencies:
499
+ - supports-color
500
+ - typescript
501
+ dev: true
502
+
503
+ /@typescript-eslint/visitor-keys/5.42.0:
504
+ resolution: {integrity: sha512-QHbu5Hf/2lOEOwy+IUw0GoSCuAzByTAWWrOTKzTzsotiUnWFpuKnXcAhC9YztAf2EElQ0VvIK+pHJUPkM0q7jg==}
505
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
506
+ dependencies:
507
+ '@typescript-eslint/types': 5.42.0
508
+ eslint-visitor-keys: 3.3.0
509
+ dev: true
510
+
511
+ /@vercel/nft/0.22.1:
512
+ resolution: {integrity: sha512-lYYZIoxRurqDOSoVIdBicGnpUIpfyaS5qVjdPq+EfI285WqtZK3NK/dyCkiyBul+X2U2OEhRyeMdXPCHGJbohw==}
513
+ hasBin: true
514
+ dependencies:
515
+ '@mapbox/node-pre-gyp': 1.0.10
516
+ acorn: 8.8.1
517
+ async-sema: 3.1.1
518
+ bindings: 1.5.0
519
+ estree-walker: 2.0.2
520
+ glob: 7.2.3
521
+ graceful-fs: 4.2.10
522
+ micromatch: 4.0.5
523
+ node-gyp-build: 4.5.0
524
+ resolve-from: 5.0.0
525
+ rollup-pluginutils: 2.8.2
526
+ transitivePeerDependencies:
527
+ - encoding
528
+ - supports-color
529
+ dev: true
530
+
531
+ /abbrev/1.1.1:
532
+ resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
533
+ dev: true
534
+
535
+ /acorn-jsx/5.3.2_acorn@8.8.1:
536
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
537
+ peerDependencies:
538
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
539
+ dependencies:
540
+ acorn: 8.8.1
541
+ dev: true
542
+
543
+ /acorn/8.8.1:
544
+ resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
545
+ engines: {node: '>=0.4.0'}
546
+ hasBin: true
547
+ dev: true
548
+
549
+ /agent-base/6.0.2:
550
+ resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
551
+ engines: {node: '>= 6.0.0'}
552
+ dependencies:
553
+ debug: 4.3.4
554
+ transitivePeerDependencies:
555
+ - supports-color
556
+ dev: true
557
+
558
+ /ajv/6.12.6:
559
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
560
+ dependencies:
561
+ fast-deep-equal: 3.1.3
562
+ fast-json-stable-stringify: 2.1.0
563
+ json-schema-traverse: 0.4.1
564
+ uri-js: 4.4.1
565
+ dev: true
566
+
567
+ /ansi-regex/5.0.1:
568
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
569
+ engines: {node: '>=8'}
570
+ dev: true
571
+
572
+ /ansi-styles/4.3.0:
573
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
574
+ engines: {node: '>=8'}
575
+ dependencies:
576
+ color-convert: 2.0.1
577
+ dev: true
578
+
579
+ /anymatch/3.1.2:
580
+ resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
581
+ engines: {node: '>= 8'}
582
+ dependencies:
583
+ normalize-path: 3.0.0
584
+ picomatch: 2.3.1
585
+ dev: true
586
+
587
+ /aproba/2.0.0:
588
+ resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
589
+ dev: true
590
+
591
+ /are-we-there-yet/2.0.0:
592
+ resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==}
593
+ engines: {node: '>=10'}
594
+ dependencies:
595
+ delegates: 1.0.0
596
+ readable-stream: 3.6.0
597
+ dev: true
598
+
599
+ /argparse/2.0.1:
600
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
601
+ dev: true
602
+
603
+ /array-union/2.1.0:
604
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
605
+ engines: {node: '>=8'}
606
+ dev: true
607
+
608
+ /async-sema/3.1.1:
609
+ resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==}
610
+ dev: true
611
+
612
+ /balanced-match/1.0.2:
613
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
614
+ dev: true
615
+
616
+ /binary-extensions/2.2.0:
617
+ resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
618
+ engines: {node: '>=8'}
619
+ dev: true
620
+
621
+ /bindings/1.5.0:
622
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
623
+ dependencies:
624
+ file-uri-to-path: 1.0.0
625
+ dev: true
626
+
627
+ /brace-expansion/1.1.11:
628
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
629
+ dependencies:
630
+ balanced-match: 1.0.2
631
+ concat-map: 0.0.1
632
+ dev: true
633
+
634
+ /brace-expansion/2.0.1:
635
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
636
+ dependencies:
637
+ balanced-match: 1.0.2
638
+ dev: true
639
+
640
+ /braces/3.0.2:
641
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
642
+ engines: {node: '>=8'}
643
+ dependencies:
644
+ fill-range: 7.0.1
645
+ dev: true
646
+
647
+ /buffer-crc32/0.2.13:
648
+ resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
649
+ dev: true
650
+
651
+ /builtin-modules/3.3.0:
652
+ resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
653
+ engines: {node: '>=6'}
654
+ dev: true
655
+
656
+ /busboy/1.6.0:
657
+ resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
658
+ engines: {node: '>=10.16.0'}
659
+ dependencies:
660
+ streamsearch: 1.1.0
661
+ dev: true
662
+
663
+ /callsites/3.1.0:
664
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
665
+ engines: {node: '>=6'}
666
+ dev: true
667
+
668
+ /chalk/4.1.2:
669
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
670
+ engines: {node: '>=10'}
671
+ dependencies:
672
+ ansi-styles: 4.3.0
673
+ supports-color: 7.2.0
674
+ dev: true
675
+
676
+ /chokidar/3.5.3:
677
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
678
+ engines: {node: '>= 8.10.0'}
679
+ dependencies:
680
+ anymatch: 3.1.2
681
+ braces: 3.0.2
682
+ glob-parent: 5.1.2
683
+ is-binary-path: 2.1.0
684
+ is-glob: 4.0.3
685
+ normalize-path: 3.0.0
686
+ readdirp: 3.6.0
687
+ optionalDependencies:
688
+ fsevents: 2.3.2
689
+ dev: true
690
+
691
+ /chownr/2.0.0:
692
+ resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
693
+ engines: {node: '>=10'}
694
+ dev: true
695
+
696
+ /color-convert/2.0.1:
697
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
698
+ engines: {node: '>=7.0.0'}
699
+ dependencies:
700
+ color-name: 1.1.4
701
+ dev: true
702
+
703
+ /color-name/1.1.4:
704
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
705
+ dev: true
706
+
707
+ /color-support/1.1.3:
708
+ resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
709
+ hasBin: true
710
+ dev: true
711
+
712
+ /commondir/1.0.1:
713
+ resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
714
+ dev: true
715
+
716
+ /concat-map/0.0.1:
717
+ resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
718
+ dev: true
719
+
720
+ /console-control-strings/1.1.0:
721
+ resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
722
+ dev: true
723
+
724
+ /cookie/0.5.0:
725
+ resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
726
+ engines: {node: '>= 0.6'}
727
+ dev: true
728
+
729
+ /cross-spawn/7.0.3:
730
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
731
+ engines: {node: '>= 8'}
732
+ dependencies:
733
+ path-key: 3.1.1
734
+ shebang-command: 2.0.0
735
+ which: 2.0.2
736
+ dev: true
737
+
738
+ /debug/4.3.4:
739
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
740
+ engines: {node: '>=6.0'}
741
+ peerDependencies:
742
+ supports-color: '*'
743
+ peerDependenciesMeta:
744
+ supports-color:
745
+ optional: true
746
+ dependencies:
747
+ ms: 2.1.2
748
+ dev: true
749
+
750
+ /deep-is/0.1.4:
751
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
752
+ dev: true
753
+
754
+ /deepmerge/4.2.2:
755
+ resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==}
756
+ engines: {node: '>=0.10.0'}
757
+ dev: true
758
+
759
+ /delegates/1.0.0:
760
+ resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
761
+ dev: true
762
+
763
+ /detect-indent/6.1.0:
764
+ resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
765
+ engines: {node: '>=8'}
766
+ dev: true
767
+
768
+ /detect-libc/2.0.1:
769
+ resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==}
770
+ engines: {node: '>=8'}
771
+ dev: true
772
+
773
+ /devalue/4.1.0:
774
+ resolution: {integrity: sha512-glzE77YSRp97HdNQ8EKTYJQ3tS/7DaY+c7/NjsTrJsNexqYIEANww4qyjhxsJqvpDpoqxgRqjwDNrOq8WS8NFQ==}
775
+ dev: true
776
+
777
+ /dir-glob/3.0.1:
778
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
779
+ engines: {node: '>=8'}
780
+ dependencies:
781
+ path-type: 4.0.0
782
+ dev: true
783
+
784
+ /doctrine/3.0.0:
785
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
786
+ engines: {node: '>=6.0.0'}
787
+ dependencies:
788
+ esutils: 2.0.3
789
+ dev: true
790
+
791
+ /emoji-regex/8.0.0:
792
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
793
+ dev: true
794
+
795
+ /es6-promise/3.3.1:
796
+ resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
797
+ dev: true
798
+
799
+ /esbuild-android-64/0.15.12:
800
+ resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==}
801
+ engines: {node: '>=12'}
802
+ cpu: [x64]
803
+ os: [android]
804
+ requiresBuild: true
805
+ dev: true
806
+ optional: true
807
+
808
+ /esbuild-android-arm64/0.15.12:
809
+ resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==}
810
+ engines: {node: '>=12'}
811
+ cpu: [arm64]
812
+ os: [android]
813
+ requiresBuild: true
814
+ dev: true
815
+ optional: true
816
+
817
+ /esbuild-darwin-64/0.15.12:
818
+ resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==}
819
+ engines: {node: '>=12'}
820
+ cpu: [x64]
821
+ os: [darwin]
822
+ requiresBuild: true
823
+ dev: true
824
+ optional: true
825
+
826
+ /esbuild-darwin-arm64/0.15.12:
827
+ resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==}
828
+ engines: {node: '>=12'}
829
+ cpu: [arm64]
830
+ os: [darwin]
831
+ requiresBuild: true
832
+ dev: true
833
+ optional: true
834
+
835
+ /esbuild-freebsd-64/0.15.12:
836
+ resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==}
837
+ engines: {node: '>=12'}
838
+ cpu: [x64]
839
+ os: [freebsd]
840
+ requiresBuild: true
841
+ dev: true
842
+ optional: true
843
+
844
+ /esbuild-freebsd-arm64/0.15.12:
845
+ resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==}
846
+ engines: {node: '>=12'}
847
+ cpu: [arm64]
848
+ os: [freebsd]
849
+ requiresBuild: true
850
+ dev: true
851
+ optional: true
852
+
853
+ /esbuild-linux-32/0.15.12:
854
+ resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==}
855
+ engines: {node: '>=12'}
856
+ cpu: [ia32]
857
+ os: [linux]
858
+ requiresBuild: true
859
+ dev: true
860
+ optional: true
861
+
862
+ /esbuild-linux-64/0.15.12:
863
+ resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==}
864
+ engines: {node: '>=12'}
865
+ cpu: [x64]
866
+ os: [linux]
867
+ requiresBuild: true
868
+ dev: true
869
+ optional: true
870
+
871
+ /esbuild-linux-arm/0.15.12:
872
+ resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==}
873
+ engines: {node: '>=12'}
874
+ cpu: [arm]
875
+ os: [linux]
876
+ requiresBuild: true
877
+ dev: true
878
+ optional: true
879
+
880
+ /esbuild-linux-arm64/0.15.12:
881
+ resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==}
882
+ engines: {node: '>=12'}
883
+ cpu: [arm64]
884
+ os: [linux]
885
+ requiresBuild: true
886
+ dev: true
887
+ optional: true
888
+
889
+ /esbuild-linux-mips64le/0.15.12:
890
+ resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==}
891
+ engines: {node: '>=12'}
892
+ cpu: [mips64el]
893
+ os: [linux]
894
+ requiresBuild: true
895
+ dev: true
896
+ optional: true
897
+
898
+ /esbuild-linux-ppc64le/0.15.12:
899
+ resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==}
900
+ engines: {node: '>=12'}
901
+ cpu: [ppc64]
902
+ os: [linux]
903
+ requiresBuild: true
904
+ dev: true
905
+ optional: true
906
+
907
+ /esbuild-linux-riscv64/0.15.12:
908
+ resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==}
909
+ engines: {node: '>=12'}
910
+ cpu: [riscv64]
911
+ os: [linux]
912
+ requiresBuild: true
913
+ dev: true
914
+ optional: true
915
+
916
+ /esbuild-linux-s390x/0.15.12:
917
+ resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==}
918
+ engines: {node: '>=12'}
919
+ cpu: [s390x]
920
+ os: [linux]
921
+ requiresBuild: true
922
+ dev: true
923
+ optional: true
924
+
925
+ /esbuild-netbsd-64/0.15.12:
926
+ resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==}
927
+ engines: {node: '>=12'}
928
+ cpu: [x64]
929
+ os: [netbsd]
930
+ requiresBuild: true
931
+ dev: true
932
+ optional: true
933
+
934
+ /esbuild-openbsd-64/0.15.12:
935
+ resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==}
936
+ engines: {node: '>=12'}
937
+ cpu: [x64]
938
+ os: [openbsd]
939
+ requiresBuild: true
940
+ dev: true
941
+ optional: true
942
+
943
+ /esbuild-sunos-64/0.15.12:
944
+ resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==}
945
+ engines: {node: '>=12'}
946
+ cpu: [x64]
947
+ os: [sunos]
948
+ requiresBuild: true
949
+ dev: true
950
+ optional: true
951
+
952
+ /esbuild-windows-32/0.15.12:
953
+ resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==}
954
+ engines: {node: '>=12'}
955
+ cpu: [ia32]
956
+ os: [win32]
957
+ requiresBuild: true
958
+ dev: true
959
+ optional: true
960
+
961
+ /esbuild-windows-64/0.15.12:
962
+ resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==}
963
+ engines: {node: '>=12'}
964
+ cpu: [x64]
965
+ os: [win32]
966
+ requiresBuild: true
967
+ dev: true
968
+ optional: true
969
+
970
+ /esbuild-windows-arm64/0.15.12:
971
+ resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==}
972
+ engines: {node: '>=12'}
973
+ cpu: [arm64]
974
+ os: [win32]
975
+ requiresBuild: true
976
+ dev: true
977
+ optional: true
978
+
979
+ /esbuild/0.15.12:
980
+ resolution: {integrity: sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==}
981
+ engines: {node: '>=12'}
982
+ hasBin: true
983
+ requiresBuild: true
984
+ optionalDependencies:
985
+ '@esbuild/android-arm': 0.15.12
986
+ '@esbuild/linux-loong64': 0.15.12
987
+ esbuild-android-64: 0.15.12
988
+ esbuild-android-arm64: 0.15.12
989
+ esbuild-darwin-64: 0.15.12
990
+ esbuild-darwin-arm64: 0.15.12
991
+ esbuild-freebsd-64: 0.15.12
992
+ esbuild-freebsd-arm64: 0.15.12
993
+ esbuild-linux-32: 0.15.12
994
+ esbuild-linux-64: 0.15.12
995
+ esbuild-linux-arm: 0.15.12
996
+ esbuild-linux-arm64: 0.15.12
997
+ esbuild-linux-mips64le: 0.15.12
998
+ esbuild-linux-ppc64le: 0.15.12
999
+ esbuild-linux-riscv64: 0.15.12
1000
+ esbuild-linux-s390x: 0.15.12
1001
+ esbuild-netbsd-64: 0.15.12
1002
+ esbuild-openbsd-64: 0.15.12
1003
+ esbuild-sunos-64: 0.15.12
1004
+ esbuild-windows-32: 0.15.12
1005
+ esbuild-windows-64: 0.15.12
1006
+ esbuild-windows-arm64: 0.15.12
1007
+ dev: true
1008
+
1009
+ /escape-string-regexp/4.0.0:
1010
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1011
+ engines: {node: '>=10'}
1012
+ dev: true
1013
+
1014
+ /eslint-config-prettier/8.5.0_eslint@8.26.0:
1015
+ resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==}
1016
+ hasBin: true
1017
+ peerDependencies:
1018
+ eslint: '>=7.0.0'
1019
+ dependencies:
1020
+ eslint: 8.26.0
1021
+ dev: true
1022
+
1023
+ /eslint-plugin-svelte3/4.0.0_l6ppk7eerpslmlsqymzic46t24:
1024
+ resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==}
1025
+ peerDependencies:
1026
+ eslint: '>=8.0.0'
1027
+ svelte: ^3.2.0
1028
+ dependencies:
1029
+ eslint: 8.26.0
1030
+ svelte: 3.52.0
1031
+ dev: true
1032
+
1033
+ /eslint-scope/5.1.1:
1034
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
1035
+ engines: {node: '>=8.0.0'}
1036
+ dependencies:
1037
+ esrecurse: 4.3.0
1038
+ estraverse: 4.3.0
1039
+ dev: true
1040
+
1041
+ /eslint-scope/7.1.1:
1042
+ resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
1043
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1044
+ dependencies:
1045
+ esrecurse: 4.3.0
1046
+ estraverse: 5.3.0
1047
+ dev: true
1048
+
1049
+ /eslint-utils/3.0.0_eslint@8.26.0:
1050
+ resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
1051
+ engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
1052
+ peerDependencies:
1053
+ eslint: '>=5'
1054
+ dependencies:
1055
+ eslint: 8.26.0
1056
+ eslint-visitor-keys: 2.1.0
1057
+ dev: true
1058
+
1059
+ /eslint-visitor-keys/2.1.0:
1060
+ resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
1061
+ engines: {node: '>=10'}
1062
+ dev: true
1063
+
1064
+ /eslint-visitor-keys/3.3.0:
1065
+ resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
1066
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1067
+ dev: true
1068
+
1069
+ /eslint/8.26.0:
1070
+ resolution: {integrity: sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==}
1071
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1072
+ hasBin: true
1073
+ dependencies:
1074
+ '@eslint/eslintrc': 1.3.3
1075
+ '@humanwhocodes/config-array': 0.11.7
1076
+ '@humanwhocodes/module-importer': 1.0.1
1077
+ '@nodelib/fs.walk': 1.2.8
1078
+ ajv: 6.12.6
1079
+ chalk: 4.1.2
1080
+ cross-spawn: 7.0.3
1081
+ debug: 4.3.4
1082
+ doctrine: 3.0.0
1083
+ escape-string-regexp: 4.0.0
1084
+ eslint-scope: 7.1.1
1085
+ eslint-utils: 3.0.0_eslint@8.26.0
1086
+ eslint-visitor-keys: 3.3.0
1087
+ espree: 9.4.0
1088
+ esquery: 1.4.0
1089
+ esutils: 2.0.3
1090
+ fast-deep-equal: 3.1.3
1091
+ file-entry-cache: 6.0.1
1092
+ find-up: 5.0.0
1093
+ glob-parent: 6.0.2
1094
+ globals: 13.17.0
1095
+ grapheme-splitter: 1.0.4
1096
+ ignore: 5.2.0
1097
+ import-fresh: 3.3.0
1098
+ imurmurhash: 0.1.4
1099
+ is-glob: 4.0.3
1100
+ is-path-inside: 3.0.3
1101
+ js-sdsl: 4.1.5
1102
+ js-yaml: 4.1.0
1103
+ json-stable-stringify-without-jsonify: 1.0.1
1104
+ levn: 0.4.1
1105
+ lodash.merge: 4.6.2
1106
+ minimatch: 3.1.2
1107
+ natural-compare: 1.4.0
1108
+ optionator: 0.9.1
1109
+ regexpp: 3.2.0
1110
+ strip-ansi: 6.0.1
1111
+ strip-json-comments: 3.1.1
1112
+ text-table: 0.2.0
1113
+ transitivePeerDependencies:
1114
+ - supports-color
1115
+ dev: true
1116
+
1117
+ /espree/9.4.0:
1118
+ resolution: {integrity: sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==}
1119
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1120
+ dependencies:
1121
+ acorn: 8.8.1
1122
+ acorn-jsx: 5.3.2_acorn@8.8.1
1123
+ eslint-visitor-keys: 3.3.0
1124
+ dev: true
1125
+
1126
+ /esquery/1.4.0:
1127
+ resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==}
1128
+ engines: {node: '>=0.10'}
1129
+ dependencies:
1130
+ estraverse: 5.3.0
1131
+ dev: true
1132
+
1133
+ /esrecurse/4.3.0:
1134
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
1135
+ engines: {node: '>=4.0'}
1136
+ dependencies:
1137
+ estraverse: 5.3.0
1138
+ dev: true
1139
+
1140
+ /estraverse/4.3.0:
1141
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
1142
+ engines: {node: '>=4.0'}
1143
+ dev: true
1144
+
1145
+ /estraverse/5.3.0:
1146
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1147
+ engines: {node: '>=4.0'}
1148
+ dev: true
1149
+
1150
+ /estree-walker/0.6.1:
1151
+ resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
1152
+ dev: true
1153
+
1154
+ /estree-walker/2.0.2:
1155
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
1156
+ dev: true
1157
+
1158
+ /esutils/2.0.3:
1159
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1160
+ engines: {node: '>=0.10.0'}
1161
+ dev: true
1162
+
1163
+ /fast-deep-equal/3.1.3:
1164
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1165
+ dev: true
1166
+
1167
+ /fast-glob/3.2.12:
1168
+ resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
1169
+ engines: {node: '>=8.6.0'}
1170
+ dependencies:
1171
+ '@nodelib/fs.stat': 2.0.5
1172
+ '@nodelib/fs.walk': 1.2.8
1173
+ glob-parent: 5.1.2
1174
+ merge2: 1.4.1
1175
+ micromatch: 4.0.5
1176
+ dev: true
1177
+
1178
+ /fast-json-stable-stringify/2.1.0:
1179
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1180
+ dev: true
1181
+
1182
+ /fast-levenshtein/2.0.6:
1183
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1184
+ dev: true
1185
+
1186
+ /fastq/1.13.0:
1187
+ resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==}
1188
+ dependencies:
1189
+ reusify: 1.0.4
1190
+ dev: true
1191
+
1192
+ /file-entry-cache/6.0.1:
1193
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
1194
+ engines: {node: ^10.12.0 || >=12.0.0}
1195
+ dependencies:
1196
+ flat-cache: 3.0.4
1197
+ dev: true
1198
+
1199
+ /file-uri-to-path/1.0.0:
1200
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
1201
+ dev: true
1202
+
1203
+ /fill-range/7.0.1:
1204
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1205
+ engines: {node: '>=8'}
1206
+ dependencies:
1207
+ to-regex-range: 5.0.1
1208
+ dev: true
1209
+
1210
+ /find-up/5.0.0:
1211
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1212
+ engines: {node: '>=10'}
1213
+ dependencies:
1214
+ locate-path: 6.0.0
1215
+ path-exists: 4.0.0
1216
+ dev: true
1217
+
1218
+ /flat-cache/3.0.4:
1219
+ resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
1220
+ engines: {node: ^10.12.0 || >=12.0.0}
1221
+ dependencies:
1222
+ flatted: 3.2.7
1223
+ rimraf: 3.0.2
1224
+ dev: true
1225
+
1226
+ /flatted/3.2.7:
1227
+ resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
1228
+ dev: true
1229
+
1230
+ /fs-minipass/2.1.0:
1231
+ resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
1232
+ engines: {node: '>= 8'}
1233
+ dependencies:
1234
+ minipass: 3.3.4
1235
+ dev: true
1236
+
1237
+ /fs.realpath/1.0.0:
1238
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1239
+ dev: true
1240
+
1241
+ /fsevents/2.3.2:
1242
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
1243
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1244
+ os: [darwin]
1245
+ requiresBuild: true
1246
+ dev: true
1247
+ optional: true
1248
+
1249
+ /function-bind/1.1.1:
1250
+ resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1251
+ dev: true
1252
+
1253
+ /gauge/3.0.2:
1254
+ resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==}
1255
+ engines: {node: '>=10'}
1256
+ dependencies:
1257
+ aproba: 2.0.0
1258
+ color-support: 1.1.3
1259
+ console-control-strings: 1.1.0
1260
+ has-unicode: 2.0.1
1261
+ object-assign: 4.1.1
1262
+ signal-exit: 3.0.7
1263
+ string-width: 4.2.3
1264
+ strip-ansi: 6.0.1
1265
+ wide-align: 1.1.5
1266
+ dev: true
1267
+
1268
+ /glob-parent/5.1.2:
1269
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1270
+ engines: {node: '>= 6'}
1271
+ dependencies:
1272
+ is-glob: 4.0.3
1273
+ dev: true
1274
+
1275
+ /glob-parent/6.0.2:
1276
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1277
+ engines: {node: '>=10.13.0'}
1278
+ dependencies:
1279
+ is-glob: 4.0.3
1280
+ dev: true
1281
+
1282
+ /glob/7.2.3:
1283
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1284
+ dependencies:
1285
+ fs.realpath: 1.0.0
1286
+ inflight: 1.0.6
1287
+ inherits: 2.0.4
1288
+ minimatch: 3.1.2
1289
+ once: 1.4.0
1290
+ path-is-absolute: 1.0.1
1291
+ dev: true
1292
+
1293
+ /glob/8.0.3:
1294
+ resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==}
1295
+ engines: {node: '>=12'}
1296
+ dependencies:
1297
+ fs.realpath: 1.0.0
1298
+ inflight: 1.0.6
1299
+ inherits: 2.0.4
1300
+ minimatch: 5.1.0
1301
+ once: 1.4.0
1302
+ dev: true
1303
+
1304
+ /globals/13.17.0:
1305
+ resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==}
1306
+ engines: {node: '>=8'}
1307
+ dependencies:
1308
+ type-fest: 0.20.2
1309
+ dev: true
1310
+
1311
+ /globalyzer/0.1.0:
1312
+ resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
1313
+ dev: true
1314
+
1315
+ /globby/11.1.0:
1316
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1317
+ engines: {node: '>=10'}
1318
+ dependencies:
1319
+ array-union: 2.1.0
1320
+ dir-glob: 3.0.1
1321
+ fast-glob: 3.2.12
1322
+ ignore: 5.2.0
1323
+ merge2: 1.4.1
1324
+ slash: 3.0.0
1325
+ dev: true
1326
+
1327
+ /globrex/0.1.2:
1328
+ resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
1329
+ dev: true
1330
+
1331
+ /graceful-fs/4.2.10:
1332
+ resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
1333
+ dev: true
1334
+
1335
+ /grapheme-splitter/1.0.4:
1336
+ resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
1337
+ dev: true
1338
+
1339
+ /has-flag/4.0.0:
1340
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1341
+ engines: {node: '>=8'}
1342
+ dev: true
1343
+
1344
+ /has-unicode/2.0.1:
1345
+ resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
1346
+ dev: true
1347
+
1348
+ /has/1.0.3:
1349
+ resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
1350
+ engines: {node: '>= 0.4.0'}
1351
+ dependencies:
1352
+ function-bind: 1.1.1
1353
+ dev: true
1354
+
1355
+ /https-proxy-agent/5.0.1:
1356
+ resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
1357
+ engines: {node: '>= 6'}
1358
+ dependencies:
1359
+ agent-base: 6.0.2
1360
+ debug: 4.3.4
1361
+ transitivePeerDependencies:
1362
+ - supports-color
1363
+ dev: true
1364
+
1365
+ /ignore/5.2.0:
1366
+ resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==}
1367
+ engines: {node: '>= 4'}
1368
+ dev: true
1369
+
1370
+ /import-fresh/3.3.0:
1371
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
1372
+ engines: {node: '>=6'}
1373
+ dependencies:
1374
+ parent-module: 1.0.1
1375
+ resolve-from: 4.0.0
1376
+ dev: true
1377
+
1378
+ /imurmurhash/0.1.4:
1379
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1380
+ engines: {node: '>=0.8.19'}
1381
+ dev: true
1382
+
1383
+ /inflight/1.0.6:
1384
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1385
+ dependencies:
1386
+ once: 1.4.0
1387
+ wrappy: 1.0.2
1388
+ dev: true
1389
+
1390
+ /inherits/2.0.4:
1391
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1392
+ dev: true
1393
+
1394
+ /is-binary-path/2.1.0:
1395
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1396
+ engines: {node: '>=8'}
1397
+ dependencies:
1398
+ binary-extensions: 2.2.0
1399
+ dev: true
1400
+
1401
+ /is-builtin-module/3.2.0:
1402
+ resolution: {integrity: sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==}
1403
+ engines: {node: '>=6'}
1404
+ dependencies:
1405
+ builtin-modules: 3.3.0
1406
+ dev: true
1407
+
1408
+ /is-core-module/2.11.0:
1409
+ resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
1410
+ dependencies:
1411
+ has: 1.0.3
1412
+ dev: true
1413
+
1414
+ /is-extglob/2.1.1:
1415
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1416
+ engines: {node: '>=0.10.0'}
1417
+ dev: true
1418
+
1419
+ /is-fullwidth-code-point/3.0.0:
1420
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1421
+ engines: {node: '>=8'}
1422
+ dev: true
1423
+
1424
+ /is-glob/4.0.3:
1425
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1426
+ engines: {node: '>=0.10.0'}
1427
+ dependencies:
1428
+ is-extglob: 2.1.1
1429
+ dev: true
1430
+
1431
+ /is-module/1.0.0:
1432
+ resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
1433
+ dev: true
1434
+
1435
+ /is-number/7.0.0:
1436
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1437
+ engines: {node: '>=0.12.0'}
1438
+ dev: true
1439
+
1440
+ /is-path-inside/3.0.3:
1441
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
1442
+ engines: {node: '>=8'}
1443
+ dev: true
1444
+
1445
+ /is-reference/1.2.1:
1446
+ resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
1447
+ dependencies:
1448
+ '@types/estree': 1.0.0
1449
+ dev: true
1450
+
1451
+ /isexe/2.0.0:
1452
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1453
+ dev: true
1454
+
1455
+ /js-sdsl/4.1.5:
1456
+ resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==}
1457
+ dev: true
1458
+
1459
+ /js-yaml/4.1.0:
1460
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1461
+ hasBin: true
1462
+ dependencies:
1463
+ argparse: 2.0.1
1464
+ dev: true
1465
+
1466
+ /json-schema-traverse/0.4.1:
1467
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1468
+ dev: true
1469
+
1470
+ /json-stable-stringify-without-jsonify/1.0.1:
1471
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1472
+ dev: true
1473
+
1474
+ /kleur/4.1.5:
1475
+ resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
1476
+ engines: {node: '>=6'}
1477
+ dev: true
1478
+
1479
+ /levn/0.4.1:
1480
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1481
+ engines: {node: '>= 0.8.0'}
1482
+ dependencies:
1483
+ prelude-ls: 1.2.1
1484
+ type-check: 0.4.0
1485
+ dev: true
1486
+
1487
+ /locate-path/6.0.0:
1488
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1489
+ engines: {node: '>=10'}
1490
+ dependencies:
1491
+ p-locate: 5.0.0
1492
+ dev: true
1493
+
1494
+ /lodash.merge/4.6.2:
1495
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1496
+ dev: true
1497
+
1498
+ /lru-cache/6.0.0:
1499
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
1500
+ engines: {node: '>=10'}
1501
+ dependencies:
1502
+ yallist: 4.0.0
1503
+ dev: true
1504
+
1505
+ /magic-string/0.25.9:
1506
+ resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
1507
+ dependencies:
1508
+ sourcemap-codec: 1.4.8
1509
+ dev: true
1510
+
1511
+ /magic-string/0.26.7:
1512
+ resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==}
1513
+ engines: {node: '>=12'}
1514
+ dependencies:
1515
+ sourcemap-codec: 1.4.8
1516
+ dev: true
1517
+
1518
+ /make-dir/3.1.0:
1519
+ resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
1520
+ engines: {node: '>=8'}
1521
+ dependencies:
1522
+ semver: 6.3.0
1523
+ dev: true
1524
+
1525
+ /merge2/1.4.1:
1526
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1527
+ engines: {node: '>= 8'}
1528
+ dev: true
1529
+
1530
+ /micromatch/4.0.5:
1531
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
1532
+ engines: {node: '>=8.6'}
1533
+ dependencies:
1534
+ braces: 3.0.2
1535
+ picomatch: 2.3.1
1536
+ dev: true
1537
+
1538
+ /mime/3.0.0:
1539
+ resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
1540
+ engines: {node: '>=10.0.0'}
1541
+ hasBin: true
1542
+ dev: true
1543
+
1544
+ /min-indent/1.0.1:
1545
+ resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
1546
+ engines: {node: '>=4'}
1547
+ dev: true
1548
+
1549
+ /minimatch/3.1.2:
1550
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1551
+ dependencies:
1552
+ brace-expansion: 1.1.11
1553
+ dev: true
1554
+
1555
+ /minimatch/5.1.0:
1556
+ resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==}
1557
+ engines: {node: '>=10'}
1558
+ dependencies:
1559
+ brace-expansion: 2.0.1
1560
+ dev: true
1561
+
1562
+ /minimist/1.2.7:
1563
+ resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
1564
+ dev: true
1565
+
1566
+ /minipass/3.3.4:
1567
+ resolution: {integrity: sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==}
1568
+ engines: {node: '>=8'}
1569
+ dependencies:
1570
+ yallist: 4.0.0
1571
+ dev: true
1572
+
1573
+ /minizlib/2.1.2:
1574
+ resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
1575
+ engines: {node: '>= 8'}
1576
+ dependencies:
1577
+ minipass: 3.3.4
1578
+ yallist: 4.0.0
1579
+ dev: true
1580
+
1581
+ /mkdirp/0.5.6:
1582
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
1583
+ hasBin: true
1584
+ dependencies:
1585
+ minimist: 1.2.7
1586
+ dev: true
1587
+
1588
+ /mkdirp/1.0.4:
1589
+ resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
1590
+ engines: {node: '>=10'}
1591
+ hasBin: true
1592
+ dev: true
1593
+
1594
+ /mri/1.2.0:
1595
+ resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1596
+ engines: {node: '>=4'}
1597
+ dev: true
1598
+
1599
+ /mrmime/1.0.1:
1600
+ resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
1601
+ engines: {node: '>=10'}
1602
+ dev: true
1603
+
1604
+ /ms/2.1.2:
1605
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1606
+ dev: true
1607
+
1608
+ /nanoid/3.3.4:
1609
+ resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
1610
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1611
+ hasBin: true
1612
+ dev: true
1613
+
1614
+ /natural-compare-lite/1.4.0:
1615
+ resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
1616
+ dev: true
1617
+
1618
+ /natural-compare/1.4.0:
1619
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1620
+ dev: true
1621
+
1622
+ /node-fetch/2.6.7:
1623
+ resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
1624
+ engines: {node: 4.x || >=6.0.0}
1625
+ peerDependencies:
1626
+ encoding: ^0.1.0
1627
+ peerDependenciesMeta:
1628
+ encoding:
1629
+ optional: true
1630
+ dependencies:
1631
+ whatwg-url: 5.0.0
1632
+ dev: true
1633
+
1634
+ /node-gyp-build/4.5.0:
1635
+ resolution: {integrity: sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==}
1636
+ hasBin: true
1637
+ dev: true
1638
+
1639
+ /nopt/5.0.0:
1640
+ resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
1641
+ engines: {node: '>=6'}
1642
+ hasBin: true
1643
+ dependencies:
1644
+ abbrev: 1.1.1
1645
+ dev: true
1646
+
1647
+ /normalize-path/3.0.0:
1648
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1649
+ engines: {node: '>=0.10.0'}
1650
+ dev: true
1651
+
1652
+ /npmlog/5.0.1:
1653
+ resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
1654
+ dependencies:
1655
+ are-we-there-yet: 2.0.0
1656
+ console-control-strings: 1.1.0
1657
+ gauge: 3.0.2
1658
+ set-blocking: 2.0.0
1659
+ dev: true
1660
+
1661
+ /object-assign/4.1.1:
1662
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1663
+ engines: {node: '>=0.10.0'}
1664
+ dev: true
1665
+
1666
+ /once/1.4.0:
1667
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1668
+ dependencies:
1669
+ wrappy: 1.0.2
1670
+ dev: true
1671
+
1672
+ /optionator/0.9.1:
1673
+ resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
1674
+ engines: {node: '>= 0.8.0'}
1675
+ dependencies:
1676
+ deep-is: 0.1.4
1677
+ fast-levenshtein: 2.0.6
1678
+ levn: 0.4.1
1679
+ prelude-ls: 1.2.1
1680
+ type-check: 0.4.0
1681
+ word-wrap: 1.2.3
1682
+ dev: true
1683
+
1684
+ /p-limit/3.1.0:
1685
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1686
+ engines: {node: '>=10'}
1687
+ dependencies:
1688
+ yocto-queue: 0.1.0
1689
+ dev: true
1690
+
1691
+ /p-locate/5.0.0:
1692
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1693
+ engines: {node: '>=10'}
1694
+ dependencies:
1695
+ p-limit: 3.1.0
1696
+ dev: true
1697
+
1698
+ /parent-module/1.0.1:
1699
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1700
+ engines: {node: '>=6'}
1701
+ dependencies:
1702
+ callsites: 3.1.0
1703
+ dev: true
1704
+
1705
+ /path-exists/4.0.0:
1706
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1707
+ engines: {node: '>=8'}
1708
+ dev: true
1709
+
1710
+ /path-is-absolute/1.0.1:
1711
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1712
+ engines: {node: '>=0.10.0'}
1713
+ dev: true
1714
+
1715
+ /path-key/3.1.1:
1716
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1717
+ engines: {node: '>=8'}
1718
+ dev: true
1719
+
1720
+ /path-parse/1.0.7:
1721
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1722
+ dev: true
1723
+
1724
+ /path-type/4.0.0:
1725
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1726
+ engines: {node: '>=8'}
1727
+ dev: true
1728
+
1729
+ /picocolors/1.0.0:
1730
+ resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1731
+ dev: true
1732
+
1733
+ /picomatch/2.3.1:
1734
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1735
+ engines: {node: '>=8.6'}
1736
+ dev: true
1737
+
1738
+ /playwright-core/1.25.0:
1739
+ resolution: {integrity: sha512-kZ3Jwaf3wlu0GgU0nB8UMQ+mXFTqBIFz9h1svTlNduNKjnbPXFxw7mJanLVjqxHJRn62uBfmgBj93YHidk2N5Q==}
1740
+ engines: {node: '>=14'}
1741
+ hasBin: true
1742
+ dev: true
1743
+
1744
+ /postcss/8.4.18:
1745
+ resolution: {integrity: sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==}
1746
+ engines: {node: ^10 || ^12 || >=14}
1747
+ dependencies:
1748
+ nanoid: 3.3.4
1749
+ picocolors: 1.0.0
1750
+ source-map-js: 1.0.2
1751
+ dev: true
1752
+
1753
+ /prelude-ls/1.2.1:
1754
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1755
+ engines: {node: '>= 0.8.0'}
1756
+ dev: true
1757
+
1758
+ /prettier-plugin-svelte/2.8.0_lrllcp5xtrkmmdzifit4hd52ze:
1759
+ resolution: {integrity: sha512-QlXv/U3bUszks3XYDPsk1fsaQC+fo2lshwKbcbO+lrSVdJ+40mB1BfL8OCAk1W9y4pJxpqO/4gqm6NtF3zNGCw==}
1760
+ peerDependencies:
1761
+ prettier: ^1.16.4 || ^2.0.0
1762
+ svelte: ^3.2.0
1763
+ dependencies:
1764
+ prettier: 2.7.1
1765
+ svelte: 3.52.0
1766
+ dev: true
1767
+
1768
+ /prettier/2.7.1:
1769
+ resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==}
1770
+ engines: {node: '>=10.13.0'}
1771
+ hasBin: true
1772
+ dev: true
1773
+
1774
+ /punycode/2.1.1:
1775
+ resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
1776
+ engines: {node: '>=6'}
1777
+ dev: true
1778
+
1779
+ /queue-microtask/1.2.3:
1780
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1781
+ dev: true
1782
+
1783
+ /readable-stream/3.6.0:
1784
+ resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
1785
+ engines: {node: '>= 6'}
1786
+ dependencies:
1787
+ inherits: 2.0.4
1788
+ string_decoder: 1.3.0
1789
+ util-deprecate: 1.0.2
1790
+ dev: true
1791
+
1792
+ /readdirp/3.6.0:
1793
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1794
+ engines: {node: '>=8.10.0'}
1795
+ dependencies:
1796
+ picomatch: 2.3.1
1797
+ dev: true
1798
+
1799
+ /regexparam/2.0.1:
1800
+ resolution: {integrity: sha512-zRgSaYemnNYxUv+/5SeoHI0eJIgTL/A2pUtXUPLHQxUldagouJ9p+K6IbIZ/JiQuCEv2E2B1O11SjVQy3aMCkw==}
1801
+ engines: {node: '>=8'}
1802
+ dev: true
1803
+
1804
+ /regexpp/3.2.0:
1805
+ resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
1806
+ engines: {node: '>=8'}
1807
+ dev: true
1808
+
1809
+ /resolve-from/4.0.0:
1810
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1811
+ engines: {node: '>=4'}
1812
+ dev: true
1813
+
1814
+ /resolve-from/5.0.0:
1815
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
1816
+ engines: {node: '>=8'}
1817
+ dev: true
1818
+
1819
+ /resolve/1.22.1:
1820
+ resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
1821
+ hasBin: true
1822
+ dependencies:
1823
+ is-core-module: 2.11.0
1824
+ path-parse: 1.0.7
1825
+ supports-preserve-symlinks-flag: 1.0.0
1826
+ dev: true
1827
+
1828
+ /reusify/1.0.4:
1829
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1830
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1831
+ dev: true
1832
+
1833
+ /rimraf/2.7.1:
1834
+ resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
1835
+ hasBin: true
1836
+ dependencies:
1837
+ glob: 7.2.3
1838
+ dev: true
1839
+
1840
+ /rimraf/3.0.2:
1841
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
1842
+ hasBin: true
1843
+ dependencies:
1844
+ glob: 7.2.3
1845
+ dev: true
1846
+
1847
+ /rollup-pluginutils/2.8.2:
1848
+ resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
1849
+ dependencies:
1850
+ estree-walker: 0.6.1
1851
+ dev: true
1852
+
1853
+ /rollup/2.79.1:
1854
+ resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
1855
+ engines: {node: '>=10.0.0'}
1856
+ hasBin: true
1857
+ optionalDependencies:
1858
+ fsevents: 2.3.2
1859
+ dev: true
1860
+
1861
+ /run-parallel/1.2.0:
1862
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1863
+ dependencies:
1864
+ queue-microtask: 1.2.3
1865
+ dev: true
1866
+
1867
+ /sade/1.8.1:
1868
+ resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
1869
+ engines: {node: '>=6'}
1870
+ dependencies:
1871
+ mri: 1.2.0
1872
+ dev: true
1873
+
1874
+ /safe-buffer/5.2.1:
1875
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1876
+ dev: true
1877
+
1878
+ /sander/0.5.1:
1879
+ resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==}
1880
+ dependencies:
1881
+ es6-promise: 3.3.1
1882
+ graceful-fs: 4.2.10
1883
+ mkdirp: 0.5.6
1884
+ rimraf: 2.7.1
1885
+ dev: true
1886
+
1887
+ /semver/6.3.0:
1888
+ resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
1889
+ hasBin: true
1890
+ dev: true
1891
+
1892
+ /semver/7.3.8:
1893
+ resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
1894
+ engines: {node: '>=10'}
1895
+ hasBin: true
1896
+ dependencies:
1897
+ lru-cache: 6.0.0
1898
+ dev: true
1899
+
1900
+ /set-blocking/2.0.0:
1901
+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
1902
+ dev: true
1903
+
1904
+ /set-cookie-parser/2.5.1:
1905
+ resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==}
1906
+ dev: true
1907
+
1908
+ /shebang-command/2.0.0:
1909
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1910
+ engines: {node: '>=8'}
1911
+ dependencies:
1912
+ shebang-regex: 3.0.0
1913
+ dev: true
1914
+
1915
+ /shebang-regex/3.0.0:
1916
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1917
+ engines: {node: '>=8'}
1918
+ dev: true
1919
+
1920
+ /signal-exit/3.0.7:
1921
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
1922
+ dev: true
1923
+
1924
+ /sirv/2.0.2:
1925
+ resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==}
1926
+ engines: {node: '>= 10'}
1927
+ dependencies:
1928
+ '@polka/url': 1.0.0-next.21
1929
+ mrmime: 1.0.1
1930
+ totalist: 3.0.0
1931
+ dev: true
1932
+
1933
+ /slash/3.0.0:
1934
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1935
+ engines: {node: '>=8'}
1936
+ dev: true
1937
+
1938
+ /sorcery/0.10.0:
1939
+ resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==}
1940
+ hasBin: true
1941
+ dependencies:
1942
+ buffer-crc32: 0.2.13
1943
+ minimist: 1.2.7
1944
+ sander: 0.5.1
1945
+ sourcemap-codec: 1.4.8
1946
+ dev: true
1947
+
1948
+ /source-map-js/1.0.2:
1949
+ resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
1950
+ engines: {node: '>=0.10.0'}
1951
+ dev: true
1952
+
1953
+ /sourcemap-codec/1.4.8:
1954
+ resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
1955
+ dev: true
1956
+
1957
+ /streamsearch/1.1.0:
1958
+ resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
1959
+ engines: {node: '>=10.0.0'}
1960
+ dev: true
1961
+
1962
+ /string-width/4.2.3:
1963
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1964
+ engines: {node: '>=8'}
1965
+ dependencies:
1966
+ emoji-regex: 8.0.0
1967
+ is-fullwidth-code-point: 3.0.0
1968
+ strip-ansi: 6.0.1
1969
+ dev: true
1970
+
1971
+ /string_decoder/1.3.0:
1972
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
1973
+ dependencies:
1974
+ safe-buffer: 5.2.1
1975
+ dev: true
1976
+
1977
+ /strip-ansi/6.0.1:
1978
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1979
+ engines: {node: '>=8'}
1980
+ dependencies:
1981
+ ansi-regex: 5.0.1
1982
+ dev: true
1983
+
1984
+ /strip-indent/3.0.0:
1985
+ resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
1986
+ engines: {node: '>=8'}
1987
+ dependencies:
1988
+ min-indent: 1.0.1
1989
+ dev: true
1990
+
1991
+ /strip-json-comments/3.1.1:
1992
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1993
+ engines: {node: '>=8'}
1994
+ dev: true
1995
+
1996
+ /supports-color/7.2.0:
1997
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1998
+ engines: {node: '>=8'}
1999
+ dependencies:
2000
+ has-flag: 4.0.0
2001
+ dev: true
2002
+
2003
+ /supports-preserve-symlinks-flag/1.0.0:
2004
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
2005
+ engines: {node: '>= 0.4'}
2006
+ dev: true
2007
+
2008
+ /svelte-check/2.9.2_svelte@3.52.0:
2009
+ resolution: {integrity: sha512-DRi8HhnCiqiGR2YF9ervPGvtoYrheE09cXieCTEqeTPOTJzfoa54Py8rovIBv4bH4n5HgZYIyTQ3DDLHQLl2uQ==}
2010
+ hasBin: true
2011
+ peerDependencies:
2012
+ svelte: ^3.24.0
2013
+ dependencies:
2014
+ '@jridgewell/trace-mapping': 0.3.17
2015
+ chokidar: 3.5.3
2016
+ fast-glob: 3.2.12
2017
+ import-fresh: 3.3.0
2018
+ picocolors: 1.0.0
2019
+ sade: 1.8.1
2020
+ svelte: 3.52.0
2021
+ svelte-preprocess: 4.10.7_besnmoibwkhwtentvwuriss7pa
2022
+ typescript: 4.8.4
2023
+ transitivePeerDependencies:
2024
+ - '@babel/core'
2025
+ - coffeescript
2026
+ - less
2027
+ - node-sass
2028
+ - postcss
2029
+ - postcss-load-config
2030
+ - pug
2031
+ - sass
2032
+ - stylus
2033
+ - sugarss
2034
+ dev: true
2035
+
2036
+ /svelte-hmr/0.15.0_svelte@3.52.0:
2037
+ resolution: {integrity: sha512-Aw21SsyoohyVn4yiKXWPNCSW2DQNH/76kvUnE9kpt4h9hcg9tfyQc6xshx9hzgMfGF0kVx0EGD8oBMWSnATeOg==}
2038
+ engines: {node: ^12.20 || ^14.13.1 || >= 16}
2039
+ peerDependencies:
2040
+ svelte: '>=3.19.0'
2041
+ dependencies:
2042
+ svelte: 3.52.0
2043
+ dev: true
2044
+
2045
+ /svelte-preprocess/4.10.7_besnmoibwkhwtentvwuriss7pa:
2046
+ resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==}
2047
+ engines: {node: '>= 9.11.2'}
2048
+ requiresBuild: true
2049
+ peerDependencies:
2050
+ '@babel/core': ^7.10.2
2051
+ coffeescript: ^2.5.1
2052
+ less: ^3.11.3 || ^4.0.0
2053
+ node-sass: '*'
2054
+ postcss: ^7 || ^8
2055
+ postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0
2056
+ pug: ^3.0.0
2057
+ sass: ^1.26.8
2058
+ stylus: ^0.55.0
2059
+ sugarss: ^2.0.0
2060
+ svelte: ^3.23.0
2061
+ typescript: ^3.9.5 || ^4.0.0
2062
+ peerDependenciesMeta:
2063
+ '@babel/core':
2064
+ optional: true
2065
+ coffeescript:
2066
+ optional: true
2067
+ less:
2068
+ optional: true
2069
+ node-sass:
2070
+ optional: true
2071
+ postcss:
2072
+ optional: true
2073
+ postcss-load-config:
2074
+ optional: true
2075
+ pug:
2076
+ optional: true
2077
+ sass:
2078
+ optional: true
2079
+ stylus:
2080
+ optional: true
2081
+ sugarss:
2082
+ optional: true
2083
+ typescript:
2084
+ optional: true
2085
+ dependencies:
2086
+ '@types/pug': 2.0.6
2087
+ '@types/sass': 1.43.1
2088
+ detect-indent: 6.1.0
2089
+ magic-string: 0.25.9
2090
+ sorcery: 0.10.0
2091
+ strip-indent: 3.0.0
2092
+ svelte: 3.52.0
2093
+ typescript: 4.8.4
2094
+ dev: true
2095
+
2096
+ /svelte/3.52.0:
2097
+ resolution: {integrity: sha512-FxcnEUOAVfr10vDU5dVgJN19IvqeHQCS1zfe8vayTfis9A2t5Fhx+JDe5uv/C3j//bB1umpLJ6quhgs9xyUbCQ==}
2098
+ engines: {node: '>= 8'}
2099
+ dev: true
2100
+
2101
+ /tar/6.1.12:
2102
+ resolution: {integrity: sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==}
2103
+ engines: {node: '>=10'}
2104
+ dependencies:
2105
+ chownr: 2.0.0
2106
+ fs-minipass: 2.1.0
2107
+ minipass: 3.3.4
2108
+ minizlib: 2.1.2
2109
+ mkdirp: 1.0.4
2110
+ yallist: 4.0.0
2111
+ dev: true
2112
+
2113
+ /text-table/0.2.0:
2114
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
2115
+ dev: true
2116
+
2117
+ /tiny-glob/0.2.9:
2118
+ resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
2119
+ dependencies:
2120
+ globalyzer: 0.1.0
2121
+ globrex: 0.1.2
2122
+ dev: true
2123
+
2124
+ /to-regex-range/5.0.1:
2125
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
2126
+ engines: {node: '>=8.0'}
2127
+ dependencies:
2128
+ is-number: 7.0.0
2129
+ dev: true
2130
+
2131
+ /totalist/3.0.0:
2132
+ resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==}
2133
+ engines: {node: '>=6'}
2134
+ dev: true
2135
+
2136
+ /tr46/0.0.3:
2137
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
2138
+ dev: true
2139
+
2140
+ /tslib/1.14.1:
2141
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
2142
+ dev: true
2143
+
2144
+ /tslib/2.4.1:
2145
+ resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
2146
+ dev: true
2147
+
2148
+ /tsutils/3.21.0_typescript@4.8.4:
2149
+ resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
2150
+ engines: {node: '>= 6'}
2151
+ peerDependencies:
2152
+ 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'
2153
+ dependencies:
2154
+ tslib: 1.14.1
2155
+ typescript: 4.8.4
2156
+ dev: true
2157
+
2158
+ /type-check/0.4.0:
2159
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
2160
+ engines: {node: '>= 0.8.0'}
2161
+ dependencies:
2162
+ prelude-ls: 1.2.1
2163
+ dev: true
2164
+
2165
+ /type-fest/0.20.2:
2166
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
2167
+ engines: {node: '>=10'}
2168
+ dev: true
2169
+
2170
+ /typescript/4.8.4:
2171
+ resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==}
2172
+ engines: {node: '>=4.2.0'}
2173
+ hasBin: true
2174
+ dev: true
2175
+
2176
+ /undici/5.12.0:
2177
+ resolution: {integrity: sha512-zMLamCG62PGjd9HHMpo05bSLvvwWOZgGeiWlN/vlqu3+lRo3elxktVGEyLMX+IO7c2eflLjcW74AlkhEZm15mg==}
2178
+ engines: {node: '>=12.18'}
2179
+ dependencies:
2180
+ busboy: 1.6.0
2181
+ dev: true
2182
+
2183
+ /uri-js/4.4.1:
2184
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
2185
+ dependencies:
2186
+ punycode: 2.1.1
2187
+ dev: true
2188
+
2189
+ /util-deprecate/1.0.2:
2190
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
2191
+ dev: true
2192
+
2193
+ /vite/3.2.2:
2194
+ resolution: {integrity: sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==}
2195
+ engines: {node: ^14.18.0 || >=16.0.0}
2196
+ hasBin: true
2197
+ peerDependencies:
2198
+ less: '*'
2199
+ sass: '*'
2200
+ stylus: '*'
2201
+ sugarss: '*'
2202
+ terser: ^5.4.0
2203
+ peerDependenciesMeta:
2204
+ less:
2205
+ optional: true
2206
+ sass:
2207
+ optional: true
2208
+ stylus:
2209
+ optional: true
2210
+ sugarss:
2211
+ optional: true
2212
+ terser:
2213
+ optional: true
2214
+ dependencies:
2215
+ esbuild: 0.15.12
2216
+ postcss: 8.4.18
2217
+ resolve: 1.22.1
2218
+ rollup: 2.79.1
2219
+ optionalDependencies:
2220
+ fsevents: 2.3.2
2221
+ dev: true
2222
+
2223
+ /webidl-conversions/3.0.1:
2224
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
2225
+ dev: true
2226
+
2227
+ /whatwg-url/5.0.0:
2228
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
2229
+ dependencies:
2230
+ tr46: 0.0.3
2231
+ webidl-conversions: 3.0.1
2232
+ dev: true
2233
+
2234
+ /which/2.0.2:
2235
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2236
+ engines: {node: '>= 8'}
2237
+ hasBin: true
2238
+ dependencies:
2239
+ isexe: 2.0.0
2240
+ dev: true
2241
+
2242
+ /wide-align/1.1.5:
2243
+ resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
2244
+ dependencies:
2245
+ string-width: 4.2.3
2246
+ dev: true
2247
+
2248
+ /word-wrap/1.2.3:
2249
+ resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
2250
+ engines: {node: '>=0.10.0'}
2251
+ dev: true
2252
+
2253
+ /worktop/0.8.0-next.14:
2254
+ resolution: {integrity: sha512-RZgqHu1w/JcUdWOE/BUEAzarrUUHh39eWkLdX8XpA6MfgLJF6X5Vl26CV7/wcm4O/UpZvHMGJUtB9eYTqDjc9g==}
2255
+ engines: {node: '>=12'}
2256
+ dependencies:
2257
+ mrmime: 1.0.1
2258
+ regexparam: 2.0.1
2259
+ dev: true
2260
+
2261
+ /wrappy/1.0.2:
2262
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
2263
+ dev: true
2264
+
2265
+ /yallist/4.0.0:
2266
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
2267
+ dev: true
2268
+
2269
+ /yocto-queue/0.1.0:
2270
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
2271
+ engines: {node: '>=10'}
2272
+ dev: true
app/src/app.d.ts ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ // See https://kit.svelte.dev/docs/types#app
2
+ // for information about these interfaces
3
+ // and what to do when importing types
4
+ declare namespace App {}
app/src/app.html ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <link rel="icon" href="%sveltekit.assets%/favicon.png" />
6
+ <meta name="viewport" content="width=device-width" />
7
+ %sveltekit.head%
8
+ </head>
9
+ <body data-sveltekit-prefetch>
10
+ <div>%sveltekit.body%</div>
11
+ </body>
12
+ </html>
app/src/lib/images/github.svg ADDED
app/src/lib/images/svelte-logo.svg ADDED
app/src/lib/images/svelte-welcome.png ADDED
app/src/lib/images/svelte-welcome.webp ADDED
app/src/routes/+layout.svelte ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script>
2
+ import Header from './Header.svelte';
3
+ import './styles.css';
4
+ </script>
5
+
6
+ <div class="app">
7
+ <Header />
8
+
9
+ <main>
10
+ <slot />
11
+ </main>
12
+
13
+ <footer>
14
+ <p>visit <a href="https://kit.svelte.dev">kit.svelte.dev</a> to learn SvelteKit</p>
15
+ </footer>
16
+ </div>
17
+
18
+ <style>
19
+ .app {
20
+ display: flex;
21
+ flex-direction: column;
22
+ min-height: 100vh;
23
+ }
24
+
25
+ main {
26
+ flex: 1;
27
+ display: flex;
28
+ flex-direction: column;
29
+ padding: 1rem;
30
+ width: 100%;
31
+ max-width: 64rem;
32
+ margin: 0 auto;
33
+ box-sizing: border-box;
34
+ }
35
+
36
+ footer {
37
+ display: flex;
38
+ flex-direction: column;
39
+ justify-content: center;
40
+ align-items: center;
41
+ padding: 12px;
42
+ }
43
+
44
+ footer a {
45
+ font-weight: bold;
46
+ }
47
+
48
+ @media (min-width: 480px) {
49
+ footer {
50
+ padding: 12px 0;
51
+ }
52
+ }
53
+ </style>
app/src/routes/+page.svelte ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script>
2
+ import Counter from './Counter.svelte';
3
+ import welcome from '$lib/images/svelte-welcome.webp';
4
+ import welcome_fallback from '$lib/images/svelte-welcome.png';
5
+ </script>
6
+
7
+ <svelte:head>
8
+ <title>Home</title>
9
+ <meta name="description" content="Svelte demo app" />
10
+ </svelte:head>
11
+
12
+ <section>
13
+ <h1>
14
+ <span class="welcome">
15
+ <picture>
16
+ <source srcset={welcome} type="image/webp" />
17
+ <img src={welcome_fallback} alt="Welcome" />
18
+ </picture>
19
+ </span>
20
+
21
+ to your new<br />SvelteKit app
22
+ </h1>
23
+
24
+ <h2>
25
+ try editing <strong>src/routes/+page.svelte</strong>
26
+ </h2>
27
+
28
+ <Counter />
29
+ </section>
30
+
31
+ <style>
32
+ section {
33
+ display: flex;
34
+ flex-direction: column;
35
+ justify-content: center;
36
+ align-items: center;
37
+ flex: 0.6;
38
+ }
39
+
40
+ h1 {
41
+ width: 100%;
42
+ }
43
+
44
+ .welcome {
45
+ display: block;
46
+ position: relative;
47
+ width: 100%;
48
+ height: 0;
49
+ padding: 0 0 calc(100% * 495 / 2048) 0;
50
+ }
51
+
52
+ .welcome img {
53
+ position: absolute;
54
+ width: 100%;
55
+ height: 100%;
56
+ top: 0;
57
+ display: block;
58
+ }
59
+ </style>
app/src/routes/+page.ts ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ // since there's no dynamic data here, we can prerender
2
+ // it so that it gets served as a static asset in production
3
+ export const prerender = true;
app/src/routes/Counter.svelte ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import { spring } from 'svelte/motion';
3
+
4
+ let count = 0;
5
+
6
+ const displayed_count = spring();
7
+ $: displayed_count.set(count);
8
+ $: offset = modulo($displayed_count, 1);
9
+
10
+ function modulo(n: number, m: number) {
11
+ // handle negative numbers
12
+ return ((n % m) + m) % m;
13
+ }
14
+ </script>
15
+
16
+ <div class="counter">
17
+ <button on:click={() => (count -= 1)} aria-label="Decrease the counter by one">
18
+ <svg aria-hidden="true" viewBox="0 0 1 1">
19
+ <path d="M0,0.5 L1,0.5" />
20
+ </svg>
21
+ </button>
22
+
23
+ <div class="counter-viewport">
24
+ <div class="counter-digits" style="transform: translate(0, {100 * offset}%)">
25
+ <strong class="hidden" aria-hidden="true">{Math.floor($displayed_count + 1)}</strong>
26
+ <strong>{Math.floor($displayed_count)}</strong>
27
+ </div>
28
+ </div>
29
+
30
+ <button on:click={() => (count += 1)} aria-label="Increase the counter by one">
31
+ <svg aria-hidden="true" viewBox="0 0 1 1">
32
+ <path d="M0,0.5 L1,0.5 M0.5,0 L0.5,1" />
33
+ </svg>
34
+ </button>
35
+ </div>
36
+
37
+ <style>
38
+ .counter {
39
+ display: flex;
40
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
41
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
42
+ margin: 1rem 0;
43
+ }
44
+
45
+ .counter button {
46
+ width: 2em;
47
+ padding: 0;
48
+ display: flex;
49
+ align-items: center;
50
+ justify-content: center;
51
+ border: 0;
52
+ background-color: transparent;
53
+ touch-action: manipulation;
54
+ font-size: 2rem;
55
+ }
56
+
57
+ .counter button:hover {
58
+ background-color: var(--color-bg-1);
59
+ }
60
+
61
+ svg {
62
+ width: 25%;
63
+ height: 25%;
64
+ }
65
+
66
+ path {
67
+ vector-effect: non-scaling-stroke;
68
+ stroke-width: 2px;
69
+ stroke: #444;
70
+ }
71
+
72
+ .counter-viewport {
73
+ width: 8em;
74
+ height: 4em;
75
+ overflow: hidden;
76
+ text-align: center;
77
+ position: relative;
78
+ }
79
+
80
+ .counter-viewport strong {
81
+ position: absolute;
82
+ display: flex;
83
+ width: 100%;
84
+ height: 100%;
85
+ font-weight: 400;
86
+ color: var(--color-theme-1);
87
+ font-size: 4rem;
88
+ align-items: center;
89
+ justify-content: center;
90
+ }
91
+
92
+ .counter-digits {
93
+ position: absolute;
94
+ width: 100%;
95
+ height: 100%;
96
+ }
97
+
98
+ .hidden {
99
+ top: -100%;
100
+ user-select: none;
101
+ }
102
+ </style>
app/src/routes/Header.svelte ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script>
2
+ import { page } from '$app/stores';
3
+ import logo from '$lib/images/svelte-logo.svg';
4
+ import github from '$lib/images/github.svg';
5
+ </script>
6
+
7
+ <header>
8
+ <div class="corner">
9
+ <a href="https://kit.svelte.dev">
10
+ <img src={logo} alt="SvelteKit" />
11
+ </a>
12
+ </div>
13
+
14
+ <nav>
15
+ <svg viewBox="0 0 2 3" aria-hidden="true">
16
+ <path d="M0,0 L1,2 C1.5,3 1.5,3 2,3 L2,0 Z" />
17
+ </svg>
18
+ <ul>
19
+ <li aria-current={$page.url.pathname === '/' ? 'page' : undefined}>
20
+ <a href="/">Home</a>
21
+ </li>
22
+ <li aria-current={$page.url.pathname === '/about' ? 'page' : undefined}>
23
+ <a href="/about">About</a>
24
+ </li>
25
+ <li aria-current={$page.url.pathname.startsWith('/sverdle') ? 'page' : undefined}>
26
+ <a href="/sverdle">Sverdle</a>
27
+ </li>
28
+ </ul>
29
+ <svg viewBox="0 0 2 3" aria-hidden="true">
30
+ <path d="M0,0 L0,3 C0.5,3 0.5,3 1,2 L2,0 Z" />
31
+ </svg>
32
+ </nav>
33
+
34
+ <div class="corner">
35
+ <a href="https://github.com/sveltejs/kit">
36
+ <img src={github} alt="GitHub" />
37
+ </a>
38
+ </div>
39
+ </header>
40
+
41
+ <style>
42
+ header {
43
+ display: flex;
44
+ justify-content: space-between;
45
+ }
46
+
47
+ .corner {
48
+ width: 3em;
49
+ height: 3em;
50
+ }
51
+
52
+ .corner a {
53
+ display: flex;
54
+ align-items: center;
55
+ justify-content: center;
56
+ width: 100%;
57
+ height: 100%;
58
+ }
59
+
60
+ .corner img {
61
+ width: 2em;
62
+ height: 2em;
63
+ object-fit: contain;
64
+ }
65
+
66
+ nav {
67
+ display: flex;
68
+ justify-content: center;
69
+ --background: rgba(255, 255, 255, 0.7);
70
+ }
71
+
72
+ svg {
73
+ width: 2em;
74
+ height: 3em;
75
+ display: block;
76
+ }
77
+
78
+ path {
79
+ fill: var(--background);
80
+ }
81
+
82
+ ul {
83
+ position: relative;
84
+ padding: 0;
85
+ margin: 0;
86
+ height: 3em;
87
+ display: flex;
88
+ justify-content: center;
89
+ align-items: center;
90
+ list-style: none;
91
+ background: var(--background);
92
+ background-size: contain;
93
+ }
94
+
95
+ li {
96
+ position: relative;
97
+ height: 100%;
98
+ }
99
+
100
+ li[aria-current='page']::before {
101
+ --size: 6px;
102
+ content: '';
103
+ width: 0;
104
+ height: 0;
105
+ position: absolute;
106
+ top: 0;
107
+ left: calc(50% - var(--size));
108
+ border: var(--size) solid transparent;
109
+ border-top: var(--size) solid var(--color-theme-1);
110
+ }
111
+
112
+ nav a {
113
+ display: flex;
114
+ height: 100%;
115
+ align-items: center;
116
+ padding: 0 0.5rem;
117
+ color: var(--color-text);
118
+ font-weight: 700;
119
+ font-size: 0.8rem;
120
+ text-transform: uppercase;
121
+ letter-spacing: 0.1em;
122
+ text-decoration: none;
123
+ transition: color 0.2s linear;
124
+ }
125
+
126
+ a:hover {
127
+ color: var(--color-theme-1);
128
+ }
129
+ </style>
app/src/routes/about/+page.svelte ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svelte:head>
2
+ <title>About</title>
3
+ <meta name="description" content="About this app" />
4
+ </svelte:head>
5
+
6
+ <div class="text-column">
7
+ <h1>About this app</h1>
8
+
9
+ <p>
10
+ This is a <a href="https://kit.svelte.dev">SvelteKit</a> app. You can make your own by typing the
11
+ following into your command line and following the prompts:
12
+ </p>
13
+
14
+ <pre>npm create svelte@latest</pre>
15
+
16
+ <p>
17
+ The page you're looking at is purely static HTML, with no client-side interactivity needed.
18
+ Because of that, we don't need to load any JavaScript. Try viewing the page's source, or opening
19
+ the devtools network panel and reloading.
20
+ </p>
21
+
22
+ <p>
23
+ The <a href="/sverdle">Sverdle</a> page illustrates SvelteKit's data loading and form handling. Try
24
+ using it with JavaScript disabled!
25
+ </p>
26
+ </div>
app/src/routes/about/+page.ts ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import { dev } from '$app/environment';
2
+
3
+ // we don't need any JS on this page, though we'll load
4
+ // it in dev so that we get hot module replacement
5
+ export const csr = dev;
6
+
7
+ // since there's no dynamic data here, we can prerender
8
+ // it so that it gets served as a static asset in production
9
+ export const prerender = true;
app/src/routes/styles.css ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import '@fontsource/fira-mono';
2
+
3
+ :root {
4
+ --font-body: Arial, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu,
5
+ Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
6
+ --font-mono: 'Fira Mono', monospace;
7
+ --color-bg-0: rgb(202, 216, 228);
8
+ --color-bg-1: hsl(209, 36%, 86%);
9
+ --color-bg-2: hsl(224, 44%, 95%);
10
+ --color-theme-1: #ff3e00;
11
+ --color-theme-2: #40b3ff;
12
+ --color-text: rgba(0, 0, 0, 0.7);
13
+ --column-width: 42rem;
14
+ --column-margin-top: 4rem;
15
+ font-family: var(--font-body);
16
+ color: var(--color-text);
17
+ }
18
+
19
+ body {
20
+ min-height: 100vh;
21
+ margin: 0;
22
+ background-attachment: fixed;
23
+ background-color: var(--color-bg-1);
24
+ background-size: 100vw 100vh;
25
+ background-image: radial-gradient(
26
+ 50% 50% at 50% 50%,
27
+ rgba(255, 255, 255, 0.75) 0%,
28
+ rgba(255, 255, 255, 0) 100%
29
+ ),
30
+ linear-gradient(180deg, var(--color-bg-0) 0%, var(--color-bg-1) 15%, var(--color-bg-2) 50%);
31
+ }
32
+
33
+ h1,
34
+ h2,
35
+ p {
36
+ font-weight: 400;
37
+ }
38
+
39
+ p {
40
+ line-height: 1.5;
41
+ }
42
+
43
+ a {
44
+ color: var(--color-theme-1);
45
+ text-decoration: none;
46
+ }
47
+
48
+ a:hover {
49
+ text-decoration: underline;
50
+ }
51
+
52
+ h1 {
53
+ font-size: 2rem;
54
+ text-align: center;
55
+ }
56
+
57
+ h2 {
58
+ font-size: 1rem;
59
+ }
60
+
61
+ pre {
62
+ font-size: 16px;
63
+ font-family: var(--font-mono);
64
+ background-color: rgba(255, 255, 255, 0.45);
65
+ border-radius: 3px;
66
+ box-shadow: 2px 2px 6px rgb(255 255 255 / 25%);
67
+ padding: 0.5em;
68
+ overflow-x: auto;
69
+ color: var(--color-text);
70
+ }
71
+
72
+ .text-column {
73
+ display: flex;
74
+ max-width: 48rem;
75
+ flex: 0.6;
76
+ flex-direction: column;
77
+ justify-content: center;
78
+ margin: 0 auto;
79
+ }
80
+
81
+ input,
82
+ button {
83
+ font-size: inherit;
84
+ font-family: inherit;
85
+ }
86
+
87
+ button:focus:not(:focus-visible) {
88
+ outline: none;
89
+ }
90
+
91
+ @media (min-width: 720px) {
92
+ h1 {
93
+ font-size: 2.4rem;
94
+ }
95
+ }
app/src/routes/sverdle/+page.server.ts ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { invalid } from '@sveltejs/kit';
2
+ import { words, allowed } from './words.server';
3
+ import type { PageServerLoad, Actions } from './$types';
4
+
5
+ export const load: PageServerLoad = ({ cookies }) => {
6
+ const game = new Game(cookies.get('sverdle'));
7
+
8
+ return {
9
+ /**
10
+ * The player's guessed words so far
11
+ */
12
+ guesses: game.guesses,
13
+
14
+ /**
15
+ * An array of strings like '__x_c' corresponding to the guesses, where 'x' means
16
+ * an exact match, and 'c' means a close match (right letter, wrong place)
17
+ */
18
+ answers: game.answers,
19
+
20
+ /**
21
+ * The correct answer, revealed if the game is over
22
+ */
23
+ answer: game.answers.length >= 6 ? game.answer : null
24
+ };
25
+ };
26
+
27
+ export const actions: Actions = {
28
+ /**
29
+ * Modify game state in reaction to a keypress. If client-side JavaScript
30
+ * is available, this will happen in the browser instead of here
31
+ */
32
+ update: async ({ request, cookies }) => {
33
+ const game = new Game(cookies.get('sverdle'));
34
+
35
+ const data = await request.formData();
36
+ const key = data.get('key');
37
+
38
+ const i = game.answers.length;
39
+
40
+ if (key === 'backspace') {
41
+ game.guesses[i] = game.guesses[i].slice(0, -1);
42
+ } else {
43
+ game.guesses[i] += key;
44
+ }
45
+
46
+ cookies.set('sverdle', game.toString());
47
+ },
48
+
49
+ /**
50
+ * Modify game state in reaction to a guessed word. This logic always runs on
51
+ * the server, so that people can't cheat by peeking at the JavaScript
52
+ */
53
+ enter: async ({ request, cookies }) => {
54
+ const game = new Game(cookies.get('sverdle'));
55
+
56
+ const data = await request.formData();
57
+ const guess = data.getAll('guess') as string[];
58
+
59
+ if (!game.enter(guess)) {
60
+ return invalid(400, { badGuess: true });
61
+ }
62
+
63
+ cookies.set('sverdle', game.toString());
64
+ },
65
+
66
+ restart: async ({ cookies }) => {
67
+ cookies.delete('sverdle');
68
+ }
69
+ };
70
+
71
+ class Game {
72
+ index: number;
73
+ guesses: string[];
74
+ answers: string[];
75
+ answer: string;
76
+
77
+ /**
78
+ * Create a game object from the player's cookie, or initialise a new game
79
+ */
80
+ constructor(serialized: string | undefined) {
81
+ if (serialized) {
82
+ const [index, guesses, answers] = serialized.split('-');
83
+
84
+ this.index = +index;
85
+ this.guesses = guesses ? guesses.split(' ') : [];
86
+ this.answers = answers ? answers.split(' ') : [];
87
+ } else {
88
+ this.index = Math.floor(Math.random() * words.length);
89
+ this.guesses = ['', '', '', '', '', ''];
90
+ this.answers = [] ;
91
+ }
92
+
93
+ this.answer = words[this.index];
94
+ }
95
+
96
+ /**
97
+ * Update game state based on a guess of a five-letter word. Returns
98
+ * true if the guess was valid, false otherwise
99
+ */
100
+ enter(letters: string[]) {
101
+ const word = letters.join('');
102
+ const valid = allowed.has(word);
103
+
104
+ if (!valid) return false;
105
+
106
+ this.guesses[this.answers.length] = word;
107
+
108
+ const available = Array.from(this.answer);
109
+ const answer = Array(5).fill('_');
110
+
111
+ // first, find exact matches
112
+ for (let i = 0; i < 5; i += 1) {
113
+ if (letters[i] === available[i]) {
114
+ answer[i] = 'x';
115
+ available[i] = ' ';
116
+ }
117
+ }
118
+
119
+ // then find close matches (this has to happen
120
+ // in a second step, otherwise an early close
121
+ // match can prevent a later exact match)
122
+ for (let i = 0; i < 5; i += 1) {
123
+ if (answer[i] === '_') {
124
+ const index = available.indexOf(letters[i]);
125
+ if (index !== -1) {
126
+ answer[i] = 'c';
127
+ available[index] = ' ';
128
+ }
129
+ }
130
+ }
131
+
132
+ this.answers.push(answer.join(''));
133
+
134
+ return true;
135
+ }
136
+
137
+ /**
138
+ * Serialize game state so it can be set as a cookie
139
+ */
140
+ toString() {
141
+ return `${this.index}-${this.guesses.join(' ')}-${this.answers.join(' ')}`;
142
+ }
143
+ }
app/src/routes/sverdle/+page.svelte ADDED
@@ -0,0 +1,389 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import { confetti } from '@neoconfetti/svelte';
3
+ import { enhance } from '$app/forms';
4
+ import type { PageData, ActionData } from './$types';
5
+
6
+ export let data: PageData;
7
+
8
+ export let form: ActionData;
9
+
10
+ /** Whether or not the user has won */
11
+ $: won = data.answers.at(-1) === 'xxxxx';
12
+
13
+ /** The index of the current guess */
14
+ $: i = won ? -1 : data.answers.length;
15
+
16
+ /** Whether the current guess can be submitted */
17
+ $: submittable = data.guesses[i]?.length === 5;
18
+
19
+ /**
20
+ * A map of classnames for all letters that have been guessed,
21
+ * used for styling the keyboard
22
+ */
23
+ let classnames: Record<string, 'exact' | 'close' | 'missing'>;
24
+
25
+ $: {
26
+ classnames = {};
27
+
28
+ data.answers.forEach((answer, i) => {
29
+ const guess = data.guesses[i];
30
+
31
+ for (let i = 0; i < 5; i += 1) {
32
+ const letter = guess[i];
33
+
34
+ if (answer[i] === 'x') {
35
+ classnames[letter] = 'exact';
36
+ } else if (!classnames[letter]) {
37
+ classnames[letter] = answer[i] === 'c' ? 'close' : 'missing';
38
+ }
39
+ }
40
+ });
41
+ }
42
+
43
+ /**
44
+ * Modify the game state without making a trip to the server,
45
+ * if client-side JavaScript is enabled
46
+ */
47
+ function update(event: MouseEvent) {
48
+ const guess = data.guesses[i];
49
+ const key = (event.target as HTMLButtonElement).getAttribute(
50
+ 'data-key'
51
+ );
52
+
53
+ if (key === 'backspace') {
54
+ data.guesses[i] = guess.slice(0, -1);
55
+ if (form?.badGuess) form.badGuess = false;
56
+ } else if (guess.length < 5) {
57
+ data.guesses[i] += key;
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Trigger form logic in response to a keydown event, so that
63
+ * desktop users can use the keyboard to play the game
64
+ */
65
+ function keydown(event: KeyboardEvent) {
66
+ if (event.metaKey) return;
67
+
68
+ document
69
+ .querySelector(`[data-key="${event.key}" i]`)
70
+ ?.dispatchEvent(new MouseEvent('click', { cancelable: true }));
71
+ }
72
+ </script>
73
+
74
+ <svelte:window on:keydown={keydown} />
75
+
76
+ <svelte:head>
77
+ <title>Sverdle</title>
78
+ <meta name="description" content="A Wordle clone written in SvelteKit" />
79
+ </svelte:head>
80
+
81
+ <form
82
+ method="POST"
83
+ action="?/enter"
84
+ use:enhance={() => {
85
+ // prevent default callback from resetting the form
86
+ return ({ update }) => {
87
+ update({ reset: false });
88
+ };
89
+ }}
90
+ >
91
+ <a class="how-to-play" href="/sverdle/how-to-play">How to play</a>
92
+
93
+ <div class="grid" class:playing={!won} class:bad-guess={form?.badGuess}>
94
+ {#each Array(6) as _, row}
95
+ {@const current = row === i}
96
+
97
+ <div class="row" class:current>
98
+ {#each Array(5) as _, column}
99
+ {@const answer = data.answers[row]?.[column]}
100
+
101
+ <input
102
+ name="guess"
103
+ disabled={!current}
104
+ readonly
105
+ class:exact={answer === 'x'}
106
+ class:close={answer === 'c'}
107
+ aria-selected={current && column === data.guesses[row].length}
108
+ value={data.guesses[row]?.[column] ?? ''}
109
+ />
110
+ {/each}
111
+ </div>
112
+ {/each}
113
+ </div>
114
+
115
+ <div class="controls">
116
+ {#if won || data.answers.length >= 6}
117
+ {#if !won && data.answer}
118
+ <p>the answer was "{data.answer}"</p>
119
+ {/if}
120
+ <button data-key="enter" aria-selected="true" class="restart" formaction="?/restart">
121
+ {won ? 'you won :)' : `game over :(`} play again?
122
+ </button>
123
+ {:else}
124
+ <div class="keyboard">
125
+ <button data-key="enter" aria-selected={submittable} disabled={!submittable}>enter</button>
126
+
127
+ <button
128
+ on:click|preventDefault={update}
129
+ data-key="backspace"
130
+ formaction="?/update"
131
+ name="key"
132
+ value="backspace"
133
+ >
134
+ back
135
+ </button>
136
+
137
+ {#each ['qwertyuiop', 'asdfghjkl', 'zxcvbnm'] as row}
138
+ <div class="row">
139
+ {#each row as letter}
140
+ <button
141
+ on:click|preventDefault={update}
142
+ data-key={letter}
143
+ class={classnames[letter]}
144
+ disabled={data.guesses[i].length === 5}
145
+ formaction="?/update"
146
+ name="key"
147
+ value={letter}
148
+ >
149
+ {letter}
150
+ </button>
151
+ {/each}
152
+ </div>
153
+ {/each}
154
+ </div>
155
+ {/if}
156
+ </div>
157
+ </form>
158
+
159
+ {#if won}
160
+ <div
161
+ style="position: absolute; left: 50%; top: 30%"
162
+ use:confetti={{
163
+ force: 0.7,
164
+ stageWidth: window.innerWidth,
165
+ stageHeight: window.innerHeight,
166
+ colors: ['#ff3e00', '#40b3ff', '#676778']
167
+ }}
168
+ />
169
+ {/if}
170
+
171
+ <style>
172
+ form {
173
+ width: 100%;
174
+ height: 100%;
175
+ display: flex;
176
+ flex-direction: column;
177
+ align-items: center;
178
+ justify-content: center;
179
+ gap: 1rem;
180
+ flex: 1;
181
+ }
182
+
183
+ .how-to-play {
184
+ color: var(--color-text);
185
+ }
186
+
187
+ .how-to-play::before {
188
+ content: 'i';
189
+ display: inline-block;
190
+ font-size: 0.8em;
191
+ font-weight: 900;
192
+ width: 1em;
193
+ height: 1em;
194
+ padding: 0.2em;
195
+ line-height: 1;
196
+ border: 1.5px solid var(--color-text);
197
+ border-radius: 50%;
198
+ text-align: center;
199
+ margin: 0 0.5em 0 0;
200
+ position: relative;
201
+ top: -0.05em;
202
+ }
203
+
204
+ .grid {
205
+ --width: min(100vw, 40vh, 380px);
206
+ max-width: var(--width);
207
+ align-self: center;
208
+ justify-self: center;
209
+ width: 100%;
210
+ height: 100%;
211
+ display: flex;
212
+ flex-direction: column;
213
+ justify-content: flex-start;
214
+ }
215
+
216
+ .grid .row {
217
+ display: grid;
218
+ grid-template-columns: repeat(5, 1fr);
219
+ grid-gap: 0.2rem;
220
+ margin: 0 0 0.2rem 0;
221
+ }
222
+
223
+ .grid.bad-guess .row.current {
224
+ animation: wiggle 0.5s;
225
+ }
226
+
227
+ .grid.playing .row.current {
228
+ filter: drop-shadow(3px 3px 10px var(--color-bg-0));
229
+ }
230
+
231
+ input {
232
+ aspect-ratio: 1;
233
+ width: 100%;
234
+ display: flex;
235
+ align-items: center;
236
+ justify-content: center;
237
+ text-align: center;
238
+ box-sizing: border-box;
239
+ text-transform: lowercase;
240
+ border: none;
241
+ font-size: calc(0.08 * var(--width));
242
+ border-radius: 2px;
243
+ background: white;
244
+ margin: 0;
245
+ color: rgba(0, 0, 0, 0.7);
246
+ }
247
+
248
+ input:disabled:not(.exact):not(.close) {
249
+ background: rgba(255, 255, 255, 0.5);
250
+ color: rgba(0, 0, 0, 0.5);
251
+ }
252
+
253
+ input.exact {
254
+ background: var(--color-theme-2);
255
+ color: white;
256
+ }
257
+
258
+ input.close {
259
+ border: 2px solid var(--color-theme-2);
260
+ }
261
+
262
+ input:focus {
263
+ outline: none;
264
+ }
265
+
266
+ [aria-selected='true'] {
267
+ outline: 2px solid var(--color-theme-1);
268
+ }
269
+
270
+ input:not(:disabled)::selection {
271
+ background: transparent;
272
+ color: var(--color-theme-1);
273
+ }
274
+
275
+ .controls {
276
+ text-align: center;
277
+ justify-content: center;
278
+ height: min(18vh, 10rem);
279
+ }
280
+
281
+ .keyboard {
282
+ --gap: 0.2rem;
283
+ position: relative;
284
+ display: flex;
285
+ flex-direction: column;
286
+ gap: var(--gap);
287
+ height: 100%;
288
+ }
289
+
290
+ .keyboard .row {
291
+ display: flex;
292
+ justify-content: center;
293
+ gap: 0.2rem;
294
+ flex: 1;
295
+ }
296
+
297
+ .keyboard button,
298
+ .keyboard button:disabled {
299
+ --size: min(8vw, 4vh, 40px);
300
+ background-color: white;
301
+ color: black;
302
+ width: var(--size);
303
+ border: none;
304
+ border-radius: 2px;
305
+ font-size: calc(var(--size) * 0.5);
306
+ margin: 0;
307
+ }
308
+
309
+ .keyboard button.exact {
310
+ background: var(--color-theme-2);
311
+ color: white;
312
+ }
313
+
314
+ .keyboard button.missing {
315
+ opacity: 0.5;
316
+ }
317
+
318
+ .keyboard button.close {
319
+ border: 2px solid var(--color-theme-2);
320
+ }
321
+
322
+ .keyboard button:focus {
323
+ background: var(--color-theme-1);
324
+ color: white;
325
+ outline: none;
326
+ }
327
+
328
+ .keyboard button[data-key='enter'],
329
+ .keyboard button[data-key='backspace'] {
330
+ position: absolute;
331
+ bottom: 0;
332
+ width: calc(1.5 * var(--size));
333
+ height: calc(1 / 3 * (100% - 2 * var(--gap)));
334
+ text-transform: uppercase;
335
+ font-size: calc(0.3 * var(--size));
336
+ padding-top: calc(0.15 * var(--size));
337
+ }
338
+
339
+ .keyboard button[data-key='enter'] {
340
+ right: calc(50% + 3.5 * var(--size) + 0.8rem);
341
+ }
342
+
343
+ .keyboard button[data-key='backspace'] {
344
+ left: calc(50% + 3.5 * var(--size) + 0.8rem);
345
+ }
346
+
347
+ .keyboard button[data-key='enter']:disabled {
348
+ opacity: 0.5;
349
+ }
350
+
351
+ .restart {
352
+ width: 100%;
353
+ padding: 1rem;
354
+ background: rgba(255, 255, 255, 0.5);
355
+ border-radius: 2px;
356
+ border: none;
357
+ }
358
+
359
+ .restart:focus,
360
+ .restart:hover {
361
+ background: var(--color-theme-1);
362
+ color: white;
363
+ outline: none;
364
+ }
365
+
366
+ @keyframes wiggle {
367
+ 0% {
368
+ transform: translateX(0);
369
+ }
370
+ 10% {
371
+ transform: translateX(-2px);
372
+ }
373
+ 30% {
374
+ transform: translateX(4px);
375
+ }
376
+ 50% {
377
+ transform: translateX(-6px);
378
+ }
379
+ 70% {
380
+ transform: translateX(+4px);
381
+ }
382
+ 90% {
383
+ transform: translateX(-2px);
384
+ }
385
+ 100% {
386
+ transform: translateX(0);
387
+ }
388
+ }
389
+ </style>
app/src/routes/sverdle/how-to-play/+page.svelte ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svelte:head>
2
+ <title>How to play Sverdle</title>
3
+ <meta name="description" content="How to play Sverdle" />
4
+ </svelte:head>
5
+
6
+ <div class="text-column">
7
+ <h1>How to play Sverdle</h1>
8
+
9
+ <p>
10
+ Sverdle is a clone of <a href="https://www.nytimes.com/games/wordle/index.html">Wordle</a>, the
11
+ word guessing game. To play, enter a five-letter English word. For example:
12
+ </p>
13
+
14
+ <div class="example">
15
+ <span class="close">r</span>
16
+ <span class="missing">i</span>
17
+ <span class="close">t</span>
18
+ <span class="missing">z</span>
19
+ <span class="exact">y</span>
20
+ </div>
21
+
22
+ <p>
23
+ The <span class="exact">y</span> is in the right place. <span class="close">r</span> and
24
+ <span class="close">t</span>
25
+ are the right letters, but in the wrong place. The other letters are wrong, and can be discarded.
26
+ Let's make another guess:
27
+ </p>
28
+
29
+ <div class="example">
30
+ <span class="exact">p</span>
31
+ <span class="exact">a</span>
32
+ <span class="exact">r</span>
33
+ <span class="exact">t</span>
34
+ <span class="exact">y</span>
35
+ </div>
36
+
37
+ <p>This time we guessed right! You have <strong>six</strong> guesses to get the word.</p>
38
+
39
+ <p>
40
+ Unlike the original Wordle, Sverdle runs on the server instead of in the browser, making it
41
+ impossible to cheat. It uses <code>&lt;form&gt;</code> and cookies to submit data, meaning you can
42
+ even play with JavaScript disabled!
43
+ </p>
44
+ </div>
45
+
46
+ <style>
47
+ span {
48
+ display: inline-flex;
49
+ justify-content: center;
50
+ align-items: center;
51
+ font-size: 0.8em;
52
+ width: 2.4em;
53
+ height: 2.4em;
54
+ background-color: white;
55
+ box-sizing: border-box;
56
+ border-radius: 2px;
57
+ border-width: 2px;
58
+ color: rgba(0, 0, 0, 0.7);
59
+ }
60
+
61
+ .missing {
62
+ background: rgba(255, 255, 255, 0.5);
63
+ color: rgba(0, 0, 0, 0.5);
64
+ }
65
+
66
+ .close {
67
+ border-style: solid;
68
+ border-color: var(--color-theme-2);
69
+ }
70
+
71
+ .exact {
72
+ background: var(--color-theme-2);
73
+ color: white;
74
+ }
75
+
76
+ .example {
77
+ display: flex;
78
+ justify-content: flex-start;
79
+ margin: 1rem 0;
80
+ gap: 0.2rem;
81
+ }
82
+
83
+ .example span {
84
+ font-size: 1.4rem;
85
+ }
86
+
87
+ p span {
88
+ position: relative;
89
+ border-width: 1px;
90
+ border-radius: 1px;
91
+ font-size: 0.4em;
92
+ transform: scale(2) translate(0, -10%);
93
+ margin: 0 1em;
94
+ }
95
+ </style>
app/src/routes/sverdle/how-to-play/+page.ts ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import { dev } from '$app/environment';
2
+
3
+ // we don't need any JS on this page, though we'll load
4
+ // it in dev so that we get hot module replacement
5
+ export const csr = dev;
6
+
7
+ // since there's no dynamic data here, we can prerender
8
+ // it so that it gets served as a static asset in production
9
+ export const prerender = true;
app/src/routes/sverdle/words.server.ts ADDED
The diff for this file is too large to render. See raw diff
 
app/static/favicon.png ADDED
app/static/robots.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ # https://www.robotstxt.org/robotstxt.html
2
+ User-agent: *
3
+ Disallow:
app/svelte.config.js ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import adapter from '@sveltejs/adapter-node';
2
+ import preprocess from 'svelte-preprocess';
3
+
4
+ /** @type {import('@sveltejs/kit').Config} */
5
+ const config = {
6
+ // Consult https://github.com/sveltejs/svelte-preprocess
7
+ // for more information about preprocessors
8
+ preprocess: preprocess(),
9
+
10
+ kit: {
11
+ adapter: adapter()
12
+ }
13
+ };
14
+
15
+ export default config;
app/tests/test.ts ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ import { expect, test } from '@playwright/test';
2
+
3
+ test('about page has expected h1', async ({ page }) => {
4
+ await page.goto('/about');
5
+ expect(await page.textContent('h1')).toBe('About this app');
6
+ });
app/tsconfig.json ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "extends": "./.svelte-kit/tsconfig.json",
3
+ "compilerOptions": {
4
+ "allowJs": true,
5
+ "checkJs": true,
6
+ "esModuleInterop": true,
7
+ "forceConsistentCasingInFileNames": true,
8
+ "resolveJsonModule": true,
9
+ "skipLibCheck": true,
10
+ "sourceMap": true,
11
+ "strict": true
12
+ }
13
+ // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
14
+ //
15
+ // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
16
+ // from the referenced tsconfig.json - TypeScript does not merge them in
17
+ }
app/vite.config.ts ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { sveltekit } from '@sveltejs/kit/vite';
2
+ import type { UserConfig } from 'vite';
3
+
4
+ process.env.PORT = '7860';
5
+
6
+ const config: UserConfig = {
7
+ plugins: [sveltekit()],
8
+ server: {
9
+ port: 7860
10
+ }
11
+ };
12
+
13
+ export default config;