repos / neovimcraft

website that makes it easy to find neovim plugins
git clone https://github.com/neurosnap/neovimcraft.git

commit
f39f940
parent
f39f940
author
Eric Bower
date
2021-07-19 02:08:58 +0000 UTC
init
36 files changed,  +3046, -0
A .npmrc
A .eslintrc.cjs
+20, -0
 1@@ -0,0 +1,20 @@
 2+module.exports = {
 3+	root: true,
 4+	parser: '@typescript-eslint/parser',
 5+	extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'],
 6+	plugins: ['svelte3', '@typescript-eslint'],
 7+	ignorePatterns: ['*.cjs'],
 8+	overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }],
 9+	settings: {
10+		'svelte3/typescript': () => require('typescript')
11+	},
12+	parserOptions: {
13+		sourceType: 'module',
14+		ecmaVersion: 2019
15+	},
16+	env: {
17+		browser: true,
18+		es2017: true,
19+		node: true
20+	}
21+};
A .gitignore
+10, -0
 1@@ -0,0 +1,10 @@
 2+.DS_Store
 3+node_modules
 4+/.svelte-kit
 5+/package
 6+.envrc
 7+.eslintcache
 8+build
 9+src/lib/db.json
10+src/lib/markdown.json
11+src/lib/html.json
A .husky/.gitignore
+1, -0
1@@ -0,0 +1 @@
2+_
A .husky/pre-commit
+4, -0
1@@ -0,0 +1,4 @@
2+#!/bin/sh
3+. "$(dirname "$0")/_/husky.sh"
4+
5+npx lint-staged
A .npmrc
+1, -0
1@@ -0,0 +1 @@
2+engine-strict=true
A .prettierignore
+4, -0
1@@ -0,0 +1,4 @@
2+.svelte-kit/**
3+static/**
4+build/**
5+node_modules/**
A .prettierrc
+6, -0
1@@ -0,0 +1,6 @@
2+{
3+	"singleQuote": true,
4+    "trailingComma": 'all',
5+    "arrowParens": 'always',
6+	"printWidth": 100
7+}
A LICENSE
+21, -0
 1@@ -0,0 +1,21 @@
 2+MIT License
 3+
 4+Copyright (c) 2021 Eric Bower
 5+
 6+Permission is hereby granted, free of charge, to any person obtaining a copy
 7+of this software and associated documentation files (the "Software"), to deal
 8+in the Software without restriction, including without limitation the rights
 9+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+copies of the Software, and to permit persons to whom the Software is
11+furnished to do so, subject to the following conditions:
12+
13+The above copyright notice and this permission notice shall be included in all
14+copies or substantial portions of the Software.
15+
16+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+SOFTWARE.
A README.md
+46, -0
 1@@ -0,0 +1,46 @@
 2+# neovim-awesome
 3+
 4+A site dedicated to finding the best neovim plugins.
 5+
 6+## Developing
 7+
 8+You need to add a couple environment variables related to using the github api:
 9+
10+```
11+export GITHUB_ACCESS_TOKEN='xxx'
12+export GITHUB_USERNAME='my-user'
13+```
14+
15+To run the scraper
16+
17+```bash
18+yarn process
19+```
20+
21+To convert markdown files to html
22+
23+```bash
24+yarn transform
25+```
26+
27+Once you've created a project and installed dependencies with `yarn`, start a development server:
28+
29+```bash
30+yarn dev
31+```
32+
33+## Building
34+
35+Before creating a production version of your app, install an [adapter](https://kit.svelte.dev/docs#adapters) for your target environment. Then:
36+
37+```bash
38+yarn build
39+```
40+
41+> You can preview the built app with `yarn preview`, regardless of whether you installed an adapter. This should _not_ be used to serve your app in production.
42+
43+## Deploy
44+
45+```bash
46+yarn deploy
47+```
A package.json
+52, -0
 1@@ -0,0 +1,52 @@
 2+{
 3+  "name": "neovim-awesome",
 4+  "version": "0.0.0",
 5+  "scripts": {
 6+    "dev": "svelte-kit dev --host 0.0.0.0",
 7+    "build:clean": "rm -rf build",
 8+    "build": "svelte-kit build",
 9+    "preview": "svelte-kit preview --host 0.0.0.0",
10+    "check": "svelte-check --tsconfig ./tsconfig.json",
11+    "check:watch": "svelte-check --tsconfig ./tsconfig.json --watch",
12+    "lint": "prettier --check --plugin-search-dir=. . && eslint --ignore-path .gitignore .",
13+    "format": "prettier --write --plugin-search-dir=. .",
14+    "prepare": "husky install",
15+    "process": "node --loader ts-node/esm src/process.ts",
16+    "transform": "node --loader ts-node/esm src/transform.ts",
17+    "upload:clean": "gsutil -m rm -r gs://neovim.erock.io/*",
18+    "upload": "gsutil -m -h 'Cache-Control:private, max-age=0, no-transform' rsync -r ./build gs://neovim.erock.io",
19+    "deploy": "yarn build:clean && yarn build && yarn upload:clean && yarn upload"
20+  },
21+  "devDependencies": {
22+    "@sveltejs/adapter-static": "^1.0.0-next.13",
23+    "@sveltejs/kit": "next",
24+    "@types/marked": "^2.0.4",
25+    "@types/node": "^16.3.3",
26+    "@types/node-fetch": "^2.5.11",
27+    "@typescript-eslint/eslint-plugin": "^4.19.0",
28+    "@typescript-eslint/parser": "^4.19.0",
29+    "eslint": "^7.22.0",
30+    "eslint-config-prettier": "^8.1.0",
31+    "eslint-plugin-svelte3": "^3.2.0",
32+    "husky": ">=6",
33+    "just-throttle": "^2.3.1",
34+    "lint-staged": ">=10",
35+    "marked": "^2.1.3",
36+    "node-fetch": "^2.6.1",
37+    "prettier": "~2.2.1",
38+    "prettier-plugin-svelte": "^2.2.0",
39+    "query-string": "^7.0.1",
40+    "svelte": "^3.34.0",
41+    "svelte-check": "^2.0.0",
42+    "svelte-preprocess": "^4.0.0",
43+    "ts-node": "^10.0.0",
44+    "tslib": "^2.0.0",
45+    "typescript": "^4.0.0"
46+  },
47+  "type": "module",
48+  "lint-staged": {
49+    "*.js": "eslint --cache --fix",
50+    "*.{js,css,md}": "prettier --write"
51+  },
52+  "dependencies": {}
53+}
A src/404.html
+14, -0
 1@@ -0,0 +1,14 @@
 2+<!DOCTYPE html>
 3+<html lang="en" data-theme="theme-dark">
 4+  <head>
 5+    <title>404 - not found</title>
 6+    <meta charset="utf-8" />
 7+    <link rel="icon" href="/favicon.ico" />
 8+    <meta name="viewport" content="width=device-width, initial-scale=1" />
 9+    <link rel="stylesheet" type="text/css" href="/main.css" />
10+    %svelte.head%
11+  </head>
12+  <body>
13+    <div>404 - not found</div>
14+  </body>
15+</html>
A src/app.html
+13, -0
 1@@ -0,0 +1,13 @@
 2+<!DOCTYPE html>
 3+<html lang="en" data-theme="theme-dark">
 4+  <head>
 5+    <meta charset="utf-8" />
 6+    <link rel="icon" href="/favicon.ico" />
 7+    <meta name="viewport" content="width=device-width, initial-scale=1" />
 8+    <link rel="stylesheet" type="text/css" href="/main.css" />
 9+    %svelte.head%
10+  </head>
11+  <body>
12+    <div id="svelte">%svelte.body%</div>
13+  </body>
14+</html>
A src/global.d.ts
+1, -0
1@@ -0,0 +1 @@
2+/// <reference types="@sveltejs/kit" />
A src/lib/icon.svelte
+14, -0
 1@@ -0,0 +1,14 @@
 2+<script lang="ts">
 3+  type Icon = 'github' | 'alert-circle' | 'git-branch' | 'star' | 'x-circle' | 'users' | 'search';
 4+  export let icon: Icon;
 5+</script>
 6+
 7+<img class="icon" src="/{icon}.svg" alt={icon} />
 8+
 9+<style>
10+  .icon {
11+    width: 24px;
12+    height: 24px;
13+    margin-right: 5px;
14+  }
15+</style>
A src/lib/plugin-data.ts
+23, -0
 1@@ -0,0 +1,23 @@
 2+import type { Tag, Plugin, PluginMap, TagMap } from './types';
 3+
 4+function getTagsDb(plist: Plugin[]): TagMap {
 5+  const tagsDb: TagMap = {};
 6+  plist.forEach((plugin) => {
 7+    plugin.tags.forEach((tag) => {
 8+      if (!tagsDb[tag]) {
 9+        tagsDb[tag] = { id: tag, count: 0 };
10+      }
11+      tagsDb[tag].count += 1;
12+    });
13+  });
14+  return tagsDb;
15+}
16+
17+export function derivePluginData(
18+  pluginDb: PluginMap,
19+): { plugins: Plugin[]; tags: Tag[]; tagDb: TagMap } {
20+  const plugins = Object.values(pluginDb).sort((a, b) => b.stars - a.stars);
21+  const tagDb = getTagsDb(plugins);
22+  const tags = Object.values(tagDb).sort((a, b) => b.count - a.count);
23+  return { plugins, tags, tagDb };
24+}
A src/lib/plugin.svelte
+86, -0
 1@@ -0,0 +1,86 @@
 2+<script lang="ts">
 3+  import qs from 'query-string';
 4+  import { goto } from '$app/navigation';
 5+
 6+  import type { Plugin, Tag } from './types';
 7+  import TagView from './tag.svelte';
 8+  import Icon from './icon.svelte';
 9+  import Tooltip from '$lib/tooltip.svelte';
10+
11+  export let plugin: Plugin;
12+  export let tags: Tag[];
13+  export let html: string = '<div>readme not found</div>';
14+
15+  function onSearch(curSearch: string) {
16+    const query = qs.parseUrl(window.location.search);
17+    const s = encodeURIComponent(curSearch);
18+    query.query.search = s;
19+    goto(`/${qs.stringifyUrl(query)}`);
20+  }
21+</script>
22+
23+<div class="meta">
24+  <div class="tags_view">
25+    {#each tags as tag}
26+      <TagView {tag} {onSearch} />
27+    {/each}
28+  </div>
29+  <div class="metrics">
30+    <Tooltip tip="stars" bottom>
31+      <div class="metric"><Icon icon="star" /> <span>{plugin.stars}</span></div>
32+    </Tooltip>
33+    <Tooltip tip="open issues" bottom>
34+      <div class="metric"><Icon icon="alert-circle" /> <span>{plugin.openIssues}</span></div>
35+    </Tooltip>
36+    <Tooltip tip="subscribers" bottom>
37+      <div class="metric"><Icon icon="users" /> <span>{plugin.subscribers}</span></div>
38+    </Tooltip>
39+    <Tooltip tip="forks" bottom>
40+      <div class="metric"><Icon icon="git-branch" /> <span>{plugin.forks}</span></div>
41+    </Tooltip>
42+  </div>
43+  <div class="install">
44+    <h3>packer</h3>
45+    <pre><code>require('packer').startup(function()
46+  use '{plugin.id}'
47+end)</code></pre>
48+  </div>
49+  <div class="install">
50+    <h3>paq</h3>
51+    <pre><code>require "paq" &lcub; 
52+  '{plugin.id}'
53+&rcub;</code></pre>
54+  </div>
55+  <hr />
56+</div>
57+{@html html}
58+
59+<style>
60+  :global(img) {
61+    max-width: 100%;
62+    height: auto;
63+  }
64+
65+  .meta {
66+    margin-bottom: 20px;
67+  }
68+
69+  .metrics {
70+    display: flex;
71+    justify-content: space-between;
72+  }
73+
74+  .metric {
75+    display: flex;
76+    align-items: center;
77+    cursor: pointer;
78+  }
79+
80+  .tags_view {
81+    margin-bottom: 10px;
82+  }
83+
84+  .install {
85+    margin-top: 10px;
86+  }
87+</style>
A src/lib/tag.svelte
+36, -0
 1@@ -0,0 +1,36 @@
 2+<script lang="ts">
 3+  import type { Tag } from './types';
 4+
 5+  function findColor(tag: Tag) {
 6+    if (tag.count === 1) return 'pink';
 7+    if (tag.count > 1 && tag.count <= 3) return 'yellow';
 8+    if (tag.count > 3 && tag.count <= 10) return 'orange';
 9+    if (tag.count > 10 && tag.count <= 15) return 'green';
10+    return 'purple';
11+  }
12+
13+  export let tag: Tag;
14+  export let onSearch: (t: string) => any = (_: string) => {};
15+</script>
16+
17+<span class="tag {findColor(tag)}" on:click={() => onSearch(`tag:${tag.id}`)}>
18+  {tag.id} x {tag.count}
19+</span>
20+
21+<style>
22+  .tag {
23+    padding: 5px;
24+    margin: 5px 5px 5px 0;
25+    border: 1px solid black;
26+    white-space: pre-wrap;
27+    word-break: break-word;
28+    display: inline-block;
29+    cursor: pointer;
30+    color: var(--primary-color);
31+    font-size: 0.8rem;
32+  }
33+
34+  .tag:hover {
35+    background-color: var(--highlight-color);
36+  }
37+</style>
A src/lib/tooltip.svelte
+83, -0
 1@@ -0,0 +1,83 @@
 2+<script>
 3+  export let tip = '';
 4+  export let top = false;
 5+  export let right = false;
 6+  export let bottom = false;
 7+  export let left = false;
 8+  export let active = false;
 9+  export let color = '#757575';
10+
11+  let style = `background-color: ${color};`;
12+</script>
13+
14+<div class="tooltip-wrapper">
15+  <span class="tooltip-slot">
16+    <slot />
17+  </span>
18+  <div class="tooltip" class:active class:left class:right class:bottom class:top>
19+    {#if tip}
20+      <div class="default-tip" {style}>{tip}</div>
21+    {:else}
22+      <slot name="custom-tip" />
23+    {/if}
24+  </div>
25+</div>
26+
27+<style>
28+  .tooltip-wrapper {
29+    position: relative;
30+    display: inline-block;
31+  }
32+  .tooltip {
33+    position: absolute;
34+    font-family: inherit;
35+    display: inline-block;
36+    white-space: nowrap;
37+    color: inherit;
38+    opacity: 0;
39+    visibility: hidden;
40+    transition: opacity 150ms, visibility 150ms;
41+  }
42+
43+  .default-tip {
44+    display: inline-block;
45+    padding: 8px 16px;
46+    border-radius: 6px;
47+    color: inherit;
48+  }
49+
50+  .tooltip.top {
51+    left: 50%;
52+    transform: translate(-50%, -100%);
53+    margin-top: -8px;
54+  }
55+
56+  .tooltip.bottom {
57+    left: 50%;
58+    bottom: 0;
59+    transform: translate(-50%, 100%);
60+    margin-bottom: -8px;
61+  }
62+
63+  .tooltip.left {
64+    left: 0;
65+    transform: translateX(-100%);
66+    margin-left: -8px;
67+  }
68+
69+  .tooltip.right {
70+    right: 0;
71+    transform: translateX(100%);
72+    margin-right: -8px;
73+  }
74+
75+  .tooltip.active {
76+    opacity: 1;
77+    visibility: initial;
78+  }
79+
80+  .tooltip-slot:hover + .tooltip {
81+    opacity: 1;
82+    visibility: initial;
83+  }
84+</style>
A src/lib/types.ts
+26, -0
 1@@ -0,0 +1,26 @@
 2+export interface Plugin {
 3+  id: string;
 4+  name: string;
 5+  username: string;
 6+  repo: string;
 7+  link: string;
 8+  tags: string[];
 9+  homepage: string;
10+  branch: string;
11+  openIssues: number;
12+  watchers: number;
13+  forks: number;
14+  stars: number;
15+  subscribers: number;
16+  network: number;
17+  description: string;
18+}
19+
20+export type PluginMap = { [key: string]: Plugin };
21+
22+export interface Tag {
23+  id: string;
24+  count: number;
25+}
26+
27+export type TagMap = { [key: string]: Tag };
A src/process.ts
+195, -0
  1@@ -0,0 +1,195 @@
  2+import fetch from 'node-fetch';
  3+import marked from 'marked';
  4+import fs from 'fs';
  5+import util from 'util';
  6+
  7+import type { Plugin } from './lib/types';
  8+
  9+const writeFile = util.promisify(fs.writeFile);
 10+const accessToken = process.env.GITHUB_ACCESS_TOKEN || '';
 11+const accessUsername = process.env.GITHUB_USERNAME || '';
 12+
 13+interface Props {
 14+  username: string;
 15+  repo: string;
 16+  branch: string;
 17+}
 18+
 19+async function fetchReadme({ username, repo, branch }: Props): Promise<Resp<string>> {
 20+  const url = `https://raw.githubusercontent.com/${username}/${repo}/${branch}/README.md`;
 21+  console.log(`Fetching ${url}`);
 22+  const res = await fetch(url);
 23+  if (res.ok) {
 24+    const data = await res.text();
 25+    return { ok: true, data };
 26+  }
 27+
 28+  return {
 29+    ok: false,
 30+    data: {
 31+      status: res.status,
 32+      error: new Error(`Could not load ${url}`),
 33+    },
 34+  };
 35+}
 36+
 37+async function fetchRepo({ username, repo }: Props): Promise<Resp<{ [key: string]: any }>> {
 38+  const url = `https://api.github.com/repos/${username}/${repo}`;
 39+  console.log(`Fetching ${url}`);
 40+  const token = Buffer.from(`${accessUsername}:${accessToken}`).toString('base64');
 41+  const res = await fetch(url, {
 42+    headers: { Authorization: `Basic ${token}` },
 43+  });
 44+  const data = await res.json();
 45+  if (res.ok) {
 46+    return {
 47+      ok: true,
 48+      data,
 49+    };
 50+  }
 51+
 52+  return {
 53+    ok: false,
 54+    data: {
 55+      status: res.status,
 56+      error: new Error(`Could not load ${url}`),
 57+    },
 58+  };
 59+}
 60+
 61+interface ApiSuccess<D = any> {
 62+  ok: true;
 63+  data: D;
 64+}
 65+
 66+interface ApiFailure {
 67+  ok: false;
 68+  data: { status: number; error: Error };
 69+}
 70+
 71+type Resp<D> = ApiSuccess<D> | ApiFailure;
 72+
 73+async function fetchGithubData(props: Props): Promise<Resp<any>> {
 74+  const repo = await fetchRepo(props);
 75+  if (!repo.ok) return repo;
 76+
 77+  const readme = await fetchReadme({
 78+    username: props.username,
 79+    repo: props.repo,
 80+    branch: repo.data.default_branch,
 81+  });
 82+  if (!readme.ok) return readme;
 83+
 84+  return {
 85+    ok: true,
 86+    data: {
 87+      readme: readme.data,
 88+      repo: repo.data,
 89+    },
 90+  };
 91+}
 92+
 93+async function fetchMarkdown() {
 94+  const response = await fetch(
 95+    'https://raw.githubusercontent.com/rockerBOO/awesome-neovim/main/README.md',
 96+  );
 97+  const text = await response.text();
 98+  return text;
 99+}
100+
101+const createPlugin = (p: Partial<Plugin> = {}): Plugin => {
102+  return {
103+    id: '',
104+    name: '',
105+    username: '',
106+    repo: '',
107+    link: '',
108+    tags: [],
109+    homepage: '',
110+    description: '',
111+    branch: 'main',
112+    openIssues: 0,
113+    watchers: 0,
114+    forks: 0,
115+    stars: 0,
116+    subscribers: 0,
117+    network: 0,
118+    ...p,
119+  };
120+};
121+
122+function sanitizeTag(tag: string) {
123+  if (tag === '(requires neovim 0.5)') return 'neovim-0.5';
124+  if (tag === 'treesitter supported colorschemes') return 'treesitter-colorschemes';
125+  return tag.toLocaleLowerCase().replace(/\s/g, '-');
126+}
127+
128+async function processMarkdown(text: string) {
129+  const data: Plugin[] = [];
130+  const tree = marked.lexer(text);
131+  let heading = '';
132+  tree.forEach((token) => {
133+    if (token.type === 'heading') {
134+      heading = token.text.toLocaleLowerCase();
135+    }
136+
137+    if (token.type === 'list') {
138+      token.items.forEach((t) => {
139+        (t as any).tokens.forEach((tt: any) => {
140+          if (!tt.tokens) return;
141+          if (heading === 'contents') return;
142+          const plugin = createPlugin({ tags: [sanitizeTag(heading)] });
143+          tt.tokens.forEach((a: any) => {
144+            if (a.type === 'link') {
145+              plugin.link = a.href;
146+              const href = a.href
147+                .replace('https://github.com/', '')
148+                .replace('http://github.com', '');
149+              const d = href.split('/');
150+              plugin.username = d[0];
151+              plugin.repo = d[1];
152+              plugin.id = `${d[0]}/${d[1]}`;
153+            }
154+          });
155+          if (!plugin.link.includes('github.com')) return;
156+          data.push(plugin);
157+        });
158+      });
159+    }
160+  });
161+
162+  const plugins: { [key: string]: Plugin } = {};
163+  const markdown: { [key: string]: string } = {};
164+  for (let i = 0; i < data.length; i += 1) {
165+    const d = data[i];
166+    const result = await fetchGithubData(d);
167+    if (result.ok) {
168+      const resp = result.data;
169+      const id = `${d.username}/${d.repo}`;
170+
171+      markdown[id] = resp.readme;
172+      plugins[id] = createPlugin({
173+        id,
174+        username: d.username,
175+        repo: d.repo,
176+        name: d.name,
177+        link: d.link,
178+        tags: d.tags,
179+        homepage: resp.repo.homepage,
180+        branch: resp.repo.default_branch,
181+        openIssues: resp.repo.open_issues_count,
182+        watchers: resp.repo.watchers_count,
183+        forks: resp.repo.forks,
184+        stars: resp.repo.stargazers_count,
185+        subscribers: resp.repo.subscribers_count,
186+        network: resp.repo.network_count,
187+        description: resp.repo.description,
188+      });
189+    }
190+  }
191+
192+  await writeFile('./src/lib/db.json', JSON.stringify({ plugins }));
193+  await writeFile('./src/lib/markdown.json', JSON.stringify({ markdown }));
194+}
195+
196+fetchMarkdown().then(processMarkdown).catch(console.error);
A src/routes/index.svelte
+281, -0
  1@@ -0,0 +1,281 @@
  2+<script context="module" lang="ts">
  3+  export const prerender = true;
  4+
  5+  import { derivePluginData } from '$lib/plugin-data';
  6+  import * as db from '$lib/db.json';
  7+
  8+  export async function load() {
  9+    const pluginDb = db.plugins as any;
 10+    const { plugins, tags } = derivePluginData(pluginDb);
 11+
 12+    return {
 13+      props: {
 14+        plugins,
 15+        tags,
 16+      },
 17+    };
 18+  }
 19+</script>
 20+
 21+<script lang="ts">
 22+  import qs from 'query-string';
 23+  import { goto } from '$app/navigation';
 24+  import { page } from '$app/stores';
 25+  import type { Plugin, Tag } from '$lib/types';
 26+  import TagView from '$lib/tag.svelte';
 27+  import Icon from '$lib/icon.svelte';
 28+  import Tooltip from '$lib/tooltip.svelte';
 29+
 30+  let timer: NodeJS.Timeout;
 31+  const debounce = (fn: (v: string) => any) => {
 32+    return (event: any) => {
 33+      clearTimeout(timer);
 34+      timer = setTimeout(() => {
 35+        fn(event.target.value);
 36+      }, 250);
 37+    };
 38+  };
 39+
 40+  function onSearch(curSearch: string) {
 41+    if (curSearch) {
 42+      const query = qs.parseUrl(window.location.search);
 43+      const s = encodeURIComponent(curSearch);
 44+      query.query.search = s;
 45+      goto(`/${qs.stringifyUrl(query)}`, {
 46+        replaceState: true,
 47+        noscroll: true,
 48+        keepfocus: true,
 49+      });
 50+    } else {
 51+      const query = qs.parseUrl(window.location.search);
 52+      delete query.query.search;
 53+      goto(`/${qs.stringifyUrl(query)}`, { replaceState: true, noscroll: true, keepfocus: true });
 54+    }
 55+  }
 56+
 57+  function clearSearch() {
 58+    goto('/', {
 59+      replaceState: true,
 60+      noscroll: true,
 61+      keepfocus: true,
 62+    });
 63+    document.getElementById('search').focus();
 64+  }
 65+
 66+  function filterPlugins({ search, plugins }: { search: string; plugins: Plugin[] }): Plugin[] {
 67+    if (!search) return plugins;
 68+
 69+    const onFilter = (plugin: Plugin) => {
 70+      if (search.includes('tag:')) {
 71+        const nextSearch = search.replace('tag:', '');
 72+        return plugin.tags.some((tag) => tag === nextSearch);
 73+      }
 74+      return plugin.id.toLocaleLowerCase().includes(search);
 75+    };
 76+
 77+    return plugins.filter(onFilter);
 78+  }
 79+
 80+  let search = '';
 81+  page.subscribe(({ query }) => {
 82+    search = decodeURIComponent(query.get('search') || '');
 83+  });
 84+
 85+  export let plugins: Plugin[] = [];
 86+  export let tags: Tag[] = [];
 87+  $: results = filterPlugins({ search, plugins });
 88+</script>
 89+
 90+<div class="container">
 91+  <div class="intro">
 92+    <h1 id="logo">
 93+      Neovim Awesome
 94+      <a href="https://github.com/neurosnap/neovim-awesome" target="_blank">
 95+        <Icon icon="github" />
 96+      </a>
 97+    </h1>
 98+  </div>
 99+
100+  <div class="search_view">
101+    <span class="search_icon"><Icon icon="search" /></span>
102+    <input
103+      id="search"
104+      on:keyup={debounce(onSearch)}
105+      value={search}
106+      placeholder="search to find a plugin"
107+    />
108+    {#if search}
109+      <span class="clear_search_icon" on:click={clearSearch}>
110+        <Icon icon="x-circle" />
111+      </span>
112+    {/if}
113+  </div>
114+
115+  <div class="tags_view">
116+    {#each tags as tag}
117+      <TagView {tag} {onSearch} />
118+    {/each}
119+  </div>
120+  <div class="plugins_view">
121+    <div class="plugins_list">
122+      {#each results as plugin}
123+        <div class="plugin">
124+          <div class="plugin_top">
125+            <h2 class="plugin_item_header">
126+              <a href="/plugin/{plugin.username}/{plugin.repo}">{plugin.repo}</a>
127+            </h2>
128+            <div class="plugin_metrics">
129+              <Tooltip tip="stars" bottom>
130+                <div class="metric"><Icon icon="star" /> <span>{plugin.stars}</span></div>
131+              </Tooltip>
132+              <Tooltip tip="open issues" bottom>
133+                <div class="metric">
134+                  <Icon icon="alert-circle" /> <span>{plugin.openIssues}</span>
135+                </div>
136+              </Tooltip>
137+            </div>
138+          </div>
139+          <div class="plugin_desc">
140+            {plugin.description}
141+          </div>
142+        </div>
143+      {/each}
144+    </div>
145+  </div>
146+</div>
147+
148+<svelte:head>
149+  <title>Neovim Awesome - Plugin Search</title>
150+</svelte:head>
151+
152+<style>
153+  .search_view {
154+    grid-column: 2;
155+    grid-row: 1;
156+    position: relative;
157+  }
158+
159+  .search_icon {
160+    position: absolute;
161+    top: 15px;
162+    left: 0;
163+  }
164+
165+  .clear_search_icon {
166+    position: absolute;
167+    top: 15px;
168+    right: 0;
169+    cursor: pointer;
170+  }
171+
172+  #search {
173+    width: calc(100% - 60px);
174+    height: 47px;
175+    padding-left: 30px;
176+    padding-right: 30px;
177+  }
178+
179+  .container {
180+    height: 100vh;
181+    display: grid;
182+    grid-template-columns: minmax(250px, 400px) minmax(350px, 600px);
183+    grid-template-rows: 50px 1fr;
184+    column-gap: 10px;
185+  }
186+
187+  .intro {
188+    padding: 0 10px 0 10px;
189+    grid-column: 1;
190+    grid-row: 1;
191+  }
192+
193+  #logo {
194+    display: flex;
195+    align-items: center;
196+  }
197+
198+  #logo > a {
199+    margin-left: 15px;
200+  }
201+
202+  .tags_view {
203+    grid-column: 1;
204+    grid-row: 2;
205+    padding: 0 10px;
206+    height: calc(100vh - 50px);
207+    overflow-y: scroll;
208+  }
209+
210+  .plugin {
211+    display: flex;
212+    flex-direction: column;
213+    padding: 15px;
214+    height: 110px;
215+    border-bottom: 1px solid var(--primary-color);
216+  }
217+
218+  .plugin_top {
219+    display: flex;
220+    align-items: center;
221+    margin-bottom: 5px;
222+  }
223+
224+  .plugin_desc {
225+    margin-top: 5px;
226+  }
227+
228+  .plugin_item_header {
229+    flex: 1;
230+    display: flex;
231+    align-items: center;
232+  }
233+
234+  .plugin_metrics {
235+    width: 150px;
236+    min-width: 150px;
237+    display: flex;
238+    justify-content: space-between;
239+  }
240+
241+  .metric {
242+    display: flex;
243+    justify-content: center;
244+    align-items: center;
245+    cursor: pointer;
246+  }
247+
248+  .plugins_view {
249+    display: flex;
250+    align-items: center;
251+    flex-direction: column;
252+    grid-column: 2;
253+    grid-row: 2;
254+    height: calc(100vh - 50px);
255+  }
256+
257+  .plugins_list {
258+    width: 100%;
259+    overflow-y: auto;
260+    overflow-x: hidden;
261+  }
262+
263+  @media only screen and (max-width: 700px) {
264+    .container {
265+      grid-template-columns: 1fr;
266+    }
267+
268+    #logo,
269+    .tags_view {
270+      display: none;
271+    }
272+
273+    .search_view {
274+      grid-column: 1;
275+      padding: 0 10px;
276+    }
277+
278+    .plugins_view {
279+      grid-column: 1;
280+    }
281+  }
282+</style>
A src/routes/plugin/[username]/[repo].json.ts
+15, -0
 1@@ -0,0 +1,15 @@
 2+import type { Plugin } from '$lib/types';
 3+import * as db from '$lib/db.json';
 4+import * as pluginHtml from '$lib/html.json';
 5+import { derivePluginData } from '$lib/plugin-data';
 6+
 7+export async function get({ params }) {
 8+  const { username, repo } = params;
 9+  const id = `${username}/${repo}`;
10+  const plugin = db.plugins[id] as Plugin;
11+  const { tagDb } = derivePluginData(db.plugins);
12+  const html = pluginHtml.html[id];
13+  const tags = plugin.tags.map((t) => tagDb[t]).filter(Boolean);
14+
15+  return { body: { plugin, html, tags } };
16+}
A src/routes/plugin/[username]/[repo].svelte
+82, -0
 1@@ -0,0 +1,82 @@
 2+<script context="module" lang="ts">
 3+  export const prerender = true;
 4+
 5+  import type { LoadInput } from '@sveltejs/kit';
 6+
 7+  export async function load({ page, fetch }: LoadInput) {
 8+    const { username, repo } = page.params;
 9+    const url = `/plugin/${username}/${repo}.json`;
10+    const res = await fetch(url);
11+
12+    if (res.ok) {
13+      return {
14+        props: await res.json(),
15+      };
16+    }
17+
18+    return {
19+      status: res.status,
20+      error: new Error(`Could not load ${url}`),
21+    };
22+  }
23+</script>
24+
25+<script lang="ts">
26+  import type { Plugin, Tag } from '$lib/types';
27+  import PluginView from '$lib/plugin.svelte';
28+  import Icon from '$lib/icon.svelte';
29+
30+  export let plugin: Plugin;
31+  export let tags: Tag[];
32+  export let html: string;
33+</script>
34+
35+<svelte:head>
36+  <title>
37+    {plugin.id}: {plugin.description}
38+  </title>
39+  <meta property="og:title" content={plugin.id} />
40+  <meta name="twitter:title" content={plugin.id} />
41+  <meta itemprop="name" content={plugin.id} />
42+
43+  <meta name="description" content="{plugin.id}: {plugin.description}" />
44+  <meta itemprop="description" content="{plugin.id}: {plugin.description}" />
45+  <meta property="og:description" content="{plugin.id}: {plugin.description}" />
46+  <meta name="twitter:description" content="{plugin.id}: {plugin.description}" />
47+</svelte:head>
48+
49+<div class="container">
50+  <div class="view">
51+    <div class="header">
52+      <h1>{plugin.id}</h1>
53+      {#if plugin.homepage}<a href={plugin.homepage} target="_blank">website</a>{/if}
54+      <a href={plugin.link} target="_blank"><Icon icon="github" /> <span>github</span></a>
55+    </div>
56+    <PluginView {plugin} {tags} {html} />
57+  </div>
58+</div>
59+
60+<style>
61+  .container {
62+    display: flex;
63+    justify-content: center;
64+    width: 100%;
65+  }
66+
67+  .view {
68+    max-width: 800px;
69+    width: 95%;
70+    padding: 0 10px 30px 10px;
71+  }
72+
73+  .header {
74+    display: flex;
75+    align-items: center;
76+  }
77+
78+  .header > a {
79+    margin-left: 15px;
80+    display: flex;
81+    align-items: center;
82+  }
83+</style>
A src/transform.ts
+49, -0
 1@@ -0,0 +1,49 @@
 2+import fs from 'fs';
 3+import util from 'util';
 4+import marked from 'marked';
 5+
 6+import type { Plugin } from './lib/types';
 7+
 8+const writeFile = util.promisify(fs.writeFile);
 9+const readFile = util.promisify(fs.readFile);
10+
11+async function clean() {
12+  const file = await readFile('./src/lib/db.json', 'utf-8');
13+  const db = JSON.parse(file.toString());
14+  const markdownFile = await readFile('./src/lib/markdown.json', 'utf-8');
15+  const markdownDb = JSON.parse(markdownFile.toString());
16+
17+  const plugins = Object.values(db.plugins);
18+  const nextDb = {};
19+  plugins.forEach((plugin: Plugin) => {
20+    console.log(`processing ${plugin.id}`);
21+    marked.use({
22+      walkTokens: (token) => {
23+        const domain = 'https://github.com';
24+        const pre = `${domain}/${plugin.username}/${plugin.repo}/blob/${plugin.branch}`;
25+
26+        if (token.type === 'link' || token.type === 'image') {
27+          if (token.href && !token.href.startsWith('http') && !token.href.startsWith('#')) {
28+            token.href = `${pre}/${token.href.replace('./', ``)}`;
29+          }
30+        } else if (token.type === 'html') {
31+          token.text = '';
32+          // token.text = token.text.replace(/\.\//g, `${pre}/`);
33+        }
34+      },
35+    });
36+
37+    const markdown = markdownDb.markdown[plugin.id];
38+    if (!markdown) return;
39+    const html = marked(markdown);
40+    nextDb[plugin.id] = html;
41+  });
42+
43+  try {
44+    await writeFile('./src/lib/html.json', JSON.stringify({ html: nextDb }));
45+  } catch (err) {
46+    console.error(err);
47+  }
48+}
49+
50+clean().catch(console.error);
A static/alert-circle.svg
+1, -0
1@@ -0,0 +1 @@
2+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#f2f2f2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-alert-circle"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
A static/favicon.ico
+0, -0
A static/git-branch.svg
+1, -0
1@@ -0,0 +1 @@
2+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#f2f2f2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-git-branch"><line x1="6" y1="3" x2="6" y2="15"></line><circle cx="18" cy="6" r="3"></circle><circle cx="6" cy="18" r="3"></circle><path d="M18 9a9 9 0 0 1-9 9"></path></svg>
A static/github.svg
+1, -0
1@@ -0,0 +1 @@
2+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#f2f2f2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-github"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg>
A static/main.css
+91, -0
 1@@ -0,0 +1,91 @@
 2+:root[data-theme='theme-light'] {
 3+  --primary-color: #eee;
 4+  --highlight-color: #0000ee;
 5+  --highlight-secondary: #551a8b;
 6+  --text-color: #080808;
 7+  --bg-color: #ffffff;
 8+}
 9+
10+:root[data-theme='theme-dark'] {
11+  --primary-color: #414558;
12+  --highlight-color: #8be9fd;
13+  --highlight-secondary: #bd93f9;
14+  --text-color: #f2f2f2;
15+  --bg-color: #282a36;
16+  --yellow: #ffff80;
17+  --pink: #ff80bf;
18+  --orange: #ffca80;
19+  --green: #50fa7b;
20+}
21+
22+.green {
23+  background-color: var(--green);
24+}
25+
26+.yellow {
27+  background-color: var(--yellow);
28+}
29+
30+.pink {
31+  background-color: var(--pink);
32+}
33+
34+.orange {
35+  background-color: var(--orange);
36+}
37+
38+.purple {
39+  background-color: var(--highlight-secondary);
40+}
41+
42+body {
43+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif,
44+    'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
45+  background-color: var(--bg-color);
46+  color: var(--text-color);
47+  width: 100%;
48+  height: 100%;
49+  font-size: 16px;
50+  padding: 0;
51+  margin: 0;
52+  overflow-x: hidden;
53+}
54+
55+a {
56+  color: var(--highlight-color);
57+}
58+
59+a:visited {
60+  color: var(--highlight-secondary);
61+}
62+
63+h1,h2,h3,h4,h5,h6 {
64+  margin: 0;
65+  padding: 0;
66+}
67+
68+pre {
69+  padding: 15px;
70+  background-color: var(--primary-color);
71+  border-radius: 3px;
72+  overflow-x: auto;
73+}
74+
75+code {
76+  background-color: var(--primary-color);
77+}
78+
79+input {
80+  border: 0;
81+  outline: none !important;
82+  background-color: var(--bg-color);
83+  color: var(--highlight-color);
84+  border-bottom: 1px solid var(--highlight-color);
85+  font-size: 1.5rem;
86+}
87+
88+input:focus {
89+  border: 0;
90+  border-bottom: 1px solid var(--highlight-secondary);
91+  color: var(--highlight-secondary);
92+}
A static/search.svg
+1, -0
1@@ -0,0 +1 @@
2+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#f2f2f2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
A static/star.svg
+1, -0
1@@ -0,0 +1 @@
2+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#f2f2f2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-star"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>
A static/users.svg
+1, -0
1@@ -0,0 +1 @@
2+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#f2f2f2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-users"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
A static/x-circle.svg
+1, -0
1@@ -0,0 +1 @@
2+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#f2f2f2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-x-circle"><circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg>
A svelte.config.js
+25, -0
 1@@ -0,0 +1,25 @@
 2+import preprocess from 'svelte-preprocess';
 3+import adapter from '@sveltejs/adapter-static';
 4+
 5+/** @type {import('@sveltejs/kit').Config} */
 6+const config = {
 7+  // Consult https://github.com/sveltejs/svelte-preprocess
 8+  // for more information about preprocessors
 9+  preprocess: preprocess(),
10+
11+  kit: {
12+    // hydrate the <div id="svelte"> element in src/app.html
13+    target: '#svelte',
14+    adapter: adapter({
15+      // default options are shown
16+      pages: 'build',
17+      assets: 'build',
18+      fallback: '404.html',
19+    }),
20+    prerender: {
21+      force: true,
22+    },
23+  },
24+};
25+
26+export default config;
A tsconfig.json
+30, -0
 1@@ -0,0 +1,30 @@
 2+{
 3+	"compilerOptions": {
 4+		"moduleResolution": "node",
 5+		"module": "es2020",
 6+		"lib": ["es2020"],
 7+		"target": "es2019",
 8+		/**
 9+			svelte-preprocess cannot figure out whether you have a value or a type, so tell TypeScript
10+			to enforce using \`import type\` instead of \`import\` for Types.
11+			*/
12+		"importsNotUsedAsValues": "error",
13+		"isolatedModules": true,
14+		"resolveJsonModule": true,
15+		/**
16+			To have warnings/errors of the Svelte compiler at the correct position,
17+			enable source maps by default.
18+			*/
19+		"sourceMap": true,
20+		"esModuleInterop": true,
21+		"skipLibCheck": true,
22+		"forceConsistentCasingInFileNames": true,
23+		"baseUrl": ".",
24+		"allowJs": true,
25+		"checkJs": true,
26+		"paths": {
27+			"$lib/*": ["src/lib/*"]
28+		}
29+	},
30+	"include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.ts", "src/**/*.svelte"]
31+}
A yarn.lock
+1810, -0
   1@@ -0,0 +1,1810 @@
   2+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
   3+# yarn lockfile v1
   4+
   5+
   6+"@babel/code-frame@7.12.11":
   7+  version "7.12.11"
   8+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
   9+  integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
  10+  dependencies:
  11+    "@babel/highlight" "^7.10.4"
  12+
  13+"@babel/code-frame@^7.0.0":
  14+  version "7.14.5"
  15+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb"
  16+  integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==
  17+  dependencies:
  18+    "@babel/highlight" "^7.14.5"
  19+
  20+"@babel/helper-validator-identifier@^7.14.5":
  21+  version "7.14.5"
  22+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8"
  23+  integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==
  24+
  25+"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5":
  26+  version "7.14.5"
  27+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9"
  28+  integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==
  29+  dependencies:
  30+    "@babel/helper-validator-identifier" "^7.14.5"
  31+    chalk "^2.0.0"
  32+    js-tokens "^4.0.0"
  33+
  34+"@eslint/eslintrc@^0.4.2":
  35+  version "0.4.2"
  36+  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179"
  37+  integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==
  38+  dependencies:
  39+    ajv "^6.12.4"
  40+    debug "^4.1.1"
  41+    espree "^7.3.0"
  42+    globals "^13.9.0"
  43+    ignore "^4.0.6"
  44+    import-fresh "^3.2.1"
  45+    js-yaml "^3.13.1"
  46+    minimatch "^3.0.4"
  47+    strip-json-comments "^3.1.1"
  48+
  49+"@humanwhocodes/config-array@^0.5.0":
  50+  version "0.5.0"
  51+  resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
  52+  integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==
  53+  dependencies:
  54+    "@humanwhocodes/object-schema" "^1.2.0"
  55+    debug "^4.1.1"
  56+    minimatch "^3.0.4"
  57+
  58+"@humanwhocodes/object-schema@^1.2.0":
  59+  version "1.2.0"
  60+  resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf"
  61+  integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==
  62+
  63+"@nodelib/fs.scandir@2.1.5":
  64+  version "2.1.5"
  65+  resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
  66+  integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
  67+  dependencies:
  68+    "@nodelib/fs.stat" "2.0.5"
  69+    run-parallel "^1.1.9"
  70+
  71+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
  72+  version "2.0.5"
  73+  resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
  74+  integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
  75+
  76+"@nodelib/fs.walk@^1.2.3":
  77+  version "1.2.8"
  78+  resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
  79+  integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
  80+  dependencies:
  81+    "@nodelib/fs.scandir" "2.1.5"
  82+    fastq "^1.6.0"
  83+
  84+"@rollup/pluginutils@^4.1.0":
  85+  version "4.1.0"
  86+  resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.0.tgz#0dcc61c780e39257554feb7f77207dceca13c838"
  87+  integrity sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==
  88+  dependencies:
  89+    estree-walker "^2.0.1"
  90+    picomatch "^2.2.2"
  91+
  92+"@sveltejs/adapter-static@^1.0.0-next.13":
  93+  version "1.0.0-next.13"
  94+  resolved "https://registry.yarnpkg.com/@sveltejs/adapter-static/-/adapter-static-1.0.0-next.13.tgz#5cba8f2905a5a7b956c2663d73ac02f7eb6da7c4"
  95+  integrity sha512-zaXJlWK9JfrjrE6nG5etB8kf4DSkbE3H8Ql6gmCk3WjdvpY85a60TMYBU9OK2iunkqpHnPYiMUGEnOGYmWlLYA==
  96+
  97+"@sveltejs/kit@next":
  98+  version "1.0.0-next.123"
  99+  resolved "https://registry.yarnpkg.com/@sveltejs/kit/-/kit-1.0.0-next.123.tgz#bd93fc563d205485dbc99bb9a3b8996c204cf8ef"
 100+  integrity sha512-C9UZ5yYdU94hjpmwTPmDpCWphPc9RsSR4TxV67JM+SqDrSCMKx65JI3+goQQzY2ZHARUGukoc1+ijaRxW48AWQ==
 101+  dependencies:
 102+    "@sveltejs/vite-plugin-svelte" "^1.0.0-next.11"
 103+    cheap-watch "^1.0.3"
 104+    sade "^1.7.4"
 105+    vite "^2.4.1"
 106+
 107+"@sveltejs/vite-plugin-svelte@^1.0.0-next.11":
 108+  version "1.0.0-next.11"
 109+  resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.11.tgz#1a415a1c4b1642a452e073438c63a73cfd203b51"
 110+  integrity sha512-EYR1I145k5rflVqhPwk3442m3bkYimTKSHM9uO5KdomXzt+GS9ZSBJQE3/wy1Di9V8OnGa3oKpckI3OZsHkTIA==
 111+  dependencies:
 112+    "@rollup/pluginutils" "^4.1.0"
 113+    chalk "^4.1.1"
 114+    debug "^4.3.2"
 115+    require-relative "^0.8.7"
 116+    svelte-hmr "^0.14.4"
 117+
 118+"@tsconfig/node10@^1.0.7":
 119+  version "1.0.8"
 120+  resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9"
 121+  integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==
 122+
 123+"@tsconfig/node12@^1.0.7":
 124+  version "1.0.9"
 125+  resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c"
 126+  integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==
 127+
 128+"@tsconfig/node14@^1.0.0":
 129+  version "1.0.1"
 130+  resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2"
 131+  integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==
 132+
 133+"@tsconfig/node16@^1.0.1":
 134+  version "1.0.1"
 135+  resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.1.tgz#a6ca6a9a0ff366af433f42f5f0e124794ff6b8f1"
 136+  integrity sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==
 137+
 138+"@types/json-schema@^7.0.7":
 139+  version "7.0.8"
 140+  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818"
 141+  integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==
 142+
 143+"@types/marked@^2.0.4":
 144+  version "2.0.4"
 145+  resolved "https://registry.yarnpkg.com/@types/marked/-/marked-2.0.4.tgz#34a0ea548afe6e0c01095229d47b48b2af650613"
 146+  integrity sha512-L9VRSe0Id8xbPL99mUo/4aKgD7ZoRwFZqUQScNKHi2pFjF9ZYSMNShUHD6VlMT6J/prQq0T1mxuU25m3R7dFzg==
 147+
 148+"@types/node-fetch@^2.5.11":
 149+  version "2.5.11"
 150+  resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.11.tgz#ce22a2e65fc8999f4dbdb7ddbbcf187d755169e4"
 151+  integrity sha512-2upCKaqVZETDRb8A2VTaRymqFBEgH8u6yr96b/u3+1uQEPDRo3mJLEiPk7vdXBHRtjwkjqzFYMJXrt0Z9QsYjQ==
 152+  dependencies:
 153+    "@types/node" "*"
 154+    form-data "^3.0.0"
 155+
 156+"@types/node@*":
 157+  version "16.3.0"
 158+  resolved "https://registry.yarnpkg.com/@types/node/-/node-16.3.0.tgz#1836664e4fad13b51b07eb6e882a53925e6543c4"
 159+  integrity sha512-OydMCocGMGqw/1BnWbhtK+AtwyWTOigtrQlRe57OQmTNcI3HKlVI5FGlh+c4mSqInMPLynFrTlYjfajPu9O/eQ==
 160+
 161+"@types/node@^16.3.3":
 162+  version "16.3.3"
 163+  resolved "https://registry.yarnpkg.com/@types/node/-/node-16.3.3.tgz#0c30adff37bbbc7a50eb9b58fae2a504d0d88038"
 164+  integrity sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ==
 165+
 166+"@types/parse-json@^4.0.0":
 167+  version "4.0.0"
 168+  resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
 169+  integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
 170+
 171+"@types/pug@^2.0.4":
 172+  version "2.0.5"
 173+  resolved "https://registry.yarnpkg.com/@types/pug/-/pug-2.0.5.tgz#69bc700934dd473c7ab97270bd2dbacefe562231"
 174+  integrity sha512-LOnASQoeNZMkzexRuyqcBBDZ6rS+rQxUMkmj5A0PkhhiSZivLIuz6Hxyr1mkGoEZEkk66faROmpMi4fFkrKsBA==
 175+
 176+"@types/sass@^1.16.0":
 177+  version "1.16.1"
 178+  resolved "https://registry.yarnpkg.com/@types/sass/-/sass-1.16.1.tgz#cf465bd1fea486d0331f760db023de14daf4980d"
 179+  integrity sha512-iZUcRrGuz/Tbg3loODpW7vrQJkUtpY2fFSf4ELqqkApcS2TkZ1msk7ie8iZPB86lDOP8QOTTmuvWjc5S0R9OjQ==
 180+  dependencies:
 181+    "@types/node" "*"
 182+
 183+"@typescript-eslint/eslint-plugin@^4.19.0":
 184+  version "4.28.2"
 185+  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.2.tgz#7a8320f00141666813d0ae43b49ee8244f7cf92a"
 186+  integrity sha512-PGqpLLzHSxq956rzNGasO3GsAPf2lY9lDUBXhS++SKonglUmJypaUtcKzRtUte8CV7nruwnDxtLUKpVxs0wQBw==
 187+  dependencies:
 188+    "@typescript-eslint/experimental-utils" "4.28.2"
 189+    "@typescript-eslint/scope-manager" "4.28.2"
 190+    debug "^4.3.1"
 191+    functional-red-black-tree "^1.0.1"
 192+    regexpp "^3.1.0"
 193+    semver "^7.3.5"
 194+    tsutils "^3.21.0"
 195+
 196+"@typescript-eslint/experimental-utils@4.28.2":
 197+  version "4.28.2"
 198+  resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.2.tgz#4ebdec06a10888e9326e1d51d81ad52a361bd0b0"
 199+  integrity sha512-MwHPsL6qo98RC55IoWWP8/opTykjTp4JzfPu1VfO2Z0MshNP0UZ1GEV5rYSSnZSUI8VD7iHvtIPVGW5Nfh7klQ==
 200+  dependencies:
 201+    "@types/json-schema" "^7.0.7"
 202+    "@typescript-eslint/scope-manager" "4.28.2"
 203+    "@typescript-eslint/types" "4.28.2"
 204+    "@typescript-eslint/typescript-estree" "4.28.2"
 205+    eslint-scope "^5.1.1"
 206+    eslint-utils "^3.0.0"
 207+
 208+"@typescript-eslint/parser@^4.19.0":
 209+  version "4.28.2"
 210+  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.2.tgz#6aff11bf4b91eb67ca7517962eede951e9e2a15d"
 211+  integrity sha512-Q0gSCN51eikAgFGY+gnd5p9bhhCUAl0ERMiDKrTzpSoMYRubdB8MJrTTR/BBii8z+iFwz8oihxd0RAdP4l8w8w==
 212+  dependencies:
 213+    "@typescript-eslint/scope-manager" "4.28.2"
 214+    "@typescript-eslint/types" "4.28.2"
 215+    "@typescript-eslint/typescript-estree" "4.28.2"
 216+    debug "^4.3.1"
 217+
 218+"@typescript-eslint/scope-manager@4.28.2":
 219+  version "4.28.2"
 220+  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.2.tgz#451dce90303a3ce283750111495d34c9c204e510"
 221+  integrity sha512-MqbypNjIkJFEFuOwPWNDjq0nqXAKZvDNNs9yNseoGBB1wYfz1G0WHC2AVOy4XD7di3KCcW3+nhZyN6zruqmp2A==
 222+  dependencies:
 223+    "@typescript-eslint/types" "4.28.2"
 224+    "@typescript-eslint/visitor-keys" "4.28.2"
 225+
 226+"@typescript-eslint/types@4.28.2":
 227+  version "4.28.2"
 228+  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.2.tgz#e6b9e234e0e9a66c4d25bab881661e91478223b5"
 229+  integrity sha512-Gr15fuQVd93uD9zzxbApz3wf7ua3yk4ZujABZlZhaxxKY8ojo448u7XTm/+ETpy0V0dlMtj6t4VdDvdc0JmUhA==
 230+
 231+"@typescript-eslint/typescript-estree@4.28.2":
 232+  version "4.28.2"
 233+  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.2.tgz#680129b2a285289a15e7c6108c84739adf3a798c"
 234+  integrity sha512-86lLstLvK6QjNZjMoYUBMMsULFw0hPHJlk1fzhAVoNjDBuPVxiwvGuPQq3fsBMCxuDJwmX87tM/AXoadhHRljg==
 235+  dependencies:
 236+    "@typescript-eslint/types" "4.28.2"
 237+    "@typescript-eslint/visitor-keys" "4.28.2"
 238+    debug "^4.3.1"
 239+    globby "^11.0.3"
 240+    is-glob "^4.0.1"
 241+    semver "^7.3.5"
 242+    tsutils "^3.21.0"
 243+
 244+"@typescript-eslint/visitor-keys@4.28.2":
 245+  version "4.28.2"
 246+  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.2.tgz#bf56a400857bb68b59b311e6d0a5fbef5c3b5130"
 247+  integrity sha512-aT2B4PLyyRDUVUafXzpZFoc0C9t0za4BJAKP5sgWIhG+jHECQZUEjuQSCIwZdiJJ4w4cgu5r3Kh20SOdtEBl0w==
 248+  dependencies:
 249+    "@typescript-eslint/types" "4.28.2"
 250+    eslint-visitor-keys "^2.0.0"
 251+
 252+acorn-jsx@^5.3.1:
 253+  version "5.3.2"
 254+  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
 255+  integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
 256+
 257+acorn@^7.4.0:
 258+  version "7.4.1"
 259+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
 260+  integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
 261+
 262+aggregate-error@^3.0.0:
 263+  version "3.1.0"
 264+  resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
 265+  integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
 266+  dependencies:
 267+    clean-stack "^2.0.0"
 268+    indent-string "^4.0.0"
 269+
 270+ajv@^6.10.0, ajv@^6.12.4:
 271+  version "6.12.6"
 272+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
 273+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
 274+  dependencies:
 275+    fast-deep-equal "^3.1.1"
 276+    fast-json-stable-stringify "^2.0.0"
 277+    json-schema-traverse "^0.4.1"
 278+    uri-js "^4.2.2"
 279+
 280+ajv@^8.0.1:
 281+  version "8.6.1"
 282+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.1.tgz#ae65764bf1edde8cd861281cda5057852364a295"
 283+  integrity sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==
 284+  dependencies:
 285+    fast-deep-equal "^3.1.1"
 286+    json-schema-traverse "^1.0.0"
 287+    require-from-string "^2.0.2"
 288+    uri-js "^4.2.2"
 289+
 290+ansi-colors@^4.1.1:
 291+  version "4.1.1"
 292+  resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
 293+  integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
 294+
 295+ansi-escapes@^4.3.0:
 296+  version "4.3.2"
 297+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
 298+  integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
 299+  dependencies:
 300+    type-fest "^0.21.3"
 301+
 302+ansi-regex@^5.0.0:
 303+  version "5.0.0"
 304+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
 305+  integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
 306+
 307+ansi-styles@^3.2.1:
 308+  version "3.2.1"
 309+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
 310+  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
 311+  dependencies:
 312+    color-convert "^1.9.0"
 313+
 314+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
 315+  version "4.3.0"
 316+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
 317+  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
 318+  dependencies:
 319+    color-convert "^2.0.1"
 320+
 321+anymatch@~3.1.2:
 322+  version "3.1.2"
 323+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
 324+  integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
 325+  dependencies:
 326+    normalize-path "^3.0.0"
 327+    picomatch "^2.0.4"
 328+
 329+arg@^4.1.0:
 330+  version "4.1.3"
 331+  resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
 332+  integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
 333+
 334+argparse@^1.0.7:
 335+  version "1.0.10"
 336+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
 337+  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
 338+  dependencies:
 339+    sprintf-js "~1.0.2"
 340+
 341+array-union@^2.1.0:
 342+  version "2.1.0"
 343+  resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
 344+  integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
 345+
 346+astral-regex@^2.0.0:
 347+  version "2.0.0"
 348+  resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
 349+  integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
 350+
 351+asynckit@^0.4.0:
 352+  version "0.4.0"
 353+  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
 354+  integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
 355+
 356+balanced-match@^1.0.0:
 357+  version "1.0.2"
 358+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
 359+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
 360+
 361+binary-extensions@^2.0.0:
 362+  version "2.2.0"
 363+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
 364+  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
 365+
 366+brace-expansion@^1.1.7:
 367+  version "1.1.11"
 368+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
 369+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
 370+  dependencies:
 371+    balanced-match "^1.0.0"
 372+    concat-map "0.0.1"
 373+
 374+braces@^3.0.1, braces@~3.0.2:
 375+  version "3.0.2"
 376+  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
 377+  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
 378+  dependencies:
 379+    fill-range "^7.0.1"
 380+
 381+buffer-from@^1.0.0:
 382+  version "1.1.1"
 383+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
 384+  integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
 385+
 386+callsites@^3.0.0:
 387+  version "3.1.0"
 388+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
 389+  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
 390+
 391+chalk@^2.0.0:
 392+  version "2.4.2"
 393+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
 394+  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
 395+  dependencies:
 396+    ansi-styles "^3.2.1"
 397+    escape-string-regexp "^1.0.5"
 398+    supports-color "^5.3.0"
 399+
 400+chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1:
 401+  version "4.1.1"
 402+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"
 403+  integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==
 404+  dependencies:
 405+    ansi-styles "^4.1.0"
 406+    supports-color "^7.1.0"
 407+
 408+cheap-watch@^1.0.3:
 409+  version "1.0.3"
 410+  resolved "https://registry.yarnpkg.com/cheap-watch/-/cheap-watch-1.0.3.tgz#3c4265718bcf8f1ae08f5e450f9f4693432e028e"
 411+  integrity sha512-xC5CruMhLzjPwJ5ecUxGu1uGmwJQykUhqd2QrCrYbwvsFYdRyviu6jG9+pccwDXJR/OpmOTOJ9yLFunVgQu9wg==
 412+
 413+chokidar@^3.4.1:
 414+  version "3.5.2"
 415+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"
 416+  integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==
 417+  dependencies:
 418+    anymatch "~3.1.2"
 419+    braces "~3.0.2"
 420+    glob-parent "~5.1.2"
 421+    is-binary-path "~2.1.0"
 422+    is-glob "~4.0.1"
 423+    normalize-path "~3.0.0"
 424+    readdirp "~3.6.0"
 425+  optionalDependencies:
 426+    fsevents "~2.3.2"
 427+
 428+clean-stack@^2.0.0:
 429+  version "2.2.0"
 430+  resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
 431+  integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
 432+
 433+cli-cursor@^3.1.0:
 434+  version "3.1.0"
 435+  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
 436+  integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
 437+  dependencies:
 438+    restore-cursor "^3.1.0"
 439+
 440+cli-truncate@^2.1.0:
 441+  version "2.1.0"
 442+  resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
 443+  integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
 444+  dependencies:
 445+    slice-ansi "^3.0.0"
 446+    string-width "^4.2.0"
 447+
 448+color-convert@^1.9.0:
 449+  version "1.9.3"
 450+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
 451+  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
 452+  dependencies:
 453+    color-name "1.1.3"
 454+
 455+color-convert@^2.0.1:
 456+  version "2.0.1"
 457+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
 458+  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
 459+  dependencies:
 460+    color-name "~1.1.4"
 461+
 462+color-name@1.1.3:
 463+  version "1.1.3"
 464+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
 465+  integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
 466+
 467+color-name@~1.1.4:
 468+  version "1.1.4"
 469+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
 470+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
 471+
 472+colorette@^1.2.2:
 473+  version "1.2.2"
 474+  resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
 475+  integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
 476+
 477+combined-stream@^1.0.8:
 478+  version "1.0.8"
 479+  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
 480+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
 481+  dependencies:
 482+    delayed-stream "~1.0.0"
 483+
 484+commander@^7.2.0:
 485+  version "7.2.0"
 486+  resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
 487+  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
 488+
 489+concat-map@0.0.1:
 490+  version "0.0.1"
 491+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
 492+  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
 493+
 494+cosmiconfig@^7.0.0:
 495+  version "7.0.0"
 496+  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3"
 497+  integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==
 498+  dependencies:
 499+    "@types/parse-json" "^4.0.0"
 500+    import-fresh "^3.2.1"
 501+    parse-json "^5.0.0"
 502+    path-type "^4.0.0"
 503+    yaml "^1.10.0"
 504+
 505+create-require@^1.1.0:
 506+  version "1.1.1"
 507+  resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
 508+  integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
 509+
 510+cross-spawn@^7.0.2, cross-spawn@^7.0.3:
 511+  version "7.0.3"
 512+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
 513+  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
 514+  dependencies:
 515+    path-key "^3.1.0"
 516+    shebang-command "^2.0.0"
 517+    which "^2.0.1"
 518+
 519+debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2:
 520+  version "4.3.2"
 521+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
 522+  integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
 523+  dependencies:
 524+    ms "2.1.2"
 525+
 526+decode-uri-component@^0.2.0:
 527+  version "0.2.0"
 528+  resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
 529+  integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
 530+
 531+dedent@^0.7.0:
 532+  version "0.7.0"
 533+  resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
 534+  integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
 535+
 536+deep-is@^0.1.3:
 537+  version "0.1.3"
 538+  resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
 539+  integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
 540+
 541+delayed-stream@~1.0.0:
 542+  version "1.0.0"
 543+  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
 544+  integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
 545+
 546+detect-indent@^6.0.0:
 547+  version "6.1.0"
 548+  resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6"
 549+  integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==
 550+
 551+diff@^4.0.1:
 552+  version "4.0.2"
 553+  resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
 554+  integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
 555+
 556+dir-glob@^3.0.1:
 557+  version "3.0.1"
 558+  resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
 559+  integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
 560+  dependencies:
 561+    path-type "^4.0.0"
 562+
 563+doctrine@^3.0.0:
 564+  version "3.0.0"
 565+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
 566+  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
 567+  dependencies:
 568+    esutils "^2.0.2"
 569+
 570+emoji-regex@^8.0.0:
 571+  version "8.0.0"
 572+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
 573+  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
 574+
 575+enquirer@^2.3.5, enquirer@^2.3.6:
 576+  version "2.3.6"
 577+  resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
 578+  integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
 579+  dependencies:
 580+    ansi-colors "^4.1.1"
 581+
 582+error-ex@^1.3.1:
 583+  version "1.3.2"
 584+  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
 585+  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
 586+  dependencies:
 587+    is-arrayish "^0.2.1"
 588+
 589+esbuild@^0.12.8:
 590+  version "0.12.15"
 591+  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.15.tgz#9d99cf39aeb2188265c5983e983e236829f08af0"
 592+  integrity sha512-72V4JNd2+48eOVCXx49xoSWHgC3/cCy96e7mbXKY+WOWghN00cCmlGnwVLRhRHorvv0dgCyuMYBZlM2xDM5OQw==
 593+
 594+escape-string-regexp@^1.0.5:
 595+  version "1.0.5"
 596+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
 597+  integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
 598+
 599+escape-string-regexp@^4.0.0:
 600+  version "4.0.0"
 601+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
 602+  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
 603+
 604+eslint-config-prettier@^8.1.0:
 605+  version "8.3.0"
 606+  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a"
 607+  integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==
 608+
 609+eslint-plugin-svelte3@^3.2.0:
 610+  version "3.2.0"
 611+  resolved "https://registry.yarnpkg.com/eslint-plugin-svelte3/-/eslint-plugin-svelte3-3.2.0.tgz#a6deb4ead4b31a647ea88a3823d7c96578f74683"
 612+  integrity sha512-qdWB1QN21dEozsJFdR8XlEhMnsS6aKHjsXWuNmchYwxoet5I6QdCr1Xcq62++IzRBMCNCeH4waXqSOAdqrZzgA==
 613+
 614+eslint-scope@^5.1.1:
 615+  version "5.1.1"
 616+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
 617+  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
 618+  dependencies:
 619+    esrecurse "^4.3.0"
 620+    estraverse "^4.1.1"
 621+
 622+eslint-utils@^2.1.0:
 623+  version "2.1.0"
 624+  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
 625+  integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
 626+  dependencies:
 627+    eslint-visitor-keys "^1.1.0"
 628+
 629+eslint-utils@^3.0.0:
 630+  version "3.0.0"
 631+  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
 632+  integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
 633+  dependencies:
 634+    eslint-visitor-keys "^2.0.0"
 635+
 636+eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
 637+  version "1.3.0"
 638+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
 639+  integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
 640+
 641+eslint-visitor-keys@^2.0.0:
 642+  version "2.1.0"
 643+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
 644+  integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
 645+
 646+eslint@^7.22.0:
 647+  version "7.30.0"
 648+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.30.0.tgz#6d34ab51aaa56112fd97166226c9a97f505474f8"
 649+  integrity sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==
 650+  dependencies:
 651+    "@babel/code-frame" "7.12.11"
 652+    "@eslint/eslintrc" "^0.4.2"
 653+    "@humanwhocodes/config-array" "^0.5.0"
 654+    ajv "^6.10.0"
 655+    chalk "^4.0.0"
 656+    cross-spawn "^7.0.2"
 657+    debug "^4.0.1"
 658+    doctrine "^3.0.0"
 659+    enquirer "^2.3.5"
 660+    escape-string-regexp "^4.0.0"
 661+    eslint-scope "^5.1.1"
 662+    eslint-utils "^2.1.0"
 663+    eslint-visitor-keys "^2.0.0"
 664+    espree "^7.3.1"
 665+    esquery "^1.4.0"
 666+    esutils "^2.0.2"
 667+    fast-deep-equal "^3.1.3"
 668+    file-entry-cache "^6.0.1"
 669+    functional-red-black-tree "^1.0.1"
 670+    glob-parent "^5.1.2"
 671+    globals "^13.6.0"
 672+    ignore "^4.0.6"
 673+    import-fresh "^3.0.0"
 674+    imurmurhash "^0.1.4"
 675+    is-glob "^4.0.0"
 676+    js-yaml "^3.13.1"
 677+    json-stable-stringify-without-jsonify "^1.0.1"
 678+    levn "^0.4.1"
 679+    lodash.merge "^4.6.2"
 680+    minimatch "^3.0.4"
 681+    natural-compare "^1.4.0"
 682+    optionator "^0.9.1"
 683+    progress "^2.0.0"
 684+    regexpp "^3.1.0"
 685+    semver "^7.2.1"
 686+    strip-ansi "^6.0.0"
 687+    strip-json-comments "^3.1.0"
 688+    table "^6.0.9"
 689+    text-table "^0.2.0"
 690+    v8-compile-cache "^2.0.3"
 691+
 692+espree@^7.3.0, espree@^7.3.1:
 693+  version "7.3.1"
 694+  resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
 695+  integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
 696+  dependencies:
 697+    acorn "^7.4.0"
 698+    acorn-jsx "^5.3.1"
 699+    eslint-visitor-keys "^1.3.0"
 700+
 701+esprima@^4.0.0:
 702+  version "4.0.1"
 703+  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
 704+  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
 705+
 706+esquery@^1.4.0:
 707+  version "1.4.0"
 708+  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
 709+  integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
 710+  dependencies:
 711+    estraverse "^5.1.0"
 712+
 713+esrecurse@^4.3.0:
 714+  version "4.3.0"
 715+  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
 716+  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
 717+  dependencies:
 718+    estraverse "^5.2.0"
 719+
 720+estraverse@^4.1.1:
 721+  version "4.3.0"
 722+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
 723+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
 724+
 725+estraverse@^5.1.0, estraverse@^5.2.0:
 726+  version "5.2.0"
 727+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
 728+  integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
 729+
 730+estree-walker@^2.0.1:
 731+  version "2.0.2"
 732+  resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
 733+  integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
 734+
 735+esutils@^2.0.2:
 736+  version "2.0.3"
 737+  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
 738+  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
 739+
 740+execa@^5.0.0:
 741+  version "5.1.1"
 742+  resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
 743+  integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
 744+  dependencies:
 745+    cross-spawn "^7.0.3"
 746+    get-stream "^6.0.0"
 747+    human-signals "^2.1.0"
 748+    is-stream "^2.0.0"
 749+    merge-stream "^2.0.0"
 750+    npm-run-path "^4.0.1"
 751+    onetime "^5.1.2"
 752+    signal-exit "^3.0.3"
 753+    strip-final-newline "^2.0.0"
 754+
 755+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
 756+  version "3.1.3"
 757+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
 758+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
 759+
 760+fast-glob@^3.1.1:
 761+  version "3.2.7"
 762+  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1"
 763+  integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==
 764+  dependencies:
 765+    "@nodelib/fs.stat" "^2.0.2"
 766+    "@nodelib/fs.walk" "^1.2.3"
 767+    glob-parent "^5.1.2"
 768+    merge2 "^1.3.0"
 769+    micromatch "^4.0.4"
 770+
 771+fast-json-stable-stringify@^2.0.0:
 772+  version "2.1.0"
 773+  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
 774+  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
 775+
 776+fast-levenshtein@^2.0.6:
 777+  version "2.0.6"
 778+  resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
 779+  integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
 780+
 781+fastq@^1.6.0:
 782+  version "1.11.1"
 783+  resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.1.tgz#5d8175aae17db61947f8b162cfc7f63264d22807"
 784+  integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==
 785+  dependencies:
 786+    reusify "^1.0.4"
 787+
 788+file-entry-cache@^6.0.1:
 789+  version "6.0.1"
 790+  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
 791+  integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
 792+  dependencies:
 793+    flat-cache "^3.0.4"
 794+
 795+fill-range@^7.0.1:
 796+  version "7.0.1"
 797+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
 798+  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
 799+  dependencies:
 800+    to-regex-range "^5.0.1"
 801+
 802+filter-obj@^1.1.0:
 803+  version "1.1.0"
 804+  resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b"
 805+  integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs=
 806+
 807+flat-cache@^3.0.4:
 808+  version "3.0.4"
 809+  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
 810+  integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
 811+  dependencies:
 812+    flatted "^3.1.0"
 813+    rimraf "^3.0.2"
 814+
 815+flatted@^3.1.0:
 816+  version "3.2.1"
 817+  resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.1.tgz#bbef080d95fca6709362c73044a1634f7c6e7d05"
 818+  integrity sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==
 819+
 820+form-data@^3.0.0:
 821+  version "3.0.1"
 822+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
 823+  integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==
 824+  dependencies:
 825+    asynckit "^0.4.0"
 826+    combined-stream "^1.0.8"
 827+    mime-types "^2.1.12"
 828+
 829+fs.realpath@^1.0.0:
 830+  version "1.0.0"
 831+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
 832+  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
 833+
 834+fsevents@~2.3.2:
 835+  version "2.3.2"
 836+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
 837+  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
 838+
 839+function-bind@^1.1.1:
 840+  version "1.1.1"
 841+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
 842+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
 843+
 844+functional-red-black-tree@^1.0.1:
 845+  version "1.0.1"
 846+  resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
 847+  integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
 848+
 849+get-own-enumerable-property-symbols@^3.0.0:
 850+  version "3.0.2"
 851+  resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
 852+  integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
 853+
 854+get-stream@^6.0.0:
 855+  version "6.0.1"
 856+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
 857+  integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
 858+
 859+glob-parent@^5.1.2, glob-parent@~5.1.2:
 860+  version "5.1.2"
 861+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
 862+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
 863+  dependencies:
 864+    is-glob "^4.0.1"
 865+
 866+glob@^7.1.3, glob@^7.1.6:
 867+  version "7.1.7"
 868+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
 869+  integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
 870+  dependencies:
 871+    fs.realpath "^1.0.0"
 872+    inflight "^1.0.4"
 873+    inherits "2"
 874+    minimatch "^3.0.4"
 875+    once "^1.3.0"
 876+    path-is-absolute "^1.0.0"
 877+
 878+globals@^13.6.0, globals@^13.9.0:
 879+  version "13.10.0"
 880+  resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676"
 881+  integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==
 882+  dependencies:
 883+    type-fest "^0.20.2"
 884+
 885+globby@^11.0.3:
 886+  version "11.0.4"
 887+  resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5"
 888+  integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==
 889+  dependencies:
 890+    array-union "^2.1.0"
 891+    dir-glob "^3.0.1"
 892+    fast-glob "^3.1.1"
 893+    ignore "^5.1.4"
 894+    merge2 "^1.3.0"
 895+    slash "^3.0.0"
 896+
 897+has-flag@^3.0.0:
 898+  version "3.0.0"
 899+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
 900+  integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
 901+
 902+has-flag@^4.0.0:
 903+  version "4.0.0"
 904+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
 905+  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
 906+
 907+has@^1.0.3:
 908+  version "1.0.3"
 909+  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
 910+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
 911+  dependencies:
 912+    function-bind "^1.1.1"
 913+
 914+human-signals@^2.1.0:
 915+  version "2.1.0"
 916+  resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
 917+  integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
 918+
 919+husky@>=6:
 920+  version "7.0.1"
 921+  resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.1.tgz#579f4180b5da4520263e8713cc832942b48e1f1c"
 922+  integrity sha512-gceRaITVZ+cJH9sNHqx5tFwbzlLCVxtVZcusME8JYQ8Edy5mpGDOqD8QBCdMhpyo9a+JXddnujQ4rpY2Ff9SJA==
 923+
 924+ignore@^4.0.6:
 925+  version "4.0.6"
 926+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
 927+  integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
 928+
 929+ignore@^5.1.4:
 930+  version "5.1.8"
 931+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
 932+  integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
 933+
 934+import-fresh@^3.0.0, import-fresh@^3.2.1:
 935+  version "3.3.0"
 936+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
 937+  integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
 938+  dependencies:
 939+    parent-module "^1.0.0"
 940+    resolve-from "^4.0.0"
 941+
 942+imurmurhash@^0.1.4:
 943+  version "0.1.4"
 944+  resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
 945+  integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
 946+
 947+indent-string@^4.0.0:
 948+  version "4.0.0"
 949+  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
 950+  integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
 951+
 952+inflight@^1.0.4:
 953+  version "1.0.6"
 954+  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
 955+  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
 956+  dependencies:
 957+    once "^1.3.0"
 958+    wrappy "1"
 959+
 960+inherits@2:
 961+  version "2.0.4"
 962+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
 963+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
 964+
 965+is-arrayish@^0.2.1:
 966+  version "0.2.1"
 967+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
 968+  integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
 969+
 970+is-binary-path@~2.1.0:
 971+  version "2.1.0"
 972+  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
 973+  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
 974+  dependencies:
 975+    binary-extensions "^2.0.0"
 976+
 977+is-core-module@^2.2.0:
 978+  version "2.4.0"
 979+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1"
 980+  integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==
 981+  dependencies:
 982+    has "^1.0.3"
 983+
 984+is-extglob@^2.1.1:
 985+  version "2.1.1"
 986+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
 987+  integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
 988+
 989+is-fullwidth-code-point@^3.0.0:
 990+  version "3.0.0"
 991+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
 992+  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
 993+
 994+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
 995+  version "4.0.1"
 996+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
 997+  integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
 998+  dependencies:
 999+    is-extglob "^2.1.1"
