├── .eslintignore ├── .eslintrc.cjs ├── .github └── workflows │ └── test.yaml ├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── mdsvex.config.js ├── package.json ├── playwright.config.ts ├── pnpm-lock.yaml ├── src ├── app.d.ts ├── app.html ├── lib │ ├── components │ │ ├── Article.svelte │ │ ├── ArticleDescription.svelte │ │ ├── ArticleMeta.svelte │ │ ├── ArticleTitle.svelte │ │ ├── Counter.svelte │ │ └── PageHead.svelte │ ├── slugFromPath.test.ts │ └── slugFromPath.ts ├── posts │ ├── a-second-post.svelte.md │ ├── unpublished-draft-example.svelte.md │ ├── welcome-to-my-blog.svelte.md │ └── yet-another-blog-post.svelte.md └── routes │ ├── +error.svelte │ ├── +layout.svelte │ ├── +layout.ts │ ├── +page.server.ts │ ├── +page.svelte │ └── posts │ └── [slug] │ ├── +page.svelte │ └── +page.ts ├── static └── favicon.png ├── svelte.config.js ├── tests └── test.ts ├── tsconfig.json └── vite.config.js /.eslintignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | parser: '@typescript-eslint/parser', 4 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], 5 | plugins: ['svelte3', '@typescript-eslint'], 6 | ignorePatterns: ['*.cjs'], 7 | overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], 8 | settings: { 9 | 'svelte3/typescript': () => require('typescript') 10 | }, 11 | parserOptions: { 12 | sourceType: 'module', 13 | ecmaVersion: 2020 14 | }, 15 | env: { 16 | browser: true, 17 | es2017: true, 18 | node: true 19 | } 20 | }; 21 | -------------------------------------------------------------------------------- /.github/workflows/test.yaml: -------------------------------------------------------------------------------- 1 | name: Node.js tests 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | 9 | jobs: 10 | build: 11 | 12 | runs-on: ubuntu-latest 13 | 14 | strategy: 15 | matrix: 16 | node-version: [16.x, 18.x] 17 | 18 | steps: 19 | - uses: actions/checkout@v3 20 | - name: Use Node.js ${{ matrix.node-version }} 21 | uses: actions/setup-node@v3 22 | with: 23 | node-version: ${{ matrix.node-version }} 24 | - uses: pnpm/action-setup@v2 25 | with: 26 | version: 7 27 | - name: Install packages 28 | run: pnpm install 29 | - name: Install Playwright 30 | run: pnpx playwright install 31 | - name: Build 32 | run: pnpm build 33 | - name: Test 34 | run: pnpm test -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | vite.config.js.timestamp-* 10 | vite.config.ts.timestamp-* 11 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "tabWidth": 2, 4 | "singleQuote": true, 5 | "trailingComma": "none", 6 | "printWidth": 100, 7 | "plugins": ["prettier-plugin-svelte"], 8 | "pluginSearchDirs": ["."], 9 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] 10 | } 11 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "explorer.sortOrder": "type" 3 | } 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2021 Mehdi Vasigh 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # `sveltekit-mdsvex-blog` 2 | 3 | Minimalistic blog site template, built with [TypeScript](https://www.typescriptlang.org/), [Svelte](https://svelte.dev), [SvelteKit](https://kit.svelte.dev) and [MDsveX](https://mdsvex.com). 4 | 5 | [Live demo](https://sveltekit-mdsvex-blog.netlify.app) 6 | 7 | ## Getting started 8 | 9 | First, clone the repository and navigate to the project directory: 10 | 11 | ```bash 12 | git clone https://github.com/mvasigh/sveltekit-mdsvex-blog.git my-blog 13 | cd my-blog 14 | ``` 15 | 16 | If you want to have a fresh commit history, blow away the `.git` directory and re-initialize the repository locally: 17 | 18 | ```bash 19 | rm -rf .git 20 | git init 21 | ``` 22 | 23 | Next, install dependencies with NPM: 24 | 25 | ```bash 26 | npm install # or `pnpm i` 27 | ``` 28 | 29 | Finally, run the local development server: 30 | 31 | ```bash 32 | npm run dev # or `pnpm dev` 33 | ``` 34 | 35 | ## Building for production 36 | 37 | This project is pre-configured with [`@sveltejs/adapter-static`](https://github.com/sveltejs/kit/tree/master/packages/adapter-static). This makes deploying to static site hosts, such as Netlify, super easy. Simply add your site's repository to your static site host of choice, configure the build command to be `npm run build` and the build output directory to be `build`. 38 | 39 | ## Starting from scratch 40 | 41 | You may want to create your own project from scratch using `create-svelte`. You can do so easily and add MDsveX support to your project using `svelte-add`: 42 | 43 | 1. Create a new project per the [SvelteKit docs](https://kit.svelte.dev/docs#introduction-getting-started) 44 | 2. [Add MDsveX to your project](https://github.com/svelte-add/mdsvex#-adding-to-sveltekit) using svelte-add 45 | 3. Configure your site to your liking; files with the `.svelte.md`, `.md` and `.svx` extensions will be picked up by MDsveX by default 46 | 47 | ## Questions? 48 | 49 | Feel free to ask any questions that you have! I am happy to try and answer them. The best way to reach me is by Mastodon, [@mehdi@mastodon.gamedev.place](https://mastodon.gamedev.place/@mehdi), but you can also [open an issue in this repository](https://github.com/mvasigh/sveltekit-mdsvex-blog/issues/new). 50 | -------------------------------------------------------------------------------- /mdsvex.config.js: -------------------------------------------------------------------------------- 1 | import remarkGithub from 'remark-github'; 2 | import remarkAbbr from 'remark-abbr'; 3 | import rehypeSlug from 'rehype-slug'; 4 | import rehypeAutolinkHeadings from 'rehype-autolink-headings'; 5 | import { defineMDSveXConfig as defineConfig } from 'mdsvex'; 6 | 7 | const config = defineConfig({ 8 | extensions: ['.svelte.md', '.md', '.svx'], 9 | 10 | smartypants: { 11 | dashes: 'oldschool' 12 | }, 13 | 14 | remarkPlugins: [ 15 | [ 16 | remarkGithub, 17 | { 18 | // TODO: Replace with your own repository 19 | repository: 'https://github.com/mvasigh/sveltekit-mdsvex-blog.git' 20 | } 21 | ], 22 | remarkAbbr 23 | ], 24 | rehypePlugins: [ 25 | rehypeSlug, 26 | [ 27 | rehypeAutolinkHeadings, 28 | { 29 | behavior: 'wrap' 30 | } 31 | ] 32 | ] 33 | }); 34 | 35 | export default config; 36 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sveltekit-mdsvex-blog", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "dev": "vite dev", 7 | "build": "vite build", 8 | "preview": "vite preview", 9 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 10 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 11 | "test:unit": "vitest", 12 | "test:playwright": "playwright test", 13 | "test": "pnpm test:unit run && pnpm test:playwright", 14 | "lint": "prettier --plugin-search-dir . --check . && eslint .", 15 | "format": "prettier --plugin-search-dir . --write ." 16 | }, 17 | "devDependencies": { 18 | "@playwright/test": "^1.28.1", 19 | "@sveltejs/adapter-static": "^1.0.0", 20 | "@sveltejs/kit": "^1.0.0", 21 | "@typescript-eslint/eslint-plugin": "^5.45.0", 22 | "@typescript-eslint/parser": "^5.45.0", 23 | "eslint": "^8.28.0", 24 | "eslint-config-prettier": "^8.5.0", 25 | "eslint-plugin-svelte3": "^4.0.0", 26 | "mdsvex": "^0.10.6", 27 | "prettier": "^2.8.0", 28 | "prettier-plugin-svelte": "^2.8.1", 29 | "rehype-autolink-headings": "^6.1.1", 30 | "rehype-slug": "^5.1.0", 31 | "remark-abbr": "^1.4.1", 32 | "remark-github": "^11.2.4", 33 | "svelte": "^3.54.0", 34 | "svelte-check": "^2.9.2", 35 | "tslib": "^2.4.1", 36 | "typescript": "^4.9.3", 37 | "vite": "^4.0.0", 38 | "vitest": "^0.25.3" 39 | }, 40 | "type": "module" 41 | } 42 | -------------------------------------------------------------------------------- /playwright.config.ts: -------------------------------------------------------------------------------- 1 | import type { PlaywrightTestConfig } from '@playwright/test'; 2 | 3 | const config: PlaywrightTestConfig = { 4 | webServer: { 5 | command: 'npm run build && npm run preview', 6 | port: 4173 7 | }, 8 | testDir: 'tests' 9 | }; 10 | 11 | export default config; 12 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@playwright/test': ^1.28.1 5 | '@sveltejs/adapter-static': ^1.0.0 6 | '@sveltejs/kit': ^1.0.0 7 | '@typescript-eslint/eslint-plugin': ^5.45.0 8 | '@typescript-eslint/parser': ^5.45.0 9 | eslint: ^8.28.0 10 | eslint-config-prettier: ^8.5.0 11 | eslint-plugin-svelte3: ^4.0.0 12 | mdsvex: ^0.10.6 13 | prettier: ^2.8.0 14 | prettier-plugin-svelte: ^2.8.1 15 | rehype-autolink-headings: ^6.1.1 16 | rehype-slug: ^5.1.0 17 | remark-abbr: ^1.4.1 18 | remark-github: ^11.2.4 19 | svelte: ^3.54.0 20 | svelte-check: ^2.9.2 21 | tslib: ^2.4.1 22 | typescript: ^4.9.3 23 | vite: ^4.0.0 24 | vitest: ^0.25.3 25 | 26 | devDependencies: 27 | '@playwright/test': 1.29.1 28 | '@sveltejs/adapter-static': 1.0.0_@sveltejs+kit@1.0.1 29 | '@sveltejs/kit': 1.0.1_svelte@3.55.0+vite@4.0.3 30 | '@typescript-eslint/eslint-plugin': 5.47.1_txmweb6yn7coi7nfrp22gpyqmy 31 | '@typescript-eslint/parser': 5.47.1_lzzuuodtsqwxnvqeq4g4likcqa 32 | eslint: 8.30.0 33 | eslint-config-prettier: 8.5.0_eslint@8.30.0 34 | eslint-plugin-svelte3: 4.0.0_khrjkzzv5v2x7orkj5o7sxbz3a 35 | mdsvex: 0.10.6_svelte@3.55.0 36 | prettier: 2.8.1 37 | prettier-plugin-svelte: 2.9.0_ajxj753sv7dbwexjherrch25ta 38 | rehype-autolink-headings: 6.1.1 39 | rehype-slug: 5.1.0 40 | remark-abbr: 1.4.1 41 | remark-github: 11.2.4 42 | svelte: 3.55.0 43 | svelte-check: 2.10.3_svelte@3.55.0 44 | tslib: 2.4.1 45 | typescript: 4.9.4 46 | vite: 4.0.3 47 | vitest: 0.25.8 48 | 49 | packages: 50 | 51 | /@esbuild/android-arm/0.16.12: 52 | resolution: {integrity: sha512-CTWgMJtpCyCltrvipZrrcjjRu+rzm6pf9V8muCsJqtKujR3kPmU4ffbckvugNNaRmhxAF1ZI3J+0FUIFLFg8KA==} 53 | engines: {node: '>=12'} 54 | cpu: [arm] 55 | os: [android] 56 | requiresBuild: true 57 | dev: true 58 | optional: true 59 | 60 | /@esbuild/android-arm64/0.16.12: 61 | resolution: {integrity: sha512-0LacmiIW+X0/LOLMZqYtZ7d4uY9fxYABAYhSSOu+OGQVBqH4N5eIYgkT7bBFnR4Nm3qo6qS3RpHKVrDASqj/uQ==} 62 | engines: {node: '>=12'} 63 | cpu: [arm64] 64 | os: [android] 65 | requiresBuild: true 66 | dev: true 67 | optional: true 68 | 69 | /@esbuild/android-x64/0.16.12: 70 | resolution: {integrity: sha512-sS5CR3XBKQXYpSGMM28VuiUnbX83Z+aWPZzClW+OB2JquKqxoiwdqucJ5qvXS8pM6Up3RtJfDnRQZkz3en2z5g==} 71 | engines: {node: '>=12'} 72 | cpu: [x64] 73 | os: [android] 74 | requiresBuild: true 75 | dev: true 76 | optional: true 77 | 78 | /@esbuild/darwin-arm64/0.16.12: 79 | resolution: {integrity: sha512-Dpe5hOAQiQRH20YkFAg+wOpcd4PEuXud+aGgKBQa/VriPJA8zuVlgCOSTwna1CgYl05lf6o5els4dtuyk1qJxQ==} 80 | engines: {node: '>=12'} 81 | cpu: [arm64] 82 | os: [darwin] 83 | requiresBuild: true 84 | dev: true 85 | optional: true 86 | 87 | /@esbuild/darwin-x64/0.16.12: 88 | resolution: {integrity: sha512-ApGRA6X5txIcxV0095X4e4KKv87HAEXfuDRcGTniDWUUN+qPia8sl/BqG/0IomytQWajnUn4C7TOwHduk/FXBQ==} 89 | engines: {node: '>=12'} 90 | cpu: [x64] 91 | os: [darwin] 92 | requiresBuild: true 93 | dev: true 94 | optional: true 95 | 96 | /@esbuild/freebsd-arm64/0.16.12: 97 | resolution: {integrity: sha512-AMdK2gA9EU83ccXCWS1B/KcWYZCj4P3vDofZZkl/F/sBv/fphi2oUqUTox/g5GMcIxk8CF1CVYTC82+iBSyiUg==} 98 | engines: {node: '>=12'} 99 | cpu: [arm64] 100 | os: [freebsd] 101 | requiresBuild: true 102 | dev: true 103 | optional: true 104 | 105 | /@esbuild/freebsd-x64/0.16.12: 106 | resolution: {integrity: sha512-KUKB9w8G/xaAbD39t6gnRBuhQ8vIYYlxGT2I+mT6UGRnCGRr1+ePFIGBQmf5V16nxylgUuuWVW1zU2ktKkf6WQ==} 107 | engines: {node: '>=12'} 108 | cpu: [x64] 109 | os: [freebsd] 110 | requiresBuild: true 111 | dev: true 112 | optional: true 113 | 114 | /@esbuild/linux-arm/0.16.12: 115 | resolution: {integrity: sha512-vhDdIv6z4eL0FJyNVfdr3C/vdd/Wc6h1683GJsFoJzfKb92dU/v88FhWdigg0i6+3TsbSDeWbsPUXb4dif2abg==} 116 | engines: {node: '>=12'} 117 | cpu: [arm] 118 | os: [linux] 119 | requiresBuild: true 120 | dev: true 121 | optional: true 122 | 123 | /@esbuild/linux-arm64/0.16.12: 124 | resolution: {integrity: sha512-29HXMLpLklDfmw7T2buGqq3HImSUaZ1ArmrPOMaNiZZQptOSZs32SQtOHEl8xWX5vfdwZqrBfNf8Te4nArVzKQ==} 125 | engines: {node: '>=12'} 126 | cpu: [arm64] 127 | os: [linux] 128 | requiresBuild: true 129 | dev: true 130 | optional: true 131 | 132 | /@esbuild/linux-ia32/0.16.12: 133 | resolution: {integrity: sha512-JFDuNDTTfgD1LJg7wHA42o2uAO/9VzHYK0leAVnCQE/FdMB599YMH73ux+nS0xGr79pv/BK+hrmdRin3iLgQjg==} 134 | engines: {node: '>=12'} 135 | cpu: [ia32] 136 | os: [linux] 137 | requiresBuild: true 138 | dev: true 139 | optional: true 140 | 141 | /@esbuild/linux-loong64/0.16.12: 142 | resolution: {integrity: sha512-xTGzVPqm6WKfCC0iuj1fryIWr1NWEM8DMhAIo+4rFgUtwy/lfHl+Obvus4oddzRDbBetLLmojfVZGmt/g/g+Rw==} 143 | engines: {node: '>=12'} 144 | cpu: [loong64] 145 | os: [linux] 146 | requiresBuild: true 147 | dev: true 148 | optional: true 149 | 150 | /@esbuild/linux-mips64el/0.16.12: 151 | resolution: {integrity: sha512-zI1cNgHa3Gol+vPYjIYHzKhU6qMyOQrvZ82REr5Fv7rlh5PG6SkkuCoH7IryPqR+BK2c/7oISGsvPJPGnO2bHQ==} 152 | engines: {node: '>=12'} 153 | cpu: [mips64el] 154 | os: [linux] 155 | requiresBuild: true 156 | dev: true 157 | optional: true 158 | 159 | /@esbuild/linux-ppc64/0.16.12: 160 | resolution: {integrity: sha512-/C8OFXExoMmvTDIOAM54AhtmmuDHKoedUd0Otpfw3+AuuVGemA1nQK99oN909uZbLEU6Bi+7JheFMG3xGfZluQ==} 161 | engines: {node: '>=12'} 162 | cpu: [ppc64] 163 | os: [linux] 164 | requiresBuild: true 165 | dev: true 166 | optional: true 167 | 168 | /@esbuild/linux-riscv64/0.16.12: 169 | resolution: {integrity: sha512-qeouyyc8kAGV6Ni6Isz8hUsKMr00EHgVwUKWNp1r4l88fHEoNTDB8mmestvykW6MrstoGI7g2EAsgr0nxmuGYg==} 170 | engines: {node: '>=12'} 171 | cpu: [riscv64] 172 | os: [linux] 173 | requiresBuild: true 174 | dev: true 175 | optional: true 176 | 177 | /@esbuild/linux-s390x/0.16.12: 178 | resolution: {integrity: sha512-s9AyI/5vz1U4NNqnacEGFElqwnHusWa81pskAf8JNDM2eb6b2E6PpBmT8RzeZv6/TxE6/TADn2g9bb0jOUmXwQ==} 179 | engines: {node: '>=12'} 180 | cpu: [s390x] 181 | os: [linux] 182 | requiresBuild: true 183 | dev: true 184 | optional: true 185 | 186 | /@esbuild/linux-x64/0.16.12: 187 | resolution: {integrity: sha512-e8YA7GQGLWhvakBecLptUiKxOk4E/EPtSckS1i0MGYctW8ouvNUoh7xnU15PGO2jz7BYl8q1R6g0gE5HFtzpqQ==} 188 | engines: {node: '>=12'} 189 | cpu: [x64] 190 | os: [linux] 191 | requiresBuild: true 192 | dev: true 193 | optional: true 194 | 195 | /@esbuild/netbsd-x64/0.16.12: 196 | resolution: {integrity: sha512-z2+kUxmOqBS+6SRVd57iOLIHE8oGOoEnGVAmwjm2aENSP35HPS+5cK+FL1l+rhrsJOFIPrNHqDUNechpuG96Sg==} 197 | engines: {node: '>=12'} 198 | cpu: [x64] 199 | os: [netbsd] 200 | requiresBuild: true 201 | dev: true 202 | optional: true 203 | 204 | /@esbuild/openbsd-x64/0.16.12: 205 | resolution: {integrity: sha512-PAonw4LqIybwn2/vJujhbg1N9W2W8lw9RtXIvvZoyzoA/4rA4CpiuahVbASmQohiytRsixbNoIOUSjRygKXpyA==} 206 | engines: {node: '>=12'} 207 | cpu: [x64] 208 | os: [openbsd] 209 | requiresBuild: true 210 | dev: true 211 | optional: true 212 | 213 | /@esbuild/sunos-x64/0.16.12: 214 | resolution: {integrity: sha512-+wr1tkt1RERi+Zi/iQtkzmMH4nS8+7UIRxjcyRz7lur84wCkAITT50Olq/HiT4JN2X2bjtlOV6vt7ptW5Gw60Q==} 215 | engines: {node: '>=12'} 216 | cpu: [x64] 217 | os: [sunos] 218 | requiresBuild: true 219 | dev: true 220 | optional: true 221 | 222 | /@esbuild/win32-arm64/0.16.12: 223 | resolution: {integrity: sha512-XEjeUSHmjsAOJk8+pXJu9pFY2O5KKQbHXZWQylJzQuIBeiGrpMeq9sTVrHefHxMOyxUgoKQTcaTS+VK/K5SviA==} 224 | engines: {node: '>=12'} 225 | cpu: [arm64] 226 | os: [win32] 227 | requiresBuild: true 228 | dev: true 229 | optional: true 230 | 231 | /@esbuild/win32-ia32/0.16.12: 232 | resolution: {integrity: sha512-eRKPM7e0IecUAUYr2alW7JGDejrFJXmpjt4MlfonmQ5Rz9HWpKFGCjuuIRgKO7W9C/CWVFXdJ2GjddsBXqQI4A==} 233 | engines: {node: '>=12'} 234 | cpu: [ia32] 235 | os: [win32] 236 | requiresBuild: true 237 | dev: true 238 | optional: true 239 | 240 | /@esbuild/win32-x64/0.16.12: 241 | resolution: {integrity: sha512-iPYKN78t3op2+erv2frW568j1q0RpqX6JOLZ7oPPaAV1VaF7dDstOrNw37PVOYoTWE11pV4A1XUitpdEFNIsPg==} 242 | engines: {node: '>=12'} 243 | cpu: [x64] 244 | os: [win32] 245 | requiresBuild: true 246 | dev: true 247 | optional: true 248 | 249 | /@eslint/eslintrc/1.4.0: 250 | resolution: {integrity: sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==} 251 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 252 | dependencies: 253 | ajv: 6.12.6 254 | debug: 4.3.4 255 | espree: 9.4.1 256 | globals: 13.19.0 257 | ignore: 5.2.4 258 | import-fresh: 3.3.0 259 | js-yaml: 4.1.0 260 | minimatch: 3.1.2 261 | strip-json-comments: 3.1.1 262 | transitivePeerDependencies: 263 | - supports-color 264 | dev: true 265 | 266 | /@humanwhocodes/config-array/0.11.8: 267 | resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} 268 | engines: {node: '>=10.10.0'} 269 | dependencies: 270 | '@humanwhocodes/object-schema': 1.2.1 271 | debug: 4.3.4 272 | minimatch: 3.1.2 273 | transitivePeerDependencies: 274 | - supports-color 275 | dev: true 276 | 277 | /@humanwhocodes/module-importer/1.0.1: 278 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 279 | engines: {node: '>=12.22'} 280 | dev: true 281 | 282 | /@humanwhocodes/object-schema/1.2.1: 283 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 284 | dev: true 285 | 286 | /@jridgewell/resolve-uri/3.1.0: 287 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 288 | engines: {node: '>=6.0.0'} 289 | dev: true 290 | 291 | /@jridgewell/sourcemap-codec/1.4.14: 292 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 293 | dev: true 294 | 295 | /@jridgewell/trace-mapping/0.3.17: 296 | resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} 297 | dependencies: 298 | '@jridgewell/resolve-uri': 3.1.0 299 | '@jridgewell/sourcemap-codec': 1.4.14 300 | dev: true 301 | 302 | /@nodelib/fs.scandir/2.1.5: 303 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 304 | engines: {node: '>= 8'} 305 | dependencies: 306 | '@nodelib/fs.stat': 2.0.5 307 | run-parallel: 1.2.0 308 | dev: true 309 | 310 | /@nodelib/fs.stat/2.0.5: 311 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 312 | engines: {node: '>= 8'} 313 | dev: true 314 | 315 | /@nodelib/fs.walk/1.2.8: 316 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 317 | engines: {node: '>= 8'} 318 | dependencies: 319 | '@nodelib/fs.scandir': 2.1.5 320 | fastq: 1.14.0 321 | dev: true 322 | 323 | /@playwright/test/1.29.1: 324 | resolution: {integrity: sha512-iQxk2DX5U9wOGV3+/Jh9OHPsw5H3mleUL2S4BgQuwtlAfK3PnKvn38m4Rg9zIViGHVW24opSm99HQm/UFLEy6w==} 325 | engines: {node: '>=14'} 326 | hasBin: true 327 | dependencies: 328 | '@types/node': 18.11.18 329 | playwright-core: 1.29.1 330 | dev: true 331 | 332 | /@polka/url/1.0.0-next.21: 333 | resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} 334 | dev: true 335 | 336 | /@sveltejs/adapter-static/1.0.0_@sveltejs+kit@1.0.1: 337 | resolution: {integrity: sha512-ZrQhRgSa2TsH+zvrOIKpdVsAhExafpsn+w6Gv1WHzV76RZ2XOYFa8xi6hEzRjeeAL++ac0dsZHzp8M4X7YIabg==} 338 | peerDependencies: 339 | '@sveltejs/kit': ^1.0.0 340 | dependencies: 341 | '@sveltejs/kit': 1.0.1_svelte@3.55.0+vite@4.0.3 342 | dev: true 343 | 344 | /@sveltejs/kit/1.0.1_svelte@3.55.0+vite@4.0.3: 345 | resolution: {integrity: sha512-C41aCaDjA7xoUdsrc/lSdU1059UdLPIRE1vEIRRynzpMujNgp82bTMHkDosb6vykH6LrLf3tT2w2/5NYQhKYGQ==} 346 | engines: {node: ^16.14 || >=18} 347 | hasBin: true 348 | requiresBuild: true 349 | peerDependencies: 350 | svelte: ^3.54.0 351 | vite: ^4.0.0 352 | dependencies: 353 | '@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.0+vite@4.0.3 354 | '@types/cookie': 0.5.1 355 | cookie: 0.5.0 356 | devalue: 4.2.0 357 | esm-env: 1.0.0 358 | kleur: 4.1.5 359 | magic-string: 0.27.0 360 | mime: 3.0.0 361 | sade: 1.8.1 362 | set-cookie-parser: 2.5.1 363 | sirv: 2.0.2 364 | svelte: 3.55.0 365 | tiny-glob: 0.2.9 366 | undici: 5.14.0 367 | vite: 4.0.3 368 | transitivePeerDependencies: 369 | - supports-color 370 | dev: true 371 | 372 | /@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.0+vite@4.0.3: 373 | resolution: {integrity: sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==} 374 | engines: {node: ^14.18.0 || >= 16} 375 | peerDependencies: 376 | svelte: ^3.54.0 377 | vite: ^4.0.0 378 | dependencies: 379 | debug: 4.3.4 380 | deepmerge: 4.2.2 381 | kleur: 4.1.5 382 | magic-string: 0.27.0 383 | svelte: 3.55.0 384 | svelte-hmr: 0.15.1_svelte@3.55.0 385 | vite: 4.0.3 386 | vitefu: 0.2.4_vite@4.0.3 387 | transitivePeerDependencies: 388 | - supports-color 389 | dev: true 390 | 391 | /@types/chai-subset/1.3.3: 392 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} 393 | dependencies: 394 | '@types/chai': 4.3.4 395 | dev: true 396 | 397 | /@types/chai/4.3.4: 398 | resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==} 399 | dev: true 400 | 401 | /@types/cookie/0.5.1: 402 | resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} 403 | dev: true 404 | 405 | /@types/hast/2.3.4: 406 | resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} 407 | dependencies: 408 | '@types/unist': 2.0.6 409 | dev: true 410 | 411 | /@types/json-schema/7.0.11: 412 | resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} 413 | dev: true 414 | 415 | /@types/mdast/3.0.10: 416 | resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} 417 | dependencies: 418 | '@types/unist': 2.0.6 419 | dev: true 420 | 421 | /@types/node/18.11.18: 422 | resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} 423 | dev: true 424 | 425 | /@types/pug/2.0.6: 426 | resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} 427 | dev: true 428 | 429 | /@types/sass/1.43.1: 430 | resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==} 431 | dependencies: 432 | '@types/node': 18.11.18 433 | dev: true 434 | 435 | /@types/semver/7.3.13: 436 | resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} 437 | dev: true 438 | 439 | /@types/unist/2.0.6: 440 | resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} 441 | dev: true 442 | 443 | /@typescript-eslint/eslint-plugin/5.47.1_txmweb6yn7coi7nfrp22gpyqmy: 444 | resolution: {integrity: sha512-r4RZ2Jl9kcQN7K/dcOT+J7NAimbiis4sSM9spvWimsBvDegMhKLA5vri2jG19PmIPbDjPeWzfUPQ2hjEzA4Nmg==} 445 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 446 | peerDependencies: 447 | '@typescript-eslint/parser': ^5.0.0 448 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 449 | typescript: '*' 450 | peerDependenciesMeta: 451 | typescript: 452 | optional: true 453 | dependencies: 454 | '@typescript-eslint/parser': 5.47.1_lzzuuodtsqwxnvqeq4g4likcqa 455 | '@typescript-eslint/scope-manager': 5.47.1 456 | '@typescript-eslint/type-utils': 5.47.1_lzzuuodtsqwxnvqeq4g4likcqa 457 | '@typescript-eslint/utils': 5.47.1_lzzuuodtsqwxnvqeq4g4likcqa 458 | debug: 4.3.4 459 | eslint: 8.30.0 460 | ignore: 5.2.4 461 | natural-compare-lite: 1.4.0 462 | regexpp: 3.2.0 463 | semver: 7.3.8 464 | tsutils: 3.21.0_typescript@4.9.4 465 | typescript: 4.9.4 466 | transitivePeerDependencies: 467 | - supports-color 468 | dev: true 469 | 470 | /@typescript-eslint/parser/5.47.1_lzzuuodtsqwxnvqeq4g4likcqa: 471 | resolution: {integrity: sha512-9Vb+KIv29r6GPu4EboWOnQM7T+UjpjXvjCPhNORlgm40a9Ia9bvaPJswvtae1gip2QEeVeGh6YquqAzEgoRAlw==} 472 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 473 | peerDependencies: 474 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 475 | typescript: '*' 476 | peerDependenciesMeta: 477 | typescript: 478 | optional: true 479 | dependencies: 480 | '@typescript-eslint/scope-manager': 5.47.1 481 | '@typescript-eslint/types': 5.47.1 482 | '@typescript-eslint/typescript-estree': 5.47.1_typescript@4.9.4 483 | debug: 4.3.4 484 | eslint: 8.30.0 485 | typescript: 4.9.4 486 | transitivePeerDependencies: 487 | - supports-color 488 | dev: true 489 | 490 | /@typescript-eslint/scope-manager/5.47.1: 491 | resolution: {integrity: sha512-9hsFDsgUwrdOoW1D97Ewog7DYSHaq4WKuNs0LHF9RiCmqB0Z+XRR4Pf7u7u9z/8CciHuJ6yxNws1XznI3ddjEw==} 492 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 493 | dependencies: 494 | '@typescript-eslint/types': 5.47.1 495 | '@typescript-eslint/visitor-keys': 5.47.1 496 | dev: true 497 | 498 | /@typescript-eslint/type-utils/5.47.1_lzzuuodtsqwxnvqeq4g4likcqa: 499 | resolution: {integrity: sha512-/UKOeo8ee80A7/GJA427oIrBi/Gd4osk/3auBUg4Rn9EahFpevVV1mUK8hjyQD5lHPqX397x6CwOk5WGh1E/1w==} 500 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 501 | peerDependencies: 502 | eslint: '*' 503 | typescript: '*' 504 | peerDependenciesMeta: 505 | typescript: 506 | optional: true 507 | dependencies: 508 | '@typescript-eslint/typescript-estree': 5.47.1_typescript@4.9.4 509 | '@typescript-eslint/utils': 5.47.1_lzzuuodtsqwxnvqeq4g4likcqa 510 | debug: 4.3.4 511 | eslint: 8.30.0 512 | tsutils: 3.21.0_typescript@4.9.4 513 | typescript: 4.9.4 514 | transitivePeerDependencies: 515 | - supports-color 516 | dev: true 517 | 518 | /@typescript-eslint/types/5.47.1: 519 | resolution: {integrity: sha512-CmALY9YWXEpwuu6377ybJBZdtSAnzXLSQcxLSqSQSbC7VfpMu/HLVdrnVJj7ycI138EHqocW02LPJErE35cE9A==} 520 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 521 | dev: true 522 | 523 | /@typescript-eslint/typescript-estree/5.47.1_typescript@4.9.4: 524 | resolution: {integrity: sha512-4+ZhFSuISAvRi2xUszEj0xXbNTHceV9GbH9S8oAD2a/F9SW57aJNQVOCxG8GPfSWH/X4eOPdMEU2jYVuWKEpWA==} 525 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 526 | peerDependencies: 527 | typescript: '*' 528 | peerDependenciesMeta: 529 | typescript: 530 | optional: true 531 | dependencies: 532 | '@typescript-eslint/types': 5.47.1 533 | '@typescript-eslint/visitor-keys': 5.47.1 534 | debug: 4.3.4 535 | globby: 11.1.0 536 | is-glob: 4.0.3 537 | semver: 7.3.8 538 | tsutils: 3.21.0_typescript@4.9.4 539 | typescript: 4.9.4 540 | transitivePeerDependencies: 541 | - supports-color 542 | dev: true 543 | 544 | /@typescript-eslint/utils/5.47.1_lzzuuodtsqwxnvqeq4g4likcqa: 545 | resolution: {integrity: sha512-l90SdwqfmkuIVaREZ2ykEfCezepCLxzWMo5gVfcJsJCaT4jHT+QjgSkYhs5BMQmWqE9k3AtIfk4g211z/sTMVw==} 546 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 547 | peerDependencies: 548 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 549 | dependencies: 550 | '@types/json-schema': 7.0.11 551 | '@types/semver': 7.3.13 552 | '@typescript-eslint/scope-manager': 5.47.1 553 | '@typescript-eslint/types': 5.47.1 554 | '@typescript-eslint/typescript-estree': 5.47.1_typescript@4.9.4 555 | eslint: 8.30.0 556 | eslint-scope: 5.1.1 557 | eslint-utils: 3.0.0_eslint@8.30.0 558 | semver: 7.3.8 559 | transitivePeerDependencies: 560 | - supports-color 561 | - typescript 562 | dev: true 563 | 564 | /@typescript-eslint/visitor-keys/5.47.1: 565 | resolution: {integrity: sha512-rF3pmut2JCCjh6BLRhNKdYjULMb1brvoaiWDlHfLNVgmnZ0sBVJrs3SyaKE1XoDDnJuAx/hDQryHYmPUuNq0ig==} 566 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 567 | dependencies: 568 | '@typescript-eslint/types': 5.47.1 569 | eslint-visitor-keys: 3.3.0 570 | dev: true 571 | 572 | /acorn-jsx/5.3.2_acorn@8.8.1: 573 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 574 | peerDependencies: 575 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 576 | dependencies: 577 | acorn: 8.8.1 578 | dev: true 579 | 580 | /acorn-walk/8.2.0: 581 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} 582 | engines: {node: '>=0.4.0'} 583 | dev: true 584 | 585 | /acorn/8.8.1: 586 | resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} 587 | engines: {node: '>=0.4.0'} 588 | hasBin: true 589 | dev: true 590 | 591 | /ajv/6.12.6: 592 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 593 | dependencies: 594 | fast-deep-equal: 3.1.3 595 | fast-json-stable-stringify: 2.1.0 596 | json-schema-traverse: 0.4.1 597 | uri-js: 4.4.1 598 | dev: true 599 | 600 | /ansi-regex/5.0.1: 601 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 602 | engines: {node: '>=8'} 603 | dev: true 604 | 605 | /ansi-styles/4.3.0: 606 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 607 | engines: {node: '>=8'} 608 | dependencies: 609 | color-convert: 2.0.1 610 | dev: true 611 | 612 | /anymatch/3.1.3: 613 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 614 | engines: {node: '>= 8'} 615 | dependencies: 616 | normalize-path: 3.0.0 617 | picomatch: 2.3.1 618 | dev: true 619 | 620 | /argparse/2.0.1: 621 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 622 | dev: true 623 | 624 | /array-union/2.1.0: 625 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 626 | engines: {node: '>=8'} 627 | dev: true 628 | 629 | /assertion-error/1.1.0: 630 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 631 | dev: true 632 | 633 | /bail/2.0.2: 634 | resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} 635 | dev: true 636 | 637 | /balanced-match/1.0.2: 638 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 639 | dev: true 640 | 641 | /binary-extensions/2.2.0: 642 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 643 | engines: {node: '>=8'} 644 | dev: true 645 | 646 | /brace-expansion/1.1.11: 647 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 648 | dependencies: 649 | balanced-match: 1.0.2 650 | concat-map: 0.0.1 651 | dev: true 652 | 653 | /braces/3.0.2: 654 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 655 | engines: {node: '>=8'} 656 | dependencies: 657 | fill-range: 7.0.1 658 | dev: true 659 | 660 | /buffer-crc32/0.2.13: 661 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} 662 | dev: true 663 | 664 | /busboy/1.6.0: 665 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 666 | engines: {node: '>=10.16.0'} 667 | dependencies: 668 | streamsearch: 1.1.0 669 | dev: true 670 | 671 | /callsites/3.1.0: 672 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 673 | engines: {node: '>=6'} 674 | dev: true 675 | 676 | /chai/4.3.7: 677 | resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} 678 | engines: {node: '>=4'} 679 | dependencies: 680 | assertion-error: 1.1.0 681 | check-error: 1.0.2 682 | deep-eql: 4.1.3 683 | get-func-name: 2.0.0 684 | loupe: 2.3.6 685 | pathval: 1.1.1 686 | type-detect: 4.0.8 687 | dev: true 688 | 689 | /chalk/4.1.2: 690 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 691 | engines: {node: '>=10'} 692 | dependencies: 693 | ansi-styles: 4.3.0 694 | supports-color: 7.2.0 695 | dev: true 696 | 697 | /check-error/1.0.2: 698 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} 699 | dev: true 700 | 701 | /chokidar/3.5.3: 702 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 703 | engines: {node: '>= 8.10.0'} 704 | dependencies: 705 | anymatch: 3.1.3 706 | braces: 3.0.2 707 | glob-parent: 5.1.2 708 | is-binary-path: 2.1.0 709 | is-glob: 4.0.3 710 | normalize-path: 3.0.0 711 | readdirp: 3.6.0 712 | optionalDependencies: 713 | fsevents: 2.3.2 714 | dev: true 715 | 716 | /color-convert/2.0.1: 717 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 718 | engines: {node: '>=7.0.0'} 719 | dependencies: 720 | color-name: 1.1.4 721 | dev: true 722 | 723 | /color-name/1.1.4: 724 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 725 | dev: true 726 | 727 | /concat-map/0.0.1: 728 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 729 | dev: true 730 | 731 | /cookie/0.5.0: 732 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 733 | engines: {node: '>= 0.6'} 734 | dev: true 735 | 736 | /cross-spawn/7.0.3: 737 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 738 | engines: {node: '>= 8'} 739 | dependencies: 740 | path-key: 3.1.1 741 | shebang-command: 2.0.0 742 | which: 2.0.2 743 | dev: true 744 | 745 | /debug/4.3.4: 746 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 747 | engines: {node: '>=6.0'} 748 | peerDependencies: 749 | supports-color: '*' 750 | peerDependenciesMeta: 751 | supports-color: 752 | optional: true 753 | dependencies: 754 | ms: 2.1.2 755 | dev: true 756 | 757 | /deep-eql/4.1.3: 758 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 759 | engines: {node: '>=6'} 760 | dependencies: 761 | type-detect: 4.0.8 762 | dev: true 763 | 764 | /deep-is/0.1.4: 765 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 766 | dev: true 767 | 768 | /deepmerge/4.2.2: 769 | resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} 770 | engines: {node: '>=0.10.0'} 771 | dev: true 772 | 773 | /detect-indent/6.1.0: 774 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 775 | engines: {node: '>=8'} 776 | dev: true 777 | 778 | /devalue/4.2.0: 779 | resolution: {integrity: sha512-mbjoAaCL2qogBKgeFxFPOXAUsZchircF+B/79LD4sHH0+NHfYm8gZpQrskKDn5gENGt35+5OI1GUF7hLVnkPDw==} 780 | dev: true 781 | 782 | /dir-glob/3.0.1: 783 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 784 | engines: {node: '>=8'} 785 | dependencies: 786 | path-type: 4.0.0 787 | dev: true 788 | 789 | /doctrine/3.0.0: 790 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 791 | engines: {node: '>=6.0.0'} 792 | dependencies: 793 | esutils: 2.0.3 794 | dev: true 795 | 796 | /es6-promise/3.3.1: 797 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} 798 | dev: true 799 | 800 | /esbuild/0.16.12: 801 | resolution: {integrity: sha512-eq5KcuXajf2OmivCl4e89AD3j8fbV+UTE9vczEzq5haA07U9oOTzBWlh3+6ZdjJR7Rz2QfWZ2uxZyhZxBgJ4+g==} 802 | engines: {node: '>=12'} 803 | hasBin: true 804 | requiresBuild: true 805 | optionalDependencies: 806 | '@esbuild/android-arm': 0.16.12 807 | '@esbuild/android-arm64': 0.16.12 808 | '@esbuild/android-x64': 0.16.12 809 | '@esbuild/darwin-arm64': 0.16.12 810 | '@esbuild/darwin-x64': 0.16.12 811 | '@esbuild/freebsd-arm64': 0.16.12 812 | '@esbuild/freebsd-x64': 0.16.12 813 | '@esbuild/linux-arm': 0.16.12 814 | '@esbuild/linux-arm64': 0.16.12 815 | '@esbuild/linux-ia32': 0.16.12 816 | '@esbuild/linux-loong64': 0.16.12 817 | '@esbuild/linux-mips64el': 0.16.12 818 | '@esbuild/linux-ppc64': 0.16.12 819 | '@esbuild/linux-riscv64': 0.16.12 820 | '@esbuild/linux-s390x': 0.16.12 821 | '@esbuild/linux-x64': 0.16.12 822 | '@esbuild/netbsd-x64': 0.16.12 823 | '@esbuild/openbsd-x64': 0.16.12 824 | '@esbuild/sunos-x64': 0.16.12 825 | '@esbuild/win32-arm64': 0.16.12 826 | '@esbuild/win32-ia32': 0.16.12 827 | '@esbuild/win32-x64': 0.16.12 828 | dev: true 829 | 830 | /escape-string-regexp/4.0.0: 831 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 832 | engines: {node: '>=10'} 833 | dev: true 834 | 835 | /escape-string-regexp/5.0.0: 836 | resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} 837 | engines: {node: '>=12'} 838 | dev: true 839 | 840 | /eslint-config-prettier/8.5.0_eslint@8.30.0: 841 | resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} 842 | hasBin: true 843 | peerDependencies: 844 | eslint: '>=7.0.0' 845 | dependencies: 846 | eslint: 8.30.0 847 | dev: true 848 | 849 | /eslint-plugin-svelte3/4.0.0_khrjkzzv5v2x7orkj5o7sxbz3a: 850 | resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==} 851 | peerDependencies: 852 | eslint: '>=8.0.0' 853 | svelte: ^3.2.0 854 | dependencies: 855 | eslint: 8.30.0 856 | svelte: 3.55.0 857 | dev: true 858 | 859 | /eslint-scope/5.1.1: 860 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 861 | engines: {node: '>=8.0.0'} 862 | dependencies: 863 | esrecurse: 4.3.0 864 | estraverse: 4.3.0 865 | dev: true 866 | 867 | /eslint-scope/7.1.1: 868 | resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} 869 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 870 | dependencies: 871 | esrecurse: 4.3.0 872 | estraverse: 5.3.0 873 | dev: true 874 | 875 | /eslint-utils/3.0.0_eslint@8.30.0: 876 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 877 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 878 | peerDependencies: 879 | eslint: '>=5' 880 | dependencies: 881 | eslint: 8.30.0 882 | eslint-visitor-keys: 2.1.0 883 | dev: true 884 | 885 | /eslint-visitor-keys/2.1.0: 886 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 887 | engines: {node: '>=10'} 888 | dev: true 889 | 890 | /eslint-visitor-keys/3.3.0: 891 | resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} 892 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 893 | dev: true 894 | 895 | /eslint/8.30.0: 896 | resolution: {integrity: sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==} 897 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 898 | hasBin: true 899 | dependencies: 900 | '@eslint/eslintrc': 1.4.0 901 | '@humanwhocodes/config-array': 0.11.8 902 | '@humanwhocodes/module-importer': 1.0.1 903 | '@nodelib/fs.walk': 1.2.8 904 | ajv: 6.12.6 905 | chalk: 4.1.2 906 | cross-spawn: 7.0.3 907 | debug: 4.3.4 908 | doctrine: 3.0.0 909 | escape-string-regexp: 4.0.0 910 | eslint-scope: 7.1.1 911 | eslint-utils: 3.0.0_eslint@8.30.0 912 | eslint-visitor-keys: 3.3.0 913 | espree: 9.4.1 914 | esquery: 1.4.0 915 | esutils: 2.0.3 916 | fast-deep-equal: 3.1.3 917 | file-entry-cache: 6.0.1 918 | find-up: 5.0.0 919 | glob-parent: 6.0.2 920 | globals: 13.19.0 921 | grapheme-splitter: 1.0.4 922 | ignore: 5.2.4 923 | import-fresh: 3.3.0 924 | imurmurhash: 0.1.4 925 | is-glob: 4.0.3 926 | is-path-inside: 3.0.3 927 | js-sdsl: 4.2.0 928 | js-yaml: 4.1.0 929 | json-stable-stringify-without-jsonify: 1.0.1 930 | levn: 0.4.1 931 | lodash.merge: 4.6.2 932 | minimatch: 3.1.2 933 | natural-compare: 1.4.0 934 | optionator: 0.9.1 935 | regexpp: 3.2.0 936 | strip-ansi: 6.0.1 937 | strip-json-comments: 3.1.1 938 | text-table: 0.2.0 939 | transitivePeerDependencies: 940 | - supports-color 941 | dev: true 942 | 943 | /esm-env/1.0.0: 944 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} 945 | dev: true 946 | 947 | /espree/9.4.1: 948 | resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} 949 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 950 | dependencies: 951 | acorn: 8.8.1 952 | acorn-jsx: 5.3.2_acorn@8.8.1 953 | eslint-visitor-keys: 3.3.0 954 | dev: true 955 | 956 | /esquery/1.4.0: 957 | resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} 958 | engines: {node: '>=0.10'} 959 | dependencies: 960 | estraverse: 5.3.0 961 | dev: true 962 | 963 | /esrecurse/4.3.0: 964 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 965 | engines: {node: '>=4.0'} 966 | dependencies: 967 | estraverse: 5.3.0 968 | dev: true 969 | 970 | /estraverse/4.3.0: 971 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 972 | engines: {node: '>=4.0'} 973 | dev: true 974 | 975 | /estraverse/5.3.0: 976 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 977 | engines: {node: '>=4.0'} 978 | dev: true 979 | 980 | /esutils/2.0.3: 981 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 982 | engines: {node: '>=0.10.0'} 983 | dev: true 984 | 985 | /extend/3.0.2: 986 | resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} 987 | dev: true 988 | 989 | /fast-deep-equal/3.1.3: 990 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 991 | dev: true 992 | 993 | /fast-glob/3.2.12: 994 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 995 | engines: {node: '>=8.6.0'} 996 | dependencies: 997 | '@nodelib/fs.stat': 2.0.5 998 | '@nodelib/fs.walk': 1.2.8 999 | glob-parent: 5.1.2 1000 | merge2: 1.4.1 1001 | micromatch: 4.0.5 1002 | dev: true 1003 | 1004 | /fast-json-stable-stringify/2.1.0: 1005 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1006 | dev: true 1007 | 1008 | /fast-levenshtein/2.0.6: 1009 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1010 | dev: true 1011 | 1012 | /fastq/1.14.0: 1013 | resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==} 1014 | dependencies: 1015 | reusify: 1.0.4 1016 | dev: true 1017 | 1018 | /file-entry-cache/6.0.1: 1019 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1020 | engines: {node: ^10.12.0 || >=12.0.0} 1021 | dependencies: 1022 | flat-cache: 3.0.4 1023 | dev: true 1024 | 1025 | /fill-range/7.0.1: 1026 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1027 | engines: {node: '>=8'} 1028 | dependencies: 1029 | to-regex-range: 5.0.1 1030 | dev: true 1031 | 1032 | /find-up/5.0.0: 1033 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1034 | engines: {node: '>=10'} 1035 | dependencies: 1036 | locate-path: 6.0.0 1037 | path-exists: 4.0.0 1038 | dev: true 1039 | 1040 | /flat-cache/3.0.4: 1041 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1042 | engines: {node: ^10.12.0 || >=12.0.0} 1043 | dependencies: 1044 | flatted: 3.2.7 1045 | rimraf: 3.0.2 1046 | dev: true 1047 | 1048 | /flatted/3.2.7: 1049 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1050 | dev: true 1051 | 1052 | /fs.realpath/1.0.0: 1053 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1054 | dev: true 1055 | 1056 | /fsevents/2.3.2: 1057 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1058 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1059 | os: [darwin] 1060 | requiresBuild: true 1061 | dev: true 1062 | optional: true 1063 | 1064 | /function-bind/1.1.1: 1065 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1066 | dev: true 1067 | 1068 | /get-func-name/2.0.0: 1069 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} 1070 | dev: true 1071 | 1072 | /github-slugger/2.0.0: 1073 | resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} 1074 | dev: true 1075 | 1076 | /glob-parent/5.1.2: 1077 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1078 | engines: {node: '>= 6'} 1079 | dependencies: 1080 | is-glob: 4.0.3 1081 | dev: true 1082 | 1083 | /glob-parent/6.0.2: 1084 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1085 | engines: {node: '>=10.13.0'} 1086 | dependencies: 1087 | is-glob: 4.0.3 1088 | dev: true 1089 | 1090 | /glob/7.2.3: 1091 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1092 | dependencies: 1093 | fs.realpath: 1.0.0 1094 | inflight: 1.0.6 1095 | inherits: 2.0.4 1096 | minimatch: 3.1.2 1097 | once: 1.4.0 1098 | path-is-absolute: 1.0.1 1099 | dev: true 1100 | 1101 | /globals/13.19.0: 1102 | resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} 1103 | engines: {node: '>=8'} 1104 | dependencies: 1105 | type-fest: 0.20.2 1106 | dev: true 1107 | 1108 | /globalyzer/0.1.0: 1109 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} 1110 | dev: true 1111 | 1112 | /globby/11.1.0: 1113 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1114 | engines: {node: '>=10'} 1115 | dependencies: 1116 | array-union: 2.1.0 1117 | dir-glob: 3.0.1 1118 | fast-glob: 3.2.12 1119 | ignore: 5.2.4 1120 | merge2: 1.4.1 1121 | slash: 3.0.0 1122 | dev: true 1123 | 1124 | /globrex/0.1.2: 1125 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 1126 | dev: true 1127 | 1128 | /graceful-fs/4.2.10: 1129 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 1130 | dev: true 1131 | 1132 | /grapheme-splitter/1.0.4: 1133 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 1134 | dev: true 1135 | 1136 | /has-flag/4.0.0: 1137 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1138 | engines: {node: '>=8'} 1139 | dev: true 1140 | 1141 | /has/1.0.3: 1142 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1143 | engines: {node: '>= 0.4.0'} 1144 | dependencies: 1145 | function-bind: 1.1.1 1146 | dev: true 1147 | 1148 | /hast-util-has-property/2.0.0: 1149 | resolution: {integrity: sha512-4Qf++8o5v14us4Muv3HRj+Er6wTNGA/N9uCaZMty4JWvyFKLdhULrv4KE1b65AthsSO9TXSZnjuxS8ecIyhb0w==} 1150 | dev: true 1151 | 1152 | /hast-util-heading-rank/2.1.0: 1153 | resolution: {integrity: sha512-w+Rw20Q/iWp2Bcnr6uTrYU6/ftZLbHKhvc8nM26VIWpDqDMlku2iXUVTeOlsdoih/UKQhY7PHQ+vZ0Aqq8bxtQ==} 1154 | dependencies: 1155 | '@types/hast': 2.3.4 1156 | dev: true 1157 | 1158 | /hast-util-is-element/2.1.2: 1159 | resolution: {integrity: sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==} 1160 | dependencies: 1161 | '@types/hast': 2.3.4 1162 | '@types/unist': 2.0.6 1163 | dev: true 1164 | 1165 | /hast-util-to-string/2.0.0: 1166 | resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==} 1167 | dependencies: 1168 | '@types/hast': 2.3.4 1169 | dev: true 1170 | 1171 | /ignore/5.2.4: 1172 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1173 | engines: {node: '>= 4'} 1174 | dev: true 1175 | 1176 | /import-fresh/3.3.0: 1177 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1178 | engines: {node: '>=6'} 1179 | dependencies: 1180 | parent-module: 1.0.1 1181 | resolve-from: 4.0.0 1182 | dev: true 1183 | 1184 | /imurmurhash/0.1.4: 1185 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1186 | engines: {node: '>=0.8.19'} 1187 | dev: true 1188 | 1189 | /inflight/1.0.6: 1190 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1191 | dependencies: 1192 | once: 1.4.0 1193 | wrappy: 1.0.2 1194 | dev: true 1195 | 1196 | /inherits/2.0.4: 1197 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1198 | dev: true 1199 | 1200 | /is-binary-path/2.1.0: 1201 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1202 | engines: {node: '>=8'} 1203 | dependencies: 1204 | binary-extensions: 2.2.0 1205 | dev: true 1206 | 1207 | /is-buffer/2.0.5: 1208 | resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} 1209 | engines: {node: '>=4'} 1210 | dev: true 1211 | 1212 | /is-core-module/2.11.0: 1213 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} 1214 | dependencies: 1215 | has: 1.0.3 1216 | dev: true 1217 | 1218 | /is-extglob/2.1.1: 1219 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1220 | engines: {node: '>=0.10.0'} 1221 | dev: true 1222 | 1223 | /is-glob/4.0.3: 1224 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1225 | engines: {node: '>=0.10.0'} 1226 | dependencies: 1227 | is-extglob: 2.1.1 1228 | dev: true 1229 | 1230 | /is-number/7.0.0: 1231 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1232 | engines: {node: '>=0.12.0'} 1233 | dev: true 1234 | 1235 | /is-path-inside/3.0.3: 1236 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1237 | engines: {node: '>=8'} 1238 | dev: true 1239 | 1240 | /is-plain-obj/4.1.0: 1241 | resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} 1242 | engines: {node: '>=12'} 1243 | dev: true 1244 | 1245 | /isexe/2.0.0: 1246 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1247 | dev: true 1248 | 1249 | /js-sdsl/4.2.0: 1250 | resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} 1251 | dev: true 1252 | 1253 | /js-yaml/4.1.0: 1254 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1255 | hasBin: true 1256 | dependencies: 1257 | argparse: 2.0.1 1258 | dev: true 1259 | 1260 | /json-schema-traverse/0.4.1: 1261 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1262 | dev: true 1263 | 1264 | /json-stable-stringify-without-jsonify/1.0.1: 1265 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1266 | dev: true 1267 | 1268 | /kleur/4.1.5: 1269 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1270 | engines: {node: '>=6'} 1271 | dev: true 1272 | 1273 | /levn/0.4.1: 1274 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1275 | engines: {node: '>= 0.8.0'} 1276 | dependencies: 1277 | prelude-ls: 1.2.1 1278 | type-check: 0.4.0 1279 | dev: true 1280 | 1281 | /local-pkg/0.4.2: 1282 | resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} 1283 | engines: {node: '>=14'} 1284 | dev: true 1285 | 1286 | /locate-path/6.0.0: 1287 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1288 | engines: {node: '>=10'} 1289 | dependencies: 1290 | p-locate: 5.0.0 1291 | dev: true 1292 | 1293 | /lodash.merge/4.6.2: 1294 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1295 | dev: true 1296 | 1297 | /loupe/2.3.6: 1298 | resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} 1299 | dependencies: 1300 | get-func-name: 2.0.0 1301 | dev: true 1302 | 1303 | /lru-cache/6.0.0: 1304 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1305 | engines: {node: '>=10'} 1306 | dependencies: 1307 | yallist: 4.0.0 1308 | dev: true 1309 | 1310 | /magic-string/0.25.9: 1311 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 1312 | dependencies: 1313 | sourcemap-codec: 1.4.8 1314 | dev: true 1315 | 1316 | /magic-string/0.27.0: 1317 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} 1318 | engines: {node: '>=12'} 1319 | dependencies: 1320 | '@jridgewell/sourcemap-codec': 1.4.14 1321 | dev: true 1322 | 1323 | /mdast-util-find-and-replace/2.2.1: 1324 | resolution: {integrity: sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==} 1325 | dependencies: 1326 | escape-string-regexp: 5.0.0 1327 | unist-util-is: 5.1.1 1328 | unist-util-visit-parents: 5.1.1 1329 | dev: true 1330 | 1331 | /mdast-util-to-string/3.1.0: 1332 | resolution: {integrity: sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==} 1333 | dev: true 1334 | 1335 | /mdsvex/0.10.6_svelte@3.55.0: 1336 | resolution: {integrity: sha512-aGRDY0r5jx9+OOgFdyB9Xm3EBr9OUmcrTDPWLB7a7g8VPRxzPy4MOBmcVYgz7ErhAJ7bZ/coUoj6aHio3x/2mA==} 1337 | peerDependencies: 1338 | svelte: 3.x 1339 | dependencies: 1340 | '@types/unist': 2.0.6 1341 | prism-svelte: 0.4.7 1342 | prismjs: 1.29.0 1343 | svelte: 3.55.0 1344 | vfile-message: 2.0.4 1345 | dev: true 1346 | 1347 | /merge2/1.4.1: 1348 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1349 | engines: {node: '>= 8'} 1350 | dev: true 1351 | 1352 | /micromatch/4.0.5: 1353 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1354 | engines: {node: '>=8.6'} 1355 | dependencies: 1356 | braces: 3.0.2 1357 | picomatch: 2.3.1 1358 | dev: true 1359 | 1360 | /mime/3.0.0: 1361 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} 1362 | engines: {node: '>=10.0.0'} 1363 | hasBin: true 1364 | dev: true 1365 | 1366 | /min-indent/1.0.1: 1367 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 1368 | engines: {node: '>=4'} 1369 | dev: true 1370 | 1371 | /minimatch/3.1.2: 1372 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1373 | dependencies: 1374 | brace-expansion: 1.1.11 1375 | dev: true 1376 | 1377 | /minimist/1.2.7: 1378 | resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} 1379 | dev: true 1380 | 1381 | /mkdirp/0.5.6: 1382 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} 1383 | hasBin: true 1384 | dependencies: 1385 | minimist: 1.2.7 1386 | dev: true 1387 | 1388 | /mri/1.2.0: 1389 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1390 | engines: {node: '>=4'} 1391 | dev: true 1392 | 1393 | /mrmime/1.0.1: 1394 | resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} 1395 | engines: {node: '>=10'} 1396 | dev: true 1397 | 1398 | /ms/2.1.2: 1399 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1400 | dev: true 1401 | 1402 | /nanoid/3.3.4: 1403 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 1404 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1405 | hasBin: true 1406 | dev: true 1407 | 1408 | /natural-compare-lite/1.4.0: 1409 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 1410 | dev: true 1411 | 1412 | /natural-compare/1.4.0: 1413 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1414 | dev: true 1415 | 1416 | /normalize-path/3.0.0: 1417 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1418 | engines: {node: '>=0.10.0'} 1419 | dev: true 1420 | 1421 | /once/1.4.0: 1422 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1423 | dependencies: 1424 | wrappy: 1.0.2 1425 | dev: true 1426 | 1427 | /optionator/0.9.1: 1428 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 1429 | engines: {node: '>= 0.8.0'} 1430 | dependencies: 1431 | deep-is: 0.1.4 1432 | fast-levenshtein: 2.0.6 1433 | levn: 0.4.1 1434 | prelude-ls: 1.2.1 1435 | type-check: 0.4.0 1436 | word-wrap: 1.2.3 1437 | dev: true 1438 | 1439 | /p-limit/3.1.0: 1440 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1441 | engines: {node: '>=10'} 1442 | dependencies: 1443 | yocto-queue: 0.1.0 1444 | dev: true 1445 | 1446 | /p-locate/5.0.0: 1447 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1448 | engines: {node: '>=10'} 1449 | dependencies: 1450 | p-limit: 3.1.0 1451 | dev: true 1452 | 1453 | /parent-module/1.0.1: 1454 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1455 | engines: {node: '>=6'} 1456 | dependencies: 1457 | callsites: 3.1.0 1458 | dev: true 1459 | 1460 | /path-exists/4.0.0: 1461 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1462 | engines: {node: '>=8'} 1463 | dev: true 1464 | 1465 | /path-is-absolute/1.0.1: 1466 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1467 | engines: {node: '>=0.10.0'} 1468 | dev: true 1469 | 1470 | /path-key/3.1.1: 1471 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1472 | engines: {node: '>=8'} 1473 | dev: true 1474 | 1475 | /path-parse/1.0.7: 1476 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1477 | dev: true 1478 | 1479 | /path-type/4.0.0: 1480 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1481 | engines: {node: '>=8'} 1482 | dev: true 1483 | 1484 | /pathval/1.1.1: 1485 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 1486 | dev: true 1487 | 1488 | /picocolors/1.0.0: 1489 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1490 | dev: true 1491 | 1492 | /picomatch/2.3.1: 1493 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1494 | engines: {node: '>=8.6'} 1495 | dev: true 1496 | 1497 | /playwright-core/1.29.1: 1498 | resolution: {integrity: sha512-20Ai3d+lMkWpI9YZYlxk8gxatfgax5STW8GaMozAHwigLiyiKQrdkt7gaoT9UQR8FIVDg6qVXs9IoZUQrDjIIg==} 1499 | engines: {node: '>=14'} 1500 | hasBin: true 1501 | dev: true 1502 | 1503 | /postcss/8.4.20: 1504 | resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==} 1505 | engines: {node: ^10 || ^12 || >=14} 1506 | dependencies: 1507 | nanoid: 3.3.4 1508 | picocolors: 1.0.0 1509 | source-map-js: 1.0.2 1510 | dev: true 1511 | 1512 | /prelude-ls/1.2.1: 1513 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1514 | engines: {node: '>= 0.8.0'} 1515 | dev: true 1516 | 1517 | /prettier-plugin-svelte/2.9.0_ajxj753sv7dbwexjherrch25ta: 1518 | resolution: {integrity: sha512-3doBi5NO4IVgaNPtwewvrgPpqAcvNv0NwJNflr76PIGgi9nf1oguQV1Hpdm9TI2ALIQVn/9iIwLpBO5UcD2Jiw==} 1519 | peerDependencies: 1520 | prettier: ^1.16.4 || ^2.0.0 1521 | svelte: ^3.2.0 1522 | dependencies: 1523 | prettier: 2.8.1 1524 | svelte: 3.55.0 1525 | dev: true 1526 | 1527 | /prettier/2.8.1: 1528 | resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==} 1529 | engines: {node: '>=10.13.0'} 1530 | hasBin: true 1531 | dev: true 1532 | 1533 | /prism-svelte/0.4.7: 1534 | resolution: {integrity: sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ==} 1535 | dev: true 1536 | 1537 | /prismjs/1.29.0: 1538 | resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} 1539 | engines: {node: '>=6'} 1540 | dev: true 1541 | 1542 | /punycode/2.1.1: 1543 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} 1544 | engines: {node: '>=6'} 1545 | dev: true 1546 | 1547 | /queue-microtask/1.2.3: 1548 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1549 | dev: true 1550 | 1551 | /readdirp/3.6.0: 1552 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1553 | engines: {node: '>=8.10.0'} 1554 | dependencies: 1555 | picomatch: 2.3.1 1556 | dev: true 1557 | 1558 | /regexpp/3.2.0: 1559 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} 1560 | engines: {node: '>=8'} 1561 | dev: true 1562 | 1563 | /rehype-autolink-headings/6.1.1: 1564 | resolution: {integrity: sha512-NMYzZIsHM3sA14nC5rAFuUPIOfg+DFmf9EY1YMhaNlB7+3kK/ZlE6kqPfuxr1tsJ1XWkTrMtMoyHosU70d35mA==} 1565 | dependencies: 1566 | '@types/hast': 2.3.4 1567 | extend: 3.0.2 1568 | hast-util-has-property: 2.0.0 1569 | hast-util-heading-rank: 2.1.0 1570 | hast-util-is-element: 2.1.2 1571 | unified: 10.1.2 1572 | unist-util-visit: 4.1.1 1573 | dev: true 1574 | 1575 | /rehype-slug/5.1.0: 1576 | resolution: {integrity: sha512-Gf91dJoXneiorNEnn+Phx97CO7oRMrpi+6r155tTxzGuLtm+QrI4cTwCa9e1rtePdL4i9tSO58PeSS6HWfgsiw==} 1577 | dependencies: 1578 | '@types/hast': 2.3.4 1579 | github-slugger: 2.0.0 1580 | hast-util-has-property: 2.0.0 1581 | hast-util-heading-rank: 2.1.0 1582 | hast-util-to-string: 2.0.0 1583 | unified: 10.1.2 1584 | unist-util-visit: 4.1.1 1585 | dev: true 1586 | 1587 | /remark-abbr/1.4.1: 1588 | resolution: {integrity: sha512-h3MuC2ujpaFIvDHVztxiNe7OGEXz6fAaUoaeqJhroyHCZXcspZiOg3iDoRdGLmnGSEO/x6g9nQGBDqgVsjCHKg==} 1589 | dependencies: 1590 | unist-util-visit: 2.0.3 1591 | dev: true 1592 | 1593 | /remark-github/11.2.4: 1594 | resolution: {integrity: sha512-GJjWFpwqdrHHhPWqMbb8+lqFLiHQ9pCzUmXmRrhMFXGpYov5n2ljsZzuWgXlfzArfQYkiKIZczA2I8IHYMHqCA==} 1595 | dependencies: 1596 | '@types/mdast': 3.0.10 1597 | mdast-util-find-and-replace: 2.2.1 1598 | mdast-util-to-string: 3.1.0 1599 | unified: 10.1.2 1600 | unist-util-visit: 4.1.1 1601 | dev: true 1602 | 1603 | /resolve-from/4.0.0: 1604 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1605 | engines: {node: '>=4'} 1606 | dev: true 1607 | 1608 | /resolve/1.22.1: 1609 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 1610 | hasBin: true 1611 | dependencies: 1612 | is-core-module: 2.11.0 1613 | path-parse: 1.0.7 1614 | supports-preserve-symlinks-flag: 1.0.0 1615 | dev: true 1616 | 1617 | /reusify/1.0.4: 1618 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1619 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1620 | dev: true 1621 | 1622 | /rimraf/2.7.1: 1623 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} 1624 | hasBin: true 1625 | dependencies: 1626 | glob: 7.2.3 1627 | dev: true 1628 | 1629 | /rimraf/3.0.2: 1630 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1631 | hasBin: true 1632 | dependencies: 1633 | glob: 7.2.3 1634 | dev: true 1635 | 1636 | /rollup/3.8.1: 1637 | resolution: {integrity: sha512-4yh9eMW7byOroYcN8DlF9P/2jCpu6txVIHjEqquQVSx7DI0RgyCCN3tjrcy4ra6yVtV336aLBB3v2AarYAxePQ==} 1638 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 1639 | hasBin: true 1640 | optionalDependencies: 1641 | fsevents: 2.3.2 1642 | dev: true 1643 | 1644 | /run-parallel/1.2.0: 1645 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1646 | dependencies: 1647 | queue-microtask: 1.2.3 1648 | dev: true 1649 | 1650 | /sade/1.8.1: 1651 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 1652 | engines: {node: '>=6'} 1653 | dependencies: 1654 | mri: 1.2.0 1655 | dev: true 1656 | 1657 | /sander/0.5.1: 1658 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} 1659 | dependencies: 1660 | es6-promise: 3.3.1 1661 | graceful-fs: 4.2.10 1662 | mkdirp: 0.5.6 1663 | rimraf: 2.7.1 1664 | dev: true 1665 | 1666 | /semver/7.3.8: 1667 | resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} 1668 | engines: {node: '>=10'} 1669 | hasBin: true 1670 | dependencies: 1671 | lru-cache: 6.0.0 1672 | dev: true 1673 | 1674 | /set-cookie-parser/2.5.1: 1675 | resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==} 1676 | dev: true 1677 | 1678 | /shebang-command/2.0.0: 1679 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1680 | engines: {node: '>=8'} 1681 | dependencies: 1682 | shebang-regex: 3.0.0 1683 | dev: true 1684 | 1685 | /shebang-regex/3.0.0: 1686 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1687 | engines: {node: '>=8'} 1688 | dev: true 1689 | 1690 | /sirv/2.0.2: 1691 | resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==} 1692 | engines: {node: '>= 10'} 1693 | dependencies: 1694 | '@polka/url': 1.0.0-next.21 1695 | mrmime: 1.0.1 1696 | totalist: 3.0.0 1697 | dev: true 1698 | 1699 | /slash/3.0.0: 1700 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1701 | engines: {node: '>=8'} 1702 | dev: true 1703 | 1704 | /sorcery/0.10.0: 1705 | resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==} 1706 | hasBin: true 1707 | dependencies: 1708 | buffer-crc32: 0.2.13 1709 | minimist: 1.2.7 1710 | sander: 0.5.1 1711 | sourcemap-codec: 1.4.8 1712 | dev: true 1713 | 1714 | /source-map-js/1.0.2: 1715 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1716 | engines: {node: '>=0.10.0'} 1717 | dev: true 1718 | 1719 | /source-map/0.6.1: 1720 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1721 | engines: {node: '>=0.10.0'} 1722 | dev: true 1723 | 1724 | /sourcemap-codec/1.4.8: 1725 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 1726 | deprecated: Please use @jridgewell/sourcemap-codec instead 1727 | dev: true 1728 | 1729 | /streamsearch/1.1.0: 1730 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 1731 | engines: {node: '>=10.0.0'} 1732 | dev: true 1733 | 1734 | /strip-ansi/6.0.1: 1735 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1736 | engines: {node: '>=8'} 1737 | dependencies: 1738 | ansi-regex: 5.0.1 1739 | dev: true 1740 | 1741 | /strip-indent/3.0.0: 1742 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1743 | engines: {node: '>=8'} 1744 | dependencies: 1745 | min-indent: 1.0.1 1746 | dev: true 1747 | 1748 | /strip-json-comments/3.1.1: 1749 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1750 | engines: {node: '>=8'} 1751 | dev: true 1752 | 1753 | /strip-literal/1.0.0: 1754 | resolution: {integrity: sha512-5o4LsH1lzBzO9UFH63AJ2ad2/S2AVx6NtjOcaz+VTT2h1RiRvbipW72z8M/lxEhcPHDBQwpDrnTF7sXy/7OwCQ==} 1755 | dependencies: 1756 | acorn: 8.8.1 1757 | dev: true 1758 | 1759 | /supports-color/7.2.0: 1760 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1761 | engines: {node: '>=8'} 1762 | dependencies: 1763 | has-flag: 4.0.0 1764 | dev: true 1765 | 1766 | /supports-preserve-symlinks-flag/1.0.0: 1767 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1768 | engines: {node: '>= 0.4'} 1769 | dev: true 1770 | 1771 | /svelte-check/2.10.3_svelte@3.55.0: 1772 | resolution: {integrity: sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==} 1773 | hasBin: true 1774 | peerDependencies: 1775 | svelte: ^3.24.0 1776 | dependencies: 1777 | '@jridgewell/trace-mapping': 0.3.17 1778 | chokidar: 3.5.3 1779 | fast-glob: 3.2.12 1780 | import-fresh: 3.3.0 1781 | picocolors: 1.0.0 1782 | sade: 1.8.1 1783 | svelte: 3.55.0 1784 | svelte-preprocess: 4.10.7_niwyv7xychq2ag6arq5eqxbomm 1785 | typescript: 4.9.4 1786 | transitivePeerDependencies: 1787 | - '@babel/core' 1788 | - coffeescript 1789 | - less 1790 | - node-sass 1791 | - postcss 1792 | - postcss-load-config 1793 | - pug 1794 | - sass 1795 | - stylus 1796 | - sugarss 1797 | dev: true 1798 | 1799 | /svelte-hmr/0.15.1_svelte@3.55.0: 1800 | resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} 1801 | engines: {node: ^12.20 || ^14.13.1 || >= 16} 1802 | peerDependencies: 1803 | svelte: '>=3.19.0' 1804 | dependencies: 1805 | svelte: 3.55.0 1806 | dev: true 1807 | 1808 | /svelte-preprocess/4.10.7_niwyv7xychq2ag6arq5eqxbomm: 1809 | resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} 1810 | engines: {node: '>= 9.11.2'} 1811 | requiresBuild: true 1812 | peerDependencies: 1813 | '@babel/core': ^7.10.2 1814 | coffeescript: ^2.5.1 1815 | less: ^3.11.3 || ^4.0.0 1816 | node-sass: '*' 1817 | postcss: ^7 || ^8 1818 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 1819 | pug: ^3.0.0 1820 | sass: ^1.26.8 1821 | stylus: ^0.55.0 1822 | sugarss: ^2.0.0 1823 | svelte: ^3.23.0 1824 | typescript: ^3.9.5 || ^4.0.0 1825 | peerDependenciesMeta: 1826 | '@babel/core': 1827 | optional: true 1828 | coffeescript: 1829 | optional: true 1830 | less: 1831 | optional: true 1832 | node-sass: 1833 | optional: true 1834 | postcss: 1835 | optional: true 1836 | postcss-load-config: 1837 | optional: true 1838 | pug: 1839 | optional: true 1840 | sass: 1841 | optional: true 1842 | stylus: 1843 | optional: true 1844 | sugarss: 1845 | optional: true 1846 | typescript: 1847 | optional: true 1848 | dependencies: 1849 | '@types/pug': 2.0.6 1850 | '@types/sass': 1.43.1 1851 | detect-indent: 6.1.0 1852 | magic-string: 0.25.9 1853 | sorcery: 0.10.0 1854 | strip-indent: 3.0.0 1855 | svelte: 3.55.0 1856 | typescript: 4.9.4 1857 | dev: true 1858 | 1859 | /svelte/3.55.0: 1860 | resolution: {integrity: sha512-uGu2FVMlOuey4JoKHKrpZFkoYyj0VLjJdz47zX5+gVK5odxHM40RVhar9/iK2YFRVxvfg9FkhfVlR0sjeIrOiA==} 1861 | engines: {node: '>= 8'} 1862 | dev: true 1863 | 1864 | /text-table/0.2.0: 1865 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1866 | dev: true 1867 | 1868 | /tiny-glob/0.2.9: 1869 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} 1870 | dependencies: 1871 | globalyzer: 0.1.0 1872 | globrex: 0.1.2 1873 | dev: true 1874 | 1875 | /tinybench/2.3.1: 1876 | resolution: {integrity: sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==} 1877 | dev: true 1878 | 1879 | /tinypool/0.3.0: 1880 | resolution: {integrity: sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==} 1881 | engines: {node: '>=14.0.0'} 1882 | dev: true 1883 | 1884 | /tinyspy/1.0.2: 1885 | resolution: {integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==} 1886 | engines: {node: '>=14.0.0'} 1887 | dev: true 1888 | 1889 | /to-regex-range/5.0.1: 1890 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1891 | engines: {node: '>=8.0'} 1892 | dependencies: 1893 | is-number: 7.0.0 1894 | dev: true 1895 | 1896 | /totalist/3.0.0: 1897 | resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==} 1898 | engines: {node: '>=6'} 1899 | dev: true 1900 | 1901 | /trough/2.1.0: 1902 | resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} 1903 | dev: true 1904 | 1905 | /tslib/1.14.1: 1906 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 1907 | dev: true 1908 | 1909 | /tslib/2.4.1: 1910 | resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} 1911 | dev: true 1912 | 1913 | /tsutils/3.21.0_typescript@4.9.4: 1914 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 1915 | engines: {node: '>= 6'} 1916 | peerDependencies: 1917 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 1918 | dependencies: 1919 | tslib: 1.14.1 1920 | typescript: 4.9.4 1921 | dev: true 1922 | 1923 | /type-check/0.4.0: 1924 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1925 | engines: {node: '>= 0.8.0'} 1926 | dependencies: 1927 | prelude-ls: 1.2.1 1928 | dev: true 1929 | 1930 | /type-detect/4.0.8: 1931 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1932 | engines: {node: '>=4'} 1933 | dev: true 1934 | 1935 | /type-fest/0.20.2: 1936 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1937 | engines: {node: '>=10'} 1938 | dev: true 1939 | 1940 | /typescript/4.9.4: 1941 | resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} 1942 | engines: {node: '>=4.2.0'} 1943 | hasBin: true 1944 | dev: true 1945 | 1946 | /undici/5.14.0: 1947 | resolution: {integrity: sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==} 1948 | engines: {node: '>=12.18'} 1949 | dependencies: 1950 | busboy: 1.6.0 1951 | dev: true 1952 | 1953 | /unified/10.1.2: 1954 | resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} 1955 | dependencies: 1956 | '@types/unist': 2.0.6 1957 | bail: 2.0.2 1958 | extend: 3.0.2 1959 | is-buffer: 2.0.5 1960 | is-plain-obj: 4.1.0 1961 | trough: 2.1.0 1962 | vfile: 5.3.6 1963 | dev: true 1964 | 1965 | /unist-util-is/4.1.0: 1966 | resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} 1967 | dev: true 1968 | 1969 | /unist-util-is/5.1.1: 1970 | resolution: {integrity: sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==} 1971 | dev: true 1972 | 1973 | /unist-util-stringify-position/2.0.3: 1974 | resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} 1975 | dependencies: 1976 | '@types/unist': 2.0.6 1977 | dev: true 1978 | 1979 | /unist-util-stringify-position/3.0.2: 1980 | resolution: {integrity: sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==} 1981 | dependencies: 1982 | '@types/unist': 2.0.6 1983 | dev: true 1984 | 1985 | /unist-util-visit-parents/3.1.1: 1986 | resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} 1987 | dependencies: 1988 | '@types/unist': 2.0.6 1989 | unist-util-is: 4.1.0 1990 | dev: true 1991 | 1992 | /unist-util-visit-parents/5.1.1: 1993 | resolution: {integrity: sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==} 1994 | dependencies: 1995 | '@types/unist': 2.0.6 1996 | unist-util-is: 5.1.1 1997 | dev: true 1998 | 1999 | /unist-util-visit/2.0.3: 2000 | resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} 2001 | dependencies: 2002 | '@types/unist': 2.0.6 2003 | unist-util-is: 4.1.0 2004 | unist-util-visit-parents: 3.1.1 2005 | dev: true 2006 | 2007 | /unist-util-visit/4.1.1: 2008 | resolution: {integrity: sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==} 2009 | dependencies: 2010 | '@types/unist': 2.0.6 2011 | unist-util-is: 5.1.1 2012 | unist-util-visit-parents: 5.1.1 2013 | dev: true 2014 | 2015 | /uri-js/4.4.1: 2016 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2017 | dependencies: 2018 | punycode: 2.1.1 2019 | dev: true 2020 | 2021 | /vfile-message/2.0.4: 2022 | resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} 2023 | dependencies: 2024 | '@types/unist': 2.0.6 2025 | unist-util-stringify-position: 2.0.3 2026 | dev: true 2027 | 2028 | /vfile-message/3.1.3: 2029 | resolution: {integrity: sha512-0yaU+rj2gKAyEk12ffdSbBfjnnj+b1zqTBv3OQCTn8yEB02bsPizwdBPrLJjHnK+cU9EMMcUnNv938XcZIkmdA==} 2030 | dependencies: 2031 | '@types/unist': 2.0.6 2032 | unist-util-stringify-position: 3.0.2 2033 | dev: true 2034 | 2035 | /vfile/5.3.6: 2036 | resolution: {integrity: sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==} 2037 | dependencies: 2038 | '@types/unist': 2.0.6 2039 | is-buffer: 2.0.5 2040 | unist-util-stringify-position: 3.0.2 2041 | vfile-message: 3.1.3 2042 | dev: true 2043 | 2044 | /vite/4.0.3: 2045 | resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} 2046 | engines: {node: ^14.18.0 || >=16.0.0} 2047 | hasBin: true 2048 | peerDependencies: 2049 | '@types/node': '>= 14' 2050 | less: '*' 2051 | sass: '*' 2052 | stylus: '*' 2053 | sugarss: '*' 2054 | terser: ^5.4.0 2055 | peerDependenciesMeta: 2056 | '@types/node': 2057 | optional: true 2058 | less: 2059 | optional: true 2060 | sass: 2061 | optional: true 2062 | stylus: 2063 | optional: true 2064 | sugarss: 2065 | optional: true 2066 | terser: 2067 | optional: true 2068 | dependencies: 2069 | esbuild: 0.16.12 2070 | postcss: 8.4.20 2071 | resolve: 1.22.1 2072 | rollup: 3.8.1 2073 | optionalDependencies: 2074 | fsevents: 2.3.2 2075 | dev: true 2076 | 2077 | /vite/4.0.3_@types+node@18.11.18: 2078 | resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} 2079 | engines: {node: ^14.18.0 || >=16.0.0} 2080 | hasBin: true 2081 | peerDependencies: 2082 | '@types/node': '>= 14' 2083 | less: '*' 2084 | sass: '*' 2085 | stylus: '*' 2086 | sugarss: '*' 2087 | terser: ^5.4.0 2088 | peerDependenciesMeta: 2089 | '@types/node': 2090 | optional: true 2091 | less: 2092 | optional: true 2093 | sass: 2094 | optional: true 2095 | stylus: 2096 | optional: true 2097 | sugarss: 2098 | optional: true 2099 | terser: 2100 | optional: true 2101 | dependencies: 2102 | '@types/node': 18.11.18 2103 | esbuild: 0.16.12 2104 | postcss: 8.4.20 2105 | resolve: 1.22.1 2106 | rollup: 3.8.1 2107 | optionalDependencies: 2108 | fsevents: 2.3.2 2109 | dev: true 2110 | 2111 | /vitefu/0.2.4_vite@4.0.3: 2112 | resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} 2113 | peerDependencies: 2114 | vite: ^3.0.0 || ^4.0.0 2115 | peerDependenciesMeta: 2116 | vite: 2117 | optional: true 2118 | dependencies: 2119 | vite: 4.0.3 2120 | dev: true 2121 | 2122 | /vitest/0.25.8: 2123 | resolution: {integrity: sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg==} 2124 | engines: {node: '>=v14.16.0'} 2125 | hasBin: true 2126 | peerDependencies: 2127 | '@edge-runtime/vm': '*' 2128 | '@vitest/browser': '*' 2129 | '@vitest/ui': '*' 2130 | happy-dom: '*' 2131 | jsdom: '*' 2132 | peerDependenciesMeta: 2133 | '@edge-runtime/vm': 2134 | optional: true 2135 | '@vitest/browser': 2136 | optional: true 2137 | '@vitest/ui': 2138 | optional: true 2139 | happy-dom: 2140 | optional: true 2141 | jsdom: 2142 | optional: true 2143 | dependencies: 2144 | '@types/chai': 4.3.4 2145 | '@types/chai-subset': 1.3.3 2146 | '@types/node': 18.11.18 2147 | acorn: 8.8.1 2148 | acorn-walk: 8.2.0 2149 | chai: 4.3.7 2150 | debug: 4.3.4 2151 | local-pkg: 0.4.2 2152 | source-map: 0.6.1 2153 | strip-literal: 1.0.0 2154 | tinybench: 2.3.1 2155 | tinypool: 0.3.0 2156 | tinyspy: 1.0.2 2157 | vite: 4.0.3_@types+node@18.11.18 2158 | transitivePeerDependencies: 2159 | - less 2160 | - sass 2161 | - stylus 2162 | - sugarss 2163 | - supports-color 2164 | - terser 2165 | dev: true 2166 | 2167 | /which/2.0.2: 2168 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2169 | engines: {node: '>= 8'} 2170 | hasBin: true 2171 | dependencies: 2172 | isexe: 2.0.0 2173 | dev: true 2174 | 2175 | /word-wrap/1.2.3: 2176 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 2177 | engines: {node: '>=0.10.0'} 2178 | dev: true 2179 | 2180 | /wrappy/1.0.2: 2181 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2182 | dev: true 2183 | 2184 | /yallist/4.0.0: 2185 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2186 | dev: true 2187 | 2188 | /yocto-queue/0.1.0: 2189 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2190 | engines: {node: '>=10'} 2191 | dev: true 2192 | -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | // and what to do when importing types 4 | declare namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface Platform {} 9 | 10 | interface MdsvexFile { 11 | default: import('svelte/internal').SvelteComponent; 12 | metadata: Record; 13 | } 14 | 15 | type MdsvexResolver = () => Promise; 16 | 17 | interface BlogPost { 18 | slug: string; 19 | title: string; 20 | author: string; 21 | description: string; 22 | date: string; 23 | published: boolean; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |
%sveltekit.body%
11 | 12 | 13 | -------------------------------------------------------------------------------- /src/lib/components/Article.svelte: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 | 10 | -------------------------------------------------------------------------------- /src/lib/components/ArticleDescription.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 |

