├── static
├── .nojekyll
└── favicon.png
├── .npmrc
├── src
├── routes
│ ├── +layout.ts
│ ├── +page.ts
│ └── +page.svelte
├── index.test.ts
├── components
│ ├── maze
│ │ ├── explorers
│ │ │ ├── transitions.ts
│ │ │ ├── ActorTemplate.svelte
│ │ │ ├── ActorLocator.svelte
│ │ │ ├── Minotaur.svelte
│ │ │ ├── actorStores.ts
│ │ │ ├── utils.ts
│ │ │ └── Theseus.svelte
│ │ ├── utils
│ │ │ ├── maze.worker.ts
│ │ │ ├── debounce.ts
│ │ │ ├── maze.ts
│ │ │ └── alphabet.ts
│ │ ├── Placeholder.svelte
│ │ ├── svg
│ │ │ └── GateSVG.svelte
│ │ ├── Maze.svelte
│ │ ├── Cell.svelte
│ │ └── MazeLoader.svelte
│ ├── controls
│ │ ├── svg
│ │ │ ├── PrintSVG.svelte
│ │ │ ├── CopySVG.svelte
│ │ │ ├── TextModeSVG.svelte
│ │ │ ├── MapSVG.svelte
│ │ │ ├── RefreshSVG.svelte
│ │ │ └── GameSVG.svelte
│ │ ├── utils.ts
│ │ ├── IconButton.svelte
│ │ └── Controls.svelte
│ └── qr
│ │ └── QR.svelte
├── app.d.ts
├── app.html
├── types.ts
└── stores.ts
├── .gitignore
├── .eslintignore
├── .prettierignore
├── .prettierrc
├── vite.config.ts
├── tsconfig.json
├── svelte.config.js
├── .eslintrc.cjs
├── README.md
├── package.json
├── .github
└── workflows
│ └── deploy.yml
├── LICENSE
└── pnpm-lock.yaml
/static/.nojekyll:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 | resolution-mode=highest
3 |
--------------------------------------------------------------------------------
/src/routes/+layout.ts:
--------------------------------------------------------------------------------
1 | export const prerender = true;
2 |
--------------------------------------------------------------------------------
/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nedredmond/a-maze/HEAD/static/favicon.png
--------------------------------------------------------------------------------
/src/index.test.ts:
--------------------------------------------------------------------------------
1 | import { describe, it, expect } from 'vitest';
2 |
3 | describe('sum test', () => {
4 | it('adds 1 + 2 to equal 3', () => {
5 | expect(1 + 2).toBe(3);
6 | });
7 | });
8 |
--------------------------------------------------------------------------------
/src/components/maze/explorers/transitions.ts:
--------------------------------------------------------------------------------
1 | import { crossfade } from 'svelte/transition';
2 |
3 | export const crossfadeTransition = crossfade({
4 | duration: (d) => Math.sqrt(d * 200),
5 | });
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /.vscode
6 | /package
7 | .env
8 | .env.*
9 | !.env.example
10 | vite.config.js.timestamp-*
11 | vite.config.ts.timestamp-*
12 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
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
14 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
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
14 |
--------------------------------------------------------------------------------
/src/components/maze/utils/maze.worker.ts:
--------------------------------------------------------------------------------
1 | ///
2 | declare const self: DedicatedWorkerGlobalScope;
3 |
4 | import { generateMaze } from './maze';
5 |
6 | self.onmessage = ({ data }) => self.postMessage(generateMaze(data));
7 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "useTabs": true,
3 | "singleQuote": true,
4 | "trailingComma": "all",
5 | "printWidth": 100,
6 | "plugins": ["prettier-plugin-svelte"],
7 | "pluginSearchDirs": ["."],
8 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
9 | }
10 |
--------------------------------------------------------------------------------
/src/routes/+page.ts:
--------------------------------------------------------------------------------
1 | export const ssr = false;
2 | import { isTextMode, text } from '../stores.js';
3 |
4 | export function load({ url }) {
5 | const textParam = url.searchParams.get('text');
6 | if (textParam) {
7 | isTextMode.set(true);
8 | text.set(decodeURI(textParam));
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/src/app.d.ts:
--------------------------------------------------------------------------------
1 | // See https://kit.svelte.dev/docs/types#app
2 | // for information about these interfaces
3 | declare global {
4 | namespace App {
5 | // interface Error {}
6 | // interface Locals {}
7 | // interface PageData {}
8 | // interface Platform {}
9 | }
10 | }
11 |
12 | export {};
13 |
--------------------------------------------------------------------------------
/src/components/controls/svg/PrintSVG.svelte:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/components/maze/Placeholder.svelte:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 | {#each { length: $area } as _}
8 |
9 | {/each}
10 |
11 |
17 |
--------------------------------------------------------------------------------
/src/components/controls/svg/CopySVG.svelte:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | %sveltekit.head%
8 |
9 |
10 | %sveltekit.body%
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/components/controls/svg/TextModeSVG.svelte:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/components/controls/svg/MapSVG.svelte:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/components/controls/utils.ts:
--------------------------------------------------------------------------------
1 | import type { Dimensions } from '../../types';
2 |
3 | export const MAX_SIZE = 75;
4 | export const MIN_SIZE = 5;
5 |
6 | export const clamp = (value: number, min: number, max: number) =>
7 | Math.min(Math.max(value, min), max);
8 |
9 | export const clampDimensions = (dimensions: Dimensions) => ({
10 | height: clamp(dimensions.height, MIN_SIZE, MAX_SIZE),
11 | width: clamp(dimensions.width, MIN_SIZE, MAX_SIZE),
12 | });
13 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { sveltekit } from '@sveltejs/kit/vite';
2 | import { defineConfig } from 'vitest/config';
3 |
4 | // Emulated web worker does not work in vite dev on Firefox
5 | process.env.BROWSER = 'chromium';
6 |
7 | export default defineConfig({
8 | plugins: [sveltekit()],
9 | define: {
10 | 'import.meta.vitest': 'undefined',
11 | },
12 | test: {
13 | include: ['src/**/*.{test,spec}.{js,ts}', 'src/utils/**/*.{js,ts}'],
14 | },
15 | });
16 |
--------------------------------------------------------------------------------
/src/components/maze/svg/GateSVG.svelte:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/src/components/controls/svg/RefreshSVG.svelte:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/components/maze/explorers/ActorTemplate.svelte:
--------------------------------------------------------------------------------
1 |
9 |
10 |
13 |
14 |
22 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
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 | "types": ["vitest/importMeta"]
13 | }
14 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
15 | //
16 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
17 | // from the referenced tsconfig.json - TypeScript does not merge them in
18 | }
19 |
--------------------------------------------------------------------------------
/src/components/controls/svg/GameSVG.svelte:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/components/qr/QR.svelte:
--------------------------------------------------------------------------------
1 |
2 |
3 |
19 |
20 |
21 |
22 |
35 |
--------------------------------------------------------------------------------
/src/types.ts:
--------------------------------------------------------------------------------
1 | export const Directions = ['top', 'right', 'bottom', 'left'] as const;
2 | export type Direction = (typeof Directions)[number];
3 |
4 | export type Walls = {
5 | [direction in Direction]?: boolean;
6 | };
7 |
8 | export type Cell = {
9 | x: number;
10 | y: number;
11 | visited?: boolean;
12 | fill?: Fill;
13 | } & Walls;
14 |
15 | export type Grid = Cell[][];
16 |
17 | export type Maze = {
18 | dimensions: Dimensions;
19 | grid: Grid;
20 | cells: Cell[];
21 | };
22 |
23 | export interface Dimensions {
24 | height: number;
25 | width: number;
26 | }
27 |
28 | export interface Position {
29 | x: number;
30 | y: number;
31 | }
32 |
33 | export type MazeInput = Dimensions | TextMazeInput;
34 |
35 | export type TextMazeInput = {
36 | lines: string[];
37 | dimensions: Dimensions;
38 | };
39 |
40 | export type Fill = 'black' | 'white' | null;
41 |
--------------------------------------------------------------------------------
/svelte.config.js:
--------------------------------------------------------------------------------
1 | import adapter from '@sveltejs/adapter-static';
2 | import { vitePreprocess } from '@sveltejs/kit/vite';
3 |
4 | const dev = process.argv.includes('dev');
5 |
6 | /** @type {import('@sveltejs/kit').Config} */
7 | const config = {
8 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors
9 | // for more information about preprocessors
10 | preprocess: vitePreprocess(),
11 |
12 | kit: {
13 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
14 | // If your environment is not supported or you settled on a specific environment, switch out the adapter.
15 | // See https://kit.svelte.dev/docs/adapters for more information about adapters.
16 | adapter: adapter(),
17 | paths: {
18 | base: dev ? '' : process.env.BASE_PATH,
19 | },
20 | },
21 | };
22 |
23 | export default config;
24 |
--------------------------------------------------------------------------------
/src/components/controls/IconButton.svelte:
--------------------------------------------------------------------------------
1 |
8 |
9 |
21 |
22 |
45 |
--------------------------------------------------------------------------------
/src/components/maze/explorers/ActorLocator.svelte:
--------------------------------------------------------------------------------
1 |
2 |
3 |
25 |
26 | {#if $theseusIndex === index}
27 |
28 | {/if}
29 | {#if $minotaurIndex === index && showMinotaur}
30 |
31 | {/if}
32 |
--------------------------------------------------------------------------------
/src/components/maze/utils/debounce.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable @typescript-eslint/no-explicit-any */
2 | export const debouncePromise = ) => ReturnType>(
3 | func: F,
4 | waitFor: number,
5 | ) => {
6 | let timeout: NodeJS.Timeout | number = 0;
7 |
8 | const debounced = (...args: Parameters) =>
9 | new Promise((resolve) => {
10 | clearTimeout(timeout);
11 | timeout = setTimeout(() => resolve(func(...args)), waitFor);
12 | });
13 |
14 | return debounced as (...args: Parameters) => ReturnType;
15 | };
16 |
17 | export const debounce = ) => ReturnType>(
18 | func: F,
19 | waitFor: number,
20 | ) => {
21 | let timeout: NodeJS.Timeout | number = 0;
22 |
23 | const debounced = (...args: Parameters) => {
24 | clearTimeout(timeout);
25 | timeout = setTimeout(() => func(...args), waitFor);
26 | };
27 |
28 | return debounced as (...args: Parameters) => ReturnType;
29 | };
30 |
--------------------------------------------------------------------------------
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: [
4 | 'eslint:recommended',
5 | 'plugin:@typescript-eslint/recommended',
6 | 'plugin:svelte/recommended',
7 | 'prettier',
8 | ],
9 | parser: '@typescript-eslint/parser',
10 | plugins: ['@typescript-eslint'],
11 | ignorePatterns: ['*.cjs'],
12 | parserOptions: {
13 | sourceType: 'module',
14 | ecmaVersion: 2020,
15 | extraFileExtensions: ['.svelte'],
16 | },
17 | env: {
18 | browser: true,
19 | es2017: true,
20 | node: true,
21 | },
22 | overrides: [
23 | {
24 | files: ['*.svelte'],
25 | parser: 'svelte-eslint-parser',
26 | parserOptions: {
27 | parser: '@typescript-eslint/parser',
28 | },
29 | },
30 | ],
31 | rules: {
32 | 'no-console': ['warn', {}],
33 | '@typescript-eslint/no-non-null-assertion': 'off',
34 | 'no-unused-vars': 'off',
35 | '@typescript-eslint/no-unused-vars': [
36 | 'warn',
37 | {
38 | argsIgnorePattern: '^_',
39 | varsIgnorePattern: '^_',
40 | caughtErrorsIgnorePattern: '^_',
41 | },
42 | ],
43 | },
44 | };
45 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # a-maze
2 |
3 | This is a simple maze generator I made to amuse my son. Maybe it will amuse you as well.
4 |
5 | 
6 |
7 | ## Features
8 |
9 | - Make a randomized maze (using [DFS](https://en.wikipedia.org/wiki/Depth-first_search)) with any dimensions between 5 cells and 75 cells.
10 | - Anything greater than 75×75 becomes sluggish to render and difficult to represent in most screen resolutions.
11 | - [Text Maze](https://nedredmond.github.io/a-maze/?text=text%0Amaze): Click the [H] icon to generate a maze around letters.
12 | - So far, I've only mapped A-Z. When I have time, I may add numbers and some special characters.
13 | - Print mode will hide the controls, maximize the maze size, and include a QR code that contains a link to the text maze page with the same text.
14 | - If not in text maze mode, will link just to the main site.
15 | - Explore mode will allow you to traverse the maze as a cute little guy. 😃
16 | - Don't let the minotaur catch you on its patrol! 🐮
17 |
--------------------------------------------------------------------------------
/src/components/maze/Maze.svelte:
--------------------------------------------------------------------------------
1 |
2 |
3 |
36 |
37 | {#each maze.cells as cell, index}
38 |
39 | {#if $isExplorerMode}
40 |
41 | {/if}
42 | |
43 | {/each}
44 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "a-maze",
3 | "version": "0.0.1",
4 | "private": true,
5 | "scripts": {
6 | "dev": "vite dev --open",
7 | "build": "vite build",
8 | "preview": "vite preview",
9 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
10 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
11 | "test": "vitest",
12 | "lint": "pnpm format && prettier --plugin-search-dir . --check . && eslint . --fix",
13 | "format": "prettier --plugin-search-dir . --write ."
14 | },
15 | "devDependencies": {
16 | "@sveltejs/adapter-auto": "^2.0.0",
17 | "@sveltejs/adapter-static": "^2.0.2",
18 | "@sveltejs/kit": "^1.5.0",
19 | "@types/node": "^20.1.0",
20 | "@types/qrcode": "^1.5.0",
21 | "@typescript-eslint/eslint-plugin": "^5.45.0",
22 | "@typescript-eslint/parser": "^5.45.0",
23 | "eslint": "^8.28.0",
24 | "eslint-config-prettier": "^8.5.0",
25 | "eslint-plugin-svelte": "^2.26.0",
26 | "prettier": "^2.8.0",
27 | "prettier-plugin-svelte": "^2.8.1",
28 | "svelte": "^3.54.0",
29 | "svelte-check": "^3.0.1",
30 | "tslib": "^2.4.1",
31 | "typescript": "^5.0.0",
32 | "vite": "^4.3.0",
33 | "vitest": "^0.25.3"
34 | },
35 | "type": "module",
36 | "dependencies": {
37 | "qrcode": "^1.5.3",
38 | "svelte-gestures": "^1.4.1"
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/.github/workflows/deploy.yml:
--------------------------------------------------------------------------------
1 | name: Deploy to GitHub Pages
2 |
3 | on:
4 | push:
5 | branches: 'main'
6 |
7 | jobs:
8 | build_site:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - name: Checkout
12 | uses: actions/checkout@v3
13 |
14 | - name: Install pnpm
15 | uses: pnpm/action-setup@v2
16 | with:
17 | version: 8
18 |
19 | - name: Install Node.js
20 | uses: actions/setup-node@v3
21 | with:
22 | node-version: 18
23 | cache: pnpm
24 |
25 | - name: Install dependencies
26 | run: pnpm install
27 |
28 | - name: build
29 | env:
30 | BASE_PATH: '/your-repo-name'
31 | run: |
32 | pnpm run build
33 | touch build/.nojekyll
34 |
35 | - name: Upload Artifacts
36 | uses: actions/upload-pages-artifact@v1
37 | with:
38 | # this should match the `pages` option in your adapter-static options
39 | path: 'build/'
40 |
41 | deploy:
42 | needs: build_site
43 | runs-on: ubuntu-latest
44 |
45 | permissions:
46 | pages: write
47 | id-token: write
48 |
49 | environment:
50 | name: github-pages
51 | url: ${{ steps.deployment.outputs.page_url }}
52 |
53 | steps:
54 | - name: Deploy
55 | id: deployment
56 | uses: actions/deploy-pages@v1
57 |
--------------------------------------------------------------------------------
/src/routes/+page.svelte:
--------------------------------------------------------------------------------
1 |
19 |
20 |
21 | A Maze
22 |
23 |
24 | allowInput && onSwipe(e)}
29 | >
30 |
31 |
32 |
33 |
34 |
35 |
59 |
--------------------------------------------------------------------------------
/src/components/maze/Cell.svelte:
--------------------------------------------------------------------------------
1 |
2 |
3 |
27 |
28 |
29 | {#if egress}
30 |
31 |
32 |
33 | {/if}
34 |
35 |
36 |
37 |
60 |
--------------------------------------------------------------------------------
/src/components/maze/explorers/Minotaur.svelte:
--------------------------------------------------------------------------------
1 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/stores.ts:
--------------------------------------------------------------------------------
1 | import { derived, writable, type Writable } from 'svelte/store';
2 | import { getLines, getTextMazeDimensions } from './components/maze/utils/maze';
3 | import type { Cell, Dimensions, Direction, TextMazeInput } from './types';
4 | import { page } from '$app/stores';
5 |
6 | export const mazeRef = writable(null);
7 | export const moveDirection = writable(null);
8 |
9 | export const grid = writable([]);
10 | export const dimensions = writable({ height: 9, width: 16 });
11 | export const area = derived(
12 | dimensions,
13 | ($dimensions: Dimensions) => $dimensions.height * $dimensions.width,
14 | );
15 | export const orientation = derived, 'portrait' | 'landscape'>(
16 | dimensions,
17 | ($dimensions: Dimensions) => ($dimensions.height > $dimensions.width ? 'portrait' : 'landscape'),
18 | );
19 |
20 | export const isExplorerMode = writable(false);
21 | export const isTextMode = writable(false);
22 | export const text = writable(`Hello\nworld!`);
23 |
24 | export const textMazeInput = derived, TextMazeInput>(text, ($text: string) => {
25 | const lines = getLines($text);
26 | const textMazeDimensions = getTextMazeDimensions(lines);
27 | isTextMode.subscribe((mode) => mode && dimensions.set(textMazeDimensions));
28 | return {
29 | lines,
30 | dimensions: textMazeDimensions,
31 | };
32 | });
33 |
34 | export const shareURL = derived([page, isTextMode, text], ([$page, $textMode, $text]) => {
35 | const url = $page.url.origin + $page.url.pathname;
36 | return $textMode ? `${url}?text=${encodeURIComponent($text)}` : url;
37 | });
38 |
39 | export const controlsDisabled = derived(isExplorerMode, ($isExplorerMode) => !$isExplorerMode);
40 |
--------------------------------------------------------------------------------
/src/components/maze/explorers/actorStores.ts:
--------------------------------------------------------------------------------
1 | import { derived, get, writable } from 'svelte/store';
2 | import type { Direction, Position } from '../../../types';
3 | import { grid, dimensions } from '../../../stores';
4 |
5 | export const theseusPosition = writable({ x: 0, y: 0 });
6 | export const theseusIndex = derived(
7 | [theseusPosition, dimensions],
8 | ([$theseusPosition, $dimensions]) => $theseusPosition.y * $dimensions.width + $theseusPosition.x,
9 | );
10 |
11 | export const minotaurDisabled = writable(false);
12 | export const minotaurStartingPosition = derived(dimensions, ($dimensions) => ({
13 | x: $dimensions.width - 1,
14 | y: $dimensions.height - 1,
15 | }));
16 | export const minotaurPosition = writable({
17 | x: get(dimensions).width - 1,
18 | y: get(dimensions).height - 1,
19 | });
20 | export const minotaurIndex = derived(
21 | [minotaurPosition, dimensions],
22 | ([$minotaurPosition, $dimensions]) =>
23 | $minotaurPosition.y * $dimensions.width + $minotaurPosition.x,
24 | );
25 | export const minotaurLastDirection = writable('top');
26 |
27 | export const caughtByMinotaur = derived(
28 | [minotaurPosition, theseusPosition],
29 | ([$minotaurPosition, $theseusPosition]) => {
30 | if ($theseusPosition.x === $minotaurPosition.x && $theseusPosition.y === $minotaurPosition.y) {
31 | return true;
32 | }
33 | const { x: mX, y: mY } = $minotaurPosition;
34 | const { x: tX, y: tY } = $theseusPosition;
35 | const adjacentCells: { x: number; y: number; direction: Direction }[] = [
36 | { x: mX, y: mY - 1, direction: 'top' },
37 | { x: mX + 1, y: mY, direction: 'right' },
38 | { x: mX, y: mY + 1, direction: 'bottom' },
39 | { x: mX - 1, y: mY, direction: 'left' },
40 | ];
41 | for (const cell of adjacentCells) {
42 | const { x, y, direction } = cell;
43 | if (x === tX && y === tY && get(grid)[mY][mX][direction]) {
44 | return true;
45 | }
46 | }
47 | return false;
48 | },
49 | );
50 |
51 | export const stopGame = writable(false);
52 |
--------------------------------------------------------------------------------
/src/components/maze/MazeLoader.svelte:
--------------------------------------------------------------------------------
1 |
51 |
52 |
53 | allowInput && !e.repeat && onKeydown(e)}
60 | >
61 | {#if Worker}
62 | {#await getMaze($isTextMode ? $textMazeInput : $dimensions)}
63 |
64 | {:then maze}
65 |
66 | {:catch e}
67 | {e.message}
68 | {/await}
69 | {:else}
70 |
71 | {/if}
72 |
73 |
74 |
82 |
--------------------------------------------------------------------------------
/src/components/maze/explorers/utils.ts:
--------------------------------------------------------------------------------
1 | import { get } from 'svelte/store';
2 | import type { Position, Direction, Cell } from '../../../types';
3 | import { theseusPosition } from './actorStores';
4 |
5 | export const updatePosition = (
6 | position: Position,
7 | cell: Cell,
8 | direction?: Direction,
9 | ): Position | undefined => {
10 | switch (true) {
11 | case !direction:
12 | return;
13 | case direction === 'top' && cell.top:
14 | position.y--;
15 | return position;
16 | case direction === 'bottom' && cell.bottom:
17 | position.y++;
18 | return position;
19 | case direction === 'left' && cell.left:
20 | position.x--;
21 | return position;
22 | case direction === 'right' && cell.right:
23 | position.x++;
24 | return position;
25 | }
26 | };
27 |
28 | // theseus
29 | export const moods = {
30 | default: ['😃', '🙂', '😀', '😄'],
31 | dead: ['😵', '🤕', '😵💫', '😭'],
32 | escaped: ['😎', '🏆', '🥳', '😜'],
33 | oops: ['😗', '😕', '😖', '😤'],
34 | idle: ['😪', '😴', '😑', '🙃'],
35 | };
36 | export const getExpression = (mood: keyof typeof moods) => {
37 | const theseusState = moods[mood];
38 | return theseusState[Math.floor(Math.random() * theseusState.length)];
39 | };
40 | export const restingExpression = ({
41 | idle,
42 | escaped,
43 | gameOver,
44 | }: {
45 | idle: boolean;
46 | escaped: boolean;
47 | gameOver: boolean;
48 | }) => {
49 | switch (true) {
50 | case gameOver:
51 | return getExpression('dead');
52 | case escaped:
53 | return getExpression('escaped');
54 | case idle:
55 | return getExpression('idle');
56 | default:
57 | return getExpression('default');
58 | }
59 | };
60 | export const KeyDirection: { [key: string]: Direction } = {
61 | ArrowUp: 'top',
62 | ArrowDown: 'bottom',
63 | ArrowLeft: 'left',
64 | ArrowRight: 'right',
65 | } as const;
66 |
67 | // minotaur
68 | export const RelativeDirection = {
69 | left: {
70 | top: 'left',
71 | bottom: 'right',
72 | left: 'bottom',
73 | right: 'top',
74 | },
75 | right: {
76 | top: 'right',
77 | bottom: 'left',
78 | left: 'top',
79 | right: 'bottom',
80 | },
81 | back: {
82 | top: 'bottom',
83 | bottom: 'top',
84 | left: 'right',
85 | right: 'left',
86 | },
87 | } as const;
88 | export const updateForDirection = (nextPosition: Position, direction: Direction): Position => {
89 | const orignalPosition = { ...nextPosition };
90 | switch (direction) {
91 | case 'top':
92 | nextPosition.y--;
93 | break;
94 | case 'bottom':
95 | nextPosition.y++;
96 | break;
97 | case 'left':
98 | nextPosition.x--;
99 | break;
100 | case 'right':
101 | nextPosition.x++;
102 | break;
103 | }
104 | const tPos = get(theseusPosition);
105 | if (nextPosition.x === tPos.x && nextPosition.y === tPos.y) return orignalPosition;
106 | return nextPosition;
107 | };
108 |
--------------------------------------------------------------------------------
/src/components/maze/explorers/Theseus.svelte:
--------------------------------------------------------------------------------
1 |
77 |
78 |
81 |
82 |
141 |
--------------------------------------------------------------------------------
/src/components/controls/Controls.svelte:
--------------------------------------------------------------------------------
1 |
51 |
52 |
53 |
54 |
55 | {#if $isExplorerMode}
56 | {#if $stopGame}
57 | Game over!
58 | {:else}
59 | Escape the maze{$minotaurDisabled ? '' : ' and avoid the minotaur'}!
60 | {/if}
61 |
67 | {:else if $isTextMode}
68 |
69 | {:else}
70 |
71 | Maze dimensions:
72 |
73 |
74 | ×
75 |
76 |
77 |
78 | {/if}
79 |
80 |
113 |
114 | {#if !$isExplorerMode}
115 | {#if $isTextMode}
116 |
117 | {:else}
118 |
119 |
131 |
143 |
144 | {/if}
145 | {/if}
146 |
147 |
148 |
197 |
--------------------------------------------------------------------------------
/src/components/maze/utils/maze.ts:
--------------------------------------------------------------------------------
1 | import type { Cell, Dimensions, Grid, Maze, MazeInput, TextMazeInput } from '../../../types';
2 | import { Alphabet, reAlphabet } from './alphabet';
3 |
4 | const PADDING = 3;
5 | const LETTER_GAP = 1;
6 | const LINE_GAP = 2;
7 |
8 | export const generateMaze = (input: MazeInput): Maze => {
9 | let maze: Maze;
10 | if ('lines' in input) {
11 | maze = initializeMazeFromText(input);
12 | } else {
13 | maze = initializeMaze(input);
14 | }
15 |
16 | const stack: Cell[] = [];
17 | maze.grid[0][0].visited = true;
18 | stack.push(maze.grid[0][0]);
19 | while (stack.length > 0) {
20 | const current = stack.pop()!;
21 | const neighbors = getUnvisitedNeighbors(maze, current);
22 | if (neighbors.length > 0) {
23 | stack.push(current);
24 | const next = getNext(neighbors);
25 | removeWall(maze.grid, current, next); // in-place for performance
26 | stack.push(next);
27 | }
28 | }
29 | return {
30 | ...maze,
31 | cells: maze.grid.flat(),
32 | };
33 | };
34 |
35 | function initializeMaze(dimensions: Dimensions): Maze {
36 | const { height, width } = dimensions;
37 |
38 | const grid = new Array(height);
39 | for (let i = 0; i < height; i++) {
40 | grid[i] = new Array(width);
41 | for (let j = 0; j < width; j++) {
42 | grid[i][j] = { x: j, y: i };
43 | }
44 | }
45 | return {
46 | dimensions,
47 | grid,
48 | cells: grid.flat(),
49 | };
50 | }
51 |
52 | function initializeMazeFromText({ dimensions, lines }: TextMazeInput): Maze {
53 | const grid = initializeMaze(dimensions).grid;
54 |
55 | const yStart = PADDING;
56 | const xStart = PADDING;
57 |
58 | for (let i = 0; i < lines.length; i++) {
59 | const line = lines[i];
60 | const y = yStart + i * 5 + i * LINE_GAP;
61 | for (let j = 0; j < line.length; j++) {
62 | const letter = Alphabet[line[j]];
63 | const x = xStart + j * 5 + j * LETTER_GAP;
64 | for (let k = 0; k < letter.length; k++) {
65 | for (let l = 0; l < letter[k].length; l++) {
66 | const current = grid[y + k][x + l];
67 | grid[y + k][x + l] = { ...letter[k][l], ...current };
68 | }
69 | }
70 | }
71 | }
72 |
73 | return {
74 | dimensions,
75 | grid,
76 | cells: grid.flat(),
77 | };
78 | }
79 |
80 | export const getLines = (input: string): string[] =>
81 | input.replace(reAlphabet, '').toUpperCase().split('\n');
82 |
83 | export const getTextMazeDimensions = (lines: string[]): Dimensions => {
84 | const longestLineLength = lines.reduce((acc, line) => Math.max(acc, line.length), 0);
85 |
86 | // get height from number of lines
87 | const height = lines.length * 5 + PADDING * 2 + LINE_GAP * (lines.length - 1);
88 | // get width from longest line
89 | const width = longestLineLength * 5 + PADDING * 2 + LETTER_GAP * (longestLineLength - 1);
90 |
91 | return { width, height };
92 | };
93 |
94 | function getUnvisitedNeighbors(
95 | { grid, dimensions: { height, width } }: Readonly,
96 | { x, y }: Readonly,
97 | ): Cell[] {
98 | const neighbors: Cell[] = [];
99 | const north = y > 0 ? grid[y - 1][x] : undefined;
100 | const south = y < height - 1 ? grid[y + 1][x] : undefined;
101 | const east = x < width - 1 ? grid[y][x + 1] : undefined;
102 | const west = x > 0 ? grid[y][x - 1] : undefined;
103 | if (isVisitable(north)) neighbors.push(north!);
104 | if (isVisitable(south)) neighbors.push(south!);
105 | if (isVisitable(east)) neighbors.push(east!);
106 | if (isVisitable(west)) neighbors.push(west!);
107 | return neighbors;
108 | }
109 |
110 | const isVisitable = (cell: Cell | undefined): boolean => !!cell && !cell.visited && !cell.fill;
111 |
112 | const getNext = (neighbors: Cell[]): Cell =>
113 | neighbors[Math.floor(Math.random() * neighbors.length)];
114 |
115 | const removeWall = (grid: Grid, current: Readonly, next: Readonly| ) => {
116 | const { x, y } = current;
117 | if (next.x === x - 1) {
118 | grid[y][x].left = true;
119 | grid[next.y][next.x].right = true;
120 | }
121 | if (next.x === x + 1) {
122 | grid[y][x].right = true;
123 | grid[next.y][next.x].left = true;
124 | }
125 | if (next.y === y - 1) {
126 | grid[y][x].top = true;
127 | grid[next.y][next.x].bottom = true;
128 | }
129 | if (next.y === y + 1) {
130 | grid[y][x].bottom = true;
131 | grid[next.y][next.x].top = true;
132 | }
133 | grid[next.y][next.x].visited = true;
134 | };
135 |
136 | if (import.meta.vitest) {
137 | const { describe, test, expect } = import.meta.vitest;
138 | test('initializeMaze', () => {
139 | const maze = initializeMaze({ width: 4, height: 2 });
140 | expect(maze.dimensions.width).toBe(4);
141 | expect(maze.dimensions.height).toBe(2);
142 | expect(maze.grid.length).toBe(2);
143 | expect(maze.grid[0].length).toBe(4);
144 | });
145 | describe(`getNeighbors`, () => {
146 | test('with none visited', () => {
147 | const grid = initializeMaze({ width: 5, height: 5 }).grid;
148 | const cell = { x: 1, y: 1 };
149 | const neighbors = getUnvisitedNeighbors(
150 | { grid: grid, dimensions: { height: 5, width: 5 }, cells: [] },
151 | cell,
152 | );
153 | const expected = [
154 | { x: 1, y: 0 },
155 | { x: 1, y: 2 },
156 | { x: 0, y: 1 },
157 | { x: 2, y: 1 },
158 | ];
159 | const sortFunc = (a: Cell, b: Cell) => {
160 | if (a.x === b.x) {
161 | return a.y - b.y;
162 | }
163 | return a.x - b.x;
164 | };
165 | expect(neighbors.sort(sortFunc)).toEqual(expected.sort(sortFunc));
166 | });
167 | test('with some visited', () => {
168 | const grid = initializeMaze({ width: 5, height: 5 }).grid;
169 | grid[0][1].visited = true;
170 | grid[1][0].visited = true;
171 | const cell = { x: 1, y: 1 };
172 | const neighbors = getUnvisitedNeighbors(
173 | { grid: grid, dimensions: { height: 5, width: 5 }, cells: [] },
174 | cell,
175 | );
176 | const expected = [
177 | { x: 1, y: 2 },
178 | { x: 2, y: 1 },
179 | ];
180 | expect(neighbors).toEqual(expected);
181 | });
182 | });
183 | describe(`removeWall`, () => {
184 | test('with x-1', () => {
185 | const grid = initializeMaze({ width: 5, height: 5 }).grid;
186 | const cell = { x: 1, y: 1 };
187 | const next = { x: 0, y: 1 };
188 | removeWall(grid, cell, next);
189 | expect(grid[1][1].left).toBe(true);
190 | expect(grid[1][0].right).toBe(true);
191 | expect(grid[1][0].visited).toBeTruthy();
192 | expect(grid[1][1].visited).toBeFalsy();
193 | });
194 | test('with x+1', () => {
195 | const grid = initializeMaze({ width: 3, height: 3 }).grid;
196 | const cell = { x: 1, y: 1 };
197 | const next = { x: 2, y: 1 };
198 | removeWall(grid, cell, next);
199 | expect(grid[1][1].right).toBe(true);
200 | expect(grid[1][2].left).toBe(true);
201 | expect(grid[1][2].visited).toBeTruthy();
202 | expect(grid[1][1].visited).toBeFalsy();
203 | });
204 | });
205 | test('generateMaze', () => {
206 | const maze = generateMaze({ width: 5, height: 5 });
207 | expect(maze.dimensions.width).toBe(5);
208 | expect(maze.dimensions.height).toBe(5);
209 | expect(maze.grid.length).toBe(5);
210 | expect(maze.grid[0].length).toBe(5);
211 | });
212 | }
213 |
--------------------------------------------------------------------------------
/src/components/maze/utils/alphabet.ts:
--------------------------------------------------------------------------------
1 | import type { Cell } from '../../../types';
2 |
3 | type LetterRow = [Cell, Cell, Cell, Cell, Cell];
4 | type LetterMatrix = [LetterRow, LetterRow, LetterRow, LetterRow, LetterRow];
5 |
6 | /*
7 | * Matches any character that is not a letter or space.
8 | */
9 | export const reAlphabet = /[^a-zA-Z\s]/g;
10 |
11 | const strokeCell: Cell = {
12 | top: true,
13 | bottom: true,
14 | right: true,
15 | left: true,
16 | fill: 'black',
17 | x: 0,
18 | y: 0,
19 | };
20 | const fillCell: Cell = {
21 | top: true,
22 | bottom: true,
23 | right: true,
24 | left: true,
25 | fill: 'white',
26 | x: 0,
27 | y: 0,
28 | };
29 |
30 | /*
31 | * Map of letters to a corresponding 5x5 matrix.
32 | */
33 | export const Alphabet: { [key: string]: LetterMatrix } = {
34 | A: [
35 | [
36 | { ...strokeCell, x: 0, y: 0 },
37 | { ...strokeCell, x: 1, y: 0 },
38 | { ...strokeCell, x: 2, y: 0 },
39 | { ...strokeCell, x: 3, y: 0 },
40 | { ...strokeCell, x: 4, y: 0 },
41 | ],
42 | [
43 | { ...strokeCell, x: 0, y: 1 },
44 | { ...fillCell, top: false, bottom: false, left: false, x: 1, y: 1 },
45 | { ...fillCell, top: false, bottom: false, x: 2, y: 1 },
46 | { ...fillCell, top: false, bottom: false, right: false, x: 3, y: 1 },
47 | { ...strokeCell, x: 4, y: 1 },
48 | ],
49 | [
50 | { ...strokeCell, x: 0, y: 2 },
51 | { ...strokeCell, x: 1, y: 2 },
52 | { ...strokeCell, x: 2, y: 2 },
53 | { ...strokeCell, x: 3, y: 2 },
54 | { ...strokeCell, x: 4, y: 2 },
55 | ],
56 | [
57 | { ...strokeCell, x: 0, y: 3 },
58 | { x: 1, y: 3 },
59 | { x: 2, y: 3 },
60 | { x: 3, y: 3 },
61 | { ...strokeCell, x: 4, y: 3 },
62 | ],
63 | [
64 | { ...strokeCell, x: 0, y: 4 },
65 | { x: 1, y: 4 },
66 | { x: 2, y: 4 },
67 | { x: 3, y: 4 },
68 | { ...strokeCell, x: 4, y: 4 },
69 | ],
70 | ],
71 | B: [
72 | [
73 | { ...strokeCell, x: 0, y: 0 },
74 | { ...strokeCell, x: 1, y: 0 },
75 | { ...strokeCell, x: 2, y: 0 },
76 | { ...strokeCell, x: 3, y: 0 },
77 | { x: 4, y: 0 },
78 | ],
79 | [
80 | { ...strokeCell, x: 0, y: 1 },
81 | { ...fillCell, top: false, bottom: false, left: false, x: 1, y: 1 },
82 | { ...fillCell, top: false, bottom: false, x: 2, y: 1 },
83 | { ...fillCell, top: false, bottom: false, right: false, x: 3, y: 1 },
84 | { ...strokeCell, x: 4, y: 1 },
85 | ],
86 | [
87 | { ...strokeCell, x: 0, y: 2 },
88 | { ...strokeCell, x: 1, y: 2 },
89 | { ...strokeCell, x: 2, y: 2 },
90 | { ...strokeCell, x: 3, y: 2 },
91 | { x: 4, y: 2 },
92 | ],
93 | [
94 | { ...strokeCell, x: 0, y: 3 },
95 | { ...fillCell, top: false, bottom: false, left: false, x: 1, y: 3 },
96 | { ...fillCell, top: false, bottom: false, x: 2, y: 3 },
97 | { ...fillCell, top: false, bottom: false, right: false, x: 3, y: 3 },
98 | { ...strokeCell, x: 4, y: 3 },
99 | ],
100 | [
101 | { ...strokeCell, x: 0, y: 4 },
102 | { ...strokeCell, x: 1, y: 4 },
103 | { ...strokeCell, x: 2, y: 4 },
104 | { ...strokeCell, x: 3, y: 4 },
105 | { x: 4, y: 4 },
106 | ],
107 | ],
108 | C: [
109 | [
110 | { ...strokeCell, x: 0, y: 0 },
111 | { ...strokeCell, x: 1, y: 0 },
112 | { ...strokeCell, x: 2, y: 0 },
113 | { ...strokeCell, x: 3, y: 0 },
114 | { ...strokeCell, x: 4, y: 0 },
115 | ],
116 | [
117 | { ...strokeCell, x: 0, y: 1 },
118 | { x: 1, y: 1 },
119 | { x: 2, y: 1 },
120 | { x: 3, y: 1 },
121 | { x: 4, y: 1 },
122 | ],
123 | [
124 | { ...strokeCell, x: 0, y: 2 },
125 | { x: 1, y: 2 },
126 | { x: 2, y: 2 },
127 | { x: 3, y: 2 },
128 | { x: 4, y: 2 },
129 | ],
130 | [
131 | { ...strokeCell, x: 0, y: 3 },
132 | { x: 1, y: 3 },
133 | { x: 2, y: 3 },
134 | { x: 3, y: 3 },
135 | { x: 4, y: 3 },
136 | ],
137 | [
138 | { ...strokeCell, x: 0, y: 4 },
139 | { ...strokeCell, x: 1, y: 4 },
140 | { ...strokeCell, x: 2, y: 4 },
141 | { ...strokeCell, x: 3, y: 4 },
142 | { ...strokeCell, x: 4, y: 4 },
143 | ],
144 | ],
145 | D: [
146 | [
147 | { ...strokeCell, x: 0, y: 0 },
148 | { ...strokeCell, x: 1, y: 0 },
149 | { ...strokeCell, x: 2, y: 0 },
150 | { ...strokeCell, x: 3, y: 0 },
151 | { x: 4, y: 0 },
152 | ],
153 | [
154 | { ...strokeCell, x: 0, y: 1 },
155 | { ...fillCell, top: false, left: false, x: 1, y: 1 },
156 | { ...fillCell, top: false, x: 2, y: 1 },
157 | { ...fillCell, top: false, right: false, x: 3, y: 1 },
158 | { ...strokeCell, x: 4, y: 1 },
159 | ],
160 | [
161 | { ...strokeCell, x: 0, y: 2 },
162 | { ...fillCell, left: false, x: 1, y: 2 },
163 | { ...fillCell, x: 2, y: 2 },
164 | { ...fillCell, right: false, x: 3, y: 2 },
165 | { ...strokeCell, x: 4, y: 2 },
166 | ],
167 | [
168 | { ...strokeCell, x: 0, y: 3 },
169 | { ...fillCell, bottom: false, left: false, x: 1, y: 3 },
170 | { ...fillCell, bottom: false, x: 2, y: 3 },
171 | { ...fillCell, bottom: false, right: false, x: 3, y: 3 },
172 | { ...strokeCell, x: 4, y: 3 },
173 | ],
174 | [
175 | { ...strokeCell, x: 0, y: 4 },
176 | { ...strokeCell, x: 1, y: 4 },
177 | { ...strokeCell, x: 2, y: 4 },
178 | { ...strokeCell, x: 3, y: 4 },
179 | { x: 4, y: 4 },
180 | ],
181 | ],
182 | E: [
183 | [
184 | { ...strokeCell, x: 0, y: 0 },
185 | { ...strokeCell, x: 1, y: 0 },
186 | { ...strokeCell, x: 2, y: 0 },
187 | { ...strokeCell, x: 3, y: 0 },
188 | { ...strokeCell, x: 4, y: 0 },
189 | ],
190 | [
191 | { ...strokeCell, x: 0, y: 1 },
192 | { x: 1, y: 1 },
193 | { x: 2, y: 1 },
194 | { x: 3, y: 1 },
195 | { x: 4, y: 1 },
196 | ],
197 | [
198 | { ...strokeCell, x: 0, y: 2 },
199 | { ...strokeCell, x: 1, y: 2 },
200 | { ...strokeCell, x: 2, y: 2 },
201 | { x: 3, y: 2 },
202 | { x: 4, y: 2 },
203 | ],
204 | [
205 | { ...strokeCell, x: 0, y: 3 },
206 | { x: 1, y: 3 },
207 | { x: 2, y: 3 },
208 | { x: 3, y: 3 },
209 | { x: 4, y: 3 },
210 | ],
211 | [
212 | { ...strokeCell, x: 0, y: 4 },
213 | { ...strokeCell, x: 1, y: 4 },
214 | { ...strokeCell, x: 2, y: 4 },
215 | { ...strokeCell, x: 3, y: 4 },
216 | { ...strokeCell, x: 4, y: 4 },
217 | ],
218 | ],
219 | F: [
220 | [
221 | { ...strokeCell, x: 0, y: 0 },
222 | { ...strokeCell, x: 1, y: 0 },
223 | { ...strokeCell, x: 2, y: 0 },
224 | { ...strokeCell, x: 3, y: 0 },
225 | { ...strokeCell, x: 4, y: 0 },
226 | ],
227 | [
228 | { ...strokeCell, x: 0, y: 1 },
229 | { x: 1, y: 1 },
230 | { x: 2, y: 1 },
231 | { x: 3, y: 1 },
232 | { x: 4, y: 1 },
233 | ],
234 | [
235 | { ...strokeCell, x: 0, y: 2 },
236 | { ...strokeCell, x: 1, y: 2 },
237 | { ...strokeCell, x: 2, y: 2 },
238 | { x: 3, y: 2 },
239 | { x: 4, y: 2 },
240 | ],
241 | [
242 | { ...strokeCell, x: 0, y: 3 },
243 | { x: 1, y: 3 },
244 | { x: 2, y: 3 },
245 | { x: 3, y: 3 },
246 | { x: 4, y: 3 },
247 | ],
248 | [
249 | { ...strokeCell, x: 0, y: 4 },
250 | { x: 1, y: 4 },
251 | { x: 2, y: 4 },
252 | { x: 3, y: 4 },
253 | { x: 4, y: 4 },
254 | ],
255 | ],
256 | G: [
257 | [
258 | { ...strokeCell, x: 0, y: 0 },
259 | { ...strokeCell, x: 1, y: 0 },
260 | { ...strokeCell, x: 2, y: 0 },
261 | { ...strokeCell, x: 3, y: 0 },
262 | { ...strokeCell, x: 4, y: 0 },
263 | ],
264 | [
265 | { ...strokeCell, x: 0, y: 1 },
266 | { x: 1, y: 1 },
267 | { x: 2, y: 1 },
268 | { x: 3, y: 1 },
269 | { x: 4, y: 1 },
270 | ],
271 | [
272 | { ...strokeCell, x: 0, y: 2 },
273 | { x: 1, y: 2 },
274 | { ...strokeCell, x: 2, y: 2 },
275 | { ...strokeCell, x: 3, y: 2 },
276 | { ...strokeCell, x: 4, y: 2 },
277 | ],
278 | [
279 | { ...strokeCell, x: 0, y: 3 },
280 | { x: 1, y: 3 },
281 | { x: 2, y: 3 },
282 | { x: 3, y: 3 },
283 | { ...strokeCell, x: 4, y: 3 },
284 | ],
285 | [
286 | { ...strokeCell, x: 0, y: 4 },
287 | { ...strokeCell, x: 1, y: 4 },
288 | { ...strokeCell, x: 2, y: 4 },
289 | { ...strokeCell, x: 3, y: 4 },
290 | { ...strokeCell, x: 4, y: 4 },
291 | ],
292 | ],
293 | H: [
294 | [
295 | { ...strokeCell, x: 0, y: 0 },
296 | { x: 1, y: 0 },
297 | { x: 2, y: 0 },
298 | { x: 3, y: 0 },
299 | { ...strokeCell, x: 4, y: 0 },
300 | ],
301 | [
302 | { ...strokeCell, x: 0, y: 1 },
303 | { x: 1, y: 1 },
304 | { x: 2, y: 1 },
305 | { x: 3, y: 1 },
306 | { ...strokeCell, x: 4, y: 1 },
307 | ],
308 | [
309 | { ...strokeCell, x: 0, y: 2 },
310 | { ...strokeCell, x: 1, y: 2 },
311 | { ...strokeCell, x: 2, y: 2 },
312 | { ...strokeCell, x: 3, y: 2 },
313 | { ...strokeCell, x: 4, y: 2 },
314 | ],
315 | [
316 | { ...strokeCell, x: 0, y: 3 },
317 | { x: 1, y: 3 },
318 | { x: 2, y: 3 },
319 | { x: 3, y: 3 },
320 | { ...strokeCell, x: 4, y: 3 },
321 | ],
322 | [
323 | { ...strokeCell, x: 0, y: 4 },
324 | { x: 1, y: 4 },
325 | { x: 2, y: 4 },
326 | { x: 3, y: 4 },
327 | { ...strokeCell, x: 4, y: 4 },
328 | ],
329 | ],
330 | I: [
331 | [
332 | { ...strokeCell, x: 0, y: 0 },
333 | { ...strokeCell, x: 1, y: 0 },
334 | { ...strokeCell, x: 2, y: 0 },
335 | { ...strokeCell, x: 3, y: 0 },
336 | { ...strokeCell, x: 4, y: 0 },
337 | ],
338 | [
339 | { x: 0, y: 1 },
340 | { x: 1, y: 1 },
341 | { ...strokeCell, x: 2, y: 1 },
342 | { x: 3, y: 1 },
343 | { x: 4, y: 1 },
344 | ],
345 | [
346 | { x: 0, y: 2 },
347 | { x: 1, y: 2 },
348 | { ...strokeCell, x: 2, y: 2 },
349 | { x: 3, y: 2 },
350 | { x: 4, y: 2 },
351 | ],
352 | [
353 | { x: 0, y: 3 },
354 | { x: 1, y: 3 },
355 | { ...strokeCell, x: 2, y: 3 },
356 | { x: 3, y: 3 },
357 | { x: 4, y: 3 },
358 | ],
359 | [
360 | { ...strokeCell, x: 0, y: 4 },
361 | { ...strokeCell, x: 1, y: 4 },
362 | { ...strokeCell, x: 2, y: 4 },
363 | { ...strokeCell, x: 3, y: 4 },
364 | { ...strokeCell, x: 4, y: 4 },
365 | ],
366 | ],
367 | J: [
368 | [
369 | { x: 0, y: 0 },
370 | { x: 1, y: 0 },
371 | { x: 2, y: 0 },
372 | { x: 3, y: 0 },
373 | { ...strokeCell, x: 4, y: 0 },
374 | ],
375 | [
376 | { x: 0, y: 1 },
377 | { x: 1, y: 1 },
378 | { x: 2, y: 1 },
379 | { x: 3, y: 1 },
380 | { ...strokeCell, x: 4, y: 1 },
381 | ],
382 | [
383 | { x: 0, y: 2 },
384 | { x: 1, y: 2 },
385 | { x: 2, y: 2 },
386 | { x: 3, y: 2 },
387 | { ...strokeCell, x: 4, y: 2 },
388 | ],
389 | [
390 | { ...strokeCell, x: 0, y: 3 },
391 | { x: 1, y: 3 },
392 | { x: 2, y: 3 },
393 | { x: 3, y: 3 },
394 | { ...strokeCell, x: 4, y: 3 },
395 | ],
396 | [
397 | { ...strokeCell, x: 0, y: 4 },
398 | { ...strokeCell, x: 1, y: 4 },
399 | { ...strokeCell, x: 2, y: 4 },
400 | { ...strokeCell, x: 3, y: 4 },
401 | { ...strokeCell, x: 4, y: 4 },
402 | ],
403 | ],
404 | K: [
405 | [
406 | { ...strokeCell, x: 0, y: 0 },
407 | { x: 1, y: 0 },
408 | { x: 2, y: 0 },
409 | { x: 3, y: 0 },
410 | { ...strokeCell, x: 4, y: 0 },
411 | ],
412 | [
413 | { ...strokeCell, x: 0, y: 1 },
414 | { x: 1, y: 1 },
415 | { x: 2, y: 1 },
416 | { ...strokeCell, x: 3, y: 1 },
417 | { x: 4, y: 1 },
418 | ],
419 | [
420 | { ...strokeCell, x: 0, y: 2 },
421 | { ...strokeCell, x: 1, y: 2 },
422 | { ...strokeCell, x: 2, y: 2 },
423 | { x: 3, y: 2 },
424 | { x: 4, y: 2 },
425 | ],
426 | [
427 | { ...strokeCell, x: 0, y: 3 },
428 | { x: 1, y: 3 },
429 | { x: 2, y: 3 },
430 | { ...strokeCell, x: 3, y: 3 },
431 | { x: 4, y: 3 },
432 | ],
433 | [
434 | { ...strokeCell, x: 0, y: 4 },
435 | { x: 1, y: 4 },
436 | { x: 2, y: 4 },
437 | { x: 3, y: 4 },
438 | { ...strokeCell, x: 4, y: 4 },
439 | ],
440 | ],
441 | L: [
442 | [
443 | { ...strokeCell, x: 0, y: 0 },
444 | { x: 1, y: 0 },
445 | { x: 2, y: 0 },
446 | { x: 3, y: 0 },
447 | { x: 4, y: 0 },
448 | ],
449 | [
450 | { ...strokeCell, x: 0, y: 1 },
451 | { x: 1, y: 1 },
452 | { x: 2, y: 1 },
453 | { x: 3, y: 1 },
454 | { x: 4, y: 1 },
455 | ],
456 | [
457 | { ...strokeCell, x: 0, y: 2 },
458 | { x: 1, y: 2 },
459 | { x: 2, y: 2 },
460 | { x: 3, y: 2 },
461 | { x: 4, y: 2 },
462 | ],
463 | [
464 | { ...strokeCell, x: 0, y: 3 },
465 | { x: 1, y: 3 },
466 | { x: 2, y: 3 },
467 | { x: 3, y: 3 },
468 | { x: 4, y: 3 },
469 | ],
470 | [
471 | { ...strokeCell, x: 0, y: 4 },
472 | { ...strokeCell, x: 1, y: 4 },
473 | { ...strokeCell, x: 2, y: 4 },
474 | { ...strokeCell, x: 3, y: 4 },
475 | { ...strokeCell, x: 4, y: 4 },
476 | ],
477 | ],
478 | M: [
479 | [
480 | { ...strokeCell, x: 0, y: 0 },
481 | { x: 1, y: 0 },
482 | { x: 2, y: 0 },
483 | { x: 3, y: 0 },
484 | { ...strokeCell, x: 4, y: 0 },
485 | ],
486 | [
487 | { ...strokeCell, x: 0, y: 1 },
488 | { ...strokeCell, x: 1, y: 1 },
489 | { x: 2, y: 1 },
490 | { ...strokeCell, x: 3, y: 1 },
491 | { ...strokeCell, x: 4, y: 1 },
492 | ],
493 | [
494 | { ...strokeCell, x: 0, y: 2 },
495 | { x: 1, y: 2 },
496 | { ...strokeCell, x: 2, y: 2 },
497 | { x: 3, y: 2 },
498 | { ...strokeCell, x: 4, y: 2 },
499 | ],
500 | [
501 | { ...strokeCell, x: 0, y: 3 },
502 | { x: 1, y: 3 },
503 | { x: 2, y: 3 },
504 | { x: 3, y: 3 },
505 | { ...strokeCell, x: 4, y: 3 },
506 | ],
507 | [
508 | { ...strokeCell, x: 0, y: 4 },
509 | { x: 1, y: 4 },
510 | { x: 2, y: 4 },
511 | { x: 3, y: 4 },
512 | { ...strokeCell, x: 4, y: 4 },
513 | ],
514 | ],
515 | N: [
516 | [
517 | { ...strokeCell, x: 0, y: 0 },
518 | { x: 1, y: 0 },
519 | { x: 2, y: 0 },
520 | { x: 3, y: 0 },
521 | { ...strokeCell, x: 4, y: 0 },
522 | ],
523 | [
524 | { ...strokeCell, x: 0, y: 1 },
525 | { ...strokeCell, x: 1, y: 1 },
526 | { x: 2, y: 1 },
527 | { x: 3, y: 1 },
528 | { ...strokeCell, x: 4, y: 1 },
529 | ],
530 | [
531 | { ...strokeCell, x: 0, y: 2 },
532 | { x: 1, y: 2 },
533 | { ...strokeCell, x: 2, y: 2 },
534 | { x: 3, y: 2 },
535 | { ...strokeCell, x: 4, y: 2 },
536 | ],
537 | [
538 | { ...strokeCell, x: 0, y: 3 },
539 | { x: 1, y: 3 },
540 | { x: 2, y: 3 },
541 | { ...strokeCell, x: 3, y: 3 },
542 | { ...strokeCell, x: 4, y: 3 },
543 | ],
544 | [
545 | { ...strokeCell, x: 0, y: 4 },
546 | { x: 1, y: 4 },
547 | { x: 2, y: 4 },
548 | { x: 3, y: 4 },
549 | { ...strokeCell, x: 4, y: 4 },
550 | ],
551 | ],
552 | O: [
553 | [
554 | { ...strokeCell, x: 0, y: 0 },
555 | { ...strokeCell, x: 1, y: 0 },
556 | { ...strokeCell, x: 2, y: 0 },
557 | { ...strokeCell, x: 3, y: 0 },
558 | { ...strokeCell, x: 4, y: 0 },
559 | ],
560 | [
561 | { ...strokeCell, x: 0, y: 1 },
562 | { ...fillCell, top: false, left: false, x: 1, y: 1 },
563 | { ...fillCell, top: false, x: 2, y: 1 },
564 | { ...fillCell, top: false, right: false, x: 3, y: 1 },
565 | { ...strokeCell, x: 4, y: 1 },
566 | ],
567 | [
568 | { ...strokeCell, x: 0, y: 2 },
569 | { ...fillCell, left: false, x: 1, y: 2 },
570 | { ...fillCell, x: 2, y: 2 },
571 | { ...fillCell, right: false, x: 3, y: 2 },
572 | { ...strokeCell, x: 4, y: 2 },
573 | ],
574 | [
575 | { ...strokeCell, x: 0, y: 3 },
576 | { ...fillCell, bottom: false, left: false, x: 1, y: 3 },
577 | { ...fillCell, bottom: false, x: 2, y: 3 },
578 | { ...fillCell, bottom: false, right: false, x: 3, y: 3 },
579 | { ...strokeCell, x: 4, y: 3 },
580 | ],
581 | [
582 | { ...strokeCell, x: 0, y: 4 },
583 | { ...strokeCell, x: 1, y: 4 },
584 | { ...strokeCell, x: 2, y: 4 },
585 | { ...strokeCell, x: 3, y: 4 },
586 | { ...strokeCell, x: 4, y: 4 },
587 | ],
588 | ],
589 | P: [
590 | [
591 | { ...strokeCell, x: 0, y: 0 },
592 | { ...strokeCell, x: 1, y: 0 },
593 | { ...strokeCell, x: 2, y: 0 },
594 | { ...strokeCell, x: 3, y: 0 },
595 | { ...strokeCell, x: 4, y: 0 },
596 | ],
597 | [
598 | { ...strokeCell, x: 0, y: 1 },
599 | { ...fillCell, top: false, bottom: false, left: false, x: 1, y: 1 },
600 | { ...fillCell, top: false, bottom: false, x: 2, y: 1 },
601 | { ...fillCell, top: false, bottom: false, right: false, x: 3, y: 1 },
602 | { ...strokeCell, x: 4, y: 1 },
603 | ],
604 | [
605 | { ...strokeCell, x: 0, y: 2 },
606 | { ...strokeCell, x: 1, y: 2 },
607 | { ...strokeCell, x: 2, y: 2 },
608 | { ...strokeCell, x: 3, y: 2 },
609 | { ...strokeCell, x: 4, y: 2 },
610 | ],
611 | [
612 | { ...strokeCell, x: 0, y: 3 },
613 | { x: 1, y: 3 },
614 | { x: 2, y: 3 },
615 | { x: 3, y: 3 },
616 | { x: 4, y: 3 },
617 | ],
618 | [
619 | { ...strokeCell, x: 0, y: 4 },
620 | { x: 1, y: 4 },
621 | { x: 2, y: 4 },
622 | { x: 3, y: 4 },
623 | { x: 4, y: 4 },
624 | ],
625 | ],
626 | Q: [
627 | [
628 | { ...strokeCell, x: 0, y: 0 },
629 | { ...strokeCell, x: 1, y: 0 },
630 | { ...strokeCell, x: 2, y: 0 },
631 | { ...strokeCell, x: 3, y: 0 },
632 | { ...strokeCell, x: 4, y: 0 },
633 | ],
634 | [
635 | { ...strokeCell, x: 0, y: 1 },
636 | { ...fillCell, top: false, left: false, x: 1, y: 1 },
637 | { ...fillCell, top: false, x: 2, y: 1 },
638 | { ...fillCell, top: false, right: false, x: 3, y: 1 },
639 | { ...strokeCell, x: 4, y: 1 },
640 | ],
641 | [
642 | { ...strokeCell, x: 0, y: 2 },
643 | { ...fillCell, bottom: false, left: false, x: 1, y: 2 },
644 | { ...fillCell, bottom: false, x: 2, y: 2 },
645 | { ...fillCell, bottom: false, right: false, x: 3, y: 2 },
646 | { ...strokeCell, x: 4, y: 2 },
647 | ],
648 | [
649 | { ...strokeCell, x: 0, y: 3 },
650 | { ...strokeCell, x: 1, y: 3 },
651 | { ...strokeCell, x: 2, y: 3 },
652 | { ...strokeCell, x: 3, y: 3 },
653 | { ...strokeCell, x: 4, y: 3 },
654 | ],
655 | [
656 | { x: 0, y: 4 },
657 | { x: 1, y: 4 },
658 | { x: 2, y: 4 },
659 | { x: 3, y: 4 },
660 | { ...strokeCell, x: 4, y: 4 },
661 | ],
662 | ],
663 | R: [
664 | [
665 | { ...strokeCell, x: 0, y: 0 },
666 | { ...strokeCell, x: 1, y: 0 },
667 | { ...strokeCell, x: 2, y: 0 },
668 | { ...strokeCell, x: 3, y: 0 },
669 | { x: 4, y: 0 },
670 | ],
671 | [
672 | { ...strokeCell, x: 0, y: 1 },
673 | { ...fillCell, top: false, bottom: false, left: false, x: 1, y: 1 },
674 | { ...fillCell, top: false, bottom: false, x: 2, y: 1 },
675 | { ...fillCell, top: false, bottom: false, right: false, x: 3, y: 1 },
676 | { ...strokeCell, x: 4, y: 1 },
677 | ],
678 | [
679 | { ...strokeCell, x: 0, y: 2 },
680 | { ...strokeCell, x: 1, y: 2 },
681 | { ...strokeCell, x: 2, y: 2 },
682 | { ...strokeCell, x: 3, y: 2 },
683 | { ...strokeCell, x: 4, y: 2 },
684 | ],
685 | [
686 | { ...strokeCell, x: 0, y: 3 },
687 | { x: 1, y: 3 },
688 | { x: 2, y: 3 },
689 | { ...strokeCell, x: 3, y: 3 },
690 | { x: 4, y: 3 },
691 | ],
692 | [
693 | { ...strokeCell, x: 0, y: 4 },
694 | { x: 1, y: 4 },
695 | { x: 2, y: 4 },
696 | { x: 3, y: 4 },
697 | { ...strokeCell, x: 4, y: 4 },
698 | ],
699 | ],
700 | S: [
701 | [
702 | { ...strokeCell, x: 0, y: 0 },
703 | { ...strokeCell, x: 1, y: 0 },
704 | { ...strokeCell, x: 2, y: 0 },
705 | { ...strokeCell, x: 3, y: 0 },
706 | { ...strokeCell, x: 4, y: 0 },
707 | ],
708 | [
709 | { ...strokeCell, x: 0, y: 1 },
710 | { x: 1, y: 1 },
711 | { x: 2, y: 1 },
712 | { x: 3, y: 1 },
713 | { x: 4, y: 1 },
714 | ],
715 | [
716 | { ...strokeCell, x: 0, y: 2 },
717 | { ...strokeCell, x: 1, y: 2 },
718 | { ...strokeCell, x: 2, y: 2 },
719 | { ...strokeCell, x: 3, y: 2 },
720 | { ...strokeCell, x: 4, y: 2 },
721 | ],
722 | [
723 | { x: 0, y: 3 },
724 | { x: 1, y: 3 },
725 | { x: 2, y: 3 },
726 | { x: 3, y: 3 },
727 | { ...strokeCell, x: 4, y: 3 },
728 | ],
729 | [
730 | { ...strokeCell, x: 0, y: 4 },
731 | { ...strokeCell, x: 1, y: 4 },
732 | { ...strokeCell, x: 2, y: 4 },
733 | { ...strokeCell, x: 3, y: 4 },
734 | { ...strokeCell, x: 4, y: 4 },
735 | ],
736 | ],
737 | T: [
738 | [
739 | { ...strokeCell, x: 0, y: 0 },
740 | { ...strokeCell, x: 1, y: 0 },
741 | { ...strokeCell, x: 2, y: 0 },
742 | { ...strokeCell, x: 3, y: 0 },
743 | { ...strokeCell, x: 4, y: 0 },
744 | ],
745 | [
746 | { x: 0, y: 1 },
747 | { x: 1, y: 1 },
748 | { ...strokeCell, x: 2, y: 1 },
749 | { x: 3, y: 1 },
750 | { x: 4, y: 1 },
751 | ],
752 | [
753 | { x: 0, y: 2 },
754 | { x: 1, y: 2 },
755 | { ...strokeCell, x: 2, y: 2 },
756 | { x: 3, y: 2 },
757 | { x: 4, y: 2 },
758 | ],
759 | [
760 | { x: 0, y: 3 },
761 | { x: 1, y: 3 },
762 | { ...strokeCell, x: 2, y: 3 },
763 | { x: 3, y: 3 },
764 | { x: 4, y: 3 },
765 | ],
766 | [
767 | { x: 0, y: 4 },
768 | { x: 1, y: 4 },
769 | { ...strokeCell, x: 2, y: 4 },
770 | { x: 3, y: 4 },
771 | { x: 4, y: 4 },
772 | ],
773 | ],
774 | U: [
775 | [
776 | { ...strokeCell, x: 0, y: 0 },
777 | { x: 1, y: 0 },
778 | { x: 2, y: 0 },
779 | { x: 3, y: 0 },
780 | { ...strokeCell, x: 4, y: 0 },
781 | ],
782 | [
783 | { ...strokeCell, x: 0, y: 1 },
784 | { x: 1, y: 1 },
785 | { x: 2, y: 1 },
786 | { x: 3, y: 1 },
787 | { ...strokeCell, x: 4, y: 1 },
788 | ],
789 | [
790 | { ...strokeCell, x: 0, y: 2 },
791 | { x: 1, y: 2 },
792 | { x: 2, y: 2 },
793 | { x: 3, y: 2 },
794 | { ...strokeCell, x: 4, y: 2 },
795 | ],
796 | [
797 | { ...strokeCell, x: 0, y: 3 },
798 | { x: 1, y: 3 },
799 | { x: 2, y: 3 },
800 | { x: 3, y: 3 },
801 | { ...strokeCell, x: 4, y: 3 },
802 | ],
803 | [
804 | { ...strokeCell, x: 0, y: 4 },
805 | { ...strokeCell, x: 1, y: 4 },
806 | { ...strokeCell, x: 2, y: 4 },
807 | { ...strokeCell, x: 3, y: 4 },
808 | { ...strokeCell, x: 4, y: 4 },
809 | ],
810 | ],
811 | V: [
812 | [
813 | { ...strokeCell, x: 0, y: 0 },
814 | { x: 1, y: 0 },
815 | { x: 2, y: 0 },
816 | { x: 3, y: 0 },
817 | { ...strokeCell, x: 4, y: 0 },
818 | ],
819 | [
820 | { ...strokeCell, x: 0, y: 1 },
821 | { x: 1, y: 1 },
822 | { x: 2, y: 1 },
823 | { x: 3, y: 1 },
824 | { ...strokeCell, x: 4, y: 1 },
825 | ],
826 | [
827 | { ...strokeCell, x: 0, y: 2 },
828 | { x: 1, y: 2 },
829 | { x: 2, y: 2 },
830 | { x: 3, y: 2 },
831 | { ...strokeCell, x: 4, y: 2 },
832 | ],
833 | [
834 | { x: 0, y: 3 },
835 | { ...strokeCell, x: 1, y: 3 },
836 | { x: 2, y: 3 },
837 | { ...strokeCell, x: 3, y: 3 },
838 | { x: 4, y: 3 },
839 | ],
840 | [
841 | { x: 0, y: 4 },
842 | { x: 1, y: 4 },
843 | { ...strokeCell, x: 2, y: 4 },
844 | { x: 3, y: 4 },
845 | { x: 4, y: 4 },
846 | ],
847 | ],
848 | W: [
849 | [
850 | { ...strokeCell, x: 0, y: 0 },
851 | { x: 1, y: 0 },
852 | { x: 2, y: 0 },
853 | { x: 3, y: 0 },
854 | { ...strokeCell, x: 4, y: 0 },
855 | ],
856 | [
857 | { ...strokeCell, x: 0, y: 1 },
858 | { x: 1, y: 1 },
859 | { x: 2, y: 1 },
860 | { x: 3, y: 1 },
861 | { ...strokeCell, x: 4, y: 1 },
862 | ],
863 | [
864 | { ...strokeCell, x: 0, y: 2 },
865 | { x: 1, y: 2 },
866 | { ...strokeCell, x: 2, y: 2 },
867 | { x: 3, y: 2 },
868 | { ...strokeCell, x: 4, y: 2 },
869 | ],
870 | [
871 | { ...strokeCell, x: 0, y: 3 },
872 | { ...strokeCell, x: 1, y: 3 },
873 | { x: 2, y: 3 },
874 | { ...strokeCell, x: 3, y: 3 },
875 | { ...strokeCell, x: 4, y: 3 },
876 | ],
877 | [
878 | { ...strokeCell, x: 0, y: 4 },
879 | { x: 1, y: 4 },
880 | { x: 2, y: 4 },
881 | { x: 3, y: 4 },
882 | { ...strokeCell, x: 4, y: 4 },
883 | ],
884 | ],
885 | X: [
886 | [
887 | { ...strokeCell, x: 0, y: 0 },
888 | { x: 1, y: 0 },
889 | { x: 2, y: 0 },
890 | { x: 3, y: 0 },
891 | { ...strokeCell, x: 4, y: 0 },
892 | ],
893 | [
894 | { x: 0, y: 1 },
895 | { ...strokeCell, x: 1, y: 1 },
896 | { x: 2, y: 1 },
897 | { ...strokeCell, x: 3, y: 1 },
898 | { x: 4, y: 1 },
899 | ],
900 | [
901 | { x: 0, y: 2 },
902 | { x: 1, y: 2 },
903 | { ...strokeCell, x: 2, y: 2 },
904 | { x: 3, y: 2 },
905 | { x: 4, y: 2 },
906 | ],
907 | [
908 | { x: 0, y: 3 },
909 | { ...strokeCell, x: 1, y: 3 },
910 | { x: 2, y: 3 },
911 | { ...strokeCell, x: 3, y: 3 },
912 | { x: 4, y: 3 },
913 | ],
914 | [
915 | { ...strokeCell, x: 0, y: 4 },
916 | { x: 1, y: 4 },
917 | { x: 2, y: 4 },
918 | { x: 3, y: 4 },
919 | { ...strokeCell, x: 4, y: 4 },
920 | ],
921 | ],
922 | Y: [
923 | [
924 | { ...strokeCell, x: 0, y: 0 },
925 | { x: 1, y: 0 },
926 | { x: 2, y: 0 },
927 | { x: 3, y: 0 },
928 | { ...strokeCell, x: 4, y: 0 },
929 | ],
930 | [
931 | { x: 0, y: 1 },
932 | { ...strokeCell, x: 1, y: 1 },
933 | { x: 2, y: 1 },
934 | { ...strokeCell, x: 3, y: 1 },
935 | { x: 4, y: 1 },
936 | ],
937 | [
938 | { x: 0, y: 2 },
939 | { x: 1, y: 2 },
940 | { ...strokeCell, x: 2, y: 2 },
941 | { x: 3, y: 2 },
942 | { x: 4, y: 2 },
943 | ],
944 | [
945 | { x: 0, y: 3 },
946 | { x: 1, y: 3 },
947 | { ...strokeCell, x: 2, y: 3 },
948 | { x: 3, y: 3 },
949 | { x: 4, y: 3 },
950 | ],
951 | [
952 | { x: 0, y: 4 },
953 | { x: 1, y: 4 },
954 | { ...strokeCell, x: 2, y: 4 },
955 | { x: 3, y: 4 },
956 | { x: 4, y: 4 },
957 | ],
958 | ],
959 | Z: [
960 | [
961 | { ...strokeCell, x: 0, y: 0 },
962 | { ...strokeCell, x: 1, y: 0 },
963 | { ...strokeCell, x: 2, y: 0 },
964 | { ...strokeCell, x: 3, y: 0 },
965 | { ...strokeCell, x: 4, y: 0 },
966 | ],
967 | [
968 | { x: 0, y: 1 },
969 | { x: 1, y: 1 },
970 | { x: 2, y: 1 },
971 | { ...strokeCell, x: 3, y: 1 },
972 | { x: 4, y: 1 },
973 | ],
974 | [
975 | { x: 0, y: 2 },
976 | { x: 1, y: 2 },
977 | { ...strokeCell, x: 2, y: 2 },
978 | { x: 3, y: 2 },
979 | { x: 4, y: 2 },
980 | ],
981 | [
982 | { x: 0, y: 3 },
983 | { ...strokeCell, x: 1, y: 3 },
984 | { x: 2, y: 3 },
985 | { x: 3, y: 3 },
986 | { x: 4, y: 3 },
987 | ],
988 | [
989 | { ...strokeCell, x: 0, y: 4 },
990 | { ...strokeCell, x: 1, y: 4 },
991 | { ...strokeCell, x: 2, y: 4 },
992 | { ...strokeCell, x: 3, y: 4 },
993 | { ...strokeCell, x: 4, y: 4 },
994 | ],
995 | ],
996 | ' ': [
997 | [
998 | { fill: null, x: 0, y: 0 },
999 | { fill: null, x: 1, y: 0 },
1000 | { fill: null, x: 2, y: 0 },
1001 | { fill: null, x: 3, y: 0 },
1002 | { fill: null, x: 4, y: 0 },
1003 | ],
1004 | [
1005 | { fill: null, x: 0, y: 1 },
1006 | { fill: null, x: 1, y: 1 },
1007 | { fill: null, x: 2, y: 1 },
1008 | { fill: null, x: 3, y: 1 },
1009 | { fill: null, x: 4, y: 1 },
1010 | ],
1011 | [
1012 | { fill: null, x: 0, y: 2 },
1013 | { fill: null, x: 1, y: 2 },
1014 | { fill: null, x: 2, y: 2 },
1015 | { fill: null, x: 3, y: 2 },
1016 | { fill: null, x: 4, y: 2 },
1017 | ],
1018 | [
1019 | { fill: null, x: 0, y: 3 },
1020 | { fill: null, x: 1, y: 3 },
1021 | { fill: null, x: 2, y: 3 },
1022 | { fill: null, x: 3, y: 3 },
1023 | { fill: null, x: 4, y: 3 },
1024 | ],
1025 | [
1026 | { fill: null, x: 0, y: 4 },
1027 | { fill: null, x: 1, y: 4 },
1028 | { fill: null, x: 2, y: 4 },
1029 | { fill: null, x: 3, y: 4 },
1030 | { fill: null, x: 4, y: 4 },
1031 | ],
1032 | ],
1033 | };
1034 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU General Public License is a free, copyleft license for
11 | software and other kinds of works.
12 |
13 | The licenses for most software and other practical works are designed
14 | to take away your freedom to share and change the works. By contrast,
15 | the GNU General Public License is intended to guarantee your freedom to
16 | share and change all versions of a program--to make sure it remains free
17 | software for all its users. We, the Free Software Foundation, use the
18 | GNU General Public License for most of our software; it applies also to
19 | any other work released this way by its authors. You can apply it to
20 | your programs, too.
21 |
22 | When we speak of free software, we are referring to freedom, not
23 | price. Our General Public Licenses are designed to make sure that you
24 | have the freedom to distribute copies of free software (and charge for
25 | them if you wish), that you receive source code or can get it if you
26 | want it, that you can change the software or use pieces of it in new
27 | free programs, and that you know you can do these things.
28 |
29 | To protect your rights, we need to prevent others from denying you
30 | these rights or asking you to surrender the rights. Therefore, you have
31 | certain responsibilities if you distribute copies of the software, or if
32 | you modify it: responsibilities to respect the freedom of others.
33 |
34 | For example, if you distribute copies of such a program, whether
35 | gratis or for a fee, you must pass on to the recipients the same
36 | freedoms that you received. You must make sure that they, too, receive
37 | or can get the source code. And you must show them these terms so they
38 | know their rights.
39 |
40 | Developers that use the GNU GPL protect your rights with two steps:
41 | (1) assert copyright on the software, and (2) offer you this License
42 | giving you legal permission to copy, distribute and/or modify it.
43 |
44 | For the developers' and authors' protection, the GPL clearly explains
45 | that there is no warranty for this free software. For both users' and
46 | authors' sake, the GPL requires that modified versions be marked as
47 | changed, so that their problems will not be attributed erroneously to
48 | authors of previous versions.
49 |
50 | Some devices are designed to deny users access to install or run
51 | modified versions of the software inside them, although the manufacturer
52 | can do so. This is fundamentally incompatible with the aim of
53 | protecting users' freedom to change the software. The systematic
54 | pattern of such abuse occurs in the area of products for individuals to
55 | use, which is precisely where it is most unacceptable. Therefore, we
56 | have designed this version of the GPL to prohibit the practice for those
57 | products. If such problems arise substantially in other domains, we
58 | stand ready to extend this provision to those domains in future versions
59 | of the GPL, as needed to protect the freedom of users.
60 |
61 | Finally, every program is threatened constantly by software patents.
62 | States should not allow patents to restrict development and use of
63 | software on general-purpose computers, but in those that do, we wish to
64 | avoid the special danger that patents applied to a free program could
65 | make it effectively proprietary. To prevent this, the GPL assures that
66 | patents cannot be used to render the program non-free.
67 |
68 | The precise terms and conditions for copying, distribution and
69 | modification follow.
70 |
71 | TERMS AND CONDITIONS
72 |
73 | 0. Definitions.
74 |
75 | "This License" refers to version 3 of the GNU General Public License.
76 |
77 | "Copyright" also means copyright-like laws that apply to other kinds of
78 | works, such as semiconductor masks.
79 |
80 | "The Program" refers to any copyrightable work licensed under this
81 | License. Each licensee is addressed as "you". "Licensees" and
82 | "recipients" may be individuals or organizations.
83 |
84 | To "modify" a work means to copy from or adapt all or part of the work
85 | in a fashion requiring copyright permission, other than the making of an
86 | exact copy. The resulting work is called a "modified version" of the
87 | earlier work or a work "based on" the earlier work.
88 |
89 | A "covered work" means either the unmodified Program or a work based
90 | on the Program.
91 |
92 | To "propagate" a work means to do anything with it that, without
93 | permission, would make you directly or secondarily liable for
94 | infringement under applicable copyright law, except executing it on a
95 | computer or modifying a private copy. Propagation includes copying,
96 | distribution (with or without modification), making available to the
97 | public, and in some countries other activities as well.
98 |
99 | To "convey" a work means any kind of propagation that enables other
100 | parties to make or receive copies. Mere interaction with a user through
101 | a computer network, with no transfer of a copy, is not conveying.
102 |
103 | An interactive user interface displays "Appropriate Legal Notices"
104 | to the extent that it includes a convenient and prominently visible
105 | feature that (1) displays an appropriate copyright notice, and (2)
106 | tells the user that there is no warranty for the work (except to the
107 | extent that warranties are provided), that licensees may convey the
108 | work under this License, and how to view a copy of this License. If
109 | the interface presents a list of user commands or options, such as a
110 | menu, a prominent item in the list meets this criterion.
111 |
112 | 1. Source Code.
113 |
114 | The "source code" for a work means the preferred form of the work
115 | for making modifications to it. "Object code" means any non-source
116 | form of a work.
117 |
118 | A "Standard Interface" means an interface that either is an official
119 | standard defined by a recognized standards body, or, in the case of
120 | interfaces specified for a particular programming language, one that
121 | is widely used among developers working in that language.
122 |
123 | The "System Libraries" of an executable work include anything, other
124 | than the work as a whole, that (a) is included in the normal form of
125 | packaging a Major Component, but which is not part of that Major
126 | Component, and (b) serves only to enable use of the work with that
127 | Major Component, or to implement a Standard Interface for which an
128 | implementation is available to the public in source code form. A
129 | "Major Component", in this context, means a major essential component
130 | (kernel, window system, and so on) of the specific operating system
131 | (if any) on which the executable work runs, or a compiler used to
132 | produce the work, or an object code interpreter used to run it.
133 |
134 | The "Corresponding Source" for a work in object code form means all
135 | the source code needed to generate, install, and (for an executable
136 | work) run the object code and to modify the work, including scripts to
137 | control those activities. However, it does not include the work's
138 | System Libraries, or general-purpose tools or generally available free
139 | programs which are used unmodified in performing those activities but
140 | which are not part of the work. For example, Corresponding Source
141 | includes interface definition files associated with source files for
142 | the work, and the source code for shared libraries and dynamically
143 | linked subprograms that the work is specifically designed to require,
144 | such as by intimate data communication or control flow between those
145 | subprograms and other parts of the work.
146 |
147 | The Corresponding Source need not include anything that users
148 | can regenerate automatically from other parts of the Corresponding
149 | Source.
150 |
151 | The Corresponding Source for a work in source code form is that
152 | same work.
153 |
154 | 2. Basic Permissions.
155 |
156 | All rights granted under this License are granted for the term of
157 | copyright on the Program, and are irrevocable provided the stated
158 | conditions are met. This License explicitly affirms your unlimited
159 | permission to run the unmodified Program. The output from running a
160 | covered work is covered by this License only if the output, given its
161 | content, constitutes a covered work. This License acknowledges your
162 | rights of fair use or other equivalent, as provided by copyright law.
163 |
164 | You may make, run and propagate covered works that you do not
165 | convey, without conditions so long as your license otherwise remains
166 | in force. You may convey covered works to others for the sole purpose
167 | of having them make modifications exclusively for you, or provide you
168 | with facilities for running those works, provided that you comply with
169 | the terms of this License in conveying all material for which you do
170 | not control copyright. Those thus making or running the covered works
171 | for you must do so exclusively on your behalf, under your direction
172 | and control, on terms that prohibit them from making any copies of
173 | your copyrighted material outside their relationship with you.
174 |
175 | Conveying under any other circumstances is permitted solely under
176 | the conditions stated below. Sublicensing is not allowed; section 10
177 | makes it unnecessary.
178 |
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180 |
181 | No covered work shall be deemed part of an effective technological
182 | measure under any applicable law fulfilling obligations under article
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184 | similar laws prohibiting or restricting circumvention of such
185 | measures.
186 |
187 | When you convey a covered work, you waive any legal power to forbid
188 | circumvention of technological measures to the extent such circumvention
189 | is effected by exercising rights under this License with respect to
190 | the covered work, and you disclaim any intention to limit operation or
191 | modification of the work as a means of enforcing, against the work's
192 | users, your or third parties' legal rights to forbid circumvention of
193 | technological measures.
194 |
195 | 4. Conveying Verbatim Copies.
196 |
197 | You may convey verbatim copies of the Program's source code as you
198 | receive it, in any medium, provided that you conspicuously and
199 | appropriately publish on each copy an appropriate copyright notice;
200 | keep intact all notices stating that this License and any
201 | non-permissive terms added in accord with section 7 apply to the code;
202 | keep intact all notices of the absence of any warranty; and give all
203 | recipients a copy of this License along with the Program.
204 |
205 | You may charge any price or no price for each copy that you convey,
206 | and you may offer support or warranty protection for a fee.
207 |
208 | 5. Conveying Modified Source Versions.
209 |
210 | You may convey a work based on the Program, or the modifications to
211 | produce it from the Program, in the form of source code under the
212 | terms of section 4, provided that you also meet all of these conditions:
213 |
214 | a) The work must carry prominent notices stating that you modified
215 | it, and giving a relevant date.
216 |
217 | b) The work must carry prominent notices stating that it is
218 | released under this License and any conditions added under section
219 | 7. This requirement modifies the requirement in section 4 to
220 | "keep intact all notices".
221 |
222 | c) You must license the entire work, as a whole, under this
223 | License to anyone who comes into possession of a copy. This
224 | License will therefore apply, along with any applicable section 7
225 | additional terms, to the whole of the work, and all its parts,
226 | regardless of how they are packaged. This License gives no
227 | permission to license the work in any other way, but it does not
228 | invalidate such permission if you have separately received it.
229 |
230 | d) If the work has interactive user interfaces, each must display
231 | Appropriate Legal Notices; however, if the Program has interactive
232 | interfaces that do not display Appropriate Legal Notices, your
233 | work need not make them do so.
234 |
235 | A compilation of a covered work with other separate and independent
236 | works, which are not by their nature extensions of the covered work,
237 | and which are not combined with it such as to form a larger program,
238 | in or on a volume of a storage or distribution medium, is called an
239 | "aggregate" if the compilation and its resulting copyright are not
240 | used to limit the access or legal rights of the compilation's users
241 | beyond what the individual works permit. Inclusion of a covered work
242 | in an aggregate does not cause this License to apply to the other
243 | parts of the aggregate.
244 |
245 | 6. Conveying Non-Source Forms.
246 |
247 | You may convey a covered work in object code form under the terms
248 | of sections 4 and 5, provided that you also convey the
249 | machine-readable Corresponding Source under the terms of this License,
250 | in one of these ways:
251 |
252 | a) Convey the object code in, or embodied in, a physical product
253 | (including a physical distribution medium), accompanied by the
254 | Corresponding Source fixed on a durable physical medium
255 | customarily used for software interchange.
256 |
257 | b) Convey the object code in, or embodied in, a physical product
258 | (including a physical distribution medium), accompanied by a
259 | written offer, valid for at least three years and valid for as
260 | long as you offer spare parts or customer support for that product
261 | model, to give anyone who possesses the object code either (1) a
262 | copy of the Corresponding Source for all the software in the
263 | product that is covered by this License, on a durable physical
264 | medium customarily used for software interchange, for a price no
265 | more than your reasonable cost of physically performing this
266 | conveying of source, or (2) access to copy the
267 | Corresponding Source from a network server at no charge.
268 |
269 | c) Convey individual copies of the object code with a copy of the
270 | written offer to provide the Corresponding Source. This
271 | alternative is allowed only occasionally and noncommercially, and
272 | only if you received the object code with such an offer, in accord
273 | with subsection 6b.
274 |
275 | d) Convey the object code by offering access from a designated
276 | place (gratis or for a charge), and offer equivalent access to the
277 | Corresponding Source in the same way through the same place at no
278 | further charge. You need not require recipients to copy the
279 | Corresponding Source along with the object code. If the place to
280 | copy the object code is a network server, the Corresponding Source
281 | may be on a different server (operated by you or a third party)
282 | that supports equivalent copying facilities, provided you maintain
283 | clear directions next to the object code saying where to find the
284 | Corresponding Source. Regardless of what server hosts the
285 | Corresponding Source, you remain obligated to ensure that it is
286 | available for as long as needed to satisfy these requirements.
287 |
288 | e) Convey the object code using peer-to-peer transmission, provided
289 | you inform other peers where the object code and Corresponding
290 | Source of the work are being offered to the general public at no
291 | charge under subsection 6d.
292 |
293 | A separable portion of the object code, whose source code is excluded
294 | from the Corresponding Source as a System Library, need not be
295 | included in conveying the object code work.
296 |
297 | A "User Product" is either (1) a "consumer product", which means any
298 | tangible personal property which is normally used for personal, family,
299 | or household purposes, or (2) anything designed or sold for incorporation
300 | into a dwelling. In determining whether a product is a consumer product,
301 | doubtful cases shall be resolved in favor of coverage. For a particular
302 | product received by a particular user, "normally used" refers to a
303 | typical or common use of that class of product, regardless of the status
304 | of the particular user or of the way in which the particular user
305 | actually uses, or expects or is expected to use, the product. A product
306 | is a consumer product regardless of whether the product has substantial
307 | commercial, industrial or non-consumer uses, unless such uses represent
308 | the only significant mode of use of the product.
309 |
310 | "Installation Information" for a User Product means any methods,
311 | procedures, authorization keys, or other information required to install
312 | and execute modified versions of a covered work in that User Product from
313 | a modified version of its Corresponding Source. The information must
314 | suffice to ensure that the continued functioning of the modified object
315 | code is in no case prevented or interfered with solely because
316 | modification has been made.
317 |
318 | If you convey an object code work under this section in, or with, or
319 | specifically for use in, a User Product, and the conveying occurs as
320 | part of a transaction in which the right of possession and use of the
321 | User Product is transferred to the recipient in perpetuity or for a
322 | fixed term (regardless of how the transaction is characterized), the
323 | Corresponding Source conveyed under this section must be accompanied
324 | by the Installation Information. But this requirement does not apply
325 | if neither you nor any third party retains the ability to install
326 | modified object code on the User Product (for example, the work has
327 | been installed in ROM).
328 |
329 | The requirement to provide Installation Information does not include a
330 | requirement to continue to provide support service, warranty, or updates
331 | for a work that has been modified or installed by the recipient, or for
332 | the User Product in which it has been modified or installed. Access to a
333 | network may be denied when the modification itself materially and
334 | adversely affects the operation of the network or violates the rules and
335 | protocols for communication across the network.
336 |
337 | Corresponding Source conveyed, and Installation Information provided,
338 | in accord with this section must be in a format that is publicly
339 | documented (and with an implementation available to the public in
340 | source code form), and must require no special password or key for
341 | unpacking, reading or copying.
342 |
343 | 7. Additional Terms.
344 |
345 | "Additional permissions" are terms that supplement the terms of this
346 | License by making exceptions from one or more of its conditions.
347 | Additional permissions that are applicable to the entire Program shall
348 | be treated as though they were included in this License, to the extent
349 | that they are valid under applicable law. If additional permissions
350 | apply only to part of the Program, that part may be used separately
351 | under those permissions, but the entire Program remains governed by
352 | this License without regard to the additional permissions.
353 |
354 | When you convey a copy of a covered work, you may at your option
355 | remove any additional permissions from that copy, or from any part of
356 | it. (Additional permissions may be written to require their own
357 | removal in certain cases when you modify the work.) You may place
358 | additional permissions on material, added by you to a covered work,
359 | for which you have or can give appropriate copyright permission.
360 |
361 | Notwithstanding any other provision of this License, for material you
362 | add to a covered work, you may (if authorized by the copyright holders of
363 | that material) supplement the terms of this License with terms:
364 |
365 | a) Disclaiming warranty or limiting liability differently from the
366 | terms of sections 15 and 16 of this License; or
367 |
368 | b) Requiring preservation of specified reasonable legal notices or
369 | author attributions in that material or in the Appropriate Legal
370 | Notices displayed by works containing it; or
371 |
372 | c) Prohibiting misrepresentation of the origin of that material, or
373 | requiring that modified versions of such material be marked in
374 | reasonable ways as different from the original version; or
375 |
376 | d) Limiting the use for publicity purposes of names of licensors or
377 | authors of the material; or
378 |
379 | e) Declining to grant rights under trademark law for use of some
380 | trade names, trademarks, or service marks; or
381 |
382 | f) Requiring indemnification of licensors and authors of that
383 | material by anyone who conveys the material (or modified versions of
384 | it) with contractual assumptions of liability to the recipient, for
385 | any liability that these contractual assumptions directly impose on
386 | those licensors and authors.
387 |
388 | All other non-permissive additional terms are considered "further
389 | restrictions" within the meaning of section 10. If the Program as you
390 | received it, or any part of it, contains a notice stating that it is
391 | governed by this License along with a term that is a further
392 | restriction, you may remove that term. If a license document contains
393 | a further restriction but permits relicensing or conveying under this
394 | License, you may add to a covered work material governed by the terms
395 | of that license document, provided that the further restriction does
396 | not survive such relicensing or conveying.
397 |
398 | If you add terms to a covered work in accord with this section, you
399 | must place, in the relevant source files, a statement of the
400 | additional terms that apply to those files, or a notice indicating
401 | where to find the applicable terms.
402 |
403 | Additional terms, permissive or non-permissive, may be stated in the
404 | form of a separately written license, or stated as exceptions;
405 | the above requirements apply either way.
406 |
407 | 8. Termination.
408 |
409 | You may not propagate or modify a covered work except as expressly
410 | provided under this License. Any attempt otherwise to propagate or
411 | modify it is void, and will automatically terminate your rights under
412 | this License (including any patent licenses granted under the third
413 | paragraph of section 11).
414 |
415 | However, if you cease all violation of this License, then your
416 | license from a particular copyright holder is reinstated (a)
417 | provisionally, unless and until the copyright holder explicitly and
418 | finally terminates your license, and (b) permanently, if the copyright
419 | holder fails to notify you of the violation by some reasonable means
420 | prior to 60 days after the cessation.
421 |
422 | Moreover, your license from a particular copyright holder is
423 | reinstated permanently if the copyright holder notifies you of the
424 | violation by some reasonable means, this is the first time you have
425 | received notice of violation of this License (for any work) from that
426 | copyright holder, and you cure the violation prior to 30 days after
427 | your receipt of the notice.
428 |
429 | Termination of your rights under this section does not terminate the
430 | licenses of parties who have received copies or rights from you under
431 | this License. If your rights have been terminated and not permanently
432 | reinstated, you do not qualify to receive new licenses for the same
433 | material under section 10.
434 |
435 | 9. Acceptance Not Required for Having Copies.
436 |
437 | You are not required to accept this License in order to receive or
438 | run a copy of the Program. Ancillary propagation of a covered work
439 | occurring solely as a consequence of using peer-to-peer transmission
440 | to receive a copy likewise does not require acceptance. However,
441 | nothing other than this License grants you permission to propagate or
442 | modify any covered work. These actions infringe copyright if you do
443 | not accept this License. Therefore, by modifying or propagating a
444 | covered work, you indicate your acceptance of this License to do so.
445 |
446 | 10. Automatic Licensing of Downstream Recipients.
447 |
448 | Each time you convey a covered work, the recipient automatically
449 | receives a license from the original licensors, to run, modify and
450 | propagate that work, subject to this License. You are not responsible
451 | for enforcing compliance by third parties with this License.
452 |
453 | An "entity transaction" is a transaction transferring control of an
454 | organization, or substantially all assets of one, or subdividing an
455 | organization, or merging organizations. If propagation of a covered
456 | work results from an entity transaction, each party to that
457 | transaction who receives a copy of the work also receives whatever
458 | licenses to the work the party's predecessor in interest had or could
459 | give under the previous paragraph, plus a right to possession of the
460 | Corresponding Source of the work from the predecessor in interest, if
461 | the predecessor has it or can get it with reasonable efforts.
462 |
463 | You may not impose any further restrictions on the exercise of the
464 | rights granted or affirmed under this License. For example, you may
465 | not impose a license fee, royalty, or other charge for exercise of
466 | rights granted under this License, and you may not initiate litigation
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that
468 | any patent claim is infringed by making, using, selling, offering for
469 | sale, or importing the Program or any portion of it.
470 |
471 | 11. Patents.
472 |
473 | A "contributor" is a copyright holder who authorizes use under this
474 | License of the Program or a work on which the Program is based. The
475 | work thus licensed is called the contributor's "contributor version".
476 |
477 | A contributor's "essential patent claims" are all patent claims
478 | owned or controlled by the contributor, whether already acquired or
479 | hereafter acquired, that would be infringed by some manner, permitted
480 | by this License, of making, using, or selling its contributor version,
481 | but do not include claims that would be infringed only as a
482 | consequence of further modification of the contributor version. For
483 | purposes of this definition, "control" includes the right to grant
484 | patent sublicenses in a manner consistent with the requirements of
485 | this License.
486 |
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free
488 | patent license under the contributor's essential patent claims, to
489 | make, use, sell, offer for sale, import and otherwise run, modify and
490 | propagate the contents of its contributor version.
491 |
492 | In the following three paragraphs, a "patent license" is any express
493 | agreement or commitment, however denominated, not to enforce a patent
494 | (such as an express permission to practice a patent or covenant not to
495 | sue for patent infringement). To "grant" such a patent license to a
496 | party means to make such an agreement or commitment not to enforce a
497 | patent against the party.
498 |
499 | If you convey a covered work, knowingly relying on a patent license,
500 | and the Corresponding Source of the work is not available for anyone
501 | to copy, free of charge and under the terms of this License, through a
502 | publicly available network server or other readily accessible means,
503 | then you must either (1) cause the Corresponding Source to be so
504 | available, or (2) arrange to deprive yourself of the benefit of the
505 | patent license for this particular work, or (3) arrange, in a manner
506 | consistent with the requirements of this License, to extend the patent
507 | license to downstream recipients. "Knowingly relying" means you have
508 | actual knowledge that, but for the patent license, your conveying the
509 | covered work in a country, or your recipient's use of the covered work
510 | in a country, would infringe one or more identifiable patents in that
511 | country that you have reason to believe are valid.
512 |
513 | If, pursuant to or in connection with a single transaction or
514 | arrangement, you convey, or propagate by procuring conveyance of, a
515 | covered work, and grant a patent license to some of the parties
516 | receiving the covered work authorizing them to use, propagate, modify
517 | or convey a specific copy of the covered work, then the patent license
518 | you grant is automatically extended to all recipients of the covered
519 | work and works based on it.
520 |
521 | A patent license is "discriminatory" if it does not include within
522 | the scope of its coverage, prohibits the exercise of, or is
523 | conditioned on the non-exercise of one or more of the rights that are
524 | specifically granted under this License. You may not convey a covered
525 | work if you are a party to an arrangement with a third party that is
526 | in the business of distributing software, under which you make payment
527 | to the third party based on the extent of your activity of conveying
528 | the work, and under which the third party grants, to any of the
529 | parties who would receive the covered work from you, a discriminatory
530 | patent license (a) in connection with copies of the covered work
531 | conveyed by you (or copies made from those copies), or (b) primarily
532 | for and in connection with specific products or compilations that
533 | contain the covered work, unless you entered into that arrangement,
534 | or that patent license was granted, prior to 28 March 2007.
535 |
536 | Nothing in this License shall be construed as excluding or limiting
537 | any implied license or other defenses to infringement that may
538 | otherwise be available to you under applicable patent law.
539 |
540 | 12. No Surrender of Others' Freedom.
541 |
542 | If conditions are imposed on you (whether by court order, agreement or
543 | otherwise) that contradict the conditions of this License, they do not
544 | excuse you from the conditions of this License. If you cannot convey a
545 | covered work so as to satisfy simultaneously your obligations under this
546 | License and any other pertinent obligations, then as a consequence you may
547 | not convey it at all. For example, if you agree to terms that obligate you
548 | to collect a royalty for further conveying from those to whom you convey
549 | the Program, the only way you could satisfy both those terms and this
550 | License would be to refrain entirely from conveying the Program.
551 |
552 | 13. Use with the GNU Affero General Public License.
553 |
554 | Notwithstanding any other provision of this License, you have
555 | permission to link or combine any covered work with a work licensed
556 | under version 3 of the GNU Affero General Public License into a single
557 | combined work, and to convey the resulting work. The terms of this
558 | License will continue to apply to the part which is the covered work,
559 | but the special requirements of the GNU Affero General Public License,
560 | section 13, concerning interaction through a network will apply to the
561 | combination as such.
562 |
563 | 14. Revised Versions of this License.
564 |
565 | The Free Software Foundation may publish revised and/or new versions of
566 | the GNU General Public License from time to time. Such new versions will
567 | be similar in spirit to the present version, but may differ in detail to
568 | address new problems or concerns.
569 |
570 | Each version is given a distinguishing version number. If the
571 | Program specifies that a certain numbered version of the GNU General
572 | Public License "or any later version" applies to it, you have the
573 | option of following the terms and conditions either of that numbered
574 | version or of any later version published by the Free Software
575 | Foundation. If the Program does not specify a version number of the
576 | GNU General Public License, you may choose any version ever published
577 | by the Free Software Foundation.
578 |
579 | If the Program specifies that a proxy can decide which future
580 | versions of the GNU General Public License can be used, that proxy's
581 | public statement of acceptance of a version permanently authorizes you
582 | to choose that version for the Program.
583 |
584 | Later license versions may give you additional or different
585 | permissions. However, no additional obligations are imposed on any
586 | author or copyright holder as a result of your choosing to follow a
587 | later version.
588 |
589 | 15. Disclaimer of Warranty.
590 |
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599 |
600 | 16. Limitation of Liability.
601 |
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610 | SUCH DAMAGES.
611 |
612 | 17. Interpretation of Sections 15 and 16.
613 |
614 | If the disclaimer of warranty and limitation of liability provided
615 | above cannot be given local legal effect according to their terms,
616 | reviewing courts shall apply local law that most closely approximates
617 | an absolute waiver of all civil liability in connection with the
618 | Program, unless a warranty or assumption of liability accompanies a
619 | copy of the Program in return for a fee.
620 |
621 | END OF TERMS AND CONDITIONS
622 |
623 | How to Apply These Terms to Your New Programs
624 |
625 | If you develop a new program, and you want it to be of the greatest
626 | possible use to the public, the best way to achieve this is to make it
627 | free software which everyone can redistribute and change under these terms.
628 |
629 | To do so, attach the following notices to the program. It is safest
630 | to attach them to the start of each source file to most effectively
631 | state the exclusion of warranty; and each file should have at least
632 | the "copyright" line and a pointer to where the full notice is found.
633 |
634 |
635 | Copyright (C)
636 |
637 | This program is free software: you can redistribute it and/or modify
638 | it under the terms of the GNU General Public License as published by
639 | the Free Software Foundation, either version 3 of the License, or
640 | (at your option) any later version.
641 |
642 | This program is distributed in the hope that it will be useful,
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645 | GNU General Public License for more details.
646 |
647 | You should have received a copy of the GNU General Public License
648 | along with this program. If not, see .
649 |
650 | Also add information on how to contact you by electronic and paper mail.
651 |
652 | If the program does terminal interaction, make it output a short
653 | notice like this when it starts in an interactive mode:
654 |
655 | Copyright (C)
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657 | This is free software, and you are welcome to redistribute it
658 | under certain conditions; type `show c' for details.
659 |
660 | The hypothetical commands `show w' and `show c' should show the appropriate
661 | parts of the General Public License. Of course, your program's commands
662 | might be different; for a GUI interface, you would use an "about box".
663 |
664 | You should also get your employer (if you work as a programmer) or school,
665 | if any, to sign a "copyright disclaimer" for the program, if necessary.
666 | For more information on this, and how to apply and follow the GNU GPL, see
667 | .
668 |
669 | The GNU General Public License does not permit incorporating your program
670 | into proprietary programs. If your program is a subroutine library, you
671 | may consider it more useful to permit linking proprietary applications with
672 | the library. If this is what you want to do, use the GNU Lesser General
673 | Public License instead of this License. But first, please read
674 | .
675 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | dependencies:
4 | qrcode:
5 | specifier: ^1.5.3
6 | version: 1.5.3
7 | svelte-gestures:
8 | specifier: ^1.4.1
9 | version: 1.4.1
10 |
11 | devDependencies:
12 | '@sveltejs/adapter-auto':
13 | specifier: ^2.0.0
14 | version: 2.0.1(@sveltejs/kit@1.15.9)
15 | '@sveltejs/adapter-static':
16 | specifier: ^2.0.2
17 | version: 2.0.2(@sveltejs/kit@1.15.9)
18 | '@sveltejs/kit':
19 | specifier: ^1.5.0
20 | version: 1.15.9(svelte@3.58.0)(vite@4.3.3)
21 | '@types/node':
22 | specifier: ^20.1.0
23 | version: 20.1.0
24 | '@types/qrcode':
25 | specifier: ^1.5.0
26 | version: 1.5.0
27 | '@typescript-eslint/eslint-plugin':
28 | specifier: ^5.45.0
29 | version: 5.59.1(@typescript-eslint/parser@5.59.1)(eslint@8.39.0)(typescript@5.0.4)
30 | '@typescript-eslint/parser':
31 | specifier: ^5.45.0
32 | version: 5.59.1(eslint@8.39.0)(typescript@5.0.4)
33 | eslint:
34 | specifier: ^8.28.0
35 | version: 8.39.0
36 | eslint-config-prettier:
37 | specifier: ^8.5.0
38 | version: 8.8.0(eslint@8.39.0)
39 | eslint-plugin-svelte:
40 | specifier: ^2.26.0
41 | version: 2.27.2(eslint@8.39.0)(svelte@3.58.0)
42 | prettier:
43 | specifier: ^2.8.0
44 | version: 2.8.8
45 | prettier-plugin-svelte:
46 | specifier: ^2.8.1
47 | version: 2.10.0(prettier@2.8.8)(svelte@3.58.0)
48 | svelte:
49 | specifier: ^3.54.0
50 | version: 3.58.0
51 | svelte-check:
52 | specifier: ^3.0.1
53 | version: 3.2.0(postcss@8.4.23)(svelte@3.58.0)
54 | tslib:
55 | specifier: ^2.4.1
56 | version: 2.5.0
57 | typescript:
58 | specifier: ^5.0.0
59 | version: 5.0.4
60 | vite:
61 | specifier: ^4.3.0
62 | version: 4.3.3(@types/node@20.1.0)
63 | vitest:
64 | specifier: ^0.25.3
65 | version: 0.25.8
66 |
67 | packages:
68 |
69 | /@esbuild/android-arm64@0.17.18:
70 | resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==}
71 | engines: {node: '>=12'}
72 | cpu: [arm64]
73 | os: [android]
74 | requiresBuild: true
75 | dev: true
76 | optional: true
77 |
78 | /@esbuild/android-arm@0.17.18:
79 | resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==}
80 | engines: {node: '>=12'}
81 | cpu: [arm]
82 | os: [android]
83 | requiresBuild: true
84 | dev: true
85 | optional: true
86 |
87 | /@esbuild/android-x64@0.17.18:
88 | resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==}
89 | engines: {node: '>=12'}
90 | cpu: [x64]
91 | os: [android]
92 | requiresBuild: true
93 | dev: true
94 | optional: true
95 |
96 | /@esbuild/darwin-arm64@0.17.18:
97 | resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==}
98 | engines: {node: '>=12'}
99 | cpu: [arm64]
100 | os: [darwin]
101 | requiresBuild: true
102 | dev: true
103 | optional: true
104 |
105 | /@esbuild/darwin-x64@0.17.18:
106 | resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==}
107 | engines: {node: '>=12'}
108 | cpu: [x64]
109 | os: [darwin]
110 | requiresBuild: true
111 | dev: true
112 | optional: true
113 |
114 | /@esbuild/freebsd-arm64@0.17.18:
115 | resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==}
116 | engines: {node: '>=12'}
117 | cpu: [arm64]
118 | os: [freebsd]
119 | requiresBuild: true
120 | dev: true
121 | optional: true
122 |
123 | /@esbuild/freebsd-x64@0.17.18:
124 | resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==}
125 | engines: {node: '>=12'}
126 | cpu: [x64]
127 | os: [freebsd]
128 | requiresBuild: true
129 | dev: true
130 | optional: true
131 |
132 | /@esbuild/linux-arm64@0.17.18:
133 | resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==}
134 | engines: {node: '>=12'}
135 | cpu: [arm64]
136 | os: [linux]
137 | requiresBuild: true
138 | dev: true
139 | optional: true
140 |
141 | /@esbuild/linux-arm@0.17.18:
142 | resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==}
143 | engines: {node: '>=12'}
144 | cpu: [arm]
145 | os: [linux]
146 | requiresBuild: true
147 | dev: true
148 | optional: true
149 |
150 | /@esbuild/linux-ia32@0.17.18:
151 | resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==}
152 | engines: {node: '>=12'}
153 | cpu: [ia32]
154 | os: [linux]
155 | requiresBuild: true
156 | dev: true
157 | optional: true
158 |
159 | /@esbuild/linux-loong64@0.17.18:
160 | resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==}
161 | engines: {node: '>=12'}
162 | cpu: [loong64]
163 | os: [linux]
164 | requiresBuild: true
165 | dev: true
166 | optional: true
167 |
168 | /@esbuild/linux-mips64el@0.17.18:
169 | resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==}
170 | engines: {node: '>=12'}
171 | cpu: [mips64el]
172 | os: [linux]
173 | requiresBuild: true
174 | dev: true
175 | optional: true
176 |
177 | /@esbuild/linux-ppc64@0.17.18:
178 | resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==}
179 | engines: {node: '>=12'}
180 | cpu: [ppc64]
181 | os: [linux]
182 | requiresBuild: true
183 | dev: true
184 | optional: true
185 |
186 | /@esbuild/linux-riscv64@0.17.18:
187 | resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==}
188 | engines: {node: '>=12'}
189 | cpu: [riscv64]
190 | os: [linux]
191 | requiresBuild: true
192 | dev: true
193 | optional: true
194 |
195 | /@esbuild/linux-s390x@0.17.18:
196 | resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==}
197 | engines: {node: '>=12'}
198 | cpu: [s390x]
199 | os: [linux]
200 | requiresBuild: true
201 | dev: true
202 | optional: true
203 |
204 | /@esbuild/linux-x64@0.17.18:
205 | resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==}
206 | engines: {node: '>=12'}
207 | cpu: [x64]
208 | os: [linux]
209 | requiresBuild: true
210 | dev: true
211 | optional: true
212 |
213 | /@esbuild/netbsd-x64@0.17.18:
214 | resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==}
215 | engines: {node: '>=12'}
216 | cpu: [x64]
217 | os: [netbsd]
218 | requiresBuild: true
219 | dev: true
220 | optional: true
221 |
222 | /@esbuild/openbsd-x64@0.17.18:
223 | resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==}
224 | engines: {node: '>=12'}
225 | cpu: [x64]
226 | os: [openbsd]
227 | requiresBuild: true
228 | dev: true
229 | optional: true
230 |
231 | /@esbuild/sunos-x64@0.17.18:
232 | resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==}
233 | engines: {node: '>=12'}
234 | cpu: [x64]
235 | os: [sunos]
236 | requiresBuild: true
237 | dev: true
238 | optional: true
239 |
240 | /@esbuild/win32-arm64@0.17.18:
241 | resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==}
242 | engines: {node: '>=12'}
243 | cpu: [arm64]
244 | os: [win32]
245 | requiresBuild: true
246 | dev: true
247 | optional: true
248 |
249 | /@esbuild/win32-ia32@0.17.18:
250 | resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==}
251 | engines: {node: '>=12'}
252 | cpu: [ia32]
253 | os: [win32]
254 | requiresBuild: true
255 | dev: true
256 | optional: true
257 |
258 | /@esbuild/win32-x64@0.17.18:
259 | resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==}
260 | engines: {node: '>=12'}
261 | cpu: [x64]
262 | os: [win32]
263 | requiresBuild: true
264 | dev: true
265 | optional: true
266 |
267 | /@eslint-community/eslint-utils@4.4.0(eslint@8.39.0):
268 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
269 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
270 | peerDependencies:
271 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
272 | dependencies:
273 | eslint: 8.39.0
274 | eslint-visitor-keys: 3.4.0
275 | dev: true
276 |
277 | /@eslint-community/regexpp@4.5.0:
278 | resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==}
279 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
280 | dev: true
281 |
282 | /@eslint/eslintrc@2.0.2:
283 | resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==}
284 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
285 | dependencies:
286 | ajv: 6.12.6
287 | debug: 4.3.4
288 | espree: 9.5.1
289 | globals: 13.20.0
290 | ignore: 5.2.4
291 | import-fresh: 3.3.0
292 | js-yaml: 4.1.0
293 | minimatch: 3.1.2
294 | strip-json-comments: 3.1.1
295 | transitivePeerDependencies:
296 | - supports-color
297 | dev: true
298 |
299 | /@eslint/js@8.39.0:
300 | resolution: {integrity: sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==}
301 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
302 | dev: true
303 |
304 | /@humanwhocodes/config-array@0.11.8:
305 | resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
306 | engines: {node: '>=10.10.0'}
307 | dependencies:
308 | '@humanwhocodes/object-schema': 1.2.1
309 | debug: 4.3.4
310 | minimatch: 3.1.2
311 | transitivePeerDependencies:
312 | - supports-color
313 | dev: true
314 |
315 | /@humanwhocodes/module-importer@1.0.1:
316 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
317 | engines: {node: '>=12.22'}
318 | dev: true
319 |
320 | /@humanwhocodes/object-schema@1.2.1:
321 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
322 | dev: true
323 |
324 | /@jridgewell/resolve-uri@3.1.0:
325 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
326 | engines: {node: '>=6.0.0'}
327 | dev: true
328 |
329 | /@jridgewell/sourcemap-codec@1.4.14:
330 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
331 | dev: true
332 |
333 | /@jridgewell/sourcemap-codec@1.4.15:
334 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
335 | dev: true
336 |
337 | /@jridgewell/trace-mapping@0.3.18:
338 | resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==}
339 | dependencies:
340 | '@jridgewell/resolve-uri': 3.1.0
341 | '@jridgewell/sourcemap-codec': 1.4.14
342 | dev: true
343 |
344 | /@nodelib/fs.scandir@2.1.5:
345 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
346 | engines: {node: '>= 8'}
347 | dependencies:
348 | '@nodelib/fs.stat': 2.0.5
349 | run-parallel: 1.2.0
350 | dev: true
351 |
352 | /@nodelib/fs.stat@2.0.5:
353 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
354 | engines: {node: '>= 8'}
355 | dev: true
356 |
357 | /@nodelib/fs.walk@1.2.8:
358 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
359 | engines: {node: '>= 8'}
360 | dependencies:
361 | '@nodelib/fs.scandir': 2.1.5
362 | fastq: 1.15.0
363 | dev: true
364 |
365 | /@polka/url@1.0.0-next.21:
366 | resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
367 | dev: true
368 |
369 | /@sveltejs/adapter-auto@2.0.1(@sveltejs/kit@1.15.9):
370 | resolution: {integrity: sha512-anxxYMcQy7HWSKxN4YNaVcgNzCHtNFwygq72EA1Xv7c+5gSECOJ1ez1PYoLciPiFa7A3XBvMDQXUFJ2eqLDtAA==}
371 | peerDependencies:
372 | '@sveltejs/kit': ^1.0.0
373 | dependencies:
374 | '@sveltejs/kit': 1.15.9(svelte@3.58.0)(vite@4.3.3)
375 | import-meta-resolve: 3.0.0
376 | dev: true
377 |
378 | /@sveltejs/adapter-static@2.0.2(@sveltejs/kit@1.15.9):
379 | resolution: {integrity: sha512-9wYtf6s6ew7DHUHMrt55YpD1FgV7oWql2IGsW5BXquLxqcY9vjrqCFo0TzzDpo+ZPZkW/v77k0eOP6tsAb8HmQ==}
380 | peerDependencies:
381 | '@sveltejs/kit': ^1.5.0
382 | dependencies:
383 | '@sveltejs/kit': 1.15.9(svelte@3.58.0)(vite@4.3.3)
384 | dev: true
385 |
386 | /@sveltejs/kit@1.15.9(svelte@3.58.0)(vite@4.3.3):
387 | resolution: {integrity: sha512-Og+4WlguPVPS0PmAHefp4KxvTVZfyDN09aORVXIdKSzqzodSJiLs7Fhi/Q0z0YjmcoNLWF24tI0a6mTusL6Yfg==}
388 | engines: {node: ^16.14 || >=18}
389 | hasBin: true
390 | requiresBuild: true
391 | peerDependencies:
392 | svelte: ^3.54.0
393 | vite: ^4.0.0
394 | dependencies:
395 | '@sveltejs/vite-plugin-svelte': 2.1.1(svelte@3.58.0)(vite@4.3.3)
396 | '@types/cookie': 0.5.1
397 | cookie: 0.5.0
398 | devalue: 4.3.0
399 | esm-env: 1.0.0
400 | kleur: 4.1.5
401 | magic-string: 0.30.0
402 | mime: 3.0.0
403 | sade: 1.8.1
404 | set-cookie-parser: 2.6.0
405 | sirv: 2.0.3
406 | svelte: 3.58.0
407 | tiny-glob: 0.2.9
408 | undici: 5.22.0
409 | vite: 4.3.3(@types/node@20.1.0)
410 | transitivePeerDependencies:
411 | - supports-color
412 | dev: true
413 |
414 | /@sveltejs/vite-plugin-svelte@2.1.1(svelte@3.58.0)(vite@4.3.3):
415 | resolution: {integrity: sha512-7YeBDt4us0FiIMNsVXxyaP4Hwyn2/v9x3oqStkHU3ZdIc5O22pGwUwH33wUqYo+7Itdmo8zxJ45Qvfm3H7UUjQ==}
416 | engines: {node: ^14.18.0 || >= 16}
417 | peerDependencies:
418 | svelte: ^3.54.0
419 | vite: ^4.0.0
420 | dependencies:
421 | debug: 4.3.4
422 | deepmerge: 4.3.1
423 | kleur: 4.1.5
424 | magic-string: 0.30.0
425 | svelte: 3.58.0
426 | svelte-hmr: 0.15.1(svelte@3.58.0)
427 | vite: 4.3.3(@types/node@20.1.0)
428 | vitefu: 0.2.4(vite@4.3.3)
429 | transitivePeerDependencies:
430 | - supports-color
431 | dev: true
432 |
433 | /@types/chai-subset@1.3.3:
434 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==}
435 | dependencies:
436 | '@types/chai': 4.3.5
437 | dev: true
438 |
439 | /@types/chai@4.3.5:
440 | resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==}
441 | dev: true
442 |
443 | /@types/cookie@0.5.1:
444 | resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==}
445 | dev: true
446 |
447 | /@types/json-schema@7.0.11:
448 | resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
449 | dev: true
450 |
451 | /@types/node@20.1.0:
452 | resolution: {integrity: sha512-O+z53uwx64xY7D6roOi4+jApDGFg0qn6WHcxe5QeqjMaTezBO/mxdfFXIVAVVyNWKx84OmPB3L8kbVYOTeN34A==}
453 | dev: true
454 |
455 | /@types/pug@2.0.6:
456 | resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
457 | dev: true
458 |
459 | /@types/qrcode@1.5.0:
460 | resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==}
461 | dependencies:
462 | '@types/node': 20.1.0
463 | dev: true
464 |
465 | /@types/semver@7.3.13:
466 | resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
467 | dev: true
468 |
469 | /@typescript-eslint/eslint-plugin@5.59.1(@typescript-eslint/parser@5.59.1)(eslint@8.39.0)(typescript@5.0.4):
470 | resolution: {integrity: sha512-AVi0uazY5quFB9hlp2Xv+ogpfpk77xzsgsIEWyVS7uK/c7MZ5tw7ZPbapa0SbfkqE0fsAMkz5UwtgMLVk2BQAg==}
471 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
472 | peerDependencies:
473 | '@typescript-eslint/parser': ^5.0.0
474 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
475 | typescript: '*'
476 | peerDependenciesMeta:
477 | typescript:
478 | optional: true
479 | dependencies:
480 | '@eslint-community/regexpp': 4.5.0
481 | '@typescript-eslint/parser': 5.59.1(eslint@8.39.0)(typescript@5.0.4)
482 | '@typescript-eslint/scope-manager': 5.59.1
483 | '@typescript-eslint/type-utils': 5.59.1(eslint@8.39.0)(typescript@5.0.4)
484 | '@typescript-eslint/utils': 5.59.1(eslint@8.39.0)(typescript@5.0.4)
485 | debug: 4.3.4
486 | eslint: 8.39.0
487 | grapheme-splitter: 1.0.4
488 | ignore: 5.2.4
489 | natural-compare-lite: 1.4.0
490 | semver: 7.5.0
491 | tsutils: 3.21.0(typescript@5.0.4)
492 | typescript: 5.0.4
493 | transitivePeerDependencies:
494 | - supports-color
495 | dev: true
496 |
497 | /@typescript-eslint/parser@5.59.1(eslint@8.39.0)(typescript@5.0.4):
498 | resolution: {integrity: sha512-nzjFAN8WEu6yPRDizIFyzAfgK7nybPodMNFGNH0M9tei2gYnYszRDqVA0xlnRjkl7Hkx2vYrEdb6fP2a21cG1g==}
499 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
500 | peerDependencies:
501 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
502 | typescript: '*'
503 | peerDependenciesMeta:
504 | typescript:
505 | optional: true
506 | dependencies:
507 | '@typescript-eslint/scope-manager': 5.59.1
508 | '@typescript-eslint/types': 5.59.1
509 | '@typescript-eslint/typescript-estree': 5.59.1(typescript@5.0.4)
510 | debug: 4.3.4
511 | eslint: 8.39.0
512 | typescript: 5.0.4
513 | transitivePeerDependencies:
514 | - supports-color
515 | dev: true
516 |
517 | /@typescript-eslint/scope-manager@5.59.1:
518 | resolution: {integrity: sha512-mau0waO5frJctPuAzcxiNWqJR5Z8V0190FTSqRw1Q4Euop6+zTwHAf8YIXNwDOT29tyUDrQ65jSg9aTU/H0omA==}
519 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
520 | dependencies:
521 | '@typescript-eslint/types': 5.59.1
522 | '@typescript-eslint/visitor-keys': 5.59.1
523 | dev: true
524 |
525 | /@typescript-eslint/type-utils@5.59.1(eslint@8.39.0)(typescript@5.0.4):
526 | resolution: {integrity: sha512-ZMWQ+Oh82jWqWzvM3xU+9y5U7MEMVv6GLioM3R5NJk6uvP47kZ7YvlgSHJ7ERD6bOY7Q4uxWm25c76HKEwIjZw==}
527 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
528 | peerDependencies:
529 | eslint: '*'
530 | typescript: '*'
531 | peerDependenciesMeta:
532 | typescript:
533 | optional: true
534 | dependencies:
535 | '@typescript-eslint/typescript-estree': 5.59.1(typescript@5.0.4)
536 | '@typescript-eslint/utils': 5.59.1(eslint@8.39.0)(typescript@5.0.4)
537 | debug: 4.3.4
538 | eslint: 8.39.0
539 | tsutils: 3.21.0(typescript@5.0.4)
540 | typescript: 5.0.4
541 | transitivePeerDependencies:
542 | - supports-color
543 | dev: true
544 |
545 | /@typescript-eslint/types@5.59.1:
546 | resolution: {integrity: sha512-dg0ICB+RZwHlysIy/Dh1SP+gnXNzwd/KS0JprD3Lmgmdq+dJAJnUPe1gNG34p0U19HvRlGX733d/KqscrGC1Pg==}
547 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
548 | dev: true
549 |
550 | /@typescript-eslint/typescript-estree@5.59.1(typescript@5.0.4):
551 | resolution: {integrity: sha512-lYLBBOCsFltFy7XVqzX0Ju+Lh3WPIAWxYpmH/Q7ZoqzbscLiCW00LeYCdsUnnfnj29/s1WovXKh2gwCoinHNGA==}
552 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
553 | peerDependencies:
554 | typescript: '*'
555 | peerDependenciesMeta:
556 | typescript:
557 | optional: true
558 | dependencies:
559 | '@typescript-eslint/types': 5.59.1
560 | '@typescript-eslint/visitor-keys': 5.59.1
561 | debug: 4.3.4
562 | globby: 11.1.0
563 | is-glob: 4.0.3
564 | semver: 7.5.0
565 | tsutils: 3.21.0(typescript@5.0.4)
566 | typescript: 5.0.4
567 | transitivePeerDependencies:
568 | - supports-color
569 | dev: true
570 |
571 | /@typescript-eslint/utils@5.59.1(eslint@8.39.0)(typescript@5.0.4):
572 | resolution: {integrity: sha512-MkTe7FE+K1/GxZkP5gRj3rCztg45bEhsd8HYjczBuYm+qFHP5vtZmjx3B0yUCDotceQ4sHgTyz60Ycl225njmA==}
573 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
574 | peerDependencies:
575 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
576 | dependencies:
577 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0)
578 | '@types/json-schema': 7.0.11
579 | '@types/semver': 7.3.13
580 | '@typescript-eslint/scope-manager': 5.59.1
581 | '@typescript-eslint/types': 5.59.1
582 | '@typescript-eslint/typescript-estree': 5.59.1(typescript@5.0.4)
583 | eslint: 8.39.0
584 | eslint-scope: 5.1.1
585 | semver: 7.5.0
586 | transitivePeerDependencies:
587 | - supports-color
588 | - typescript
589 | dev: true
590 |
591 | /@typescript-eslint/visitor-keys@5.59.1:
592 | resolution: {integrity: sha512-6waEYwBTCWryx0VJmP7JaM4FpipLsFl9CvYf2foAE8Qh/Y0s+bxWysciwOs0LTBED4JCaNxTZ5rGadB14M6dwA==}
593 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
594 | dependencies:
595 | '@typescript-eslint/types': 5.59.1
596 | eslint-visitor-keys: 3.4.0
597 | dev: true
598 |
599 | /acorn-jsx@5.3.2(acorn@8.8.2):
600 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
601 | peerDependencies:
602 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
603 | dependencies:
604 | acorn: 8.8.2
605 | dev: true
606 |
607 | /acorn-walk@8.2.0:
608 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
609 | engines: {node: '>=0.4.0'}
610 | dev: true
611 |
612 | /acorn@8.8.2:
613 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
614 | engines: {node: '>=0.4.0'}
615 | hasBin: true
616 | dev: true
617 |
618 | /ajv@6.12.6:
619 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
620 | dependencies:
621 | fast-deep-equal: 3.1.3
622 | fast-json-stable-stringify: 2.1.0
623 | json-schema-traverse: 0.4.1
624 | uri-js: 4.4.1
625 | dev: true
626 |
627 | /ansi-regex@5.0.1:
628 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
629 | engines: {node: '>=8'}
630 |
631 | /ansi-styles@4.3.0:
632 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
633 | engines: {node: '>=8'}
634 | dependencies:
635 | color-convert: 2.0.1
636 |
637 | /anymatch@3.1.3:
638 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
639 | engines: {node: '>= 8'}
640 | dependencies:
641 | normalize-path: 3.0.0
642 | picomatch: 2.3.1
643 | dev: true
644 |
645 | /argparse@2.0.1:
646 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
647 | dev: true
648 |
649 | /array-union@2.1.0:
650 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
651 | engines: {node: '>=8'}
652 | dev: true
653 |
654 | /assertion-error@1.1.0:
655 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
656 | dev: true
657 |
658 | /balanced-match@1.0.2:
659 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
660 | dev: true
661 |
662 | /binary-extensions@2.2.0:
663 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
664 | engines: {node: '>=8'}
665 | dev: true
666 |
667 | /brace-expansion@1.1.11:
668 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
669 | dependencies:
670 | balanced-match: 1.0.2
671 | concat-map: 0.0.1
672 | dev: true
673 |
674 | /braces@3.0.2:
675 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
676 | engines: {node: '>=8'}
677 | dependencies:
678 | fill-range: 7.0.1
679 | dev: true
680 |
681 | /buffer-crc32@0.2.13:
682 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
683 | dev: true
684 |
685 | /busboy@1.6.0:
686 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
687 | engines: {node: '>=10.16.0'}
688 | dependencies:
689 | streamsearch: 1.1.0
690 | dev: true
691 |
692 | /callsites@3.1.0:
693 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
694 | engines: {node: '>=6'}
695 | dev: true
696 |
697 | /camelcase@5.3.1:
698 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
699 | engines: {node: '>=6'}
700 | dev: false
701 |
702 | /chai@4.3.7:
703 | resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==}
704 | engines: {node: '>=4'}
705 | dependencies:
706 | assertion-error: 1.1.0
707 | check-error: 1.0.2
708 | deep-eql: 4.1.3
709 | get-func-name: 2.0.0
710 | loupe: 2.3.6
711 | pathval: 1.1.1
712 | type-detect: 4.0.8
713 | dev: true
714 |
715 | /chalk@4.1.2:
716 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
717 | engines: {node: '>=10'}
718 | dependencies:
719 | ansi-styles: 4.3.0
720 | supports-color: 7.2.0
721 | dev: true
722 |
723 | /check-error@1.0.2:
724 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
725 | dev: true
726 |
727 | /chokidar@3.5.3:
728 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
729 | engines: {node: '>= 8.10.0'}
730 | dependencies:
731 | anymatch: 3.1.3
732 | braces: 3.0.2
733 | glob-parent: 5.1.2
734 | is-binary-path: 2.1.0
735 | is-glob: 4.0.3
736 | normalize-path: 3.0.0
737 | readdirp: 3.6.0
738 | optionalDependencies:
739 | fsevents: 2.3.2
740 | dev: true
741 |
742 | /cliui@6.0.0:
743 | resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
744 | dependencies:
745 | string-width: 4.2.3
746 | strip-ansi: 6.0.1
747 | wrap-ansi: 6.2.0
748 | dev: false
749 |
750 | /color-convert@2.0.1:
751 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
752 | engines: {node: '>=7.0.0'}
753 | dependencies:
754 | color-name: 1.1.4
755 |
756 | /color-name@1.1.4:
757 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
758 |
759 | /concat-map@0.0.1:
760 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
761 | dev: true
762 |
763 | /cookie@0.5.0:
764 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
765 | engines: {node: '>= 0.6'}
766 | dev: true
767 |
768 | /cross-spawn@7.0.3:
769 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
770 | engines: {node: '>= 8'}
771 | dependencies:
772 | path-key: 3.1.1
773 | shebang-command: 2.0.0
774 | which: 2.0.2
775 | dev: true
776 |
777 | /debug@4.3.4:
778 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
779 | engines: {node: '>=6.0'}
780 | peerDependencies:
781 | supports-color: '*'
782 | peerDependenciesMeta:
783 | supports-color:
784 | optional: true
785 | dependencies:
786 | ms: 2.1.2
787 | dev: true
788 |
789 | /decamelize@1.2.0:
790 | resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
791 | engines: {node: '>=0.10.0'}
792 | dev: false
793 |
794 | /deep-eql@4.1.3:
795 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
796 | engines: {node: '>=6'}
797 | dependencies:
798 | type-detect: 4.0.8
799 | dev: true
800 |
801 | /deep-is@0.1.4:
802 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
803 | dev: true
804 |
805 | /deepmerge@4.3.1:
806 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
807 | engines: {node: '>=0.10.0'}
808 | dev: true
809 |
810 | /detect-indent@6.1.0:
811 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
812 | engines: {node: '>=8'}
813 | dev: true
814 |
815 | /devalue@4.3.0:
816 | resolution: {integrity: sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA==}
817 | dev: true
818 |
819 | /dijkstrajs@1.0.3:
820 | resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==}
821 | dev: false
822 |
823 | /dir-glob@3.0.1:
824 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
825 | engines: {node: '>=8'}
826 | dependencies:
827 | path-type: 4.0.0
828 | dev: true
829 |
830 | /doctrine@3.0.0:
831 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
832 | engines: {node: '>=6.0.0'}
833 | dependencies:
834 | esutils: 2.0.3
835 | dev: true
836 |
837 | /emoji-regex@8.0.0:
838 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
839 | dev: false
840 |
841 | /encode-utf8@1.0.3:
842 | resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==}
843 | dev: false
844 |
845 | /es6-promise@3.3.1:
846 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
847 | dev: true
848 |
849 | /esbuild@0.17.18:
850 | resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==}
851 | engines: {node: '>=12'}
852 | hasBin: true
853 | requiresBuild: true
854 | optionalDependencies:
855 | '@esbuild/android-arm': 0.17.18
856 | '@esbuild/android-arm64': 0.17.18
857 | '@esbuild/android-x64': 0.17.18
858 | '@esbuild/darwin-arm64': 0.17.18
859 | '@esbuild/darwin-x64': 0.17.18
860 | '@esbuild/freebsd-arm64': 0.17.18
861 | '@esbuild/freebsd-x64': 0.17.18
862 | '@esbuild/linux-arm': 0.17.18
863 | '@esbuild/linux-arm64': 0.17.18
864 | '@esbuild/linux-ia32': 0.17.18
865 | '@esbuild/linux-loong64': 0.17.18
866 | '@esbuild/linux-mips64el': 0.17.18
867 | '@esbuild/linux-ppc64': 0.17.18
868 | '@esbuild/linux-riscv64': 0.17.18
869 | '@esbuild/linux-s390x': 0.17.18
870 | '@esbuild/linux-x64': 0.17.18
871 | '@esbuild/netbsd-x64': 0.17.18
872 | '@esbuild/openbsd-x64': 0.17.18
873 | '@esbuild/sunos-x64': 0.17.18
874 | '@esbuild/win32-arm64': 0.17.18
875 | '@esbuild/win32-ia32': 0.17.18
876 | '@esbuild/win32-x64': 0.17.18
877 | dev: true
878 |
879 | /escape-string-regexp@4.0.0:
880 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
881 | engines: {node: '>=10'}
882 | dev: true
883 |
884 | /eslint-config-prettier@8.8.0(eslint@8.39.0):
885 | resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==}
886 | hasBin: true
887 | peerDependencies:
888 | eslint: '>=7.0.0'
889 | dependencies:
890 | eslint: 8.39.0
891 | dev: true
892 |
893 | /eslint-plugin-svelte@2.27.2(eslint@8.39.0)(svelte@3.58.0):
894 | resolution: {integrity: sha512-1tIl65TMF0MtY26+O/1Y5S5HEFc0vRzzoX3m9FHI6VuiruqFU9PBr8WzoqdaSPlcL/q7xPUzQYl4Fzg/3GBpcg==}
895 | engines: {node: ^14.17.0 || >=16.0.0}
896 | peerDependencies:
897 | eslint: ^7.0.0 || ^8.0.0-0
898 | svelte: ^3.37.0
899 | peerDependenciesMeta:
900 | svelte:
901 | optional: true
902 | dependencies:
903 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0)
904 | '@jridgewell/sourcemap-codec': 1.4.15
905 | debug: 4.3.4
906 | eslint: 8.39.0
907 | esutils: 2.0.3
908 | known-css-properties: 0.27.0
909 | postcss: 8.4.23
910 | postcss-load-config: 3.1.4(postcss@8.4.23)
911 | postcss-safe-parser: 6.0.0(postcss@8.4.23)
912 | svelte: 3.58.0
913 | svelte-eslint-parser: 0.27.0(svelte@3.58.0)
914 | transitivePeerDependencies:
915 | - supports-color
916 | - ts-node
917 | dev: true
918 |
919 | /eslint-scope@5.1.1:
920 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
921 | engines: {node: '>=8.0.0'}
922 | dependencies:
923 | esrecurse: 4.3.0
924 | estraverse: 4.3.0
925 | dev: true
926 |
927 | /eslint-scope@7.2.0:
928 | resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==}
929 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
930 | dependencies:
931 | esrecurse: 4.3.0
932 | estraverse: 5.3.0
933 | dev: true
934 |
935 | /eslint-visitor-keys@3.4.0:
936 | resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==}
937 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
938 | dev: true
939 |
940 | /eslint@8.39.0:
941 | resolution: {integrity: sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==}
942 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
943 | hasBin: true
944 | dependencies:
945 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0)
946 | '@eslint-community/regexpp': 4.5.0
947 | '@eslint/eslintrc': 2.0.2
948 | '@eslint/js': 8.39.0
949 | '@humanwhocodes/config-array': 0.11.8
950 | '@humanwhocodes/module-importer': 1.0.1
951 | '@nodelib/fs.walk': 1.2.8
952 | ajv: 6.12.6
953 | chalk: 4.1.2
954 | cross-spawn: 7.0.3
955 | debug: 4.3.4
956 | doctrine: 3.0.0
957 | escape-string-regexp: 4.0.0
958 | eslint-scope: 7.2.0
959 | eslint-visitor-keys: 3.4.0
960 | espree: 9.5.1
961 | esquery: 1.5.0
962 | esutils: 2.0.3
963 | fast-deep-equal: 3.1.3
964 | file-entry-cache: 6.0.1
965 | find-up: 5.0.0
966 | glob-parent: 6.0.2
967 | globals: 13.20.0
968 | grapheme-splitter: 1.0.4
969 | ignore: 5.2.4
970 | import-fresh: 3.3.0
971 | imurmurhash: 0.1.4
972 | is-glob: 4.0.3
973 | is-path-inside: 3.0.3
974 | js-sdsl: 4.4.0
975 | js-yaml: 4.1.0
976 | json-stable-stringify-without-jsonify: 1.0.1
977 | levn: 0.4.1
978 | lodash.merge: 4.6.2
979 | minimatch: 3.1.2
980 | natural-compare: 1.4.0
981 | optionator: 0.9.1
982 | strip-ansi: 6.0.1
983 | strip-json-comments: 3.1.1
984 | text-table: 0.2.0
985 | transitivePeerDependencies:
986 | - supports-color
987 | dev: true
988 |
989 | /esm-env@1.0.0:
990 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==}
991 | dev: true
992 |
993 | /espree@9.5.1:
994 | resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==}
995 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
996 | dependencies:
997 | acorn: 8.8.2
998 | acorn-jsx: 5.3.2(acorn@8.8.2)
999 | eslint-visitor-keys: 3.4.0
1000 | dev: true
1001 |
1002 | /esquery@1.5.0:
1003 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
1004 | engines: {node: '>=0.10'}
1005 | dependencies:
1006 | estraverse: 5.3.0
1007 | dev: true
1008 |
1009 | /esrecurse@4.3.0:
1010 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
1011 | engines: {node: '>=4.0'}
1012 | dependencies:
1013 | estraverse: 5.3.0
1014 | dev: true
1015 |
1016 | /estraverse@4.3.0:
1017 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
1018 | engines: {node: '>=4.0'}
1019 | dev: true
1020 |
1021 | /estraverse@5.3.0:
1022 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1023 | engines: {node: '>=4.0'}
1024 | dev: true
1025 |
1026 | /esutils@2.0.3:
1027 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1028 | engines: {node: '>=0.10.0'}
1029 | dev: true
1030 |
1031 | /fast-deep-equal@3.1.3:
1032 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1033 | dev: true
1034 |
1035 | /fast-glob@3.2.12:
1036 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
1037 | engines: {node: '>=8.6.0'}
1038 | dependencies:
1039 | '@nodelib/fs.stat': 2.0.5
1040 | '@nodelib/fs.walk': 1.2.8
1041 | glob-parent: 5.1.2
1042 | merge2: 1.4.1
1043 | micromatch: 4.0.5
1044 | dev: true
1045 |
1046 | /fast-json-stable-stringify@2.1.0:
1047 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1048 | dev: true
1049 |
1050 | /fast-levenshtein@2.0.6:
1051 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1052 | dev: true
1053 |
1054 | /fastq@1.15.0:
1055 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
1056 | dependencies:
1057 | reusify: 1.0.4
1058 | dev: true
1059 |
1060 | /file-entry-cache@6.0.1:
1061 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
1062 | engines: {node: ^10.12.0 || >=12.0.0}
1063 | dependencies:
1064 | flat-cache: 3.0.4
1065 | dev: true
1066 |
1067 | /fill-range@7.0.1:
1068 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1069 | engines: {node: '>=8'}
1070 | dependencies:
1071 | to-regex-range: 5.0.1
1072 | dev: true
1073 |
1074 | /find-up@4.1.0:
1075 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
1076 | engines: {node: '>=8'}
1077 | dependencies:
1078 | locate-path: 5.0.0
1079 | path-exists: 4.0.0
1080 | dev: false
1081 |
1082 | /find-up@5.0.0:
1083 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1084 | engines: {node: '>=10'}
1085 | dependencies:
1086 | locate-path: 6.0.0
1087 | path-exists: 4.0.0
1088 | dev: true
1089 |
1090 | /flat-cache@3.0.4:
1091 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
1092 | engines: {node: ^10.12.0 || >=12.0.0}
1093 | dependencies:
1094 | flatted: 3.2.7
1095 | rimraf: 3.0.2
1096 | dev: true
1097 |
1098 | /flatted@3.2.7:
1099 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
1100 | dev: true
1101 |
1102 | /fs.realpath@1.0.0:
1103 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1104 | dev: true
1105 |
1106 | /fsevents@2.3.2:
1107 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
1108 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1109 | os: [darwin]
1110 | requiresBuild: true
1111 | dev: true
1112 | optional: true
1113 |
1114 | /get-caller-file@2.0.5:
1115 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
1116 | engines: {node: 6.* || 8.* || >= 10.*}
1117 | dev: false
1118 |
1119 | /get-func-name@2.0.0:
1120 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
1121 | dev: true
1122 |
1123 | /glob-parent@5.1.2:
1124 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1125 | engines: {node: '>= 6'}
1126 | dependencies:
1127 | is-glob: 4.0.3
1128 | dev: true
1129 |
1130 | /glob-parent@6.0.2:
1131 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1132 | engines: {node: '>=10.13.0'}
1133 | dependencies:
1134 | is-glob: 4.0.3
1135 | dev: true
1136 |
1137 | /glob@7.2.3:
1138 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1139 | dependencies:
1140 | fs.realpath: 1.0.0
1141 | inflight: 1.0.6
1142 | inherits: 2.0.4
1143 | minimatch: 3.1.2
1144 | once: 1.4.0
1145 | path-is-absolute: 1.0.1
1146 | dev: true
1147 |
1148 | /globals@13.20.0:
1149 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
1150 | engines: {node: '>=8'}
1151 | dependencies:
1152 | type-fest: 0.20.2
1153 | dev: true
1154 |
1155 | /globalyzer@0.1.0:
1156 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
1157 | dev: true
1158 |
1159 | /globby@11.1.0:
1160 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1161 | engines: {node: '>=10'}
1162 | dependencies:
1163 | array-union: 2.1.0
1164 | dir-glob: 3.0.1
1165 | fast-glob: 3.2.12
1166 | ignore: 5.2.4
1167 | merge2: 1.4.1
1168 | slash: 3.0.0
1169 | dev: true
1170 |
1171 | /globrex@0.1.2:
1172 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
1173 | dev: true
1174 |
1175 | /graceful-fs@4.2.11:
1176 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1177 | dev: true
1178 |
1179 | /grapheme-splitter@1.0.4:
1180 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
1181 | dev: true
1182 |
1183 | /has-flag@4.0.0:
1184 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1185 | engines: {node: '>=8'}
1186 | dev: true
1187 |
1188 | /ignore@5.2.4:
1189 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
1190 | engines: {node: '>= 4'}
1191 | dev: true
1192 |
1193 | /import-fresh@3.3.0:
1194 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
1195 | engines: {node: '>=6'}
1196 | dependencies:
1197 | parent-module: 1.0.1
1198 | resolve-from: 4.0.0
1199 | dev: true
1200 |
1201 | /import-meta-resolve@3.0.0:
1202 | resolution: {integrity: sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==}
1203 | dev: true
1204 |
1205 | /imurmurhash@0.1.4:
1206 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1207 | engines: {node: '>=0.8.19'}
1208 | dev: true
1209 |
1210 | /inflight@1.0.6:
1211 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1212 | dependencies:
1213 | once: 1.4.0
1214 | wrappy: 1.0.2
1215 | dev: true
1216 |
1217 | /inherits@2.0.4:
1218 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1219 | dev: true
1220 |
1221 | /is-binary-path@2.1.0:
1222 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1223 | engines: {node: '>=8'}
1224 | dependencies:
1225 | binary-extensions: 2.2.0
1226 | dev: true
1227 |
1228 | /is-extglob@2.1.1:
1229 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1230 | engines: {node: '>=0.10.0'}
1231 | dev: true
1232 |
1233 | /is-fullwidth-code-point@3.0.0:
1234 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1235 | engines: {node: '>=8'}
1236 | dev: false
1237 |
1238 | /is-glob@4.0.3:
1239 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1240 | engines: {node: '>=0.10.0'}
1241 | dependencies:
1242 | is-extglob: 2.1.1
1243 | dev: true
1244 |
1245 | /is-number@7.0.0:
1246 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1247 | engines: {node: '>=0.12.0'}
1248 | dev: true
1249 |
1250 | /is-path-inside@3.0.3:
1251 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
1252 | engines: {node: '>=8'}
1253 | dev: true
1254 |
1255 | /isexe@2.0.0:
1256 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1257 | dev: true
1258 |
1259 | /js-sdsl@4.4.0:
1260 | resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==}
1261 | dev: true
1262 |
1263 | /js-yaml@4.1.0:
1264 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1265 | hasBin: true
1266 | dependencies:
1267 | argparse: 2.0.1
1268 | dev: true
1269 |
1270 | /json-schema-traverse@0.4.1:
1271 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1272 | dev: true
1273 |
1274 | /json-stable-stringify-without-jsonify@1.0.1:
1275 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1276 | dev: true
1277 |
1278 | /kleur@4.1.5:
1279 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
1280 | engines: {node: '>=6'}
1281 | dev: true
1282 |
1283 | /known-css-properties@0.27.0:
1284 | resolution: {integrity: sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==}
1285 | dev: true
1286 |
1287 | /levn@0.4.1:
1288 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1289 | engines: {node: '>= 0.8.0'}
1290 | dependencies:
1291 | prelude-ls: 1.2.1
1292 | type-check: 0.4.0
1293 | dev: true
1294 |
1295 | /lilconfig@2.1.0:
1296 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
1297 | engines: {node: '>=10'}
1298 | dev: true
1299 |
1300 | /local-pkg@0.4.3:
1301 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
1302 | engines: {node: '>=14'}
1303 | dev: true
1304 |
1305 | /locate-path@5.0.0:
1306 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
1307 | engines: {node: '>=8'}
1308 | dependencies:
1309 | p-locate: 4.1.0
1310 | dev: false
1311 |
1312 | /locate-path@6.0.0:
1313 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1314 | engines: {node: '>=10'}
1315 | dependencies:
1316 | p-locate: 5.0.0
1317 | dev: true
1318 |
1319 | /lodash.merge@4.6.2:
1320 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1321 | dev: true
1322 |
1323 | /loupe@2.3.6:
1324 | resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
1325 | dependencies:
1326 | get-func-name: 2.0.0
1327 | dev: true
1328 |
1329 | /lru-cache@6.0.0:
1330 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
1331 | engines: {node: '>=10'}
1332 | dependencies:
1333 | yallist: 4.0.0
1334 | dev: true
1335 |
1336 | /magic-string@0.27.0:
1337 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
1338 | engines: {node: '>=12'}
1339 | dependencies:
1340 | '@jridgewell/sourcemap-codec': 1.4.15
1341 | dev: true
1342 |
1343 | /magic-string@0.30.0:
1344 | resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==}
1345 | engines: {node: '>=12'}
1346 | dependencies:
1347 | '@jridgewell/sourcemap-codec': 1.4.15
1348 | dev: true
1349 |
1350 | /merge2@1.4.1:
1351 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1352 | engines: {node: '>= 8'}
1353 | dev: true
1354 |
1355 | /micromatch@4.0.5:
1356 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
1357 | engines: {node: '>=8.6'}
1358 | dependencies:
1359 | braces: 3.0.2
1360 | picomatch: 2.3.1
1361 | dev: true
1362 |
1363 | /mime@3.0.0:
1364 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
1365 | engines: {node: '>=10.0.0'}
1366 | hasBin: true
1367 | dev: true
1368 |
1369 | /min-indent@1.0.1:
1370 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
1371 | engines: {node: '>=4'}
1372 | dev: true
1373 |
1374 | /minimatch@3.1.2:
1375 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1376 | dependencies:
1377 | brace-expansion: 1.1.11
1378 | dev: true
1379 |
1380 | /minimist@1.2.8:
1381 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
1382 | dev: true
1383 |
1384 | /mkdirp@0.5.6:
1385 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
1386 | hasBin: true
1387 | dependencies:
1388 | minimist: 1.2.8
1389 | dev: true
1390 |
1391 | /mri@1.2.0:
1392 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1393 | engines: {node: '>=4'}
1394 | dev: true
1395 |
1396 | /mrmime@1.0.1:
1397 | resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
1398 | engines: {node: '>=10'}
1399 | dev: true
1400 |
1401 | /ms@2.1.2:
1402 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1403 | dev: true
1404 |
1405 | /nanoid@3.3.6:
1406 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
1407 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1408 | hasBin: true
1409 | dev: true
1410 |
1411 | /natural-compare-lite@1.4.0:
1412 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
1413 | dev: true
1414 |
1415 | /natural-compare@1.4.0:
1416 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1417 | dev: true
1418 |
1419 | /normalize-path@3.0.0:
1420 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1421 | engines: {node: '>=0.10.0'}
1422 | dev: true
1423 |
1424 | /once@1.4.0:
1425 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1426 | dependencies:
1427 | wrappy: 1.0.2
1428 | dev: true
1429 |
1430 | /optionator@0.9.1:
1431 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
1432 | engines: {node: '>= 0.8.0'}
1433 | dependencies:
1434 | deep-is: 0.1.4
1435 | fast-levenshtein: 2.0.6
1436 | levn: 0.4.1
1437 | prelude-ls: 1.2.1
1438 | type-check: 0.4.0
1439 | word-wrap: 1.2.3
1440 | dev: true
1441 |
1442 | /p-limit@2.3.0:
1443 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
1444 | engines: {node: '>=6'}
1445 | dependencies:
1446 | p-try: 2.2.0
1447 | dev: false
1448 |
1449 | /p-limit@3.1.0:
1450 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1451 | engines: {node: '>=10'}
1452 | dependencies:
1453 | yocto-queue: 0.1.0
1454 | dev: true
1455 |
1456 | /p-locate@4.1.0:
1457 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
1458 | engines: {node: '>=8'}
1459 | dependencies:
1460 | p-limit: 2.3.0
1461 | dev: false
1462 |
1463 | /p-locate@5.0.0:
1464 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1465 | engines: {node: '>=10'}
1466 | dependencies:
1467 | p-limit: 3.1.0
1468 | dev: true
1469 |
1470 | /p-try@2.2.0:
1471 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
1472 | engines: {node: '>=6'}
1473 | dev: false
1474 |
1475 | /parent-module@1.0.1:
1476 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1477 | engines: {node: '>=6'}
1478 | dependencies:
1479 | callsites: 3.1.0
1480 | dev: true
1481 |
1482 | /path-exists@4.0.0:
1483 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1484 | engines: {node: '>=8'}
1485 |
1486 | /path-is-absolute@1.0.1:
1487 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1488 | engines: {node: '>=0.10.0'}
1489 | dev: true
1490 |
1491 | /path-key@3.1.1:
1492 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1493 | engines: {node: '>=8'}
1494 | dev: true
1495 |
1496 | /path-type@4.0.0:
1497 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1498 | engines: {node: '>=8'}
1499 | dev: true
1500 |
1501 | /pathval@1.1.1:
1502 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
1503 | dev: true
1504 |
1505 | /picocolors@1.0.0:
1506 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1507 | dev: true
1508 |
1509 | /picomatch@2.3.1:
1510 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1511 | engines: {node: '>=8.6'}
1512 | dev: true
1513 |
1514 | /pngjs@5.0.0:
1515 | resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
1516 | engines: {node: '>=10.13.0'}
1517 | dev: false
1518 |
1519 | /postcss-load-config@3.1.4(postcss@8.4.23):
1520 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
1521 | engines: {node: '>= 10'}
1522 | peerDependencies:
1523 | postcss: '>=8.0.9'
1524 | ts-node: '>=9.0.0'
1525 | peerDependenciesMeta:
1526 | postcss:
1527 | optional: true
1528 | ts-node:
1529 | optional: true
1530 | dependencies:
1531 | lilconfig: 2.1.0
1532 | postcss: 8.4.23
1533 | yaml: 1.10.2
1534 | dev: true
1535 |
1536 | /postcss-safe-parser@6.0.0(postcss@8.4.23):
1537 | resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
1538 | engines: {node: '>=12.0'}
1539 | peerDependencies:
1540 | postcss: ^8.3.3
1541 | dependencies:
1542 | postcss: 8.4.23
1543 | dev: true
1544 |
1545 | /postcss@8.4.23:
1546 | resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==}
1547 | engines: {node: ^10 || ^12 || >=14}
1548 | dependencies:
1549 | nanoid: 3.3.6
1550 | picocolors: 1.0.0
1551 | source-map-js: 1.0.2
1552 | dev: true
1553 |
1554 | /prelude-ls@1.2.1:
1555 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1556 | engines: {node: '>= 0.8.0'}
1557 | dev: true
1558 |
1559 | /prettier-plugin-svelte@2.10.0(prettier@2.8.8)(svelte@3.58.0):
1560 | resolution: {integrity: sha512-GXMY6t86thctyCvQq+jqElO+MKdB09BkL3hexyGP3Oi8XLKRFaJP1ud/xlWCZ9ZIa2BxHka32zhHfcuU+XsRQg==}
1561 | peerDependencies:
1562 | prettier: ^1.16.4 || ^2.0.0
1563 | svelte: ^3.2.0
1564 | dependencies:
1565 | prettier: 2.8.8
1566 | svelte: 3.58.0
1567 | dev: true
1568 |
1569 | /prettier@2.8.8:
1570 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
1571 | engines: {node: '>=10.13.0'}
1572 | hasBin: true
1573 | dev: true
1574 |
1575 | /punycode@2.3.0:
1576 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
1577 | engines: {node: '>=6'}
1578 | dev: true
1579 |
1580 | /qrcode@1.5.3:
1581 | resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==}
1582 | engines: {node: '>=10.13.0'}
1583 | hasBin: true
1584 | dependencies:
1585 | dijkstrajs: 1.0.3
1586 | encode-utf8: 1.0.3
1587 | pngjs: 5.0.0
1588 | yargs: 15.4.1
1589 | dev: false
1590 |
1591 | /queue-microtask@1.2.3:
1592 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1593 | dev: true
1594 |
1595 | /readdirp@3.6.0:
1596 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1597 | engines: {node: '>=8.10.0'}
1598 | dependencies:
1599 | picomatch: 2.3.1
1600 | dev: true
1601 |
1602 | /require-directory@2.1.1:
1603 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
1604 | engines: {node: '>=0.10.0'}
1605 | dev: false
1606 |
1607 | /require-main-filename@2.0.0:
1608 | resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
1609 | dev: false
1610 |
1611 | /resolve-from@4.0.0:
1612 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1613 | engines: {node: '>=4'}
1614 | dev: true
1615 |
1616 | /reusify@1.0.4:
1617 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1618 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1619 | dev: true
1620 |
1621 | /rimraf@2.7.1:
1622 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
1623 | hasBin: true
1624 | dependencies:
1625 | glob: 7.2.3
1626 | dev: true
1627 |
1628 | /rimraf@3.0.2:
1629 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
1630 | hasBin: true
1631 | dependencies:
1632 | glob: 7.2.3
1633 | dev: true
1634 |
1635 | /rollup@3.21.1:
1636 | resolution: {integrity: sha512-GpUgqWCw56OSiBKf7lcAITstYiBV1/EKaKYPl9r8HgAxc6/qYAVw1PaHWnvHWFziRaf4HsVCDLq/IGtBi1K/Zw==}
1637 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
1638 | hasBin: true
1639 | optionalDependencies:
1640 | fsevents: 2.3.2
1641 | dev: true
1642 |
1643 | /run-parallel@1.2.0:
1644 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1645 | dependencies:
1646 | queue-microtask: 1.2.3
1647 | dev: true
1648 |
1649 | /sade@1.8.1:
1650 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
1651 | engines: {node: '>=6'}
1652 | dependencies:
1653 | mri: 1.2.0
1654 | dev: true
1655 |
1656 | /sander@0.5.1:
1657 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==}
1658 | dependencies:
1659 | es6-promise: 3.3.1
1660 | graceful-fs: 4.2.11
1661 | mkdirp: 0.5.6
1662 | rimraf: 2.7.1
1663 | dev: true
1664 |
1665 | /semver@7.5.0:
1666 | resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==}
1667 | engines: {node: '>=10'}
1668 | hasBin: true
1669 | dependencies:
1670 | lru-cache: 6.0.0
1671 | dev: true
1672 |
1673 | /set-blocking@2.0.0:
1674 | resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
1675 | dev: false
1676 |
1677 | /set-cookie-parser@2.6.0:
1678 | resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
1679 | dev: true
1680 |
1681 | /shebang-command@2.0.0:
1682 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1683 | engines: {node: '>=8'}
1684 | dependencies:
1685 | shebang-regex: 3.0.0
1686 | dev: true
1687 |
1688 | /shebang-regex@3.0.0:
1689 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1690 | engines: {node: '>=8'}
1691 | dev: true
1692 |
1693 | /sirv@2.0.3:
1694 | resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==}
1695 | engines: {node: '>= 10'}
1696 | dependencies:
1697 | '@polka/url': 1.0.0-next.21
1698 | mrmime: 1.0.1
1699 | totalist: 3.0.1
1700 | dev: true
1701 |
1702 | /slash@3.0.0:
1703 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1704 | engines: {node: '>=8'}
1705 | dev: true
1706 |
1707 | /sorcery@0.11.0:
1708 | resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==}
1709 | hasBin: true
1710 | dependencies:
1711 | '@jridgewell/sourcemap-codec': 1.4.15
1712 | buffer-crc32: 0.2.13
1713 | minimist: 1.2.8
1714 | sander: 0.5.1
1715 | dev: true
1716 |
1717 | /source-map-js@1.0.2:
1718 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
1719 | engines: {node: '>=0.10.0'}
1720 | dev: true
1721 |
1722 | /source-map@0.6.1:
1723 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1724 | engines: {node: '>=0.10.0'}
1725 | dev: true
1726 |
1727 | /streamsearch@1.1.0:
1728 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
1729 | engines: {node: '>=10.0.0'}
1730 | dev: true
1731 |
1732 | /string-width@4.2.3:
1733 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1734 | engines: {node: '>=8'}
1735 | dependencies:
1736 | emoji-regex: 8.0.0
1737 | is-fullwidth-code-point: 3.0.0
1738 | strip-ansi: 6.0.1
1739 | dev: false
1740 |
1741 | /strip-ansi@6.0.1:
1742 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1743 | engines: {node: '>=8'}
1744 | dependencies:
1745 | ansi-regex: 5.0.1
1746 |
1747 | /strip-indent@3.0.0:
1748 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
1749 | engines: {node: '>=8'}
1750 | dependencies:
1751 | min-indent: 1.0.1
1752 | dev: true
1753 |
1754 | /strip-json-comments@3.1.1:
1755 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1756 | engines: {node: '>=8'}
1757 | dev: true
1758 |
1759 | /strip-literal@1.0.1:
1760 | resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==}
1761 | dependencies:
1762 | acorn: 8.8.2
1763 | dev: true
1764 |
1765 | /supports-color@7.2.0:
1766 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1767 | engines: {node: '>=8'}
1768 | dependencies:
1769 | has-flag: 4.0.0
1770 | dev: true
1771 |
1772 | /svelte-check@3.2.0(postcss@8.4.23)(svelte@3.58.0):
1773 | resolution: {integrity: sha512-6ZnscN8dHEN5Eq5LgIzjj07W9nc9myyBH+diXsUAuiY/3rt0l65/LCIQYlIuoFEjp2F1NhXqZiJwV9omPj9tMw==}
1774 | hasBin: true
1775 | peerDependencies:
1776 | svelte: ^3.55.0
1777 | dependencies:
1778 | '@jridgewell/trace-mapping': 0.3.18
1779 | chokidar: 3.5.3
1780 | fast-glob: 3.2.12
1781 | import-fresh: 3.3.0
1782 | picocolors: 1.0.0
1783 | sade: 1.8.1
1784 | svelte: 3.58.0
1785 | svelte-preprocess: 5.0.3(postcss@8.4.23)(svelte@3.58.0)(typescript@5.0.4)
1786 | typescript: 5.0.4
1787 | transitivePeerDependencies:
1788 | - '@babel/core'
1789 | - coffeescript
1790 | - less
1791 | - postcss
1792 | - postcss-load-config
1793 | - pug
1794 | - sass
1795 | - stylus
1796 | - sugarss
1797 | dev: true
1798 |
1799 | /svelte-eslint-parser@0.27.0(svelte@3.58.0):
1800 | resolution: {integrity: sha512-x9cBbCZwLdCnNE3yPqGhvAqEl9FCILC6AaV2xRtwzaMCpvpqO7ceONXj9xka3fQFczSqLzkwOxP4Ln4cIQNqXg==}
1801 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1802 | peerDependencies:
1803 | svelte: ^3.37.0
1804 | peerDependenciesMeta:
1805 | svelte:
1806 | optional: true
1807 | dependencies:
1808 | eslint-scope: 7.2.0
1809 | eslint-visitor-keys: 3.4.0
1810 | espree: 9.5.1
1811 | svelte: 3.58.0
1812 | dev: true
1813 |
1814 | /svelte-gestures@1.4.1:
1815 | resolution: {integrity: sha512-TAmfcz+DgdfrRDFSQ9UsXxhqDjQR7LaUaALauqITaTCVSHPWXIZ9WSBPP6DrXh9MYqgVZwy85wJdv7NQPwsZfA==}
1816 | dev: false
1817 |
1818 | /svelte-hmr@0.15.1(svelte@3.58.0):
1819 | resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==}
1820 | engines: {node: ^12.20 || ^14.13.1 || >= 16}
1821 | peerDependencies:
1822 | svelte: '>=3.19.0'
1823 | dependencies:
1824 | svelte: 3.58.0
1825 | dev: true
1826 |
1827 | /svelte-preprocess@5.0.3(postcss@8.4.23)(svelte@3.58.0)(typescript@5.0.4):
1828 | resolution: {integrity: sha512-GrHF1rusdJVbOZOwgPWtpqmaexkydznKzy5qIC2FabgpFyKN57bjMUUUqPRfbBXK5igiEWn1uO/DXsa2vJ5VHA==}
1829 | engines: {node: '>= 14.10.0'}
1830 | requiresBuild: true
1831 | peerDependencies:
1832 | '@babel/core': ^7.10.2
1833 | coffeescript: ^2.5.1
1834 | less: ^3.11.3 || ^4.0.0
1835 | postcss: ^7 || ^8
1836 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0
1837 | pug: ^3.0.0
1838 | sass: ^1.26.8
1839 | stylus: ^0.55.0
1840 | sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0
1841 | svelte: ^3.23.0
1842 | typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0'
1843 | peerDependenciesMeta:
1844 | '@babel/core':
1845 | optional: true
1846 | coffeescript:
1847 | optional: true
1848 | less:
1849 | optional: true
1850 | postcss:
1851 | optional: true
1852 | postcss-load-config:
1853 | optional: true
1854 | pug:
1855 | optional: true
1856 | sass:
1857 | optional: true
1858 | stylus:
1859 | optional: true
1860 | sugarss:
1861 | optional: true
1862 | typescript:
1863 | optional: true
1864 | dependencies:
1865 | '@types/pug': 2.0.6
1866 | detect-indent: 6.1.0
1867 | magic-string: 0.27.0
1868 | postcss: 8.4.23
1869 | sorcery: 0.11.0
1870 | strip-indent: 3.0.0
1871 | svelte: 3.58.0
1872 | typescript: 5.0.4
1873 | dev: true
1874 |
1875 | /svelte@3.58.0:
1876 | resolution: {integrity: sha512-brIBNNB76mXFmU/Kerm4wFnkskBbluBDCjx/8TcpYRb298Yh2dztS2kQ6bhtjMcvUhd5ynClfwpz5h2gnzdQ1A==}
1877 | engines: {node: '>= 8'}
1878 | dev: true
1879 |
1880 | /text-table@0.2.0:
1881 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
1882 | dev: true
1883 |
1884 | /tiny-glob@0.2.9:
1885 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
1886 | dependencies:
1887 | globalyzer: 0.1.0
1888 | globrex: 0.1.2
1889 | dev: true
1890 |
1891 | /tinybench@2.5.0:
1892 | resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==}
1893 | dev: true
1894 |
1895 | /tinypool@0.3.1:
1896 | resolution: {integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==}
1897 | engines: {node: '>=14.0.0'}
1898 | dev: true
1899 |
1900 | /tinyspy@1.1.1:
1901 | resolution: {integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==}
1902 | engines: {node: '>=14.0.0'}
1903 | dev: true
1904 |
1905 | /to-regex-range@5.0.1:
1906 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1907 | engines: {node: '>=8.0'}
1908 | dependencies:
1909 | is-number: 7.0.0
1910 | dev: true
1911 |
1912 | /totalist@3.0.1:
1913 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
1914 | engines: {node: '>=6'}
1915 | dev: true
1916 |
1917 | /tslib@1.14.1:
1918 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
1919 | dev: true
1920 |
1921 | /tslib@2.5.0:
1922 | resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
1923 | dev: true
1924 |
1925 | /tsutils@3.21.0(typescript@5.0.4):
1926 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
1927 | engines: {node: '>= 6'}
1928 | peerDependencies:
1929 | 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'
1930 | dependencies:
1931 | tslib: 1.14.1
1932 | typescript: 5.0.4
1933 | dev: true
1934 |
1935 | /type-check@0.4.0:
1936 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1937 | engines: {node: '>= 0.8.0'}
1938 | dependencies:
1939 | prelude-ls: 1.2.1
1940 | dev: true
1941 |
1942 | /type-detect@4.0.8:
1943 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
1944 | engines: {node: '>=4'}
1945 | dev: true
1946 |
1947 | /type-fest@0.20.2:
1948 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
1949 | engines: {node: '>=10'}
1950 | dev: true
1951 |
1952 | /typescript@5.0.4:
1953 | resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==}
1954 | engines: {node: '>=12.20'}
1955 | hasBin: true
1956 | dev: true
1957 |
1958 | /undici@5.22.0:
1959 | resolution: {integrity: sha512-fR9RXCc+6Dxav4P9VV/sp5w3eFiSdOjJYsbtWfd4s5L5C4ogyuVpdKIVHeW0vV1MloM65/f7W45nR9ZxwVdyiA==}
1960 | engines: {node: '>=14.0'}
1961 | dependencies:
1962 | busboy: 1.6.0
1963 | dev: true
1964 |
1965 | /uri-js@4.4.1:
1966 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1967 | dependencies:
1968 | punycode: 2.3.0
1969 | dev: true
1970 |
1971 | /vite@4.3.3(@types/node@20.1.0):
1972 | resolution: {integrity: sha512-MwFlLBO4udZXd+VBcezo3u8mC77YQk+ik+fbc0GZWGgzfbPP+8Kf0fldhARqvSYmtIWoAJ5BXPClUbMTlqFxrA==}
1973 | engines: {node: ^14.18.0 || >=16.0.0}
1974 | hasBin: true
1975 | peerDependencies:
1976 | '@types/node': '>= 14'
1977 | less: '*'
1978 | sass: '*'
1979 | stylus: '*'
1980 | sugarss: '*'
1981 | terser: ^5.4.0
1982 | peerDependenciesMeta:
1983 | '@types/node':
1984 | optional: true
1985 | less:
1986 | optional: true
1987 | sass:
1988 | optional: true
1989 | stylus:
1990 | optional: true
1991 | sugarss:
1992 | optional: true
1993 | terser:
1994 | optional: true
1995 | dependencies:
1996 | '@types/node': 20.1.0
1997 | esbuild: 0.17.18
1998 | postcss: 8.4.23
1999 | rollup: 3.21.1
2000 | optionalDependencies:
2001 | fsevents: 2.3.2
2002 | dev: true
2003 |
2004 | /vitefu@0.2.4(vite@4.3.3):
2005 | resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==}
2006 | peerDependencies:
2007 | vite: ^3.0.0 || ^4.0.0
2008 | peerDependenciesMeta:
2009 | vite:
2010 | optional: true
2011 | dependencies:
2012 | vite: 4.3.3(@types/node@20.1.0)
2013 | dev: true
2014 |
2015 | /vitest@0.25.8:
2016 | resolution: {integrity: sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg==}
2017 | engines: {node: '>=v14.16.0'}
2018 | hasBin: true
2019 | peerDependencies:
2020 | '@edge-runtime/vm': '*'
2021 | '@vitest/browser': '*'
2022 | '@vitest/ui': '*'
2023 | happy-dom: '*'
2024 | jsdom: '*'
2025 | peerDependenciesMeta:
2026 | '@edge-runtime/vm':
2027 | optional: true
2028 | '@vitest/browser':
2029 | optional: true
2030 | '@vitest/ui':
2031 | optional: true
2032 | happy-dom:
2033 | optional: true
2034 | jsdom:
2035 | optional: true
2036 | dependencies:
2037 | '@types/chai': 4.3.5
2038 | '@types/chai-subset': 1.3.3
2039 | '@types/node': 20.1.0
2040 | acorn: 8.8.2
2041 | acorn-walk: 8.2.0
2042 | chai: 4.3.7
2043 | debug: 4.3.4
2044 | local-pkg: 0.4.3
2045 | source-map: 0.6.1
2046 | strip-literal: 1.0.1
2047 | tinybench: 2.5.0
2048 | tinypool: 0.3.1
2049 | tinyspy: 1.1.1
2050 | vite: 4.3.3(@types/node@20.1.0)
2051 | transitivePeerDependencies:
2052 | - less
2053 | - sass
2054 | - stylus
2055 | - sugarss
2056 | - supports-color
2057 | - terser
2058 | dev: true
2059 |
2060 | /which-module@2.0.1:
2061 | resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
2062 | dev: false
2063 |
2064 | /which@2.0.2:
2065 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2066 | engines: {node: '>= 8'}
2067 | hasBin: true
2068 | dependencies:
2069 | isexe: 2.0.0
2070 | dev: true
2071 |
2072 | /word-wrap@1.2.3:
2073 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
2074 | engines: {node: '>=0.10.0'}
2075 | dev: true
2076 |
2077 | /wrap-ansi@6.2.0:
2078 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
2079 | engines: {node: '>=8'}
2080 | dependencies:
2081 | ansi-styles: 4.3.0
2082 | string-width: 4.2.3
2083 | strip-ansi: 6.0.1
2084 | dev: false
2085 |
2086 | /wrappy@1.0.2:
2087 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
2088 | dev: true
2089 |
2090 | /y18n@4.0.3:
2091 | resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
2092 | dev: false
2093 |
2094 | /yallist@4.0.0:
2095 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
2096 | dev: true
2097 |
2098 | /yaml@1.10.2:
2099 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
2100 | engines: {node: '>= 6'}
2101 | dev: true
2102 |
2103 | /yargs-parser@18.1.3:
2104 | resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
2105 | engines: {node: '>=6'}
2106 | dependencies:
2107 | camelcase: 5.3.1
2108 | decamelize: 1.2.0
2109 | dev: false
2110 |
2111 | /yargs@15.4.1:
2112 | resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
2113 | engines: {node: '>=8'}
2114 | dependencies:
2115 | cliui: 6.0.0
2116 | decamelize: 1.2.0
2117 | find-up: 4.1.0
2118 | get-caller-file: 2.0.5
2119 | require-directory: 2.1.1
2120 | require-main-filename: 2.0.0
2121 | set-blocking: 2.0.0
2122 | string-width: 4.2.3
2123 | which-module: 2.0.1
2124 | y18n: 4.0.3
2125 | yargs-parser: 18.1.3
2126 | dev: false
2127 |
2128 | /yocto-queue@0.1.0:
2129 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
2130 | engines: {node: '>=10'}
2131 | dev: true
2132 |
--------------------------------------------------------------------------------
| | | | | |