1000+
1001+is-number@^7.0.0:
1002+  version "7.0.0"
1003+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1004+  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1005+
1006+is-obj@^1.0.1:
1007+  version "1.0.1"
1008+  resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
1009+  integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
1010+
1011+is-regexp@^1.0.0:
1012+  version "1.0.0"
1013+  resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
1014+  integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
1015+
1016+is-stream@^2.0.0:
1017+  version "2.0.0"
1018+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
1019+  integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
1020+
1021+is-unicode-supported@^0.1.0:
1022+  version "0.1.0"
1023+  resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
1024+  integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
1025+
1026+isexe@^2.0.0:
1027+  version "2.0.0"
1028+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1029+  integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
1030+
1031+js-tokens@^4.0.0:
1032+  version "4.0.0"
1033+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1034+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1035+
1036+js-yaml@^3.13.1:
1037+  version "3.14.1"
1038+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
1039+  integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
1040+  dependencies:
1041+    argparse "^1.0.7"
1042+    esprima "^4.0.0"
1043+
1044+json-parse-even-better-errors@^2.3.0:
1045+  version "2.3.1"
1046+  resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
1047+  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
1048+
1049+json-schema-traverse@^0.4.1:
1050+  version "0.4.1"
1051+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1052+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1053+
1054+json-schema-traverse@^1.0.0:
1055+  version "1.0.0"
1056+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
1057+  integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
1058+
1059+json-stable-stringify-without-jsonify@^1.0.1:
1060+  version "1.0.1"
1061+  resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1062+  integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
1063+
1064+just-throttle@^2.3.1:
1065+  version "2.3.1"
1066+  resolved "https://registry.yarnpkg.com/just-throttle/-/just-throttle-2.3.1.tgz#ef4a0710073bb4b0faf7dad1bc4ccabaeec4d0e6"
1067+  integrity sha512-0H4miIAWZYpnpg7oD/Y/PBb77ISSHAETif5xK9EnwIgYCO6oC8ErkJxDumMUTR44shSOwptRIArRuvNuvN/hOw==
1068+
1069+levn@^0.4.1:
1070+  version "0.4.1"
1071+  resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
1072+  integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
1073+  dependencies:
1074+    prelude-ls "^1.2.1"
1075+    type-check "~0.4.0"
1076+
1077+lines-and-columns@^1.1.6:
1078+  version "1.1.6"
1079+  resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
1080+  integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
1081+
1082+lint-staged@>=10:
1083+  version "11.0.0"
1084+  resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.0.0.tgz#24d0a95aa316ba28e257f5c4613369a75a10c712"
1085+  integrity sha512-3rsRIoyaE8IphSUtO1RVTFl1e0SLBtxxUOPBtHxQgBHS5/i6nqvjcUfNioMa4BU9yGnPzbO+xkfLtXtxBpCzjw==
1086+  dependencies:
1087+    chalk "^4.1.1"
1088+    cli-truncate "^2.1.0"
1089+    commander "^7.2.0"
1090+    cosmiconfig "^7.0.0"
1091+    debug "^4.3.1"
1092+    dedent "^0.7.0"
1093+    enquirer "^2.3.6"
1094+    execa "^5.0.0"
1095+    listr2 "^3.8.2"
1096+    log-symbols "^4.1.0"
1097+    micromatch "^4.0.4"
1098+    normalize-path "^3.0.0"
1099+    please-upgrade-node "^3.2.0"
1100+    string-argv "0.3.1"
1101+    stringify-object "^3.3.0"
1102+
1103+listr2@^3.8.2:
1104+  version "3.10.0"
1105+  resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.10.0.tgz#58105a53ed7fa1430d1b738c6055ef7bb006160f"
1106+  integrity sha512-eP40ZHihu70sSmqFNbNy2NL1YwImmlMmPh9WO5sLmPDleurMHt3n+SwEWNu2kzKScexZnkyFtc1VI0z/TGlmpw==
1107+  dependencies:
1108+    cli-truncate "^2.1.0"
1109+    colorette "^1.2.2"
1110+    log-update "^4.0.0"
1111+    p-map "^4.0.0"
1112+    rxjs "^6.6.7"
1113+    through "^2.3.8"
1114+    wrap-ansi "^7.0.0"
1115+
1116+lodash.clonedeep@^4.5.0:
1117+  version "4.5.0"
1118+  resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
1119+  integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
1120+
1121+lodash.merge@^4.6.2:
1122+  version "4.6.2"
1123+  resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
1124+  integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
1125+
1126+lodash.truncate@^4.4.2:
1127+  version "4.4.2"
1128+  resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
1129+  integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
1130+
1131+log-symbols@^4.1.0:
1132+  version "4.1.0"
1133+  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
1134+  integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
1135+  dependencies:
1136+    chalk "^4.1.0"
1137+    is-unicode-supported "^0.1.0"
1138+
1139+log-update@^4.0.0:
1140+  version "4.0.0"
1141+  resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
1142+  integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==
1143+  dependencies:
1144+    ansi-escapes "^4.3.0"
1145+    cli-cursor "^3.1.0"
1146+    slice-ansi "^4.0.0"
1147+    wrap-ansi "^6.2.0"
1148+
1149+lru-cache@^6.0.0:
1150+  version "6.0.0"
1151+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
1152+  integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
1153+  dependencies:
1154+    yallist "^4.0.0"
1155+
1156+make-error@^1.1.1:
1157+  version "1.3.6"
1158+  resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
1159+  integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
1160+
1161+marked@^2.1.3:
1162+  version "2.1.3"
1163+  resolved "https://registry.yarnpkg.com/marked/-/marked-2.1.3.tgz#bd017cef6431724fd4b27e0657f5ceb14bff3753"
1164+  integrity sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==
1165+
1166+merge-stream@^2.0.0:
1167+  version "2.0.0"
1168+  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
1169+  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
1170+
1171+merge2@^1.3.0:
1172+  version "1.4.1"
1173+  resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
1174+  integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
1175+
1176+micromatch@^4.0.4:
1177+  version "4.0.4"
1178+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
1179+  integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
1180+  dependencies:
1181+    braces "^3.0.1"
1182+    picomatch "^2.2.3"
1183+
1184+mime-db@1.48.0:
1185+  version "1.48.0"
1186+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d"
1187+  integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==
1188+
1189+mime-types@^2.1.12:
1190+  version "2.1.31"
1191+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b"
1192+  integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==
1193+  dependencies:
1194+    mime-db "1.48.0"
1195+
1196+mimic-fn@^2.1.0:
1197+  version "2.1.0"
1198+  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
1199+  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
1200+
1201+min-indent@^1.0.0:
1202+  version "1.0.1"
1203+  resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
1204+  integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
1205+
1206+minimatch@^3.0.4:
1207+  version "3.0.4"
1208+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1209+  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
1210+  dependencies:
1211+    brace-expansion "^1.1.7"
1212+
1213+minimist@^1.2.5:
1214+  version "1.2.5"
1215+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
1216+  integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
1217+
1218+mri@^1.1.0:
1219+  version "1.1.6"
1220+  resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6"
1221+  integrity sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==
1222+
1223+ms@2.1.2:
1224+  version "2.1.2"
1225+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1226+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1227+
1228+nanoid@^3.1.23:
1229+  version "3.1.23"
1230+  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81"
1231+  integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==
1232+
1233+natural-compare@^1.4.0:
1234+  version "1.4.0"
1235+  resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1236+  integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
1237+
1238+node-fetch@^2.6.1:
1239+  version "2.6.1"
1240+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
1241+  integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
1242+
1243+normalize-path@^3.0.0, normalize-path@~3.0.0:
1244+  version "3.0.0"
1245+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
1246+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1247+
1248+npm-run-path@^4.0.1:
1249+  version "4.0.1"
1250+  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
1251+  integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
1252+  dependencies:
1253+    path-key "^3.0.0"
1254+
1255+once@^1.3.0:
1256+  version "1.4.0"
1257+  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1258+  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1259+  dependencies:
1260+    wrappy "1"
1261+
1262+onetime@^5.1.0, onetime@^5.1.2:
1263+  version "5.1.2"
1264+  resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
1265+  integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
1266+  dependencies:
1267+    mimic-fn "^2.1.0"
1268+
1269+optionator@^0.9.1:
1270+  version "0.9.1"
1271+  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
1272+  integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
1273+  dependencies:
1274+    deep-is "^0.1.3"
1275+    fast-levenshtein "^2.0.6"
1276+    levn "^0.4.1"
1277+    prelude-ls "^1.2.1"
1278+    type-check "^0.4.0"
1279+    word-wrap "^1.2.3"
1280+
1281+p-map@^4.0.0:
1282+  version "4.0.0"
1283+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
1284+  integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
1285+  dependencies:
1286+    aggregate-error "^3.0.0"
1287+
1288+parent-module@^1.0.0:
1289+  version "1.0.1"
1290+  resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1291+  integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1292+  dependencies:
1293+    callsites "^3.0.0"
1294+
1295+parse-json@^5.0.0:
1296+  version "5.2.0"
1297+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
1298+  integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
1299+  dependencies:
1300+    "@babel/code-frame" "^7.0.0"
1301+    error-ex "^1.3.1"
1302+    json-parse-even-better-errors "^2.3.0"
1303+    lines-and-columns "^1.1.6"
1304+
1305+path-is-absolute@^1.0.0:
1306+  version "1.0.1"
1307+  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1308+  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1309+
1310+path-key@^3.0.0, path-key@^3.1.0:
1311+  version "3.1.1"
1312+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1313+  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1314+
1315+path-parse@^1.0.6:
1316+  version "1.0.7"
1317+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
1318+  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1319+
1320+path-type@^4.0.0:
1321+  version "4.0.0"
1322+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
1323+  integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
1324+
1325+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3:
1326+  version "2.3.0"
1327+  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
1328+  integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
1329+
1330+please-upgrade-node@^3.2.0:
1331+  version "3.2.0"
1332+  resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
1333+  integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
1334+  dependencies:
1335+    semver-compare "^1.0.0"
1336+
1337+postcss@^8.3.5:
1338+  version "8.3.5"
1339+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.5.tgz#982216b113412bc20a86289e91eb994952a5b709"
1340+  integrity sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==
1341+  dependencies:
1342+    colorette "^1.2.2"
1343+    nanoid "^3.1.23"
1344+    source-map-js "^0.6.2"
1345+
1346+prelude-ls@^1.2.1:
1347+  version "1.2.1"
1348+  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
1349+  integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
1350+
1351+prettier-plugin-svelte@^2.2.0:
1352+  version "2.3.1"
1353+  resolved "https://registry.yarnpkg.com/prettier-plugin-svelte/-/prettier-plugin-svelte-2.3.1.tgz#926184a490549688dbea0a8d61c1b1ae20218368"
1354+  integrity sha512-F1/r6OYoBq8Zgurhs1MN25tdrhPw0JW5JjioPRqpxbYdmrZ3gY/DzHGs0B6zwd4DLyRsfGB2gqhxUCbHt/D1fw==
1355+
1356+prettier@~2.2.1:
1357+  version "2.2.1"
1358+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
1359+  integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
1360+
1361+progress@^2.0.0:
1362+  version "2.0.3"
1363+  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
1364+  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
1365+
1366+punycode@^2.1.0:
1367+  version "2.1.1"
1368+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1369+  integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
1370+
1371+query-string@^7.0.1:
1372+  version "7.0.1"
1373+  resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.0.1.tgz#45bd149cf586aaa582dffc7ec7a8ad97dd02f75d"
1374+  integrity sha512-uIw3iRvHnk9to1blJCG3BTc+Ro56CBowJXKmNNAm3RulvPBzWLRqKSiiDk+IplJhsydwtuNMHi8UGQFcCLVfkA==
1375+  dependencies:
1376+    decode-uri-component "^0.2.0"
1377+    filter-obj "^1.1.0"
1378+    split-on-first "^1.0.0"
1379+    strict-uri-encode "^2.0.0"
1380+
1381+queue-microtask@^1.2.2:
1382+  version "1.2.3"
1383+  resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
1384+  integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
1385+
1386+readdirp@~3.6.0:
1387+  version "3.6.0"
1388+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
1389+  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
1390+  dependencies:
1391+    picomatch "^2.2.1"
1392+
1393+regexpp@^3.1.0:
1394+  version "3.2.0"
1395+  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
1396+  integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
1397+
1398+require-from-string@^2.0.2:
1399+  version "2.0.2"
1400+  resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
1401+  integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
1402+
1403+require-relative@^0.8.7:
1404+  version "0.8.7"
1405+  resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de"
1406+  integrity sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=
1407+
1408+resolve-from@^4.0.0:
1409+  version "4.0.0"
1410+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1411+  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1412+
1413+resolve@^1.20.0:
1414+  version "1.20.0"
1415+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
1416+  integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
1417+  dependencies:
1418+    is-core-module "^2.2.0"
1419+    path-parse "^1.0.6"
1420+
1421+restore-cursor@^3.1.0:
1422+  version "3.1.0"
1423+  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
1424+  integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
1425+  dependencies:
1426+    onetime "^5.1.0"
1427+    signal-exit "^3.0.2"
1428+
1429+reusify@^1.0.4:
1430+  version "1.0.4"
1431+  resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
1432+  integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
1433+
1434+rimraf@^3.0.2:
1435+  version "3.0.2"
1436+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
1437+  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1438+  dependencies:
1439+    glob "^7.1.3"
1440+
1441+rollup@^2.38.5:
1442+  version "2.53.0"
1443+  resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.53.0.tgz#5b6bc7820a03f361d2ae3dcabdc99d269a754709"
1444+  integrity sha512-spgrY78Toh+m0+zaOoeaayJKuzFuWy6o1PdFIBMVwRcuxT0xCOX9A5rChyKe+2ruL4lePKWUMImS4mMW1QAkmQ==
1445+  optionalDependencies:
1446+    fsevents "~2.3.2"
1447+
1448+run-parallel@^1.1.9:
1449+  version "1.2.0"
1450+  resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
1451+  integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
1452+  dependencies:
1453+    queue-microtask "^1.2.2"
1454+
1455+rxjs@^6.6.7:
1456+  version "6.6.7"
1457+  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
1458+  integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
1459+  dependencies:
1460+    tslib "^1.9.0"
1461+
1462+sade@^1.7.4:
1463+  version "1.7.4"
1464+  resolved "https://registry.yarnpkg.com/sade/-/sade-1.7.4.tgz#ea681e0c65d248d2095c90578c03ca0bb1b54691"
1465+  integrity sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==
1466+  dependencies:
1467+    mri "^1.1.0"
1468+
1469+semver-compare@^1.0.0:
1470+  version "1.0.0"
1471+  resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
1472+  integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
1473+
1474+semver@^7.2.1, semver@^7.3.5:
1475+  version "7.3.5"
1476+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
1477+  integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
1478+  dependencies:
1479+    lru-cache "^6.0.0"
1480+
1481+shebang-command@^2.0.0:
1482+  version "2.0.0"
1483+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1484+  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1485+  dependencies:
1486+    shebang-regex "^3.0.0"
1487+
1488+shebang-regex@^3.0.0:
1489+  version "3.0.0"
1490+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1491+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1492+
1493+signal-exit@^3.0.2, signal-exit@^3.0.3:
1494+  version "3.0.3"
1495+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
1496+  integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
1497+
1498+slash@^3.0.0:
1499+  version "3.0.0"
1500+  resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
1501+  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
1502+
1503+slice-ansi@^3.0.0:
1504+  version "3.0.0"
1505+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
1506+  integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
1507+  dependencies:
1508+    ansi-styles "^4.0.0"
1509+    astral-regex "^2.0.0"
1510+    is-fullwidth-code-point "^3.0.0"
1511+
1512+slice-ansi@^4.0.0:
1513+  version "4.0.0"
1514+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
1515+  integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
1516+  dependencies:
1517+    ansi-styles "^4.0.0"
1518+    astral-regex "^2.0.0"
1519+    is-fullwidth-code-point "^3.0.0"
1520+
1521+source-map-js@^0.6.2:
1522+  version "0.6.2"
1523+  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e"
1524+  integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==
1525+
1526+source-map-support@^0.5.17:
1527+  version "0.5.19"
1528+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
1529+  integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
1530+  dependencies:
1531+    buffer-from "^1.0.0"
1532+    source-map "^0.6.0"
1533+
1534+source-map@^0.6.0:
1535+  version "0.6.1"
1536+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
1537+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
1538+
1539+source-map@^0.7.3:
1540+  version "0.7.3"
1541+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
1542+  integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
1543+
1544+split-on-first@^1.0.0:
1545+  version "1.1.0"
1546+  resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
1547+  integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
1548+
1549+sprintf-js@~1.0.2:
1550+  version "1.0.3"
1551+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1552+  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
1553+
1554+strict-uri-encode@^2.0.0:
1555+  version "2.0.0"
1556+  resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
1557+  integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
1558+
1559+string-argv@0.3.1:
1560+  version "0.3.1"
1561+  resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da"
1562+  integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==
1563+
1564+string-width@^4.1.0, string-width@^4.2.0:
1565+  version "4.2.2"
1566+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
1567+  integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
1568+  dependencies:
1569+    emoji-regex "^8.0.0"
1570+    is-fullwidth-code-point "^3.0.0"
1571+    strip-ansi "^6.0.0"
1572+
1573+stringify-object@^3.3.0:
1574+  version "3.3.0"
1575+  resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
1576+  integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
1577+  dependencies:
1578+    get-own-enumerable-property-symbols "^3.0.0"
1579+    is-obj "^1.0.1"
1580+    is-regexp "^1.0.0"
1581+
1582+strip-ansi@^6.0.0:
1583+  version "6.0.0"
1584+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
1585+  integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
1586+  dependencies:
1587+    ansi-regex "^5.0.0"
1588+
1589+strip-final-newline@^2.0.0:
1590+  version "2.0.0"
1591+  resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
1592+  integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
1593+
1594+strip-indent@^3.0.0:
1595+  version "3.0.0"
1596+  resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
1597+  integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
1598+  dependencies:
1599+    min-indent "^1.0.0"
1600+
1601+strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
1602+  version "3.1.1"
1603+  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1604+  integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1605+
1606+supports-color@^5.3.0:
1607+  version "5.5.0"
1608+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1609+  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1610+  dependencies:
1611+    has-flag "^3.0.0"
1612+
1613+supports-color@^7.1.0:
1614+  version "7.2.0"
1615+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1616+  integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1617+  dependencies:
1618+    has-flag "^4.0.0"
1619+
1620+svelte-check@^2.0.0:
1621+  version "2.2.2"
1622+  resolved "https://registry.yarnpkg.com/svelte-check/-/svelte-check-2.2.2.tgz#1a8f0de4de66bcb1e485586fd948f7f7774a6ea9"
1623+  integrity sha512-PQtVt+TcXuwtfCkJl/b0NFFwYNAHERHWqy9ypZ1eevi684wlsjCApmKYh0JZEiR9+Q8Rq+1P0JIdOLsQLEkaXA==
1624+  dependencies:
1625+    chalk "^4.0.0"
1626+    chokidar "^3.4.1"
1627+    glob "^7.1.6"
1628+    import-fresh "^3.2.1"
1629+    minimist "^1.2.5"
1630+    sade "^1.7.4"
1631+    source-map "^0.7.3"
1632+    svelte-preprocess "^4.0.0"
1633+    typescript "*"
1634+
1635+svelte-hmr@^0.14.4:
1636+  version "0.14.4"
1637+  resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.14.4.tgz#b7ef2bfeef23916e0e912828c50645ca572ac355"
1638+  integrity sha512-kItFF7vqzStckSigoFmMnxJpTOdB9TWnQAW6Js+yAB4277tLbJIIE5KBlGHNmJNpA7MguqidsPB27Uw5UzQPCA==
1639+
1640+svelte-preprocess@^4.0.0:
1641+  version "4.7.4"
1642+  resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-4.7.4.tgz#e4d5208ab25c2aaaf19e837f7d7bbf7930e61d2b"
1643+  integrity sha512-mDAmaltQl6e5zU2VEtoWEf7eLTfuOTGr9zt+BpA3AGHo8MIhKiNSPE9OLTCTOMgj0vj/uL9QBbaNmpG4G1CgIA==
1644+  dependencies:
1645+    "@types/pug" "^2.0.4"
1646+    "@types/sass" "^1.16.0"
1647+    detect-indent "^6.0.0"
1648+    strip-indent "^3.0.0"
1649+
1650+svelte@^3.34.0:
1651+  version "3.38.3"
1652+  resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.38.3.tgz#e15a1da98ee4b10162a6c8cb4c80aa86b2b589ed"
1653+  integrity sha512-N7bBZJH0iF24wsalFZF+fVYMUOigaAUQMIcEKHO3jstK/iL8VmP9xE+P0/a76+FkNcWt+TDv2Gx1taUoUscrvw==
1654+
1655+table@^6.0.9:
1656+  version "6.7.1"
1657+  resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2"
1658+  integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==
1659+  dependencies:
1660+    ajv "^8.0.1"
1661+    lodash.clonedeep "^4.5.0"
1662+    lodash.truncate "^4.4.2"
1663+    slice-ansi "^4.0.0"
1664+    string-width "^4.2.0"
1665+    strip-ansi "^6.0.0"
1666+
1667+text-table@^0.2.0:
1668+  version "0.2.0"
1669+  resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1670+  integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
1671+
1672+through@^2.3.8:
1673+  version "2.3.8"
1674+  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
1675+  integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
1676+
1677+to-regex-range@^5.0.1:
1678+  version "5.0.1"
1679+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1680+  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1681+  dependencies:
1682+    is-number "^7.0.0"
1683+
1684+ts-node@^10.0.0:
1685+  version "10.0.0"
1686+  resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.0.0.tgz#05f10b9a716b0b624129ad44f0ea05dac84ba3be"
1687+  integrity sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg==
1688+  dependencies:
1689+    "@tsconfig/node10" "^1.0.7"
1690+    "@tsconfig/node12" "^1.0.7"
1691+    "@tsconfig/node14" "^1.0.0"
1692+    "@tsconfig/node16" "^1.0.1"
1693+    arg "^4.1.0"
1694+    create-require "^1.1.0"
1695+    diff "^4.0.1"
1696+    make-error "^1.1.1"
1697+    source-map-support "^0.5.17"
1698+    yn "3.1.1"
1699+
1700+tslib@^1.8.1, tslib@^1.9.0:
1701+  version "1.14.1"
1702+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
1703+  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
1704+
1705+tslib@^2.0.0:
1706+  version "2.3.0"
1707+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
1708+  integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
1709+
1710+tsutils@^3.21.0:
1711+  version "3.21.0"
1712+  resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
1713+  integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
1714+  dependencies:
1715+    tslib "^1.8.1"
1716+
1717+type-check@^0.4.0, type-check@~0.4.0:
1718+  version "0.4.0"
1719+  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
1720+  integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
1721+  dependencies:
1722+    prelude-ls "^1.2.1"
1723+
1724+type-fest@^0.20.2:
1725+  version "0.20.2"
1726+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
1727+  integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
1728+
1729+type-fest@^0.21.3:
1730+  version "0.21.3"
1731+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
1732+  integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
1733+
1734+typescript@*, typescript@^4.0.0:
1735+  version "4.3.5"
1736+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4"
1737+  integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==
1738+
1739+uri-js@^4.2.2:
1740+  version "4.4.1"
1741+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
1742+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
1743+  dependencies:
1744+    punycode "^2.1.0"
1745+
1746+v8-compile-cache@^2.0.3:
1747+  version "2.3.0"
1748+  resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
1749+  integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
1750+
1751+vite@^2.4.1:
1752+  version "2.4.1"
1753+  resolved "https://registry.yarnpkg.com/vite/-/vite-2.4.1.tgz#2e48b8dbfc69e4edbf7f4d1c0798d621585cb8da"
1754+  integrity sha512-4BpKRis9uxIqPfIEcJ18LTBsamqnDFxTx45CXwagHjNltHa6PFEvf8Pe6OpgIHb0OyWT30OXOSSQvdOaX4OBiQ==
1755+  dependencies:
1756+    esbuild "^0.12.8"
1757+    postcss "^8.3.5"
1758+    resolve "^1.20.0"
1759+    rollup "^2.38.5"
1760+  optionalDependencies:
1761+    fsevents "~2.3.2"
1762+
1763+which@^2.0.1:
1764+  version "2.0.2"
1765+  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
1766+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1767+  dependencies:
1768+    isexe "^2.0.0"
1769+
1770+word-wrap@^1.2.3:
1771+  version "1.2.3"
1772+  resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
1773+  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
1774+
1775+wrap-ansi@^6.2.0:
1776+  version "6.2.0"
1777+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
1778+  integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
1779+  dependencies:
1780+    ansi-styles "^4.0.0"
1781+    string-width "^4.1.0"
1782+    strip-ansi "^6.0.0"
1783+
1784+wrap-ansi@^7.0.0:
1785+  version "7.0.0"
1786+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
1787+  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
1788+  dependencies:
1789+    ansi-styles "^4.0.0"
1790+    string-width "^4.1.0"
1791+    strip-ansi "^6.0.0"
1792+
1793+wrappy@1:
1794+  version "1.0.2"
1795+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1796+  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
1797+
1798+yallist@^4.0.0:
1799+  version "4.0.0"
1800+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
1801+  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
1802+
1803+yaml@^1.10.0:
1804+  version "1.10.2"
1805+  resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
1806+  integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
1807+
1808+yn@3.1.1:
1809+  version "3.1.1"
1810+  resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
1811+  integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==