9 | {description} 10 | 11 | {#if slug} 12 | Read More → 13 | {/if} 14 |

15 | 16 | 22 | -------------------------------------------------------------------------------- /src/lib/components/ArticleMeta.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 |

9 | {author} 10 | {formattedDate} 11 |

12 | 13 | 28 | -------------------------------------------------------------------------------- /src/lib/components/ArticleTitle.svelte: -------------------------------------------------------------------------------- 1 | 12 | 13 | {#if slug} 14 |

15 | 16 | {title} 17 | 18 |

19 | {:else} 20 |

21 | 22 | {title} 23 | 24 |

25 | {/if} 26 | 27 | 42 | -------------------------------------------------------------------------------- /src/lib/components/Counter.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 |
6 |

{count}

7 | 8 |
9 | 10 | -------------------------------------------------------------------------------- /src/lib/components/PageHead.svelte: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | {formattedTitle} 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/lib/slugFromPath.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, it, expect } from 'vitest'; 2 | import { slugFromPath } from './slugFromPath'; 3 | 4 | describe('slugFromPath', () => { 5 | it('extracts slug from paths correctly', () => { 6 | const cases = [ 7 | { 8 | path: '/foo/bar/test-slug.md', 9 | expected: 'test-slug' 10 | }, 11 | { 12 | path: '/foo/bar/test-slug.svx', 13 | expected: 'test-slug' 14 | }, 15 | { 16 | path: '/foo/bar/test-slug.svelte.md', 17 | expected: 'test-slug' 18 | } 19 | ]; 20 | 21 | cases.forEach(({ path, expected }) => expect(slugFromPath(path)).toBe(expected)); 22 | }); 23 | 24 | it('returns null for unknown extension', () => { 25 | const path = '/foo/bar/test-slug.abc'; 26 | 27 | expect(slugFromPath(path)).toBeNull(); 28 | }); 29 | 30 | it('returns null for no extension', () => { 31 | const path = '/foo/bar/test-slug'; 32 | 33 | expect(slugFromPath(path)).toBeNull(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/lib/slugFromPath.ts: -------------------------------------------------------------------------------- 1 | export const slugFromPath = (path: string) => 2 | path.match(/([\w-]+)\.(svelte\.md|md|svx)/i)?.[1] ?? null; 3 | -------------------------------------------------------------------------------- /src/posts/a-second-post.svelte.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'A second blog post' 3 | description: "The first blog post wasn't enough; I had to come back and write more about Svelte and SvelteKit." 4 | author: 'Mehdi Vasigh' 5 | date: '2021-05-03' 6 | published: true 7 | --- 8 | 9 | 12 | 13 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris pellentesque orci nec facilisis iaculis. Sed accumsan placerat dolor. Donec sollicitudin nisi sit amet sodales molestie. Maecenas sit amet dolor nulla. Fusce sed elit et erat consequat dignissim. Nunc eu erat felis. Mauris pretium, arcu eu dapibus tempor, mauris eros tempor tortor, eu tincidunt erat libero sit amet mi. Phasellus eu libero mollis, finibus lacus eget, sollicitudin nulla. 14 | 15 | Here's a random Svelte component thrown into my MDsveX markdown: 16 | 17 | 18 | 19 | ### Heading 20 | 21 | In lectus erat, maximus sed pulvinar eu, elementum vehicula mi. Maecenas nec dui urna. Nunc at magna purus. Cras facilisis, purus in dignissim egestas, ante ligula malesuada leo, quis malesuada dolor tortor vitae mauris. Morbi auctor mauris nibh, ut sodales tortor volutpat in. Donec aliquet ex eget ullamcorper semper. Proin vel libero at nulla gravida blandit. Maecenas odio massa, pretium blandit lectus ac, vehicula ultrices justo. Suspendisse libero dolor, tristique quis laoreet vel, placerat vel nisl. Nunc et venenatis nunc, vitae fringilla risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Phasellus consectetur pellentesque ipsum, in hendrerit lectus ultricies quis. Morbi ultrices, elit nec lacinia vulputate, dolor nibh commodo justo, quis dictum nisi nulla vel mi. 22 | 23 | ### Heading 24 | 25 | Nullam nisl risus, pellentesque at enim id, molestie tristique purus. Aliquam ultricies, sem eu rutrum posuere, augue libero commodo nisi, et aliquam massa mi vitae nunc. In sodales, lorem vitae pellentesque lacinia, est velit condimentum orci, in vestibulum lorem est eget nisi. Quisque varius eget risus mattis rutrum. Sed tellus nisl, egestas a ligula et, finibus sollicitudin mauris. Ut sit amet scelerisque purus, luctus auctor leo. Nullam enim velit, tincidunt sed venenatis non, fringilla ut lacus. Morbi diam nulla, luctus non orci at, maximus rhoncus est. 26 | 27 | Ut quis leo rhoncus, aliquet sapien at, venenatis lectus. Nunc mattis vestibulum sapien. Donec quis vestibulum ex. Vivamus condimentum dui gravida pulvinar feugiat. Duis posuere, lacus eu cursus gravida, magna ex lobortis sapien, non finibus orci justo at orci. Nulla sit amet ligula a lorem aliquam consequat. Sed vehicula lacus nec ipsum efficitur, vel volutpat sem blandit. Curabitur nunc nunc, commodo sed ultrices id, dignissim ac orci. Nunc semper lectus et orci faucibus, et suscipit nisl consequat. Phasellus malesuada nisl a risus ultricies, vitae pretium libero vulputate. Nullam at neque ut enim mattis dapibus porttitor vitae dui. Cras erat libero, porta a eros ac, tempus consectetur est. 28 | -------------------------------------------------------------------------------- /src/posts/unpublished-draft-example.svelte.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Unpublished draft example' 3 | description: 'This blog post is not yet ready to be seen by the world' 4 | author: 'Mehdi Vasigh' 5 | date: '2021-05-10' 6 | published: false 7 | --- 8 | 9 | This is an example of an unpublished post! Your site will display a 404 page until you set your `published` flag to `true`. 10 | -------------------------------------------------------------------------------- /src/posts/welcome-to-my-blog.svelte.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Welcome to my blog!' 3 | description: 'I love to write about Svelte and all the cool things that you can build with it.' 4 | author: 'Mehdi Vasigh' 5 | date: '2021-04-21' 6 | published: true 7 | --- 8 | 9 | 12 | 13 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris pellentesque orci nec facilisis iaculis. Sed accumsan placerat dolor. Donec sollicitudin nisi sit amet sodales molestie. Maecenas sit amet dolor nulla. Fusce sed elit et erat consequat dignissim. Nunc eu erat felis. Mauris pretium, arcu eu dapibus tempor, mauris eros tempor tortor, eu tincidunt erat libero sit amet mi. Phasellus eu libero mollis, finibus lacus eget, sollicitudin nulla. 14 | 15 | Here's a random Svelte component thrown into my MDsveX markdown: 16 | 17 | 18 | 19 | ## Link to other page 20 | 21 | [A second blog post](/posts/a-second-post) 22 | 23 | ## Example heading 24 | 25 | In lectus erat, maximus sed pulvinar eu, elementum vehicula mi. Maecenas nec dui urna. Nunc at magna purus. Cras facilisis, purus in dignissim egestas, ante ligula malesuada leo, quis malesuada dolor tortor vitae mauris. Morbi auctor mauris nibh, ut sodales tortor volutpat in. Donec aliquet ex eget ullamcorper semper. Proin vel libero at nulla gravida blandit. Maecenas odio massa, pretium blandit lectus ac, vehicula ultrices justo. Suspendisse libero dolor, tristique quis laoreet vel, placerat vel nisl. Nunc et venenatis nunc, vitae fringilla risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Phasellus consectetur pellentesque ipsum, in hendrerit lectus ultricies quis. Morbi ultrices, elit nec lacinia vulputate, dolor nibh commodo justo, quis dictum nisi nulla vel mi. 26 | 27 | ## Another example heading 28 | 29 | Nullam nisl risus, pellentesque at enim id, molestie tristique purus. Aliquam ultricies, sem eu rutrum posuere, augue libero commodo nisi, et aliquam massa mi vitae nunc. In sodales, lorem vitae pellentesque lacinia, est velit condimentum orci, in vestibulum lorem est eget nisi. Quisque varius eget risus mattis rutrum. Sed tellus nisl, egestas a ligula et, finibus sollicitudin mauris. Ut sit amet scelerisque purus, luctus auctor leo. Nullam enim velit, tincidunt sed venenatis non, fringilla ut lacus. Morbi diam nulla, luctus non orci at, maximus rhoncus est. 30 | 31 | Ut quis leo rhoncus, aliquet sapien at, venenatis lectus. Nunc mattis vestibulum sapien. Donec quis vestibulum ex. Vivamus condimentum dui gravida pulvinar feugiat. Duis posuere, lacus eu cursus gravida, magna ex lobortis sapien, non finibus orci justo at orci. Nulla sit amet ligula a lorem aliquam consequat. Sed vehicula lacus nec ipsum efficitur, vel volutpat sem blandit. Curabitur nunc nunc, commodo sed ultrices id, dignissim ac orci. Nunc semper lectus et orci faucibus, et suscipit nisl consequat. Phasellus malesuada nisl a risus ultricies, vitae pretium libero vulputate. Nullam at neque ut enim mattis dapibus porttitor vitae dui. Cras erat libero, porta a eros ac, tempus consectetur est. 32 | -------------------------------------------------------------------------------- /src/posts/yet-another-blog-post.svelte.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Yet another article' 3 | description: "I know, by now you've probably had enough, but this template looks more full with three posts, and here we are." 4 | author: 'Mehdi Vasigh' 5 | date: '2021-05-05' 6 | published: true 7 | --- 8 | 9 | 12 | 13 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris pellentesque orci nec facilisis iaculis. Sed accumsan placerat dolor. Donec sollicitudin nisi sit amet sodales molestie. Maecenas sit amet dolor nulla. Fusce sed elit et erat consequat dignissim. Nunc eu erat felis. Mauris pretium, arcu eu dapibus tempor, mauris eros tempor tortor, eu tincidunt erat libero sit amet mi. Phasellus eu libero mollis, finibus lacus eget, sollicitudin nulla. 14 | 15 | Here's a random Svelte component thrown into my MDsveX markdown: 16 | 17 | 18 | 19 | ### Heading 20 | 21 | In lectus erat, maximus sed pulvinar eu, elementum vehicula mi. Maecenas nec dui urna. Nunc at magna purus. Cras facilisis, purus in dignissim egestas, ante ligula malesuada leo, quis malesuada dolor tortor vitae mauris. Morbi auctor mauris nibh, ut sodales tortor volutpat in. Donec aliquet ex eget ullamcorper semper. Proin vel libero at nulla gravida blandit. Maecenas odio massa, pretium blandit lectus ac, vehicula ultrices justo. Suspendisse libero dolor, tristique quis laoreet vel, placerat vel nisl. Nunc et venenatis nunc, vitae fringilla risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Phasellus consectetur pellentesque ipsum, in hendrerit lectus ultricies quis. Morbi ultrices, elit nec lacinia vulputate, dolor nibh commodo justo, quis dictum nisi nulla vel mi. 22 | 23 | ### Heading 24 | 25 | Nullam nisl risus, pellentesque at enim id, molestie tristique purus. Aliquam ultricies, sem eu rutrum posuere, augue libero commodo nisi, et aliquam massa mi vitae nunc. In sodales, lorem vitae pellentesque lacinia, est velit condimentum orci, in vestibulum lorem est eget nisi. Quisque varius eget risus mattis rutrum. Sed tellus nisl, egestas a ligula et, finibus sollicitudin mauris. Ut sit amet scelerisque purus, luctus auctor leo. Nullam enim velit, tincidunt sed venenatis non, fringilla ut lacus. Morbi diam nulla, luctus non orci at, maximus rhoncus est. 26 | 27 | Ut quis leo rhoncus, aliquet sapien at, venenatis lectus. Nunc mattis vestibulum sapien. Donec quis vestibulum ex. Vivamus condimentum dui gravida pulvinar feugiat. Duis posuere, lacus eu cursus gravida, magna ex lobortis sapien, non finibus orci justo at orci. Nulla sit amet ligula a lorem aliquam consequat. Sed vehicula lacus nec ipsum efficitur, vel volutpat sem blandit. Curabitur nunc nunc, commodo sed ultrices id, dignissim ac orci. Nunc semper lectus et orci faucibus, et suscipit nisl consequat. Phasellus malesuada nisl a risus ultricies, vitae pretium libero vulputate. Nullam at neque ut enim mattis dapibus porttitor vitae dui. Cras erat libero, porta a eros ac, tempus consectetur est. 28 | -------------------------------------------------------------------------------- /src/routes/+error.svelte: -------------------------------------------------------------------------------- 1 |

2 | 404 3 | Page Not Found 4 |

5 | 6 | 24 | -------------------------------------------------------------------------------- /src/routes/+layout.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 |
6 |

SvelteKit + MDsveX Blog

7 |
8 | 9 |
10 | 11 |
12 | 13 |
14 |

15 | Copyright © Mehdi Vasigh, {new Date().getFullYear()} 16 |

17 |
18 | 19 | 60 | -------------------------------------------------------------------------------- /src/routes/+layout.ts: -------------------------------------------------------------------------------- 1 | export const prerender = true; 2 | -------------------------------------------------------------------------------- /src/routes/+page.server.ts: -------------------------------------------------------------------------------- 1 | import type { PageServerLoad } from './$types'; 2 | import { slugFromPath } from '$lib/slugFromPath'; 3 | 4 | const MAX_POSTS = 10; 5 | 6 | export const load: PageServerLoad = async ({ url }) => { 7 | const modules = import.meta.glob(`/src/posts/*.{md,svx,svelte.md}`); 8 | 9 | const postPromises = Object.entries(modules).map(([path, resolver]) => 10 | resolver().then( 11 | (post) => 12 | ({ 13 | slug: slugFromPath(path), 14 | ...(post as unknown as App.MdsvexFile).metadata 15 | } as App.BlogPost) 16 | ) 17 | ); 18 | 19 | const posts = await Promise.all(postPromises); 20 | const publishedPosts = posts.filter((post) => post.published).slice(0, MAX_POSTS); 21 | 22 | publishedPosts.sort((a, b) => (new Date(a.date) > new Date(b.date) ? -1 : 1)); 23 | 24 | return { posts: publishedPosts }; 25 | }; 26 | -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | 15 |

16 | This is a minimalistic example of a blog built with SvelteKit 17 | and MDsveX. 18 | View source code on Github. 19 |

20 | 21 | {#each data.posts as { slug, title, author, description, date }} 22 |
23 | 24 | 25 | 26 |
27 | {/each} 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/routes/posts/[slug]/+page.svelte: -------------------------------------------------------------------------------- 1 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/routes/posts/[slug]/+page.ts: -------------------------------------------------------------------------------- 1 | import type { PageLoad } from './$types'; 2 | import { slugFromPath } from '$lib/slugFromPath'; 3 | import { error } from '@sveltejs/kit'; 4 | 5 | export const load: PageLoad = async ({ params }) => { 6 | const modules = import.meta.glob(`/src/posts/*.{md,svx,svelte.md}`); 7 | 8 | let match: { path?: string; resolver?: App.MdsvexResolver } = {}; 9 | for (const [path, resolver] of Object.entries(modules)) { 10 | if (slugFromPath(path) === params.slug) { 11 | match = { path, resolver: resolver as unknown as App.MdsvexResolver }; 12 | break; 13 | } 14 | } 15 | 16 | const post = await match?.resolver?.(); 17 | 18 | if (!post || !post.metadata.published) { 19 | throw error(404); // Couldn't resolve the post 20 | } 21 | 22 | return { 23 | component: post.default, 24 | frontmatter: post.metadata 25 | }; 26 | }; 27 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mvasigh/sveltekit-mdsvex-blog/d71a0b4891179f881773239bfbabee5a606a76d3/static/favicon.png -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import { mdsvex } from 'mdsvex'; 2 | import mdsvexConfig from './mdsvex.config.js'; 3 | import adapter from '@sveltejs/adapter-static'; 4 | import { vitePreprocess } from '@sveltejs/kit/vite'; 5 | 6 | /** @type {import('@sveltejs/kit').Config} */ 7 | const config = { 8 | extensions: ['.svelte', ...mdsvexConfig.extensions], 9 | 10 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors 11 | // for more information about preprocessors 12 | preprocess: [vitePreprocess(), mdsvex(mdsvexConfig)], 13 | 14 | kit: { 15 | adapter: adapter({ strict: false }) 16 | } 17 | }; 18 | 19 | export default config; 20 | -------------------------------------------------------------------------------- /tests/test.ts: -------------------------------------------------------------------------------- 1 | import { expect, test } from '@playwright/test'; 2 | 3 | test('index page has expected content', async ({ page }) => { 4 | await page.goto('/'); 5 | 6 | const articles = await page.$$('article'); 7 | 8 | expect(await page.textContent('h1')).toBe('SvelteKit + MDsveX Blog'); 9 | expect(articles.length).toBeGreaterThan(0); 10 | expect(articles.length).not.toBeGreaterThan(10); 11 | for (const article of articles) { 12 | expect(await article.$('a')).not.toBeFalsy(); 13 | } 14 | }); 15 | 16 | test('clicking on article title in home page navigates to the article', async ({ page }) => { 17 | await page.goto('/'); 18 | const title = await page.textContent('article h3'); 19 | 20 | await page.getByText(title || '').click(); 21 | 22 | expect(await page.textContent('h2')).toBe(title); 23 | }); 24 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true 12 | } 13 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias 14 | // 15 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 16 | // from the referenced tsconfig.json - TypeScript does not merge them in 17 | } 18 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | 3 | /** @type {import('vite').UserConfig} */ 4 | const config = { 5 | plugins: [sveltekit()], 6 | test: { 7 | include: ['src/**/*.{test,spec}.{js,ts}'] 8 | } 9 | }; 10 | 11 | export default config; 12 | --------------------------------------------------------------------------------