├── .eslintignore ├── .eslintrc.cjs ├── .github ├── ISSUE_TEMPLATE │ └── bug_report.md └── workflows │ ├── ci.yml │ ├── release-please.yml │ └── stale.yml ├── .gitignore ├── .husky ├── .gitignore └── pre-commit ├── .npmrc ├── .prettierignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── jsconfig.json ├── package-lock.json ├── package.json ├── playwright.config.js ├── src ├── app.d.ts ├── app.html ├── lib │ ├── index.js │ ├── index.svelte │ ├── open-graph.svelte │ └── types.d.ts ├── routes │ ├── +page.svelte │ └── index.js └── tests │ ├── open-graph.test.js │ ├── seo.test.js │ └── twitter.test.js ├── svelte.config.js └── 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 | extends: ["eslint:recommended", "prettier"], 4 | plugins: ["svelte3"], 5 | overrides: [{ files: ["*.svelte"], processor: "svelte3/svelte3" }], 6 | parserOptions: { 7 | sourceType: "module", 8 | ecmaVersion: 2020, 9 | }, 10 | env: { 11 | browser: true, 12 | es2017: true, 13 | node: true, 14 | }, 15 | }; 16 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "" 5 | labels: "" 6 | assignees: "" 7 | --- 8 | 9 | **Describe the bug** 10 | A clear and concise description of what the bug is. 11 | 12 | **To Reproduce** 13 | Steps to reproduce the behavior: 14 | 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | 28 | - OS: [e.g. iOS] 29 | - Browser [e.g. chrome, safari] 30 | - Version [e.g. 22] 31 | 32 | **Smartphone (please complete the following information):** 33 | 34 | - Device: [e.g. iPhone6] 35 | - OS: [e.g. iOS8.1] 36 | - Browser [e.g. stock browser, safari] 37 | - Version [e.g. 22] 38 | 39 | **Additional context** 40 | Add any other context about the problem here. 41 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Node.js CI 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | 9 | steps: 10 | - uses: actions/checkout@v3 11 | - name: Use Node.js 12 | uses: actions/setup-node@v3 13 | - name: Install dependencies 14 | run: npm ci 15 | - name: Install playwright browsers 16 | run: npx playwright install --with-deps 17 | - name: Run svelte-check 18 | run: npm run check 19 | - name: Run linter 20 | run: npm run lint 21 | - name: Run tests 22 | run: npm run test 23 | - name: Build the project 24 | run: npm run build 25 | -------------------------------------------------------------------------------- /.github/workflows/release-please.yml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | branches: 4 | - master 5 | name: release-please 6 | jobs: 7 | release-please: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: GoogleCloudPlatform/release-please-action@v2 11 | with: 12 | release-type: node 13 | package-name: release-please-action 14 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | # This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time. 2 | # 3 | # You can adjust the behavior by modifying this file. 4 | # For more information, see: 5 | # https://github.com/actions/stale 6 | name: Mark stale issues and pull requests 7 | 8 | on: 9 | schedule: 10 | - cron: "00 09 * * *" 11 | 12 | jobs: 13 | stale: 14 | runs-on: ubuntu-latest 15 | permissions: 16 | issues: write 17 | pull-requests: write 18 | 19 | steps: 20 | - uses: actions/stale@v3 21 | with: 22 | repo-token: ${{ secrets.GITHUB_TOKEN }} 23 | stale-issue-message: "This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions." 24 | stale-pr-message: "Stale pull request message" 25 | stale-issue-label: "no-issue-activity" 26 | stale-pr-label: "no-pr-activity" 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | .eslintcache 10 | yarn.lockg 11 | pnpm-lock.yaml -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | yarn run lint-staged 5 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /build 3 | /.svelte-kit 4 | /package 5 | .env 6 | .env.* 7 | !.env.example 8 | 9 | # Ignore files for PNPM, NPM and YARN 10 | pnpm-lock.yaml 11 | yarn.lock 12 | 13 | CHANGELOG.md -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ### [1.6.1](https://www.github.com/artiebits/svelte-seo/compare/v1.6.0...v1.6.1) (2024-05-07) 4 | 5 | 6 | ### Bug Fixes 7 | 8 | * Add types to package.json ([#83](https://www.github.com/artiebits/svelte-seo/issues/83)) ([4e5e25a](https://www.github.com/artiebits/svelte-seo/commit/4e5e25abbb6edb40ef9594b684088cb5789fe987)) 9 | 10 | ## [1.6.0](https://www.github.com/artiebits/svelte-seo/compare/v1.5.4...v1.6.0) (2024-01-28) 11 | 12 | 13 | ### Features 14 | 15 | * add new Svelte Vite Plugin export condition ([#74](https://www.github.com/artiebits/svelte-seo/issues/74)) ([b9389ca](https://www.github.com/artiebits/svelte-seo/commit/b9389ca924c41ecf761e4cd87c3ce7eec8835833)) 16 | 17 | ### [1.5.4](https://www.github.com/artiebits/svelte-seo/compare/v1.5.3...v1.5.4) (2023-09-07) 18 | 19 | 20 | ### Bug Fixes 21 | 22 | * render JSON-LD correctly ([#70](https://www.github.com/artiebits/svelte-seo/issues/70)) ([6671834](https://www.github.com/artiebits/svelte-seo/commit/667183461ca0d142d1e791bb2999d8e48ea9a53b)) 23 | 24 | ### [1.5.3](https://www.github.com/artiebits/svelte-seo/compare/v1.5.2...v1.5.3) (2023-02-24) 25 | 26 | 27 | ### Bug Fixes 28 | 29 | * reference error in the opengraph.svelte ([#58](https://www.github.com/artiebits/svelte-seo/issues/58)) ([65c0542](https://www.github.com/artiebits/svelte-seo/commit/65c0542fa89b05c2aafc5f36f53e01c1868f325b)) 30 | 31 | ### [1.5.2](https://www.github.com/artiebits/svelte-seo/compare/v1.5.1...v1.5.2) (2023-02-19) 32 | 33 | 34 | ### Miscellaneous Chores 35 | 36 | * release 1.5.2 ([03a9e92](https://www.github.com/artiebits/svelte-seo/commit/03a9e92fae1d9028c9b889d022fcc5eca1023915)) 37 | 38 | ### [1.5.1](https://www.github.com/artiebits/svelte-seo/compare/v1.4.0...v1.5.1) (2023-02-19) 39 | 40 | ### Bug Fixes 41 | 42 | * rename files from camel case to kebab case ([1db3420](https://www.github.com/artiebits/svelte-seo/commit/1db3420454094d34855b6fc3c01da44f6c2ac6ad)) 43 | 44 | ### Miscellaneous Chores 45 | 46 | * release 1.5.1 ([fffde8c](https://www.github.com/artiebits/svelte-seo/commit/fffde8cc093d27030f5c2a1074fd3cb137d234cf)) 47 | * update readme ([b32a76a](https://github.com/artiebits/svelte-seo/commit/b32a76a6297c0160dc3c9b69aeb25ed8123b954a) 48 | 49 | ## [1.5.0](https://www.github.com/artiebits/svelte-seo/compare/v1.4.0...v1.5.0) (2023-02-17) 50 | 51 | 52 | ### Features 53 | 54 | * new complete version of "Svelte SEO" ([#45](https://www.github.com/artiebits/svelte-seo/issues/45)) ([0a1f2a8](https://www.github.com/artiebits/svelte-seo/commit/0a1f2a846723e0474b9d4e763708538d50c26c89)) 55 | 56 | 57 | ### Bug Fixes 58 | 59 | * switch to node 17 ([#37](https://www.github.com/artiebits/svelte-seo/issues/37)) ([6b057e9](https://www.github.com/artiebits/svelte-seo/commit/6b057e9f31d07ae391f71c76746eade4d86bebc8)) 60 | 61 | ## [1.4.0](https://www.github.com/artiebits/svelte-seo/compare/v1.3.1...v1.4.0) (2022-01-19) 62 | 63 | ### Features 64 | 65 | - add Twitter summary and card types ([#23](https://www.github.com/artiebits/svelte-seo/issues/23)) ([adf7177](https://www.github.com/artiebits/svelte-seo/commit/adf717705bcfce504887370eb62e842a9b35b120)) 66 | - automate releases ([f94f0a9](https://www.github.com/artiebits/svelte-seo/commit/f94f0a9f23892164283c9866de1a12520cfe1381)) 67 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 artiebits 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Svelte SEO 2 | 3 | Optimize your Svelte app for search engines and social media with meta tags, Open Graph, and JSON-LD. 4 | 5 | Svelte SEO is a powerful and easy-to-use package designed to optimize your Svelte app for search engines and social media. By adding essential meta tags, Open Graph, Twitter Card tags, and JSON-LD to your pages, Svelte SEO improves your website's visibility and ranking in search results. 6 | 7 | **Sponsor Svelte SEO** 8 | 9 | If you rely on Svelte SEO and find it useful, please consider supporting it. Maintaining an open source project takes time and your support would be greatly appreciated. 10 | 11 | Buy Me A Coffee 12 | 13 | 14 | 15 | 16 | - [Installation](#installation) 17 | - [Usage](#usage) 18 | - [Basic Usage](#basic-usage) 19 | - [Advanced Usage](#advanced-usage) 20 | - [Svelte SEO Properties](#svelte-seo-properties) 21 | - [Open Graph](#open-graph) 22 | - [Twitter](#twitter) 23 | - [Facebook](#facebook) 24 | - [JSON-LD](#json-ld) 25 | - [Setting Default SEO Properties](#setting-default-seo-properties) 26 | - [Acknowledgements](#acknowledgements) 27 | - [License](#license) 28 | 29 | 30 | 31 | ## Installation 32 | 33 | - npm 34 | `npm install -D svelte-seo` 35 | - or yarn 36 | `yarn add -D svelte-seo` 37 | - or pnpm 38 | `pnpm add -D svelte-seo` 39 | 40 | ## Usage 41 | 42 | ### Basic Usage 43 | 44 | To add basic meta tags like "title" and "description" you can import the package and use it like this: 45 | 46 | ```svelte 47 | 50 | 51 | 55 | ``` 56 | 57 | ### Advanced Usage 58 | 59 | You can provide additional properties to SvelteSeo component. Here is an example: 60 | 61 | ```svelte 62 | 65 | 66 | 113 | ``` 114 | 115 | ## Svelte SEO Properties 116 | 117 | | Property | Type | Description | 118 | | ------------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | 119 | | `title` | `string` | A page title that will appear in search results. | 120 | | `description` | `string` | A page description that will appear in search results. | 121 | | `keywords` | `string` | Keywords that give search engines more information about the content of the page. | 122 | | `base` | `string` | A default URL and target for all links on a page. | 123 | | `applicationName` | `string` | The name of the web application that the page represents. | 124 | | `themeColor` | `string` | A suggested color that user agents should use to customize the display of the page or the surrounding user interface. | 125 | | `nofollow` | `boolean` (default `false`) | Prevents Googlebot from following any links on the page. | 126 | | `noindex` | `boolean` (default `false`) | Prevents the page from being included in the index. | 127 | | `nositelinkssearchbox` | `boolean` (default `false`) | Opt out of Google's Sitelinks search box. | 128 | | `notranslate` | `boolean` | Prevents Google from translating the page. | 129 | | `canonical` | `string` | The canonical URL of the page. | 130 | | `amp` | `string` | A URL to the AMP version of the webpage. | 131 | | `manifest` | `string` | The URL to a JSON file that tells the browser about your Progressive Web App and how it should behave when installed on the user's desktop or mobile device. | 132 | | `languageAlternates` | `Array<{ hreflang: string; href: string }>` | Provides Google with information about the variations of your content in other languages. | 133 | | `twitter.title` | `string` | The title of the content, maximum 70 characters. | 134 | | `twitter.description` | `string` | A description of the content, maximum 200 characters. | 135 | | `twitter.image` | `string` | The URL of an image to use in the Twitter card. Images must be less than 5MB in size. | 136 | | `twitter.imageAlt` | `string` | A text description of the image conveying its essential nature to visually impaired users. Maximum 420 characters. | 137 | | `twitter.card` | "summary" , "summary_large_image" , "player" , "app" | The type of Twitter card to use. | 138 | | `twitter.site` | `string` | The @username of the website. | 139 | | `twitter.creator` | `string` | The @username of the content creator. | 140 | | `twitter.player` | `string` | The HTTPS URL of the player iframe. | 141 | | `twitter.playerWidth` | `string` | The width of the iframe in pixels. | 142 | | `twitter.playerHeight` | `string` | The height of the iframe in pixels. | 143 | | `twitter.playerStream` | `string` | The URL to the raw video or audio stream. | 144 | | `twitter.appNameIphone` | `string` | The name of your iPhone app. | 145 | | twitter.appUrlIphone | `string` | The custom URL scheme for your app on iPhone (include ”://” after your scheme name) | 146 | | twitter.appNameIpad | `string` | The name of your iPad-optimized app | 147 | | twitter.appIdIpad | `string` | Your app's ID in the iTunes App Store | 148 | | twitter.appNameGoogleplay | `string` | The name of your Android app | 149 | | twitter.appIdGoogleplay | `string` | Your app's ID in the Google Play Store | 150 | | twitter.appUrlGoogleplay | `string` | The custom URL scheme for your app on Google Play | 151 | | facebook.appId | `string` | A unique number that identifies your app when you request ads from Audience Network, known as a Facebook App ID | 152 | | openGraph.title | `string` | The title of your object as it should appear within the graph | 153 | | openGraph.type | `string` | The type of your object, such as "video.movie". Depending on the type, other properties may also be required. | 154 | | openGraph.url | `string` | The canonical URL of your object that will be used as its permanent ID in the graph | 155 | | openGraph.audio | `string` | An audio file to accompany the content. | 156 | | openGraph.audioSecure_url | `string` | An alternate URL to use if the webpage requires HTTPS | 157 | | openGraph.audioType | `string` | The MIME type for the audio | 158 | | openGraph.description | `string` | A one- or two-sentence description of your object | 159 | | openGraph.determiner | `string` | The word that appears before the title, e.g., "the" or "a". | 160 | | openGraph.locale | `string` | The locale of the content, e.g., "en_US". | 161 | | openGraph.localeAlternate | `string[]` | Alternate locales for the content. https://ogp.me/#array | 162 | | openGraph.site_name | `string` | The name of the website where the content is hosted. | 163 | | openGraph.images | `Array` | Properties about images related to the web page. | 164 | | openGraph.videos | [`OpenGraphVideo`](./src/lib/types.d.ts) | Properties about videos related to the web page. | 165 | | openGraph.music | [`OpenGraphMusic`](./src/lib/types.d.ts) | OpenGraph for music files. | 166 | | openGraph.movie | [`OpenGraphMovie`](./src/lib/types.d.ts) | OpenGraph for a movie. | 167 | | openGraph.article | [`OpenGraphArticle`](./src/lib/types.d.ts) | OpenGraph for an article. | 168 | | openGraph.book | [`OpenGraphBook`](./src/lib/types.d.ts) | OpenGraph for a book. | 169 | | openGraph.profile | [`OpenGraphProfile`](./src/lib/types.d.ts) | OpenGraph for a profile. | 170 | 171 | ### Open Graph 172 | 173 | Svelte SEO supports the following Open Graph object types: basic, music, movie, article, book, and profile. For the full specification, please check out http://ogp.me/. 174 | 175 | ### Twitter 176 | 177 | Svelte SEO supports all Twitter Card Tags. For more information, check out the Twitter documentation at https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/markup. 178 | 179 | ```svelte 180 | twitter={{ 181 | card: "summary_large_image", 182 | site: "@primalmovement", 183 | title: "Primal Movement | Natural Movement for Better Health", 184 | description: 185 | "Learn about primal movement exercises and how they can benefit your fitness.", 186 | image: "https://www.primal-movement.com/images/squatting.jpg", 187 | imageAlt: "Squatting", 188 | }} 189 | ``` 190 | 191 | ### Facebook 192 | 193 | ```svelte 194 | facebook={{ 195 | appId: "1234567890", 196 | }} 197 | ``` 198 | 199 | ### JSON-LD 200 | 201 | JSON-LD provides a more customizable and detailed representation of content in search results. With Svelte SEO, you can implement all available JSON-LD types. Here is a basic example: 202 | 203 | ```svelte 204 | jsonLd={{ 205 | "@context": "https://schema.org", 206 | "@type": "WebSite", 207 | name: "Primal Movement | Natural Movement for Better Health", 208 | description: 209 | "Learn about primal movement exercises and how they can benefit your fitness.", 210 | url: "https://www.primal-movement.com", 211 | }} 212 | ``` 213 | 214 | ## Setting Default SEO Properties 215 | 216 | You can set default SEO properties that will appear on every page without needing to add them individually. Common meta tags like `theme-color`, `manifest`, and `base` can be present on every page. If you configure the Svelte SEO in your `+layout.svelte`, these properties will stay fixed for every page. They can be changed on a per-page basis if necessary. For more information on using layouts and routing with SvelteKit, please refer to the official documentation at https://kit.svelte.dev/docs/routing#layout. 217 | 218 | ## Acknowledgements 219 | 220 | This is inspired by [Next SEO](https://github.com/garmeeh/next-seo) by [@garmeeh](https://github.com/garmeeh). 221 | 222 | ## License 223 | 224 | MIT 225 | -------------------------------------------------------------------------------- /jsconfig.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 and https://kit.svelte.dev/docs/configuration#files 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 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-seo", 3 | "version": "1.6.1", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "svelte-seo", 9 | "version": "1.6.1", 10 | "license": "MIT", 11 | "dependencies": { 12 | "schema-dts": "^1.1.2" 13 | }, 14 | "devDependencies": { 15 | "@playwright/test": "^1.29.2", 16 | "@sveltejs/adapter-auto": "^1.0.0", 17 | "@sveltejs/kit": "^1.30.4", 18 | "@sveltejs/package": "1.0.2", 19 | "eslint": "^8.31.0", 20 | "eslint-config-prettier": "^8.6.0", 21 | "eslint-plugin-svelte3": "^4.0.0", 22 | "husky": "^8.0.3", 23 | "lint-staged": "^13.1.0", 24 | "prettier": "^2.8.2", 25 | "prettier-plugin-svelte": "^2.9.0", 26 | "svelte": "^3.55.0", 27 | "svelte-check": "^3.0.1", 28 | "tslib": "^2.4.1", 29 | "typescript": "^4.9.4", 30 | "vite": "^4.5.3" 31 | } 32 | }, 33 | "node_modules/@esbuild/android-arm": { 34 | "version": "0.18.20", 35 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", 36 | "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", 37 | "cpu": [ 38 | "arm" 39 | ], 40 | "dev": true, 41 | "optional": true, 42 | "os": [ 43 | "android" 44 | ], 45 | "engines": { 46 | "node": ">=12" 47 | } 48 | }, 49 | "node_modules/@esbuild/android-arm64": { 50 | "version": "0.18.20", 51 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", 52 | "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", 53 | "cpu": [ 54 | "arm64" 55 | ], 56 | "dev": true, 57 | "optional": true, 58 | "os": [ 59 | "android" 60 | ], 61 | "engines": { 62 | "node": ">=12" 63 | } 64 | }, 65 | "node_modules/@esbuild/android-x64": { 66 | "version": "0.18.20", 67 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", 68 | "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", 69 | "cpu": [ 70 | "x64" 71 | ], 72 | "dev": true, 73 | "optional": true, 74 | "os": [ 75 | "android" 76 | ], 77 | "engines": { 78 | "node": ">=12" 79 | } 80 | }, 81 | "node_modules/@esbuild/darwin-arm64": { 82 | "version": "0.18.20", 83 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", 84 | "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", 85 | "cpu": [ 86 | "arm64" 87 | ], 88 | "dev": true, 89 | "optional": true, 90 | "os": [ 91 | "darwin" 92 | ], 93 | "engines": { 94 | "node": ">=12" 95 | } 96 | }, 97 | "node_modules/@esbuild/darwin-x64": { 98 | "version": "0.18.20", 99 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", 100 | "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", 101 | "cpu": [ 102 | "x64" 103 | ], 104 | "dev": true, 105 | "optional": true, 106 | "os": [ 107 | "darwin" 108 | ], 109 | "engines": { 110 | "node": ">=12" 111 | } 112 | }, 113 | "node_modules/@esbuild/freebsd-arm64": { 114 | "version": "0.18.20", 115 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", 116 | "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", 117 | "cpu": [ 118 | "arm64" 119 | ], 120 | "dev": true, 121 | "optional": true, 122 | "os": [ 123 | "freebsd" 124 | ], 125 | "engines": { 126 | "node": ">=12" 127 | } 128 | }, 129 | "node_modules/@esbuild/freebsd-x64": { 130 | "version": "0.18.20", 131 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", 132 | "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", 133 | "cpu": [ 134 | "x64" 135 | ], 136 | "dev": true, 137 | "optional": true, 138 | "os": [ 139 | "freebsd" 140 | ], 141 | "engines": { 142 | "node": ">=12" 143 | } 144 | }, 145 | "node_modules/@esbuild/linux-arm": { 146 | "version": "0.18.20", 147 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", 148 | "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", 149 | "cpu": [ 150 | "arm" 151 | ], 152 | "dev": true, 153 | "optional": true, 154 | "os": [ 155 | "linux" 156 | ], 157 | "engines": { 158 | "node": ">=12" 159 | } 160 | }, 161 | "node_modules/@esbuild/linux-arm64": { 162 | "version": "0.18.20", 163 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", 164 | "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", 165 | "cpu": [ 166 | "arm64" 167 | ], 168 | "dev": true, 169 | "optional": true, 170 | "os": [ 171 | "linux" 172 | ], 173 | "engines": { 174 | "node": ">=12" 175 | } 176 | }, 177 | "node_modules/@esbuild/linux-ia32": { 178 | "version": "0.18.20", 179 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", 180 | "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", 181 | "cpu": [ 182 | "ia32" 183 | ], 184 | "dev": true, 185 | "optional": true, 186 | "os": [ 187 | "linux" 188 | ], 189 | "engines": { 190 | "node": ">=12" 191 | } 192 | }, 193 | "node_modules/@esbuild/linux-loong64": { 194 | "version": "0.18.20", 195 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", 196 | "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", 197 | "cpu": [ 198 | "loong64" 199 | ], 200 | "dev": true, 201 | "optional": true, 202 | "os": [ 203 | "linux" 204 | ], 205 | "engines": { 206 | "node": ">=12" 207 | } 208 | }, 209 | "node_modules/@esbuild/linux-mips64el": { 210 | "version": "0.18.20", 211 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", 212 | "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", 213 | "cpu": [ 214 | "mips64el" 215 | ], 216 | "dev": true, 217 | "optional": true, 218 | "os": [ 219 | "linux" 220 | ], 221 | "engines": { 222 | "node": ">=12" 223 | } 224 | }, 225 | "node_modules/@esbuild/linux-ppc64": { 226 | "version": "0.18.20", 227 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", 228 | "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", 229 | "cpu": [ 230 | "ppc64" 231 | ], 232 | "dev": true, 233 | "optional": true, 234 | "os": [ 235 | "linux" 236 | ], 237 | "engines": { 238 | "node": ">=12" 239 | } 240 | }, 241 | "node_modules/@esbuild/linux-riscv64": { 242 | "version": "0.18.20", 243 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", 244 | "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", 245 | "cpu": [ 246 | "riscv64" 247 | ], 248 | "dev": true, 249 | "optional": true, 250 | "os": [ 251 | "linux" 252 | ], 253 | "engines": { 254 | "node": ">=12" 255 | } 256 | }, 257 | "node_modules/@esbuild/linux-s390x": { 258 | "version": "0.18.20", 259 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", 260 | "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", 261 | "cpu": [ 262 | "s390x" 263 | ], 264 | "dev": true, 265 | "optional": true, 266 | "os": [ 267 | "linux" 268 | ], 269 | "engines": { 270 | "node": ">=12" 271 | } 272 | }, 273 | "node_modules/@esbuild/linux-x64": { 274 | "version": "0.18.20", 275 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", 276 | "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", 277 | "cpu": [ 278 | "x64" 279 | ], 280 | "dev": true, 281 | "optional": true, 282 | "os": [ 283 | "linux" 284 | ], 285 | "engines": { 286 | "node": ">=12" 287 | } 288 | }, 289 | "node_modules/@esbuild/netbsd-x64": { 290 | "version": "0.18.20", 291 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", 292 | "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", 293 | "cpu": [ 294 | "x64" 295 | ], 296 | "dev": true, 297 | "optional": true, 298 | "os": [ 299 | "netbsd" 300 | ], 301 | "engines": { 302 | "node": ">=12" 303 | } 304 | }, 305 | "node_modules/@esbuild/openbsd-x64": { 306 | "version": "0.18.20", 307 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", 308 | "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", 309 | "cpu": [ 310 | "x64" 311 | ], 312 | "dev": true, 313 | "optional": true, 314 | "os": [ 315 | "openbsd" 316 | ], 317 | "engines": { 318 | "node": ">=12" 319 | } 320 | }, 321 | "node_modules/@esbuild/sunos-x64": { 322 | "version": "0.18.20", 323 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", 324 | "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", 325 | "cpu": [ 326 | "x64" 327 | ], 328 | "dev": true, 329 | "optional": true, 330 | "os": [ 331 | "sunos" 332 | ], 333 | "engines": { 334 | "node": ">=12" 335 | } 336 | }, 337 | "node_modules/@esbuild/win32-arm64": { 338 | "version": "0.18.20", 339 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", 340 | "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", 341 | "cpu": [ 342 | "arm64" 343 | ], 344 | "dev": true, 345 | "optional": true, 346 | "os": [ 347 | "win32" 348 | ], 349 | "engines": { 350 | "node": ">=12" 351 | } 352 | }, 353 | "node_modules/@esbuild/win32-ia32": { 354 | "version": "0.18.20", 355 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", 356 | "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", 357 | "cpu": [ 358 | "ia32" 359 | ], 360 | "dev": true, 361 | "optional": true, 362 | "os": [ 363 | "win32" 364 | ], 365 | "engines": { 366 | "node": ">=12" 367 | } 368 | }, 369 | "node_modules/@esbuild/win32-x64": { 370 | "version": "0.18.20", 371 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", 372 | "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", 373 | "cpu": [ 374 | "x64" 375 | ], 376 | "dev": true, 377 | "optional": true, 378 | "os": [ 379 | "win32" 380 | ], 381 | "engines": { 382 | "node": ">=12" 383 | } 384 | }, 385 | "node_modules/@eslint/eslintrc": { 386 | "version": "1.4.1", 387 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", 388 | "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", 389 | "dev": true, 390 | "license": "MIT", 391 | "dependencies": { 392 | "ajv": "^6.12.4", 393 | "debug": "^4.3.2", 394 | "espree": "^9.4.0", 395 | "globals": "^13.19.0", 396 | "ignore": "^5.2.0", 397 | "import-fresh": "^3.2.1", 398 | "js-yaml": "^4.1.0", 399 | "minimatch": "^3.1.2", 400 | "strip-json-comments": "^3.1.1" 401 | }, 402 | "engines": { 403 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 404 | }, 405 | "funding": { 406 | "url": "https://opencollective.com/eslint" 407 | } 408 | }, 409 | "node_modules/@fastify/busboy": { 410 | "version": "2.1.1", 411 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", 412 | "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", 413 | "dev": true, 414 | "engines": { 415 | "node": ">=14" 416 | } 417 | }, 418 | "node_modules/@humanwhocodes/config-array": { 419 | "version": "0.11.8", 420 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", 421 | "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", 422 | "dev": true, 423 | "license": "Apache-2.0", 424 | "dependencies": { 425 | "@humanwhocodes/object-schema": "^1.2.1", 426 | "debug": "^4.1.1", 427 | "minimatch": "^3.0.5" 428 | }, 429 | "engines": { 430 | "node": ">=10.10.0" 431 | } 432 | }, 433 | "node_modules/@humanwhocodes/module-importer": { 434 | "version": "1.0.1", 435 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 436 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 437 | "dev": true, 438 | "license": "Apache-2.0", 439 | "engines": { 440 | "node": ">=12.22" 441 | }, 442 | "funding": { 443 | "type": "github", 444 | "url": "https://github.com/sponsors/nzakas" 445 | } 446 | }, 447 | "node_modules/@humanwhocodes/object-schema": { 448 | "version": "1.2.1", 449 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 450 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 451 | "dev": true, 452 | "license": "BSD-3-Clause" 453 | }, 454 | "node_modules/@jridgewell/resolve-uri": { 455 | "version": "3.1.0", 456 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 457 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 458 | "dev": true, 459 | "license": "MIT", 460 | "engines": { 461 | "node": ">=6.0.0" 462 | } 463 | }, 464 | "node_modules/@jridgewell/sourcemap-codec": { 465 | "version": "1.4.14", 466 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 467 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 468 | "dev": true, 469 | "license": "MIT" 470 | }, 471 | "node_modules/@jridgewell/trace-mapping": { 472 | "version": "0.3.17", 473 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", 474 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", 475 | "dev": true, 476 | "license": "MIT", 477 | "dependencies": { 478 | "@jridgewell/resolve-uri": "3.1.0", 479 | "@jridgewell/sourcemap-codec": "1.4.14" 480 | } 481 | }, 482 | "node_modules/@nodelib/fs.scandir": { 483 | "version": "2.1.5", 484 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 485 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 486 | "dev": true, 487 | "license": "MIT", 488 | "dependencies": { 489 | "@nodelib/fs.stat": "2.0.5", 490 | "run-parallel": "^1.1.9" 491 | }, 492 | "engines": { 493 | "node": ">= 8" 494 | } 495 | }, 496 | "node_modules/@nodelib/fs.stat": { 497 | "version": "2.0.5", 498 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 499 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 500 | "dev": true, 501 | "license": "MIT", 502 | "engines": { 503 | "node": ">= 8" 504 | } 505 | }, 506 | "node_modules/@nodelib/fs.walk": { 507 | "version": "1.2.8", 508 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 509 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 510 | "dev": true, 511 | "license": "MIT", 512 | "dependencies": { 513 | "@nodelib/fs.scandir": "2.1.5", 514 | "fastq": "^1.6.0" 515 | }, 516 | "engines": { 517 | "node": ">= 8" 518 | } 519 | }, 520 | "node_modules/@playwright/test": { 521 | "version": "1.29.2", 522 | "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.29.2.tgz", 523 | "integrity": "sha512-+3/GPwOgcoF0xLz/opTnahel1/y42PdcgZ4hs+BZGIUjtmEFSXGg+nFoaH3NSmuc7a6GSFwXDJ5L7VXpqzigNg==", 524 | "dev": true, 525 | "license": "Apache-2.0", 526 | "dependencies": { 527 | "@types/node": "*", 528 | "playwright-core": "1.29.2" 529 | }, 530 | "bin": { 531 | "playwright": "cli.js" 532 | }, 533 | "engines": { 534 | "node": ">=14" 535 | } 536 | }, 537 | "node_modules/@polka/url": { 538 | "version": "1.0.0-next.21", 539 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", 540 | "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", 541 | "dev": true, 542 | "license": "MIT" 543 | }, 544 | "node_modules/@sveltejs/adapter-auto": { 545 | "version": "1.0.2", 546 | "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-1.0.2.tgz", 547 | "integrity": "sha512-UXpEO/gutERZnD+Z5Vi4J/ifD3WSRuCI7xwtLJTcKNQvJ6t5Xsj1X3Mw2F8Vv/XTUuxf7xPLYUgThU331r0Y9w==", 548 | "dev": true, 549 | "license": "MIT", 550 | "dependencies": { 551 | "import-meta-resolve": "^2.2.0" 552 | }, 553 | "peerDependencies": { 554 | "@sveltejs/kit": "^1.0.0" 555 | } 556 | }, 557 | "node_modules/@sveltejs/kit": { 558 | "version": "1.30.4", 559 | "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.30.4.tgz", 560 | "integrity": "sha512-JSQIQT6XvdchCRQEm7BABxPC56WP5RYVONAi+09S8tmzeP43fBsRlr95bFmsTQM2RHBldfgQk+jgdnsKI75daA==", 561 | "dev": true, 562 | "hasInstallScript": true, 563 | "dependencies": { 564 | "@sveltejs/vite-plugin-svelte": "^2.5.0", 565 | "@types/cookie": "^0.5.1", 566 | "cookie": "^0.5.0", 567 | "devalue": "^4.3.1", 568 | "esm-env": "^1.0.0", 569 | "kleur": "^4.1.5", 570 | "magic-string": "^0.30.0", 571 | "mrmime": "^1.0.1", 572 | "sade": "^1.8.1", 573 | "set-cookie-parser": "^2.6.0", 574 | "sirv": "^2.0.2", 575 | "tiny-glob": "^0.2.9", 576 | "undici": "^5.28.3" 577 | }, 578 | "bin": { 579 | "svelte-kit": "svelte-kit.js" 580 | }, 581 | "engines": { 582 | "node": "^16.14 || >=18" 583 | }, 584 | "peerDependencies": { 585 | "svelte": "^3.54.0 || ^4.0.0-next.0 || ^5.0.0-next.0", 586 | "vite": "^4.0.0" 587 | } 588 | }, 589 | "node_modules/@sveltejs/kit/node_modules/magic-string": { 590 | "version": "0.30.0", 591 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", 592 | "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", 593 | "dev": true, 594 | "dependencies": { 595 | "@jridgewell/sourcemap-codec": "^1.4.13" 596 | }, 597 | "engines": { 598 | "node": ">=12" 599 | } 600 | }, 601 | "node_modules/@sveltejs/package": { 602 | "version": "1.0.2", 603 | "resolved": "https://registry.npmjs.org/@sveltejs/package/-/package-1.0.2.tgz", 604 | "integrity": "sha512-VY9U+05d9uNFDj7ScKRlHORYlfPSHwJewBjV+V2RsnViexpLFPUrboC9SiPYDCpLnbeqwXerxhO6twGHUBGeIA==", 605 | "dev": true, 606 | "license": "MIT", 607 | "dependencies": { 608 | "chokidar": "^3.5.3", 609 | "kleur": "^4.1.5", 610 | "sade": "^1.8.1", 611 | "svelte2tsx": "~0.6.0" 612 | }, 613 | "bin": { 614 | "svelte-package": "svelte-package.js" 615 | }, 616 | "engines": { 617 | "node": "^16.14 || >=18" 618 | }, 619 | "peerDependencies": { 620 | "svelte": "^3.44.0" 621 | } 622 | }, 623 | "node_modules/@sveltejs/vite-plugin-svelte": { 624 | "version": "2.5.3", 625 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.5.3.tgz", 626 | "integrity": "sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w==", 627 | "dev": true, 628 | "dependencies": { 629 | "@sveltejs/vite-plugin-svelte-inspector": "^1.0.4", 630 | "debug": "^4.3.4", 631 | "deepmerge": "^4.3.1", 632 | "kleur": "^4.1.5", 633 | "magic-string": "^0.30.3", 634 | "svelte-hmr": "^0.15.3", 635 | "vitefu": "^0.2.4" 636 | }, 637 | "engines": { 638 | "node": "^14.18.0 || >= 16" 639 | }, 640 | "peerDependencies": { 641 | "svelte": "^3.54.0 || ^4.0.0 || ^5.0.0-next.0", 642 | "vite": "^4.0.0" 643 | } 644 | }, 645 | "node_modules/@sveltejs/vite-plugin-svelte-inspector": { 646 | "version": "1.0.4", 647 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz", 648 | "integrity": "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==", 649 | "dev": true, 650 | "dependencies": { 651 | "debug": "^4.3.4" 652 | }, 653 | "engines": { 654 | "node": "^14.18.0 || >= 16" 655 | }, 656 | "peerDependencies": { 657 | "@sveltejs/vite-plugin-svelte": "^2.2.0", 658 | "svelte": "^3.54.0 || ^4.0.0", 659 | "vite": "^4.0.0" 660 | } 661 | }, 662 | "node_modules/@sveltejs/vite-plugin-svelte/node_modules/@jridgewell/sourcemap-codec": { 663 | "version": "1.4.15", 664 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 665 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 666 | "dev": true 667 | }, 668 | "node_modules/@sveltejs/vite-plugin-svelte/node_modules/magic-string": { 669 | "version": "0.30.5", 670 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", 671 | "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", 672 | "dev": true, 673 | "dependencies": { 674 | "@jridgewell/sourcemap-codec": "^1.4.15" 675 | }, 676 | "engines": { 677 | "node": ">=12" 678 | } 679 | }, 680 | "node_modules/@types/cookie": { 681 | "version": "0.5.1", 682 | "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz", 683 | "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==", 684 | "dev": true, 685 | "license": "MIT" 686 | }, 687 | "node_modules/@types/node": { 688 | "version": "18.11.18", 689 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", 690 | "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", 691 | "dev": true, 692 | "license": "MIT" 693 | }, 694 | "node_modules/@types/pug": { 695 | "version": "2.0.6", 696 | "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", 697 | "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", 698 | "dev": true, 699 | "license": "MIT" 700 | }, 701 | "node_modules/@types/sass": { 702 | "version": "1.43.1", 703 | "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", 704 | "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", 705 | "dev": true, 706 | "license": "MIT", 707 | "dependencies": { 708 | "@types/node": "*" 709 | } 710 | }, 711 | "node_modules/acorn": { 712 | "version": "8.8.2", 713 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", 714 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 715 | "dev": true, 716 | "license": "MIT", 717 | "bin": { 718 | "acorn": "bin/acorn" 719 | }, 720 | "engines": { 721 | "node": ">=0.4.0" 722 | } 723 | }, 724 | "node_modules/acorn-jsx": { 725 | "version": "5.3.2", 726 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 727 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 728 | "dev": true, 729 | "license": "MIT", 730 | "peerDependencies": { 731 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 732 | } 733 | }, 734 | "node_modules/aggregate-error": { 735 | "version": "3.1.0", 736 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 737 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 738 | "dev": true, 739 | "license": "MIT", 740 | "dependencies": { 741 | "clean-stack": "^2.0.0", 742 | "indent-string": "^4.0.0" 743 | }, 744 | "engines": { 745 | "node": ">=8" 746 | } 747 | }, 748 | "node_modules/ajv": { 749 | "version": "6.12.6", 750 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 751 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 752 | "dev": true, 753 | "license": "MIT", 754 | "dependencies": { 755 | "fast-deep-equal": "^3.1.1", 756 | "fast-json-stable-stringify": "^2.0.0", 757 | "json-schema-traverse": "^0.4.1", 758 | "uri-js": "^4.2.2" 759 | }, 760 | "funding": { 761 | "type": "github", 762 | "url": "https://github.com/sponsors/epoberezkin" 763 | } 764 | }, 765 | "node_modules/ansi-escapes": { 766 | "version": "4.3.2", 767 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", 768 | "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", 769 | "dev": true, 770 | "license": "MIT", 771 | "dependencies": { 772 | "type-fest": "^0.21.3" 773 | }, 774 | "engines": { 775 | "node": ">=8" 776 | }, 777 | "funding": { 778 | "url": "https://github.com/sponsors/sindresorhus" 779 | } 780 | }, 781 | "node_modules/ansi-escapes/node_modules/type-fest": { 782 | "version": "0.21.3", 783 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", 784 | "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", 785 | "dev": true, 786 | "license": "(MIT OR CC0-1.0)", 787 | "engines": { 788 | "node": ">=10" 789 | }, 790 | "funding": { 791 | "url": "https://github.com/sponsors/sindresorhus" 792 | } 793 | }, 794 | "node_modules/ansi-regex": { 795 | "version": "5.0.1", 796 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 797 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 798 | "dev": true, 799 | "license": "MIT", 800 | "engines": { 801 | "node": ">=8" 802 | } 803 | }, 804 | "node_modules/ansi-styles": { 805 | "version": "4.3.0", 806 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 807 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 808 | "dev": true, 809 | "license": "MIT", 810 | "dependencies": { 811 | "color-convert": "^2.0.1" 812 | }, 813 | "engines": { 814 | "node": ">=8" 815 | }, 816 | "funding": { 817 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 818 | } 819 | }, 820 | "node_modules/anymatch": { 821 | "version": "3.1.3", 822 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 823 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 824 | "dev": true, 825 | "license": "ISC", 826 | "dependencies": { 827 | "normalize-path": "^3.0.0", 828 | "picomatch": "^2.0.4" 829 | }, 830 | "engines": { 831 | "node": ">= 8" 832 | } 833 | }, 834 | "node_modules/argparse": { 835 | "version": "2.0.1", 836 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 837 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 838 | "dev": true, 839 | "license": "Python-2.0" 840 | }, 841 | "node_modules/astral-regex": { 842 | "version": "2.0.0", 843 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", 844 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", 845 | "dev": true, 846 | "license": "MIT", 847 | "engines": { 848 | "node": ">=8" 849 | } 850 | }, 851 | "node_modules/balanced-match": { 852 | "version": "1.0.2", 853 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 854 | "dev": true, 855 | "license": "MIT" 856 | }, 857 | "node_modules/binary-extensions": { 858 | "version": "2.2.0", 859 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 860 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 861 | "dev": true, 862 | "license": "MIT", 863 | "engines": { 864 | "node": ">=8" 865 | } 866 | }, 867 | "node_modules/brace-expansion": { 868 | "version": "1.1.11", 869 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 870 | "dev": true, 871 | "license": "MIT", 872 | "dependencies": { 873 | "balanced-match": "^1.0.0", 874 | "concat-map": "0.0.1" 875 | } 876 | }, 877 | "node_modules/braces": { 878 | "version": "3.0.3", 879 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 880 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 881 | "dev": true, 882 | "dependencies": { 883 | "fill-range": "^7.1.1" 884 | }, 885 | "engines": { 886 | "node": ">=8" 887 | } 888 | }, 889 | "node_modules/buffer-crc32": { 890 | "version": "0.2.13", 891 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 892 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 893 | "dev": true, 894 | "license": "MIT", 895 | "engines": { 896 | "node": "*" 897 | } 898 | }, 899 | "node_modules/callsites": { 900 | "version": "3.1.0", 901 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 902 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 903 | "dev": true, 904 | "license": "MIT", 905 | "engines": { 906 | "node": ">=6" 907 | } 908 | }, 909 | "node_modules/chalk": { 910 | "version": "4.1.2", 911 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 912 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 913 | "dev": true, 914 | "license": "MIT", 915 | "dependencies": { 916 | "ansi-styles": "^4.1.0", 917 | "supports-color": "^7.1.0" 918 | }, 919 | "engines": { 920 | "node": ">=10" 921 | }, 922 | "funding": { 923 | "url": "https://github.com/chalk/chalk?sponsor=1" 924 | } 925 | }, 926 | "node_modules/chokidar": { 927 | "version": "3.5.3", 928 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 929 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 930 | "dev": true, 931 | "funding": [ 932 | { 933 | "type": "individual", 934 | "url": "https://paulmillr.com/funding/" 935 | } 936 | ], 937 | "license": "MIT", 938 | "dependencies": { 939 | "anymatch": "~3.1.2", 940 | "braces": "~3.0.2", 941 | "glob-parent": "~5.1.2", 942 | "is-binary-path": "~2.1.0", 943 | "is-glob": "~4.0.1", 944 | "normalize-path": "~3.0.0", 945 | "readdirp": "~3.6.0" 946 | }, 947 | "engines": { 948 | "node": ">= 8.10.0" 949 | }, 950 | "optionalDependencies": { 951 | "fsevents": "~2.3.2" 952 | } 953 | }, 954 | "node_modules/clean-stack": { 955 | "version": "2.2.0", 956 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 957 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 958 | "dev": true, 959 | "license": "MIT", 960 | "engines": { 961 | "node": ">=6" 962 | } 963 | }, 964 | "node_modules/cli-cursor": { 965 | "version": "3.1.0", 966 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 967 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 968 | "dev": true, 969 | "license": "MIT", 970 | "dependencies": { 971 | "restore-cursor": "^3.1.0" 972 | }, 973 | "engines": { 974 | "node": ">=8" 975 | } 976 | }, 977 | "node_modules/cli-truncate": { 978 | "version": "3.1.0", 979 | "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", 980 | "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", 981 | "dev": true, 982 | "license": "MIT", 983 | "dependencies": { 984 | "slice-ansi": "^5.0.0", 985 | "string-width": "^5.0.0" 986 | }, 987 | "engines": { 988 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 989 | }, 990 | "funding": { 991 | "url": "https://github.com/sponsors/sindresorhus" 992 | } 993 | }, 994 | "node_modules/cli-truncate/node_modules/ansi-regex": { 995 | "version": "6.0.1", 996 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 997 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 998 | "dev": true, 999 | "license": "MIT", 1000 | "engines": { 1001 | "node": ">=12" 1002 | }, 1003 | "funding": { 1004 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 1005 | } 1006 | }, 1007 | "node_modules/cli-truncate/node_modules/emoji-regex": { 1008 | "version": "9.2.2", 1009 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 1010 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 1011 | "dev": true, 1012 | "license": "MIT" 1013 | }, 1014 | "node_modules/cli-truncate/node_modules/string-width": { 1015 | "version": "5.1.2", 1016 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 1017 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1018 | "dev": true, 1019 | "license": "MIT", 1020 | "dependencies": { 1021 | "eastasianwidth": "^0.2.0", 1022 | "emoji-regex": "^9.2.2", 1023 | "strip-ansi": "^7.0.1" 1024 | }, 1025 | "engines": { 1026 | "node": ">=12" 1027 | }, 1028 | "funding": { 1029 | "url": "https://github.com/sponsors/sindresorhus" 1030 | } 1031 | }, 1032 | "node_modules/cli-truncate/node_modules/strip-ansi": { 1033 | "version": "7.0.1", 1034 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", 1035 | "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", 1036 | "dev": true, 1037 | "license": "MIT", 1038 | "dependencies": { 1039 | "ansi-regex": "^6.0.1" 1040 | }, 1041 | "engines": { 1042 | "node": ">=12" 1043 | }, 1044 | "funding": { 1045 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1046 | } 1047 | }, 1048 | "node_modules/color-convert": { 1049 | "version": "2.0.1", 1050 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1051 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1052 | "dev": true, 1053 | "license": "MIT", 1054 | "dependencies": { 1055 | "color-name": "~1.1.4" 1056 | }, 1057 | "engines": { 1058 | "node": ">=7.0.0" 1059 | } 1060 | }, 1061 | "node_modules/color-name": { 1062 | "version": "1.1.4", 1063 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1064 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1065 | "dev": true, 1066 | "license": "MIT" 1067 | }, 1068 | "node_modules/colorette": { 1069 | "version": "2.0.19", 1070 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", 1071 | "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", 1072 | "dev": true, 1073 | "license": "MIT" 1074 | }, 1075 | "node_modules/commander": { 1076 | "version": "9.5.0", 1077 | "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", 1078 | "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", 1079 | "dev": true, 1080 | "license": "MIT", 1081 | "engines": { 1082 | "node": "^12.20.0 || >=14" 1083 | } 1084 | }, 1085 | "node_modules/concat-map": { 1086 | "version": "0.0.1", 1087 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1088 | "dev": true, 1089 | "license": "MIT" 1090 | }, 1091 | "node_modules/cookie": { 1092 | "version": "0.5.0", 1093 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 1094 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 1095 | "dev": true, 1096 | "license": "MIT", 1097 | "engines": { 1098 | "node": ">= 0.6" 1099 | } 1100 | }, 1101 | "node_modules/cross-spawn": { 1102 | "version": "7.0.3", 1103 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1104 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1105 | "dev": true, 1106 | "license": "MIT", 1107 | "dependencies": { 1108 | "path-key": "^3.1.0", 1109 | "shebang-command": "^2.0.0", 1110 | "which": "^2.0.1" 1111 | }, 1112 | "engines": { 1113 | "node": ">= 8" 1114 | } 1115 | }, 1116 | "node_modules/debug": { 1117 | "version": "4.3.4", 1118 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1119 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1120 | "dev": true, 1121 | "license": "MIT", 1122 | "dependencies": { 1123 | "ms": "2.1.2" 1124 | }, 1125 | "engines": { 1126 | "node": ">=6.0" 1127 | }, 1128 | "peerDependenciesMeta": { 1129 | "supports-color": { 1130 | "optional": true 1131 | } 1132 | } 1133 | }, 1134 | "node_modules/dedent-js": { 1135 | "version": "1.0.1", 1136 | "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", 1137 | "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", 1138 | "dev": true, 1139 | "license": "MIT" 1140 | }, 1141 | "node_modules/deep-is": { 1142 | "version": "0.1.4", 1143 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1144 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1145 | "dev": true, 1146 | "license": "MIT" 1147 | }, 1148 | "node_modules/deepmerge": { 1149 | "version": "4.3.1", 1150 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 1151 | "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 1152 | "dev": true, 1153 | "engines": { 1154 | "node": ">=0.10.0" 1155 | } 1156 | }, 1157 | "node_modules/detect-indent": { 1158 | "version": "6.1.0", 1159 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", 1160 | "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", 1161 | "dev": true, 1162 | "license": "MIT", 1163 | "engines": { 1164 | "node": ">=8" 1165 | } 1166 | }, 1167 | "node_modules/devalue": { 1168 | "version": "4.3.2", 1169 | "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", 1170 | "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==", 1171 | "dev": true 1172 | }, 1173 | "node_modules/doctrine": { 1174 | "version": "3.0.0", 1175 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1176 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1177 | "dev": true, 1178 | "license": "Apache-2.0", 1179 | "dependencies": { 1180 | "esutils": "^2.0.2" 1181 | }, 1182 | "engines": { 1183 | "node": ">=6.0.0" 1184 | } 1185 | }, 1186 | "node_modules/eastasianwidth": { 1187 | "version": "0.2.0", 1188 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 1189 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 1190 | "dev": true, 1191 | "license": "MIT" 1192 | }, 1193 | "node_modules/emoji-regex": { 1194 | "version": "8.0.0", 1195 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1196 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1197 | "dev": true, 1198 | "license": "MIT" 1199 | }, 1200 | "node_modules/es6-promise": { 1201 | "version": "3.3.1", 1202 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", 1203 | "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", 1204 | "dev": true, 1205 | "license": "MIT" 1206 | }, 1207 | "node_modules/esbuild": { 1208 | "version": "0.18.20", 1209 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", 1210 | "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", 1211 | "dev": true, 1212 | "hasInstallScript": true, 1213 | "bin": { 1214 | "esbuild": "bin/esbuild" 1215 | }, 1216 | "engines": { 1217 | "node": ">=12" 1218 | }, 1219 | "optionalDependencies": { 1220 | "@esbuild/android-arm": "0.18.20", 1221 | "@esbuild/android-arm64": "0.18.20", 1222 | "@esbuild/android-x64": "0.18.20", 1223 | "@esbuild/darwin-arm64": "0.18.20", 1224 | "@esbuild/darwin-x64": "0.18.20", 1225 | "@esbuild/freebsd-arm64": "0.18.20", 1226 | "@esbuild/freebsd-x64": "0.18.20", 1227 | "@esbuild/linux-arm": "0.18.20", 1228 | "@esbuild/linux-arm64": "0.18.20", 1229 | "@esbuild/linux-ia32": "0.18.20", 1230 | "@esbuild/linux-loong64": "0.18.20", 1231 | "@esbuild/linux-mips64el": "0.18.20", 1232 | "@esbuild/linux-ppc64": "0.18.20", 1233 | "@esbuild/linux-riscv64": "0.18.20", 1234 | "@esbuild/linux-s390x": "0.18.20", 1235 | "@esbuild/linux-x64": "0.18.20", 1236 | "@esbuild/netbsd-x64": "0.18.20", 1237 | "@esbuild/openbsd-x64": "0.18.20", 1238 | "@esbuild/sunos-x64": "0.18.20", 1239 | "@esbuild/win32-arm64": "0.18.20", 1240 | "@esbuild/win32-ia32": "0.18.20", 1241 | "@esbuild/win32-x64": "0.18.20" 1242 | } 1243 | }, 1244 | "node_modules/escape-string-regexp": { 1245 | "version": "4.0.0", 1246 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1247 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1248 | "dev": true, 1249 | "license": "MIT", 1250 | "engines": { 1251 | "node": ">=10" 1252 | }, 1253 | "funding": { 1254 | "url": "https://github.com/sponsors/sindresorhus" 1255 | } 1256 | }, 1257 | "node_modules/eslint": { 1258 | "version": "8.32.0", 1259 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz", 1260 | "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==", 1261 | "dev": true, 1262 | "license": "MIT", 1263 | "dependencies": { 1264 | "@eslint/eslintrc": "^1.4.1", 1265 | "@humanwhocodes/config-array": "^0.11.8", 1266 | "@humanwhocodes/module-importer": "^1.0.1", 1267 | "@nodelib/fs.walk": "^1.2.8", 1268 | "ajv": "^6.10.0", 1269 | "chalk": "^4.0.0", 1270 | "cross-spawn": "^7.0.2", 1271 | "debug": "^4.3.2", 1272 | "doctrine": "^3.0.0", 1273 | "escape-string-regexp": "^4.0.0", 1274 | "eslint-scope": "^7.1.1", 1275 | "eslint-utils": "^3.0.0", 1276 | "eslint-visitor-keys": "^3.3.0", 1277 | "espree": "^9.4.0", 1278 | "esquery": "^1.4.0", 1279 | "esutils": "^2.0.2", 1280 | "fast-deep-equal": "^3.1.3", 1281 | "file-entry-cache": "^6.0.1", 1282 | "find-up": "^5.0.0", 1283 | "glob-parent": "^6.0.2", 1284 | "globals": "^13.19.0", 1285 | "grapheme-splitter": "^1.0.4", 1286 | "ignore": "^5.2.0", 1287 | "import-fresh": "^3.0.0", 1288 | "imurmurhash": "^0.1.4", 1289 | "is-glob": "^4.0.0", 1290 | "is-path-inside": "^3.0.3", 1291 | "js-sdsl": "^4.1.4", 1292 | "js-yaml": "^4.1.0", 1293 | "json-stable-stringify-without-jsonify": "^1.0.1", 1294 | "levn": "^0.4.1", 1295 | "lodash.merge": "^4.6.2", 1296 | "minimatch": "^3.1.2", 1297 | "natural-compare": "^1.4.0", 1298 | "optionator": "^0.9.1", 1299 | "regexpp": "^3.2.0", 1300 | "strip-ansi": "^6.0.1", 1301 | "strip-json-comments": "^3.1.0", 1302 | "text-table": "^0.2.0" 1303 | }, 1304 | "bin": { 1305 | "eslint": "bin/eslint.js" 1306 | }, 1307 | "engines": { 1308 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1309 | }, 1310 | "funding": { 1311 | "url": "https://opencollective.com/eslint" 1312 | } 1313 | }, 1314 | "node_modules/eslint-config-prettier": { 1315 | "version": "8.6.0", 1316 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", 1317 | "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", 1318 | "dev": true, 1319 | "license": "MIT", 1320 | "bin": { 1321 | "eslint-config-prettier": "bin/cli.js" 1322 | }, 1323 | "peerDependencies": { 1324 | "eslint": ">=7.0.0" 1325 | } 1326 | }, 1327 | "node_modules/eslint-plugin-svelte3": { 1328 | "version": "4.0.0", 1329 | "resolved": "https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-4.0.0.tgz", 1330 | "integrity": "sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==", 1331 | "dev": true, 1332 | "license": "MIT", 1333 | "peerDependencies": { 1334 | "eslint": ">=8.0.0", 1335 | "svelte": "^3.2.0" 1336 | } 1337 | }, 1338 | "node_modules/eslint-scope": { 1339 | "version": "7.1.1", 1340 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", 1341 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", 1342 | "dev": true, 1343 | "license": "BSD-2-Clause", 1344 | "dependencies": { 1345 | "esrecurse": "^4.3.0", 1346 | "estraverse": "^5.2.0" 1347 | }, 1348 | "engines": { 1349 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1350 | } 1351 | }, 1352 | "node_modules/eslint-utils": { 1353 | "version": "3.0.0", 1354 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 1355 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 1356 | "dev": true, 1357 | "license": "MIT", 1358 | "dependencies": { 1359 | "eslint-visitor-keys": "^2.0.0" 1360 | }, 1361 | "engines": { 1362 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" 1363 | }, 1364 | "funding": { 1365 | "url": "https://github.com/sponsors/mysticatea" 1366 | }, 1367 | "peerDependencies": { 1368 | "eslint": ">=5" 1369 | } 1370 | }, 1371 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { 1372 | "version": "2.1.0", 1373 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 1374 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 1375 | "dev": true, 1376 | "license": "Apache-2.0", 1377 | "engines": { 1378 | "node": ">=10" 1379 | } 1380 | }, 1381 | "node_modules/eslint-visitor-keys": { 1382 | "version": "3.3.0", 1383 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", 1384 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", 1385 | "dev": true, 1386 | "license": "Apache-2.0", 1387 | "engines": { 1388 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1389 | } 1390 | }, 1391 | "node_modules/eslint/node_modules/glob-parent": { 1392 | "version": "6.0.2", 1393 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1394 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1395 | "dev": true, 1396 | "license": "ISC", 1397 | "dependencies": { 1398 | "is-glob": "^4.0.3" 1399 | }, 1400 | "engines": { 1401 | "node": ">=10.13.0" 1402 | } 1403 | }, 1404 | "node_modules/esm-env": { 1405 | "version": "1.0.0", 1406 | "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", 1407 | "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", 1408 | "dev": true, 1409 | "license": "MIT" 1410 | }, 1411 | "node_modules/espree": { 1412 | "version": "9.4.1", 1413 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", 1414 | "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", 1415 | "dev": true, 1416 | "license": "BSD-2-Clause", 1417 | "dependencies": { 1418 | "acorn": "^8.8.0", 1419 | "acorn-jsx": "^5.3.2", 1420 | "eslint-visitor-keys": "^3.3.0" 1421 | }, 1422 | "engines": { 1423 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1424 | }, 1425 | "funding": { 1426 | "url": "https://opencollective.com/eslint" 1427 | } 1428 | }, 1429 | "node_modules/esquery": { 1430 | "version": "1.4.0", 1431 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 1432 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 1433 | "dev": true, 1434 | "license": "BSD-3-Clause", 1435 | "dependencies": { 1436 | "estraverse": "^5.1.0" 1437 | }, 1438 | "engines": { 1439 | "node": ">=0.10" 1440 | } 1441 | }, 1442 | "node_modules/esrecurse": { 1443 | "version": "4.3.0", 1444 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1445 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1446 | "dev": true, 1447 | "license": "BSD-2-Clause", 1448 | "dependencies": { 1449 | "estraverse": "^5.2.0" 1450 | }, 1451 | "engines": { 1452 | "node": ">=4.0" 1453 | } 1454 | }, 1455 | "node_modules/estraverse": { 1456 | "version": "5.3.0", 1457 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1458 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1459 | "dev": true, 1460 | "license": "BSD-2-Clause", 1461 | "engines": { 1462 | "node": ">=4.0" 1463 | } 1464 | }, 1465 | "node_modules/esutils": { 1466 | "version": "2.0.3", 1467 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1468 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1469 | "dev": true, 1470 | "license": "BSD-2-Clause", 1471 | "engines": { 1472 | "node": ">=0.10.0" 1473 | } 1474 | }, 1475 | "node_modules/execa": { 1476 | "version": "6.1.0", 1477 | "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", 1478 | "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", 1479 | "dev": true, 1480 | "license": "MIT", 1481 | "dependencies": { 1482 | "cross-spawn": "^7.0.3", 1483 | "get-stream": "^6.0.1", 1484 | "human-signals": "^3.0.1", 1485 | "is-stream": "^3.0.0", 1486 | "merge-stream": "^2.0.0", 1487 | "npm-run-path": "^5.1.0", 1488 | "onetime": "^6.0.0", 1489 | "signal-exit": "^3.0.7", 1490 | "strip-final-newline": "^3.0.0" 1491 | }, 1492 | "engines": { 1493 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1494 | }, 1495 | "funding": { 1496 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 1497 | } 1498 | }, 1499 | "node_modules/fast-deep-equal": { 1500 | "version": "3.1.3", 1501 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1502 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1503 | "dev": true, 1504 | "license": "MIT" 1505 | }, 1506 | "node_modules/fast-glob": { 1507 | "version": "3.2.12", 1508 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 1509 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 1510 | "dev": true, 1511 | "license": "MIT", 1512 | "dependencies": { 1513 | "@nodelib/fs.stat": "^2.0.2", 1514 | "@nodelib/fs.walk": "^1.2.3", 1515 | "glob-parent": "^5.1.2", 1516 | "merge2": "^1.3.0", 1517 | "micromatch": "^4.0.4" 1518 | }, 1519 | "engines": { 1520 | "node": ">=8.6.0" 1521 | } 1522 | }, 1523 | "node_modules/fast-json-stable-stringify": { 1524 | "version": "2.1.0", 1525 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1526 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1527 | "dev": true, 1528 | "license": "MIT" 1529 | }, 1530 | "node_modules/fast-levenshtein": { 1531 | "version": "2.0.6", 1532 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1533 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1534 | "dev": true, 1535 | "license": "MIT" 1536 | }, 1537 | "node_modules/fastq": { 1538 | "version": "1.15.0", 1539 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 1540 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 1541 | "dev": true, 1542 | "license": "ISC", 1543 | "dependencies": { 1544 | "reusify": "^1.0.4" 1545 | } 1546 | }, 1547 | "node_modules/file-entry-cache": { 1548 | "version": "6.0.1", 1549 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1550 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1551 | "dev": true, 1552 | "license": "MIT", 1553 | "dependencies": { 1554 | "flat-cache": "^3.0.4" 1555 | }, 1556 | "engines": { 1557 | "node": "^10.12.0 || >=12.0.0" 1558 | } 1559 | }, 1560 | "node_modules/fill-range": { 1561 | "version": "7.1.1", 1562 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1563 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1564 | "dev": true, 1565 | "dependencies": { 1566 | "to-regex-range": "^5.0.1" 1567 | }, 1568 | "engines": { 1569 | "node": ">=8" 1570 | } 1571 | }, 1572 | "node_modules/find-up": { 1573 | "version": "5.0.0", 1574 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1575 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1576 | "dev": true, 1577 | "license": "MIT", 1578 | "dependencies": { 1579 | "locate-path": "^6.0.0", 1580 | "path-exists": "^4.0.0" 1581 | }, 1582 | "engines": { 1583 | "node": ">=10" 1584 | }, 1585 | "funding": { 1586 | "url": "https://github.com/sponsors/sindresorhus" 1587 | } 1588 | }, 1589 | "node_modules/flat-cache": { 1590 | "version": "3.0.4", 1591 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1592 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1593 | "dev": true, 1594 | "license": "MIT", 1595 | "dependencies": { 1596 | "flatted": "^3.1.0", 1597 | "rimraf": "^3.0.2" 1598 | }, 1599 | "engines": { 1600 | "node": "^10.12.0 || >=12.0.0" 1601 | } 1602 | }, 1603 | "node_modules/flatted": { 1604 | "version": "3.2.7", 1605 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", 1606 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", 1607 | "dev": true, 1608 | "license": "ISC" 1609 | }, 1610 | "node_modules/fs.realpath": { 1611 | "version": "1.0.0", 1612 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1613 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1614 | "dev": true, 1615 | "license": "ISC" 1616 | }, 1617 | "node_modules/fsevents": { 1618 | "version": "2.3.2", 1619 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1620 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1621 | "dev": true, 1622 | "license": "MIT", 1623 | "optional": true, 1624 | "os": [ 1625 | "darwin" 1626 | ], 1627 | "engines": { 1628 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1629 | } 1630 | }, 1631 | "node_modules/get-stream": { 1632 | "version": "6.0.1", 1633 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 1634 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 1635 | "dev": true, 1636 | "license": "MIT", 1637 | "engines": { 1638 | "node": ">=10" 1639 | }, 1640 | "funding": { 1641 | "url": "https://github.com/sponsors/sindresorhus" 1642 | } 1643 | }, 1644 | "node_modules/glob": { 1645 | "version": "7.2.3", 1646 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1647 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1648 | "dev": true, 1649 | "license": "ISC", 1650 | "dependencies": { 1651 | "fs.realpath": "^1.0.0", 1652 | "inflight": "^1.0.4", 1653 | "inherits": "2", 1654 | "minimatch": "^3.1.1", 1655 | "once": "^1.3.0", 1656 | "path-is-absolute": "^1.0.0" 1657 | }, 1658 | "engines": { 1659 | "node": "*" 1660 | }, 1661 | "funding": { 1662 | "url": "https://github.com/sponsors/isaacs" 1663 | } 1664 | }, 1665 | "node_modules/glob-parent": { 1666 | "version": "5.1.2", 1667 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1668 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1669 | "dev": true, 1670 | "license": "ISC", 1671 | "dependencies": { 1672 | "is-glob": "^4.0.1" 1673 | }, 1674 | "engines": { 1675 | "node": ">= 6" 1676 | } 1677 | }, 1678 | "node_modules/globals": { 1679 | "version": "13.19.0", 1680 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", 1681 | "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", 1682 | "dev": true, 1683 | "license": "MIT", 1684 | "dependencies": { 1685 | "type-fest": "^0.20.2" 1686 | }, 1687 | "engines": { 1688 | "node": ">=8" 1689 | }, 1690 | "funding": { 1691 | "url": "https://github.com/sponsors/sindresorhus" 1692 | } 1693 | }, 1694 | "node_modules/globalyzer": { 1695 | "version": "0.1.0", 1696 | "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", 1697 | "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", 1698 | "dev": true, 1699 | "license": "MIT" 1700 | }, 1701 | "node_modules/globrex": { 1702 | "version": "0.1.2", 1703 | "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", 1704 | "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", 1705 | "dev": true, 1706 | "license": "MIT" 1707 | }, 1708 | "node_modules/graceful-fs": { 1709 | "version": "4.2.10", 1710 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 1711 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 1712 | "dev": true, 1713 | "license": "ISC" 1714 | }, 1715 | "node_modules/grapheme-splitter": { 1716 | "version": "1.0.4", 1717 | "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", 1718 | "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", 1719 | "dev": true, 1720 | "license": "MIT" 1721 | }, 1722 | "node_modules/has-flag": { 1723 | "version": "4.0.0", 1724 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1725 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1726 | "dev": true, 1727 | "license": "MIT", 1728 | "engines": { 1729 | "node": ">=8" 1730 | } 1731 | }, 1732 | "node_modules/human-signals": { 1733 | "version": "3.0.1", 1734 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", 1735 | "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", 1736 | "dev": true, 1737 | "license": "Apache-2.0", 1738 | "engines": { 1739 | "node": ">=12.20.0" 1740 | } 1741 | }, 1742 | "node_modules/husky": { 1743 | "version": "8.0.3", 1744 | "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", 1745 | "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", 1746 | "dev": true, 1747 | "license": "MIT", 1748 | "bin": { 1749 | "husky": "lib/bin.js" 1750 | }, 1751 | "engines": { 1752 | "node": ">=14" 1753 | }, 1754 | "funding": { 1755 | "url": "https://github.com/sponsors/typicode" 1756 | } 1757 | }, 1758 | "node_modules/ignore": { 1759 | "version": "5.2.4", 1760 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", 1761 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 1762 | "dev": true, 1763 | "license": "MIT", 1764 | "engines": { 1765 | "node": ">= 4" 1766 | } 1767 | }, 1768 | "node_modules/import-fresh": { 1769 | "version": "3.3.0", 1770 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1771 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1772 | "dev": true, 1773 | "license": "MIT", 1774 | "dependencies": { 1775 | "parent-module": "^1.0.0", 1776 | "resolve-from": "^4.0.0" 1777 | }, 1778 | "engines": { 1779 | "node": ">=6" 1780 | }, 1781 | "funding": { 1782 | "url": "https://github.com/sponsors/sindresorhus" 1783 | } 1784 | }, 1785 | "node_modules/import-meta-resolve": { 1786 | "version": "2.2.1", 1787 | "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.1.tgz", 1788 | "integrity": "sha512-C6lLL7EJPY44kBvA80gq4uMsVFw5x3oSKfuMl1cuZ2RkI5+UJqQXgn+6hlUew0y4ig7Ypt4CObAAIzU53Nfpuw==", 1789 | "dev": true, 1790 | "license": "MIT", 1791 | "funding": { 1792 | "type": "github", 1793 | "url": "https://github.com/sponsors/wooorm" 1794 | } 1795 | }, 1796 | "node_modules/imurmurhash": { 1797 | "version": "0.1.4", 1798 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1799 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1800 | "dev": true, 1801 | "license": "MIT", 1802 | "engines": { 1803 | "node": ">=0.8.19" 1804 | } 1805 | }, 1806 | "node_modules/indent-string": { 1807 | "version": "4.0.0", 1808 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 1809 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 1810 | "dev": true, 1811 | "license": "MIT", 1812 | "engines": { 1813 | "node": ">=8" 1814 | } 1815 | }, 1816 | "node_modules/inflight": { 1817 | "version": "1.0.6", 1818 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1819 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1820 | "dev": true, 1821 | "license": "ISC", 1822 | "dependencies": { 1823 | "once": "^1.3.0", 1824 | "wrappy": "1" 1825 | } 1826 | }, 1827 | "node_modules/inherits": { 1828 | "version": "2.0.4", 1829 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1830 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1831 | "dev": true, 1832 | "license": "ISC" 1833 | }, 1834 | "node_modules/is-binary-path": { 1835 | "version": "2.1.0", 1836 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1837 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1838 | "dev": true, 1839 | "license": "MIT", 1840 | "dependencies": { 1841 | "binary-extensions": "^2.0.0" 1842 | }, 1843 | "engines": { 1844 | "node": ">=8" 1845 | } 1846 | }, 1847 | "node_modules/is-extglob": { 1848 | "version": "2.1.1", 1849 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1850 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1851 | "dev": true, 1852 | "license": "MIT", 1853 | "engines": { 1854 | "node": ">=0.10.0" 1855 | } 1856 | }, 1857 | "node_modules/is-fullwidth-code-point": { 1858 | "version": "3.0.0", 1859 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1860 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1861 | "dev": true, 1862 | "license": "MIT", 1863 | "engines": { 1864 | "node": ">=8" 1865 | } 1866 | }, 1867 | "node_modules/is-glob": { 1868 | "version": "4.0.3", 1869 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1870 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1871 | "dev": true, 1872 | "license": "MIT", 1873 | "dependencies": { 1874 | "is-extglob": "^2.1.1" 1875 | }, 1876 | "engines": { 1877 | "node": ">=0.10.0" 1878 | } 1879 | }, 1880 | "node_modules/is-number": { 1881 | "version": "7.0.0", 1882 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1883 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1884 | "dev": true, 1885 | "engines": { 1886 | "node": ">=0.12.0" 1887 | } 1888 | }, 1889 | "node_modules/is-path-inside": { 1890 | "version": "3.0.3", 1891 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1892 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1893 | "dev": true, 1894 | "license": "MIT", 1895 | "engines": { 1896 | "node": ">=8" 1897 | } 1898 | }, 1899 | "node_modules/is-stream": { 1900 | "version": "3.0.0", 1901 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", 1902 | "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", 1903 | "dev": true, 1904 | "license": "MIT", 1905 | "engines": { 1906 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1907 | }, 1908 | "funding": { 1909 | "url": "https://github.com/sponsors/sindresorhus" 1910 | } 1911 | }, 1912 | "node_modules/isexe": { 1913 | "version": "2.0.0", 1914 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1915 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1916 | "dev": true, 1917 | "license": "ISC" 1918 | }, 1919 | "node_modules/js-sdsl": { 1920 | "version": "4.3.0", 1921 | "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", 1922 | "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", 1923 | "dev": true, 1924 | "license": "MIT", 1925 | "funding": { 1926 | "type": "opencollective", 1927 | "url": "https://opencollective.com/js-sdsl" 1928 | } 1929 | }, 1930 | "node_modules/js-yaml": { 1931 | "version": "4.1.0", 1932 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1933 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1934 | "dev": true, 1935 | "license": "MIT", 1936 | "dependencies": { 1937 | "argparse": "^2.0.1" 1938 | }, 1939 | "bin": { 1940 | "js-yaml": "bin/js-yaml.js" 1941 | } 1942 | }, 1943 | "node_modules/json-schema-traverse": { 1944 | "version": "0.4.1", 1945 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1946 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1947 | "dev": true, 1948 | "license": "MIT" 1949 | }, 1950 | "node_modules/json-stable-stringify-without-jsonify": { 1951 | "version": "1.0.1", 1952 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1953 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 1954 | "dev": true, 1955 | "license": "MIT" 1956 | }, 1957 | "node_modules/kleur": { 1958 | "version": "4.1.5", 1959 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 1960 | "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 1961 | "dev": true, 1962 | "license": "MIT", 1963 | "engines": { 1964 | "node": ">=6" 1965 | } 1966 | }, 1967 | "node_modules/levn": { 1968 | "version": "0.4.1", 1969 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1970 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1971 | "dev": true, 1972 | "license": "MIT", 1973 | "dependencies": { 1974 | "prelude-ls": "^1.2.1", 1975 | "type-check": "~0.4.0" 1976 | }, 1977 | "engines": { 1978 | "node": ">= 0.8.0" 1979 | } 1980 | }, 1981 | "node_modules/lilconfig": { 1982 | "version": "2.0.6", 1983 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", 1984 | "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", 1985 | "dev": true, 1986 | "license": "MIT", 1987 | "engines": { 1988 | "node": ">=10" 1989 | } 1990 | }, 1991 | "node_modules/lint-staged": { 1992 | "version": "13.1.0", 1993 | "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.0.tgz", 1994 | "integrity": "sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ==", 1995 | "dev": true, 1996 | "license": "MIT", 1997 | "dependencies": { 1998 | "cli-truncate": "^3.1.0", 1999 | "colorette": "^2.0.19", 2000 | "commander": "^9.4.1", 2001 | "debug": "^4.3.4", 2002 | "execa": "^6.1.0", 2003 | "lilconfig": "2.0.6", 2004 | "listr2": "^5.0.5", 2005 | "micromatch": "^4.0.5", 2006 | "normalize-path": "^3.0.0", 2007 | "object-inspect": "^1.12.2", 2008 | "pidtree": "^0.6.0", 2009 | "string-argv": "^0.3.1", 2010 | "yaml": "^2.1.3" 2011 | }, 2012 | "bin": { 2013 | "lint-staged": "bin/lint-staged.js" 2014 | }, 2015 | "engines": { 2016 | "node": "^14.13.1 || >=16.0.0" 2017 | }, 2018 | "funding": { 2019 | "url": "https://opencollective.com/lint-staged" 2020 | } 2021 | }, 2022 | "node_modules/listr2": { 2023 | "version": "5.0.7", 2024 | "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.7.tgz", 2025 | "integrity": "sha512-MD+qXHPmtivrHIDRwPYdfNkrzqDiuaKU/rfBcec3WMyMF3xylQj3jMq344OtvQxz7zaCFViRAeqlr2AFhPvXHw==", 2026 | "dev": true, 2027 | "license": "MIT", 2028 | "dependencies": { 2029 | "cli-truncate": "^2.1.0", 2030 | "colorette": "^2.0.19", 2031 | "log-update": "^4.0.0", 2032 | "p-map": "^4.0.0", 2033 | "rfdc": "^1.3.0", 2034 | "rxjs": "^7.8.0", 2035 | "through": "^2.3.8", 2036 | "wrap-ansi": "^7.0.0" 2037 | }, 2038 | "engines": { 2039 | "node": "^14.13.1 || >=16.0.0" 2040 | }, 2041 | "peerDependencies": { 2042 | "enquirer": ">= 2.3.0 < 3" 2043 | }, 2044 | "peerDependenciesMeta": { 2045 | "enquirer": { 2046 | "optional": true 2047 | } 2048 | } 2049 | }, 2050 | "node_modules/listr2/node_modules/cli-truncate": { 2051 | "version": "2.1.0", 2052 | "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", 2053 | "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", 2054 | "dev": true, 2055 | "license": "MIT", 2056 | "dependencies": { 2057 | "slice-ansi": "^3.0.0", 2058 | "string-width": "^4.2.0" 2059 | }, 2060 | "engines": { 2061 | "node": ">=8" 2062 | }, 2063 | "funding": { 2064 | "url": "https://github.com/sponsors/sindresorhus" 2065 | } 2066 | }, 2067 | "node_modules/listr2/node_modules/slice-ansi": { 2068 | "version": "3.0.0", 2069 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", 2070 | "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", 2071 | "dev": true, 2072 | "license": "MIT", 2073 | "dependencies": { 2074 | "ansi-styles": "^4.0.0", 2075 | "astral-regex": "^2.0.0", 2076 | "is-fullwidth-code-point": "^3.0.0" 2077 | }, 2078 | "engines": { 2079 | "node": ">=8" 2080 | } 2081 | }, 2082 | "node_modules/locate-path": { 2083 | "version": "6.0.0", 2084 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2085 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2086 | "dev": true, 2087 | "license": "MIT", 2088 | "dependencies": { 2089 | "p-locate": "^5.0.0" 2090 | }, 2091 | "engines": { 2092 | "node": ">=10" 2093 | }, 2094 | "funding": { 2095 | "url": "https://github.com/sponsors/sindresorhus" 2096 | } 2097 | }, 2098 | "node_modules/lodash.merge": { 2099 | "version": "4.6.2", 2100 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2101 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2102 | "dev": true, 2103 | "license": "MIT" 2104 | }, 2105 | "node_modules/log-update": { 2106 | "version": "4.0.0", 2107 | "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", 2108 | "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", 2109 | "dev": true, 2110 | "license": "MIT", 2111 | "dependencies": { 2112 | "ansi-escapes": "^4.3.0", 2113 | "cli-cursor": "^3.1.0", 2114 | "slice-ansi": "^4.0.0", 2115 | "wrap-ansi": "^6.2.0" 2116 | }, 2117 | "engines": { 2118 | "node": ">=10" 2119 | }, 2120 | "funding": { 2121 | "url": "https://github.com/sponsors/sindresorhus" 2122 | } 2123 | }, 2124 | "node_modules/log-update/node_modules/slice-ansi": { 2125 | "version": "4.0.0", 2126 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 2127 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 2128 | "dev": true, 2129 | "license": "MIT", 2130 | "dependencies": { 2131 | "ansi-styles": "^4.0.0", 2132 | "astral-regex": "^2.0.0", 2133 | "is-fullwidth-code-point": "^3.0.0" 2134 | }, 2135 | "engines": { 2136 | "node": ">=10" 2137 | }, 2138 | "funding": { 2139 | "url": "https://github.com/chalk/slice-ansi?sponsor=1" 2140 | } 2141 | }, 2142 | "node_modules/log-update/node_modules/wrap-ansi": { 2143 | "version": "6.2.0", 2144 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 2145 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 2146 | "dev": true, 2147 | "license": "MIT", 2148 | "dependencies": { 2149 | "ansi-styles": "^4.0.0", 2150 | "string-width": "^4.1.0", 2151 | "strip-ansi": "^6.0.0" 2152 | }, 2153 | "engines": { 2154 | "node": ">=8" 2155 | } 2156 | }, 2157 | "node_modules/lower-case": { 2158 | "version": "2.0.2", 2159 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", 2160 | "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", 2161 | "dev": true, 2162 | "license": "MIT", 2163 | "dependencies": { 2164 | "tslib": "^2.0.3" 2165 | } 2166 | }, 2167 | "node_modules/magic-string": { 2168 | "version": "0.27.0", 2169 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", 2170 | "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", 2171 | "dev": true, 2172 | "license": "MIT", 2173 | "dependencies": { 2174 | "@jridgewell/sourcemap-codec": "^1.4.13" 2175 | }, 2176 | "engines": { 2177 | "node": ">=12" 2178 | } 2179 | }, 2180 | "node_modules/merge-stream": { 2181 | "version": "2.0.0", 2182 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 2183 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 2184 | "dev": true, 2185 | "license": "MIT" 2186 | }, 2187 | "node_modules/merge2": { 2188 | "version": "1.4.1", 2189 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2190 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2191 | "dev": true, 2192 | "license": "MIT", 2193 | "engines": { 2194 | "node": ">= 8" 2195 | } 2196 | }, 2197 | "node_modules/micromatch": { 2198 | "version": "4.0.5", 2199 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2200 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2201 | "dev": true, 2202 | "license": "MIT", 2203 | "dependencies": { 2204 | "braces": "^3.0.2", 2205 | "picomatch": "^2.3.1" 2206 | }, 2207 | "engines": { 2208 | "node": ">=8.6" 2209 | } 2210 | }, 2211 | "node_modules/mimic-fn": { 2212 | "version": "4.0.0", 2213 | "dev": true, 2214 | "license": "MIT", 2215 | "engines": { 2216 | "node": ">=12" 2217 | }, 2218 | "funding": { 2219 | "url": "https://github.com/sponsors/sindresorhus" 2220 | } 2221 | }, 2222 | "node_modules/min-indent": { 2223 | "version": "1.0.1", 2224 | "dev": true, 2225 | "license": "MIT", 2226 | "engines": { 2227 | "node": ">=4" 2228 | } 2229 | }, 2230 | "node_modules/minimatch": { 2231 | "version": "3.1.2", 2232 | "dev": true, 2233 | "license": "ISC", 2234 | "dependencies": { 2235 | "brace-expansion": "^1.1.7" 2236 | }, 2237 | "engines": { 2238 | "node": "*" 2239 | } 2240 | }, 2241 | "node_modules/minimist": { 2242 | "version": "1.2.7", 2243 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 2244 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", 2245 | "dev": true, 2246 | "license": "MIT", 2247 | "funding": { 2248 | "url": "https://github.com/sponsors/ljharb" 2249 | } 2250 | }, 2251 | "node_modules/mkdirp": { 2252 | "version": "0.5.6", 2253 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", 2254 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 2255 | "dev": true, 2256 | "license": "MIT", 2257 | "dependencies": { 2258 | "minimist": "^1.2.6" 2259 | }, 2260 | "bin": { 2261 | "mkdirp": "bin/cmd.js" 2262 | } 2263 | }, 2264 | "node_modules/mri": { 2265 | "version": "1.2.0", 2266 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 2267 | "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 2268 | "dev": true, 2269 | "license": "MIT", 2270 | "engines": { 2271 | "node": ">=4" 2272 | } 2273 | }, 2274 | "node_modules/mrmime": { 2275 | "version": "1.0.1", 2276 | "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", 2277 | "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", 2278 | "dev": true, 2279 | "license": "MIT", 2280 | "engines": { 2281 | "node": ">=10" 2282 | } 2283 | }, 2284 | "node_modules/ms": { 2285 | "version": "2.1.2", 2286 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2287 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2288 | "dev": true, 2289 | "license": "MIT" 2290 | }, 2291 | "node_modules/nanoid": { 2292 | "version": "3.3.6", 2293 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 2294 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 2295 | "dev": true, 2296 | "funding": [ 2297 | { 2298 | "type": "github", 2299 | "url": "https://github.com/sponsors/ai" 2300 | } 2301 | ], 2302 | "bin": { 2303 | "nanoid": "bin/nanoid.cjs" 2304 | }, 2305 | "engines": { 2306 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2307 | } 2308 | }, 2309 | "node_modules/natural-compare": { 2310 | "version": "1.4.0", 2311 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2312 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2313 | "dev": true, 2314 | "license": "MIT" 2315 | }, 2316 | "node_modules/no-case": { 2317 | "version": "3.0.4", 2318 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", 2319 | "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", 2320 | "dev": true, 2321 | "license": "MIT", 2322 | "dependencies": { 2323 | "lower-case": "^2.0.2", 2324 | "tslib": "^2.0.3" 2325 | } 2326 | }, 2327 | "node_modules/normalize-path": { 2328 | "version": "3.0.0", 2329 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2330 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2331 | "dev": true, 2332 | "license": "MIT", 2333 | "engines": { 2334 | "node": ">=0.10.0" 2335 | } 2336 | }, 2337 | "node_modules/npm-run-path": { 2338 | "version": "5.1.0", 2339 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", 2340 | "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", 2341 | "dev": true, 2342 | "license": "MIT", 2343 | "dependencies": { 2344 | "path-key": "^4.0.0" 2345 | }, 2346 | "engines": { 2347 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2348 | }, 2349 | "funding": { 2350 | "url": "https://github.com/sponsors/sindresorhus" 2351 | } 2352 | }, 2353 | "node_modules/npm-run-path/node_modules/path-key": { 2354 | "version": "4.0.0", 2355 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", 2356 | "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", 2357 | "dev": true, 2358 | "license": "MIT", 2359 | "engines": { 2360 | "node": ">=12" 2361 | }, 2362 | "funding": { 2363 | "url": "https://github.com/sponsors/sindresorhus" 2364 | } 2365 | }, 2366 | "node_modules/object-inspect": { 2367 | "version": "1.12.3", 2368 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 2369 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 2370 | "dev": true, 2371 | "license": "MIT", 2372 | "funding": { 2373 | "url": "https://github.com/sponsors/ljharb" 2374 | } 2375 | }, 2376 | "node_modules/once": { 2377 | "version": "1.4.0", 2378 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2379 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2380 | "dev": true, 2381 | "license": "ISC", 2382 | "dependencies": { 2383 | "wrappy": "1" 2384 | } 2385 | }, 2386 | "node_modules/onetime": { 2387 | "version": "6.0.0", 2388 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", 2389 | "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", 2390 | "dev": true, 2391 | "license": "MIT", 2392 | "dependencies": { 2393 | "mimic-fn": "^4.0.0" 2394 | }, 2395 | "engines": { 2396 | "node": ">=12" 2397 | }, 2398 | "funding": { 2399 | "url": "https://github.com/sponsors/sindresorhus" 2400 | } 2401 | }, 2402 | "node_modules/optionator": { 2403 | "version": "0.9.1", 2404 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 2405 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 2406 | "dev": true, 2407 | "license": "MIT", 2408 | "dependencies": { 2409 | "deep-is": "^0.1.3", 2410 | "fast-levenshtein": "^2.0.6", 2411 | "levn": "^0.4.1", 2412 | "prelude-ls": "^1.2.1", 2413 | "type-check": "^0.4.0", 2414 | "word-wrap": "^1.2.3" 2415 | }, 2416 | "engines": { 2417 | "node": ">= 0.8.0" 2418 | } 2419 | }, 2420 | "node_modules/p-limit": { 2421 | "version": "3.1.0", 2422 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2423 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2424 | "dev": true, 2425 | "license": "MIT", 2426 | "dependencies": { 2427 | "yocto-queue": "^0.1.0" 2428 | }, 2429 | "engines": { 2430 | "node": ">=10" 2431 | }, 2432 | "funding": { 2433 | "url": "https://github.com/sponsors/sindresorhus" 2434 | } 2435 | }, 2436 | "node_modules/p-locate": { 2437 | "version": "5.0.0", 2438 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2439 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2440 | "dev": true, 2441 | "license": "MIT", 2442 | "dependencies": { 2443 | "p-limit": "^3.0.2" 2444 | }, 2445 | "engines": { 2446 | "node": ">=10" 2447 | }, 2448 | "funding": { 2449 | "url": "https://github.com/sponsors/sindresorhus" 2450 | } 2451 | }, 2452 | "node_modules/p-map": { 2453 | "version": "4.0.0", 2454 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", 2455 | "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", 2456 | "dev": true, 2457 | "license": "MIT", 2458 | "dependencies": { 2459 | "aggregate-error": "^3.0.0" 2460 | }, 2461 | "engines": { 2462 | "node": ">=10" 2463 | }, 2464 | "funding": { 2465 | "url": "https://github.com/sponsors/sindresorhus" 2466 | } 2467 | }, 2468 | "node_modules/parent-module": { 2469 | "version": "1.0.1", 2470 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2471 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2472 | "dev": true, 2473 | "license": "MIT", 2474 | "dependencies": { 2475 | "callsites": "^3.0.0" 2476 | }, 2477 | "engines": { 2478 | "node": ">=6" 2479 | } 2480 | }, 2481 | "node_modules/pascal-case": { 2482 | "version": "3.1.2", 2483 | "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", 2484 | "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", 2485 | "dev": true, 2486 | "license": "MIT", 2487 | "dependencies": { 2488 | "no-case": "^3.0.4", 2489 | "tslib": "^2.0.3" 2490 | } 2491 | }, 2492 | "node_modules/path-exists": { 2493 | "version": "4.0.0", 2494 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2495 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2496 | "dev": true, 2497 | "license": "MIT", 2498 | "engines": { 2499 | "node": ">=8" 2500 | } 2501 | }, 2502 | "node_modules/path-is-absolute": { 2503 | "version": "1.0.1", 2504 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2505 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2506 | "dev": true, 2507 | "license": "MIT", 2508 | "engines": { 2509 | "node": ">=0.10.0" 2510 | } 2511 | }, 2512 | "node_modules/path-key": { 2513 | "version": "3.1.1", 2514 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2515 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2516 | "dev": true, 2517 | "license": "MIT", 2518 | "engines": { 2519 | "node": ">=8" 2520 | } 2521 | }, 2522 | "node_modules/picocolors": { 2523 | "version": "1.0.0", 2524 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2525 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 2526 | "dev": true, 2527 | "license": "ISC" 2528 | }, 2529 | "node_modules/picomatch": { 2530 | "version": "2.3.1", 2531 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2532 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2533 | "dev": true, 2534 | "license": "MIT", 2535 | "engines": { 2536 | "node": ">=8.6" 2537 | }, 2538 | "funding": { 2539 | "url": "https://github.com/sponsors/jonschlinkert" 2540 | } 2541 | }, 2542 | "node_modules/pidtree": { 2543 | "version": "0.6.0", 2544 | "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", 2545 | "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", 2546 | "dev": true, 2547 | "license": "MIT", 2548 | "bin": { 2549 | "pidtree": "bin/pidtree.js" 2550 | }, 2551 | "engines": { 2552 | "node": ">=0.10" 2553 | } 2554 | }, 2555 | "node_modules/playwright-core": { 2556 | "version": "1.29.2", 2557 | "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.29.2.tgz", 2558 | "integrity": "sha512-94QXm4PMgFoHAhlCuoWyaBYKb92yOcGVHdQLoxQ7Wjlc7Flg4aC/jbFW7xMR52OfXMVkWicue4WXE7QEegbIRA==", 2559 | "dev": true, 2560 | "license": "Apache-2.0", 2561 | "bin": { 2562 | "playwright": "cli.js" 2563 | }, 2564 | "engines": { 2565 | "node": ">=14" 2566 | } 2567 | }, 2568 | "node_modules/postcss": { 2569 | "version": "8.4.31", 2570 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", 2571 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", 2572 | "dev": true, 2573 | "funding": [ 2574 | { 2575 | "type": "opencollective", 2576 | "url": "https://opencollective.com/postcss/" 2577 | }, 2578 | { 2579 | "type": "tidelift", 2580 | "url": "https://tidelift.com/funding/github/npm/postcss" 2581 | }, 2582 | { 2583 | "type": "github", 2584 | "url": "https://github.com/sponsors/ai" 2585 | } 2586 | ], 2587 | "dependencies": { 2588 | "nanoid": "^3.3.6", 2589 | "picocolors": "^1.0.0", 2590 | "source-map-js": "^1.0.2" 2591 | }, 2592 | "engines": { 2593 | "node": "^10 || ^12 || >=14" 2594 | } 2595 | }, 2596 | "node_modules/prelude-ls": { 2597 | "version": "1.2.1", 2598 | "dev": true, 2599 | "license": "MIT", 2600 | "engines": { 2601 | "node": ">= 0.8.0" 2602 | } 2603 | }, 2604 | "node_modules/prettier": { 2605 | "version": "2.8.3", 2606 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.3.tgz", 2607 | "integrity": "sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==", 2608 | "dev": true, 2609 | "license": "MIT", 2610 | "bin": { 2611 | "prettier": "bin-prettier.js" 2612 | }, 2613 | "engines": { 2614 | "node": ">=10.13.0" 2615 | }, 2616 | "funding": { 2617 | "url": "https://github.com/prettier/prettier?sponsor=1" 2618 | } 2619 | }, 2620 | "node_modules/prettier-plugin-svelte": { 2621 | "version": "2.9.0", 2622 | "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.9.0.tgz", 2623 | "integrity": "sha512-3doBi5NO4IVgaNPtwewvrgPpqAcvNv0NwJNflr76PIGgi9nf1oguQV1Hpdm9TI2ALIQVn/9iIwLpBO5UcD2Jiw==", 2624 | "dev": true, 2625 | "license": "MIT", 2626 | "peerDependencies": { 2627 | "prettier": "^1.16.4 || ^2.0.0", 2628 | "svelte": "^3.2.0" 2629 | } 2630 | }, 2631 | "node_modules/punycode": { 2632 | "version": "2.3.0", 2633 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 2634 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 2635 | "dev": true, 2636 | "license": "MIT", 2637 | "engines": { 2638 | "node": ">=6" 2639 | } 2640 | }, 2641 | "node_modules/queue-microtask": { 2642 | "version": "1.2.3", 2643 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2644 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2645 | "dev": true, 2646 | "funding": [ 2647 | { 2648 | "type": "github", 2649 | "url": "https://github.com/sponsors/feross" 2650 | }, 2651 | { 2652 | "type": "patreon", 2653 | "url": "https://www.patreon.com/feross" 2654 | }, 2655 | { 2656 | "type": "consulting", 2657 | "url": "https://feross.org/support" 2658 | } 2659 | ], 2660 | "license": "MIT" 2661 | }, 2662 | "node_modules/readdirp": { 2663 | "version": "3.6.0", 2664 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2665 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2666 | "dev": true, 2667 | "license": "MIT", 2668 | "dependencies": { 2669 | "picomatch": "^2.2.1" 2670 | }, 2671 | "engines": { 2672 | "node": ">=8.10.0" 2673 | } 2674 | }, 2675 | "node_modules/regexpp": { 2676 | "version": "3.2.0", 2677 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 2678 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 2679 | "dev": true, 2680 | "license": "MIT", 2681 | "engines": { 2682 | "node": ">=8" 2683 | }, 2684 | "funding": { 2685 | "url": "https://github.com/sponsors/mysticatea" 2686 | } 2687 | }, 2688 | "node_modules/resolve-from": { 2689 | "version": "4.0.0", 2690 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2691 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2692 | "dev": true, 2693 | "license": "MIT", 2694 | "engines": { 2695 | "node": ">=4" 2696 | } 2697 | }, 2698 | "node_modules/restore-cursor": { 2699 | "version": "3.1.0", 2700 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 2701 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 2702 | "dev": true, 2703 | "license": "MIT", 2704 | "dependencies": { 2705 | "onetime": "^5.1.0", 2706 | "signal-exit": "^3.0.2" 2707 | }, 2708 | "engines": { 2709 | "node": ">=8" 2710 | } 2711 | }, 2712 | "node_modules/restore-cursor/node_modules/mimic-fn": { 2713 | "version": "2.1.0", 2714 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 2715 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 2716 | "dev": true, 2717 | "license": "MIT", 2718 | "engines": { 2719 | "node": ">=6" 2720 | } 2721 | }, 2722 | "node_modules/restore-cursor/node_modules/onetime": { 2723 | "version": "5.1.2", 2724 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 2725 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 2726 | "dev": true, 2727 | "license": "MIT", 2728 | "dependencies": { 2729 | "mimic-fn": "^2.1.0" 2730 | }, 2731 | "engines": { 2732 | "node": ">=6" 2733 | }, 2734 | "funding": { 2735 | "url": "https://github.com/sponsors/sindresorhus" 2736 | } 2737 | }, 2738 | "node_modules/reusify": { 2739 | "version": "1.0.4", 2740 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2741 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2742 | "dev": true, 2743 | "license": "MIT", 2744 | "engines": { 2745 | "iojs": ">=1.0.0", 2746 | "node": ">=0.10.0" 2747 | } 2748 | }, 2749 | "node_modules/rfdc": { 2750 | "version": "1.3.0", 2751 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", 2752 | "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", 2753 | "dev": true, 2754 | "license": "MIT" 2755 | }, 2756 | "node_modules/rimraf": { 2757 | "version": "3.0.2", 2758 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2759 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2760 | "dev": true, 2761 | "license": "ISC", 2762 | "dependencies": { 2763 | "glob": "^7.1.3" 2764 | }, 2765 | "bin": { 2766 | "rimraf": "bin.js" 2767 | }, 2768 | "funding": { 2769 | "url": "https://github.com/sponsors/isaacs" 2770 | } 2771 | }, 2772 | "node_modules/rollup": { 2773 | "version": "3.29.4", 2774 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", 2775 | "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", 2776 | "dev": true, 2777 | "bin": { 2778 | "rollup": "dist/bin/rollup" 2779 | }, 2780 | "engines": { 2781 | "node": ">=14.18.0", 2782 | "npm": ">=8.0.0" 2783 | }, 2784 | "optionalDependencies": { 2785 | "fsevents": "~2.3.2" 2786 | } 2787 | }, 2788 | "node_modules/run-parallel": { 2789 | "version": "1.2.0", 2790 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2791 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2792 | "dev": true, 2793 | "funding": [ 2794 | { 2795 | "type": "github", 2796 | "url": "https://github.com/sponsors/feross" 2797 | }, 2798 | { 2799 | "type": "patreon", 2800 | "url": "https://www.patreon.com/feross" 2801 | }, 2802 | { 2803 | "type": "consulting", 2804 | "url": "https://feross.org/support" 2805 | } 2806 | ], 2807 | "license": "MIT", 2808 | "dependencies": { 2809 | "queue-microtask": "^1.2.2" 2810 | } 2811 | }, 2812 | "node_modules/rxjs": { 2813 | "version": "7.8.0", 2814 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", 2815 | "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", 2816 | "dev": true, 2817 | "license": "Apache-2.0", 2818 | "dependencies": { 2819 | "tslib": "^2.1.0" 2820 | } 2821 | }, 2822 | "node_modules/sade": { 2823 | "version": "1.8.1", 2824 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 2825 | "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 2826 | "dev": true, 2827 | "license": "MIT", 2828 | "dependencies": { 2829 | "mri": "^1.1.0" 2830 | }, 2831 | "engines": { 2832 | "node": ">=6" 2833 | } 2834 | }, 2835 | "node_modules/sander": { 2836 | "version": "0.5.1", 2837 | "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", 2838 | "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", 2839 | "dev": true, 2840 | "license": "MIT", 2841 | "dependencies": { 2842 | "es6-promise": "^3.1.2", 2843 | "graceful-fs": "^4.1.3", 2844 | "mkdirp": "^0.5.1", 2845 | "rimraf": "^2.5.2" 2846 | } 2847 | }, 2848 | "node_modules/sander/node_modules/rimraf": { 2849 | "version": "2.7.1", 2850 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 2851 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 2852 | "dev": true, 2853 | "license": "ISC", 2854 | "dependencies": { 2855 | "glob": "^7.1.3" 2856 | }, 2857 | "bin": { 2858 | "rimraf": "bin.js" 2859 | } 2860 | }, 2861 | "node_modules/schema-dts": { 2862 | "version": "1.1.2", 2863 | "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.2.tgz", 2864 | "integrity": "sha512-MpNwH0dZJHinVxk9bT8XUdjKTxMYrA5bLtrrGmFA6PTLwlOKnhi67XoRd6/ty+Djt6ZC0slR57qFhZDNMI6DhQ==", 2865 | "peerDependencies": { 2866 | "typescript": ">=4.1.0" 2867 | } 2868 | }, 2869 | "node_modules/set-cookie-parser": { 2870 | "version": "2.6.0", 2871 | "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", 2872 | "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", 2873 | "dev": true 2874 | }, 2875 | "node_modules/shebang-command": { 2876 | "version": "2.0.0", 2877 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2878 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2879 | "dev": true, 2880 | "license": "MIT", 2881 | "dependencies": { 2882 | "shebang-regex": "^3.0.0" 2883 | }, 2884 | "engines": { 2885 | "node": ">=8" 2886 | } 2887 | }, 2888 | "node_modules/shebang-regex": { 2889 | "version": "3.0.0", 2890 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2891 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2892 | "dev": true, 2893 | "license": "MIT", 2894 | "engines": { 2895 | "node": ">=8" 2896 | } 2897 | }, 2898 | "node_modules/signal-exit": { 2899 | "version": "3.0.7", 2900 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2901 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 2902 | "dev": true, 2903 | "license": "ISC" 2904 | }, 2905 | "node_modules/sirv": { 2906 | "version": "2.0.2", 2907 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", 2908 | "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", 2909 | "dev": true, 2910 | "license": "MIT", 2911 | "dependencies": { 2912 | "@polka/url": "^1.0.0-next.20", 2913 | "mrmime": "^1.0.0", 2914 | "totalist": "^3.0.0" 2915 | }, 2916 | "engines": { 2917 | "node": ">= 10" 2918 | } 2919 | }, 2920 | "node_modules/slice-ansi": { 2921 | "version": "5.0.0", 2922 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", 2923 | "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", 2924 | "dev": true, 2925 | "license": "MIT", 2926 | "dependencies": { 2927 | "ansi-styles": "^6.0.0", 2928 | "is-fullwidth-code-point": "^4.0.0" 2929 | }, 2930 | "engines": { 2931 | "node": ">=12" 2932 | }, 2933 | "funding": { 2934 | "url": "https://github.com/chalk/slice-ansi?sponsor=1" 2935 | } 2936 | }, 2937 | "node_modules/slice-ansi/node_modules/ansi-styles": { 2938 | "version": "6.2.1", 2939 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 2940 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 2941 | "dev": true, 2942 | "license": "MIT", 2943 | "engines": { 2944 | "node": ">=12" 2945 | }, 2946 | "funding": { 2947 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2948 | } 2949 | }, 2950 | "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { 2951 | "version": "4.0.0", 2952 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", 2953 | "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", 2954 | "dev": true, 2955 | "license": "MIT", 2956 | "engines": { 2957 | "node": ">=12" 2958 | }, 2959 | "funding": { 2960 | "url": "https://github.com/sponsors/sindresorhus" 2961 | } 2962 | }, 2963 | "node_modules/sorcery": { 2964 | "version": "0.11.0", 2965 | "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", 2966 | "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", 2967 | "dev": true, 2968 | "license": "MIT", 2969 | "dependencies": { 2970 | "@jridgewell/sourcemap-codec": "^1.4.14", 2971 | "buffer-crc32": "^0.2.5", 2972 | "minimist": "^1.2.0", 2973 | "sander": "^0.5.0" 2974 | }, 2975 | "bin": { 2976 | "sorcery": "bin/sorcery" 2977 | } 2978 | }, 2979 | "node_modules/source-map-js": { 2980 | "version": "1.0.2", 2981 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 2982 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 2983 | "dev": true, 2984 | "license": "BSD-3-Clause", 2985 | "engines": { 2986 | "node": ">=0.10.0" 2987 | } 2988 | }, 2989 | "node_modules/string-argv": { 2990 | "version": "0.3.1", 2991 | "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", 2992 | "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", 2993 | "dev": true, 2994 | "license": "MIT", 2995 | "engines": { 2996 | "node": ">=0.6.19" 2997 | } 2998 | }, 2999 | "node_modules/string-width": { 3000 | "version": "4.2.3", 3001 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3002 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3003 | "dev": true, 3004 | "license": "MIT", 3005 | "dependencies": { 3006 | "emoji-regex": "^8.0.0", 3007 | "is-fullwidth-code-point": "^3.0.0", 3008 | "strip-ansi": "^6.0.1" 3009 | }, 3010 | "engines": { 3011 | "node": ">=8" 3012 | } 3013 | }, 3014 | "node_modules/strip-ansi": { 3015 | "version": "6.0.1", 3016 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3017 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3018 | "dev": true, 3019 | "license": "MIT", 3020 | "dependencies": { 3021 | "ansi-regex": "^5.0.1" 3022 | }, 3023 | "engines": { 3024 | "node": ">=8" 3025 | } 3026 | }, 3027 | "node_modules/strip-final-newline": { 3028 | "version": "3.0.0", 3029 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", 3030 | "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", 3031 | "dev": true, 3032 | "license": "MIT", 3033 | "engines": { 3034 | "node": ">=12" 3035 | }, 3036 | "funding": { 3037 | "url": "https://github.com/sponsors/sindresorhus" 3038 | } 3039 | }, 3040 | "node_modules/strip-indent": { 3041 | "version": "3.0.0", 3042 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", 3043 | "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", 3044 | "dev": true, 3045 | "license": "MIT", 3046 | "dependencies": { 3047 | "min-indent": "^1.0.0" 3048 | }, 3049 | "engines": { 3050 | "node": ">=8" 3051 | } 3052 | }, 3053 | "node_modules/strip-json-comments": { 3054 | "version": "3.1.1", 3055 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3056 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3057 | "dev": true, 3058 | "license": "MIT", 3059 | "engines": { 3060 | "node": ">=8" 3061 | }, 3062 | "funding": { 3063 | "url": "https://github.com/sponsors/sindresorhus" 3064 | } 3065 | }, 3066 | "node_modules/supports-color": { 3067 | "version": "7.2.0", 3068 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3069 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3070 | "dev": true, 3071 | "license": "MIT", 3072 | "dependencies": { 3073 | "has-flag": "^4.0.0" 3074 | }, 3075 | "engines": { 3076 | "node": ">=8" 3077 | } 3078 | }, 3079 | "node_modules/svelte": { 3080 | "version": "3.55.1", 3081 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz", 3082 | "integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==", 3083 | "dev": true, 3084 | "license": "MIT", 3085 | "engines": { 3086 | "node": ">= 8" 3087 | } 3088 | }, 3089 | "node_modules/svelte-check": { 3090 | "version": "3.0.3", 3091 | "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.0.3.tgz", 3092 | "integrity": "sha512-ByBFXo3bfHRGIsYEasHkdMhLkNleVfszX/Ns1oip58tPJlKdo5Ssr8kgVIuo5oq00hss8AIcdesuy0Xt0BcTvg==", 3093 | "dev": true, 3094 | "license": "MIT", 3095 | "dependencies": { 3096 | "@jridgewell/trace-mapping": "^0.3.17", 3097 | "chokidar": "^3.4.1", 3098 | "fast-glob": "^3.2.7", 3099 | "import-fresh": "^3.2.1", 3100 | "picocolors": "^1.0.0", 3101 | "sade": "^1.7.4", 3102 | "svelte-preprocess": "^5.0.0", 3103 | "typescript": "^4.9.4" 3104 | }, 3105 | "bin": { 3106 | "svelte-check": "bin/svelte-check" 3107 | }, 3108 | "peerDependencies": { 3109 | "svelte": "^3.55.0" 3110 | } 3111 | }, 3112 | "node_modules/svelte-hmr": { 3113 | "version": "0.15.3", 3114 | "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", 3115 | "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", 3116 | "dev": true, 3117 | "engines": { 3118 | "node": "^12.20 || ^14.13.1 || >= 16" 3119 | }, 3120 | "peerDependencies": { 3121 | "svelte": "^3.19.0 || ^4.0.0" 3122 | } 3123 | }, 3124 | "node_modules/svelte-preprocess": { 3125 | "version": "5.0.1", 3126 | "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.1.tgz", 3127 | "integrity": "sha512-0HXyhCoc9rsW4zGOgtInylC6qj259E1hpFnJMJWTf+aIfeqh4O/QHT31KT2hvPEqQfdjmqBR/kO2JDkkciBLrQ==", 3128 | "dev": true, 3129 | "hasInstallScript": true, 3130 | "license": "MIT", 3131 | "dependencies": { 3132 | "@types/pug": "^2.0.6", 3133 | "@types/sass": "^1.43.1", 3134 | "detect-indent": "^6.1.0", 3135 | "magic-string": "^0.27.0", 3136 | "sorcery": "^0.11.0", 3137 | "strip-indent": "^3.0.0" 3138 | }, 3139 | "engines": { 3140 | "node": ">= 14.10.0" 3141 | }, 3142 | "peerDependencies": { 3143 | "@babel/core": "^7.10.2", 3144 | "coffeescript": "^2.5.1", 3145 | "less": "^3.11.3 || ^4.0.0", 3146 | "postcss": "^7 || ^8", 3147 | "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0", 3148 | "pug": "^3.0.0", 3149 | "sass": "^1.26.8", 3150 | "stylus": "^0.55.0", 3151 | "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", 3152 | "svelte": "^3.23.0", 3153 | "typescript": "^3.9.5 || ^4.0.0" 3154 | }, 3155 | "peerDependenciesMeta": { 3156 | "@babel/core": { 3157 | "optional": true 3158 | }, 3159 | "coffeescript": { 3160 | "optional": true 3161 | }, 3162 | "less": { 3163 | "optional": true 3164 | }, 3165 | "postcss": { 3166 | "optional": true 3167 | }, 3168 | "postcss-load-config": { 3169 | "optional": true 3170 | }, 3171 | "pug": { 3172 | "optional": true 3173 | }, 3174 | "sass": { 3175 | "optional": true 3176 | }, 3177 | "stylus": { 3178 | "optional": true 3179 | }, 3180 | "sugarss": { 3181 | "optional": true 3182 | }, 3183 | "typescript": { 3184 | "optional": true 3185 | } 3186 | } 3187 | }, 3188 | "node_modules/svelte2tsx": { 3189 | "version": "0.6.0", 3190 | "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.6.0.tgz", 3191 | "integrity": "sha512-TrxfQkO7CKi8Pu2eC/FyteDCdk3OOeQV5u6z7OjYAsOhsd0ClzAKqxJdvp6xxNQLrbFzf/XvCi9Fy8MQ1MleFA==", 3192 | "dev": true, 3193 | "license": "MIT", 3194 | "dependencies": { 3195 | "dedent-js": "^1.0.1", 3196 | "pascal-case": "^3.1.1" 3197 | }, 3198 | "peerDependencies": { 3199 | "svelte": "^3.55", 3200 | "typescript": "^4.9.4" 3201 | } 3202 | }, 3203 | "node_modules/text-table": { 3204 | "version": "0.2.0", 3205 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3206 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 3207 | "dev": true, 3208 | "license": "MIT" 3209 | }, 3210 | "node_modules/through": { 3211 | "version": "2.3.8", 3212 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 3213 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", 3214 | "dev": true, 3215 | "license": "MIT" 3216 | }, 3217 | "node_modules/tiny-glob": { 3218 | "version": "0.2.9", 3219 | "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", 3220 | "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", 3221 | "dev": true, 3222 | "license": "MIT", 3223 | "dependencies": { 3224 | "globalyzer": "0.1.0", 3225 | "globrex": "^0.1.2" 3226 | } 3227 | }, 3228 | "node_modules/to-regex-range": { 3229 | "version": "5.0.1", 3230 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3231 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3232 | "dev": true, 3233 | "dependencies": { 3234 | "is-number": "^7.0.0" 3235 | }, 3236 | "engines": { 3237 | "node": ">=8.0" 3238 | } 3239 | }, 3240 | "node_modules/totalist": { 3241 | "version": "3.0.0", 3242 | "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", 3243 | "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", 3244 | "dev": true, 3245 | "license": "MIT", 3246 | "engines": { 3247 | "node": ">=6" 3248 | } 3249 | }, 3250 | "node_modules/tslib": { 3251 | "version": "2.4.1", 3252 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 3253 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", 3254 | "dev": true, 3255 | "license": "0BSD" 3256 | }, 3257 | "node_modules/type-check": { 3258 | "version": "0.4.0", 3259 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3260 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3261 | "dev": true, 3262 | "license": "MIT", 3263 | "dependencies": { 3264 | "prelude-ls": "^1.2.1" 3265 | }, 3266 | "engines": { 3267 | "node": ">= 0.8.0" 3268 | } 3269 | }, 3270 | "node_modules/type-fest": { 3271 | "version": "0.20.2", 3272 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 3273 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 3274 | "dev": true, 3275 | "license": "(MIT OR CC0-1.0)", 3276 | "engines": { 3277 | "node": ">=10" 3278 | }, 3279 | "funding": { 3280 | "url": "https://github.com/sponsors/sindresorhus" 3281 | } 3282 | }, 3283 | "node_modules/typescript": { 3284 | "version": "4.9.4", 3285 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", 3286 | "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", 3287 | "license": "Apache-2.0", 3288 | "bin": { 3289 | "tsc": "bin/tsc", 3290 | "tsserver": "bin/tsserver" 3291 | }, 3292 | "engines": { 3293 | "node": ">=4.2.0" 3294 | } 3295 | }, 3296 | "node_modules/undici": { 3297 | "version": "5.28.4", 3298 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", 3299 | "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", 3300 | "dev": true, 3301 | "dependencies": { 3302 | "@fastify/busboy": "^2.0.0" 3303 | }, 3304 | "engines": { 3305 | "node": ">=14.0" 3306 | } 3307 | }, 3308 | "node_modules/uri-js": { 3309 | "version": "4.4.1", 3310 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3311 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3312 | "dev": true, 3313 | "license": "BSD-2-Clause", 3314 | "dependencies": { 3315 | "punycode": "^2.1.0" 3316 | } 3317 | }, 3318 | "node_modules/vite": { 3319 | "version": "4.5.3", 3320 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", 3321 | "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", 3322 | "dev": true, 3323 | "dependencies": { 3324 | "esbuild": "^0.18.10", 3325 | "postcss": "^8.4.27", 3326 | "rollup": "^3.27.1" 3327 | }, 3328 | "bin": { 3329 | "vite": "bin/vite.js" 3330 | }, 3331 | "engines": { 3332 | "node": "^14.18.0 || >=16.0.0" 3333 | }, 3334 | "funding": { 3335 | "url": "https://github.com/vitejs/vite?sponsor=1" 3336 | }, 3337 | "optionalDependencies": { 3338 | "fsevents": "~2.3.2" 3339 | }, 3340 | "peerDependencies": { 3341 | "@types/node": ">= 14", 3342 | "less": "*", 3343 | "lightningcss": "^1.21.0", 3344 | "sass": "*", 3345 | "stylus": "*", 3346 | "sugarss": "*", 3347 | "terser": "^5.4.0" 3348 | }, 3349 | "peerDependenciesMeta": { 3350 | "@types/node": { 3351 | "optional": true 3352 | }, 3353 | "less": { 3354 | "optional": true 3355 | }, 3356 | "lightningcss": { 3357 | "optional": true 3358 | }, 3359 | "sass": { 3360 | "optional": true 3361 | }, 3362 | "stylus": { 3363 | "optional": true 3364 | }, 3365 | "sugarss": { 3366 | "optional": true 3367 | }, 3368 | "terser": { 3369 | "optional": true 3370 | } 3371 | } 3372 | }, 3373 | "node_modules/vitefu": { 3374 | "version": "0.2.5", 3375 | "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", 3376 | "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", 3377 | "dev": true, 3378 | "peerDependencies": { 3379 | "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" 3380 | }, 3381 | "peerDependenciesMeta": { 3382 | "vite": { 3383 | "optional": true 3384 | } 3385 | } 3386 | }, 3387 | "node_modules/which": { 3388 | "version": "2.0.2", 3389 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3390 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3391 | "dev": true, 3392 | "license": "ISC", 3393 | "dependencies": { 3394 | "isexe": "^2.0.0" 3395 | }, 3396 | "bin": { 3397 | "node-which": "bin/node-which" 3398 | }, 3399 | "engines": { 3400 | "node": ">= 8" 3401 | } 3402 | }, 3403 | "node_modules/word-wrap": { 3404 | "version": "1.2.4", 3405 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", 3406 | "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", 3407 | "dev": true, 3408 | "engines": { 3409 | "node": ">=0.10.0" 3410 | } 3411 | }, 3412 | "node_modules/wrap-ansi": { 3413 | "version": "7.0.0", 3414 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3415 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3416 | "dev": true, 3417 | "license": "MIT", 3418 | "dependencies": { 3419 | "ansi-styles": "^4.0.0", 3420 | "string-width": "^4.1.0", 3421 | "strip-ansi": "^6.0.0" 3422 | }, 3423 | "engines": { 3424 | "node": ">=10" 3425 | }, 3426 | "funding": { 3427 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3428 | } 3429 | }, 3430 | "node_modules/wrappy": { 3431 | "version": "1.0.2", 3432 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3433 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3434 | "dev": true, 3435 | "license": "ISC" 3436 | }, 3437 | "node_modules/yaml": { 3438 | "version": "2.3.1", 3439 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", 3440 | "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", 3441 | "dev": true, 3442 | "engines": { 3443 | "node": ">= 14" 3444 | } 3445 | }, 3446 | "node_modules/yocto-queue": { 3447 | "version": "0.1.0", 3448 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3449 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3450 | "dev": true, 3451 | "license": "MIT", 3452 | "engines": { 3453 | "node": ">=10" 3454 | }, 3455 | "funding": { 3456 | "url": "https://github.com/sponsors/sindresorhus" 3457 | } 3458 | } 3459 | } 3460 | } 3461 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-seo", 3 | "version": "1.6.1", 4 | "license": "MIT", 5 | "repository": "git@github.com:artiebits/svelte-seo.git", 6 | "scripts": { 7 | "dev": "vite dev", 8 | "build": "svelte-kit sync && svelte-package", 9 | "prepublishOnly": "npm build", 10 | "check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json", 11 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch", 12 | "test": "playwright test", 13 | "lint": "prettier --plugin-search-dir . --check . && eslint .", 14 | "format": "prettier --plugin-search-dir . --write .", 15 | "preview": "vite build && vite preview" 16 | }, 17 | "devDependencies": { 18 | "@playwright/test": "^1.29.2", 19 | "@sveltejs/adapter-auto": "^1.0.0", 20 | "@sveltejs/kit": "^1.30.4", 21 | "@sveltejs/package": "1.0.2", 22 | "eslint": "^8.31.0", 23 | "eslint-config-prettier": "^8.6.0", 24 | "eslint-plugin-svelte3": "^4.0.0", 25 | "husky": "^8.0.3", 26 | "lint-staged": "^13.1.0", 27 | "prettier": "^2.8.2", 28 | "prettier-plugin-svelte": "^2.9.0", 29 | "svelte": "^3.55.0", 30 | "svelte-check": "^3.0.1", 31 | "tslib": "^2.4.1", 32 | "typescript": "^4.9.4", 33 | "vite": "^4.5.3" 34 | }, 35 | "type": "module", 36 | "keywords": [ 37 | "svelte", 38 | "sveltekit", 39 | "sapper", 40 | "seo", 41 | "ssr", 42 | "search engines", 43 | "meta tags", 44 | "open graph", 45 | "open graph tags", 46 | "JSON-LD", 47 | "twitter card tags" 48 | ], 49 | "lint-staged": { 50 | "*.svelte": "prettier --write", 51 | "*.{js,svelte}": "eslint --cache --fix" 52 | }, 53 | "dependencies": { 54 | "schema-dts": "^1.1.2" 55 | }, 56 | "exports": { 57 | ".": { 58 | "types": "./index.d.ts", 59 | "svelte": "./index.js" 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /playwright.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('@playwright/test').PlaywrightTestConfig} */ 2 | const config = { 3 | use: { 4 | baseURL: "http://localhost:4173", 5 | }, 6 | fullyParallel: true, 7 | webServer: { 8 | reuseExistingServer: true, 9 | command: "yarn run preview", 10 | port: 4173, 11 | }, 12 | }; 13 | 14 | export default config; 15 | -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | // See https://kit.svelte.dev/docs/types#app 4 | // for information about these interfaces 5 | // and what to do when importing types 6 | declare namespace App { 7 | // interface Locals {} 8 | // interface PageData {} 9 | // interface Error {} 10 | // interface Platform {} 11 | } 12 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %sveltekit.head% 7 | 8 | 9 |
%sveltekit.body%
10 | 11 | 12 | -------------------------------------------------------------------------------- /src/lib/index.js: -------------------------------------------------------------------------------- 1 | import component from "./index.svelte"; 2 | export default component; 3 | -------------------------------------------------------------------------------- /src/lib/index.svelte: -------------------------------------------------------------------------------- 1 | 58 | 59 | 60 | {#if title} 61 | {title} 62 | {/if} 63 | 64 | {#if description} 65 | 66 | {/if} 67 | 68 | {#if canonical} 69 | 70 | {/if} 71 | 72 | {#if keywords} 73 | 74 | {/if} 75 | 76 | {#if amp} 77 | 78 | {/if} 79 | 80 | {#if manifest} 81 | 82 | {/if} 83 | 84 | {#if applicationName} 85 | 86 | {/if} 87 | 88 | {#if languageAlternates} 89 | {#each languageAlternates as { href, hreflang }} 90 | 91 | {/each} 92 | {/if} 93 | 94 | {#if themeColor} 95 | 96 | {/if} 97 | 98 | {#if base} 99 | 100 | {/if} 101 | 102 | {#if facebook?.appId} 103 | 104 | {/if} 105 | 106 | 112 | 118 | 119 | {#if nositelinkssearchbox} 120 | 121 | {/if} 122 | 123 | {#if notranslate} 124 | 125 | {/if} 126 | 127 | {#if twitter} 128 | {#each Object.entries(twitter) as [key, value]} 129 | {@const transformed = key 130 | .replace(/([a-z])([A-Z])/g, "$1:$2") 131 | .toLowerCase()} 132 | 135 | 136 | {/each} 137 | {/if} 138 | 139 | {#if openGraph} 140 | 141 | {/if} 142 | 143 | {#if jsonLd} 144 | {@const data = Object.assign({ "@context": "https://schema.org" }, jsonLd)} 145 | {@html ` 5 | 6 | {#if openGraph} 7 | {#each Object.entries(openGraph) as [key, value]} 8 | 11 | {@const _type = typeof value} 12 | {#if _type !== "object"} 13 | {@const transform = key.replace(/([a-z])([A-Z])/g, "$1:$2").toLowerCase()} 14 | 15 | {/if} 16 | {#if _type === "object"} 17 | {#if key === "images"} 18 | {#each openGraph.images ?? [] as image} 19 | {#each Object.entries(image) as [key, value]} 20 | 21 | {/each} 22 | {/each} 23 | {:else if key === "videos"} 24 | {#each openGraph.videos ?? [] as video} 25 | {#each Object.entries(video) as [key, value]} 26 | {#if key === "url"} 27 | 28 | {:else} 29 | 30 | {/if} 31 | {/each} 32 | {/each} 33 | {:else if key === "localeAlternate"} 34 | {#each openGraph.localeAlternate ?? [] as alternate} 35 | 36 | {/each} 37 | {:else if key === "music"} 38 | {#each Object.entries(openGraph.music ?? {}) as [key, value]} 39 | {@const transform = key 40 | .replace(/([a-z])([A-Z])/g, "$1:$2") 41 | .toLowerCase()} 42 | 43 | {/each} 44 | {:else if key === "movie"} 45 | {#each Object.entries(openGraph.movie ?? {}) as [key, value]} 46 | {#if typeof value === "object"} 47 | {#each value as propValue} 48 | 49 | {/each} 50 | {:else} 51 | {@const transform = key 52 | .replace(/([a-z])([A-Z])/g, "$1:$2") 53 | .toLowerCase()} 54 | 55 | {/if} 56 | {/each} 57 | {:else if key === "article"} 58 | {#each Object.entries(openGraph.article ?? {}) as [key, value]} 59 | {#if typeof value === "object"} 60 | {#each value as propValue} 61 | 62 | {/each} 63 | {:else} 64 | {@const transform = key 65 | .replace(/([a-z])([A-Z])/g, "$1:$2") 66 | .toLowerCase()} 67 | 68 | {/if} 69 | {/each} 70 | {:else if key === "book"} 71 | {#each Object.entries(openGraph.book ?? {}) as [key, value]} 72 | {#if typeof value === "object"} 73 | {#each value as propValue} 74 | 75 | {/each} 76 | {:else} 77 | {@const transform = key 78 | .replace(/([a-z])([A-Z])/g, "$1:$2") 79 | .toLowerCase()} 80 | 81 | {/if} 82 | {/each} 83 | {:else if key === "profile"} 84 | {#each Object.entries(openGraph.profile ?? {}) as [key, value]} 85 | {@const transform = key 86 | .replace(/([a-z])([A-Z])/g, "$1:$2") 87 | .toLowerCase()} 88 | 89 | {/each} 90 | {/if} 91 | {/if} 92 | {/each} 93 | {/if} 94 | -------------------------------------------------------------------------------- /src/lib/types.d.ts: -------------------------------------------------------------------------------- 1 | import { Thing, WithContext } from "schema-dts"; 2 | 3 | export interface SvelteSeo { 4 | title?: string; 5 | description?: string; 6 | base?: string; 7 | keywords?: string; 8 | applicationName?: string; 9 | themeColor?: string; 10 | nofollow: Boolean; 11 | noindex: Boolean; 12 | nositelinkssearchbox: Boolean; 13 | notranslate: Boolean; 14 | canonical?: string; 15 | amp?: string; 16 | manifest?: string; 17 | languageAlternates?: Array<{ hreflang: string; href: string }>; 18 | twitter?: Twitter; 19 | facebook?: Facebook; 20 | openGraph?: OpenGraph; 21 | jsonLd?: Thing | WithContext; 22 | } 23 | 24 | declare interface Facebook { 25 | appId: string; 26 | } 27 | 28 | declare interface Twitter { 29 | title?: string; 30 | description?: string; 31 | image?: string; 32 | imageAlt?: string; 33 | card?: "summary" | "summary_large_image" | "player" | "app"; 34 | site?: string; 35 | creator?: string; 36 | player?: string; 37 | playerWidth?: string; 38 | playerHeight?: string; 39 | playerStream?: string; 40 | appNameIphone?: string; 41 | appIdIphone?: string; 42 | appUrlIphone?: string; 43 | appNameIpad?: string; 44 | appIdIpad?: string; 45 | appNameGoogleplay?: string; 46 | appIdGoogleplay?: string; 47 | appUrlGoogleplay?: string; 48 | } 49 | 50 | declare interface OpenGraph { 51 | title?: string; 52 | type?: string; 53 | url?: string; 54 | audio?: string; 55 | audioSecure_url?: string; 56 | audioType?: string; 57 | description?: string; 58 | determiner?: string; 59 | locale?: string; 60 | localeAlternate?: string[]; 61 | site_name?: string; 62 | videos?: Array<{ 63 | url: string; 64 | secure_url?: string; 65 | type?: string; 66 | alt?: string; 67 | width?: number | string; 68 | height?: number | string; 69 | }>; 70 | images?: Array<{ 71 | url?: string; 72 | secure_url?: string; 73 | type?: string; 74 | alt?: string; 75 | width?: number | string; 76 | height?: number | string; 77 | }>; 78 | music?: OpenGraphMusic; 79 | movie?: OpenGraphVideo; 80 | article?: OpenGraphArticle; 81 | book?: OpenGraphBook; 82 | profile?: openGraphProfile; 83 | } 84 | 85 | declare interface OpenGraphMusic { 86 | duration?: number | string; 87 | album?: string; 88 | albumDisc?: number; 89 | albumTrack?: number; 90 | musician?: string; 91 | creator?: string; 92 | song?: string; 93 | songDisc?: number | string; 94 | songTrack?: number | string; 95 | release_date?: string; 96 | } 97 | 98 | declare interface OpenGraphVideo { 99 | actor?: string[]; 100 | actorRole?: string; 101 | director?: string[]; 102 | writer?: string[]; 103 | duration?: number | string; 104 | release_date?: string; 105 | tag?: string[]; 106 | series?: string; 107 | } 108 | 109 | declare interface OpenGraphArticle { 110 | published_time?: string; 111 | modified_time?: string; 112 | expiration_time?: string; 113 | author?: string[]; 114 | section?: string; 115 | tag?: string[]; 116 | } 117 | 118 | declare interface OpenGraphBook { 119 | author?: string[]; 120 | isbn?: string | number; 121 | release_date?: string; 122 | tag?: string[]; 123 | } 124 | 125 | declare interface openGraphProfile { 126 | first_name?: string; 127 | last_name?: string; 128 | username?: string; 129 | gender?: "male" | "female"; 130 | } 131 | -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 49 | -------------------------------------------------------------------------------- /src/routes/index.js: -------------------------------------------------------------------------------- 1 | const SEO = { 2 | title: "Open Graph Article Title", 3 | noindex: false, 4 | nofollow: false, 5 | description: "Description of open graph article", 6 | base: "https://www.example.com", 7 | keywords: ["svelte", "sveltekit", "web"], 8 | applicationName: "Svelte SEO", 9 | canonical: "https://www.example.com", 10 | themeColor: "red", 11 | nositelinkssearchbox: true, 12 | notranslate: true, 13 | amp: "https://www.example.com/url/to/amp/document.html", 14 | manifest: "/manifest.json", 15 | languageAlternates: [ 16 | { 17 | hreflang: "en-Uk", 18 | href: "http://example.com", 19 | }, 20 | { 21 | hreflang: "en-US", 22 | href: "http://example.com", 23 | }, 24 | ], 25 | 26 | /**@type {import("../lib/types").SvelteSeo['twitter']}*/ 27 | twitter: { 28 | title: "Open Graph Article Title", 29 | description: "Description of open graph article", 30 | image: "https://image.com", 31 | imageAlt: "image Alt", 32 | card: "app", 33 | site: "@svelteseo", 34 | creator: "@artiebits", 35 | player: "https://wakey.io/embed/26", 36 | playerWidth: "720", 37 | playerHeight: "720", 38 | playerStream: "https://wakey.io/public/vid/26.mp4", 39 | appNameIphone: "Svelte SEO", 40 | appIdIphone: "23232", 41 | appUrlIphone: "applenews://", 42 | appNameIpad: "Svelte SEO", 43 | appIdGoogleplay: "svelte.seo.com", 44 | appNameGoogleplay: "Svelte SEO", 45 | appUrlGoogleplay: 46 | "https://play.google.com/store/apps/details?id=com.sega.sonicdash", 47 | }, 48 | 49 | facebook: { 50 | appId: "12344567", 51 | }, 52 | 53 | /**@type {import("../lib/types").OpenGraph} */ 54 | openGraph: { 55 | title: "Open Graph Article Title", 56 | type: "website", 57 | url: "https://www.example.com", 58 | audio: "http://www.example.com.audio", 59 | audioSecure_url: "https://www.example.com.audio", 60 | audioType: "audio/mpeg", 61 | description: "Description of open graph article", 62 | determiner: "the", 63 | locale: "en_US", 64 | localeAlternate: ["fr_FR", "es_ES"], 65 | site_name: "Svelte SEO", 66 | videos: [ 67 | { 68 | url: "http://www.example.video", 69 | secure_url: "https://www.example.video", 70 | type: "application/x-shockwave-flash", 71 | alt: "Video Alt", 72 | width: 600, 73 | height: 600, 74 | }, 75 | { 76 | url: "http://www.example1.video", 77 | secure_url: "https://www.example1.video", 78 | type: "application/x-shockwave-flash", 79 | alt: "Video Alt", 80 | width: 500, 81 | height: 500, 82 | }, 83 | { 84 | url: "http://www.example2.video", 85 | secure_url: "https://www.example2.video", 86 | type: "application/x-shockwave-flash", 87 | alt: "Video Alt", 88 | width: 300, 89 | height: 300, 90 | }, 91 | ], 92 | images: [ 93 | { 94 | url: "http://www.example.image", 95 | secure_url: "https://www.example.image", 96 | type: "image/jpeg", 97 | alt: "image alt", 98 | width: 400, 99 | height: 400, 100 | }, 101 | { 102 | url: "http://www.example1.image", 103 | secure_url: "https://www.example1.image", 104 | type: "image/jpeg", 105 | alt: "image alt", 106 | width: 500, 107 | height: 500, 108 | }, 109 | ], 110 | 111 | music: { 112 | duration: 236, 113 | album: "http://open.spotify.com/album/7rq68qYz66mNdPfidhIEFa", 114 | albumDisc: 1, 115 | albumTrack: 3, 116 | musician: "https://your-profile.com", 117 | creator: "https://creator-profile.com", 118 | song: "http://open.spotify.com/track/0pfHfdUNVwlXA0WDXznm2C", 119 | songDisc: "1", 120 | songTrack: "3", 121 | release_date: "2011-04-19", 122 | }, 123 | 124 | movie: { 125 | actor: [ 126 | "https://url-to-actor.com", 127 | "https://url-to-actor1.com", 128 | "https://url-to-actor2.com", 129 | ], 130 | actorRole: "Cameo", 131 | director: [ 132 | "https://www.director.com", 133 | "https://www.director1.com", 134 | "https://www.director2.com", 135 | ], 136 | writer: [ 137 | "https://www.writer.com", 138 | "https://www.writer2.com", 139 | "https://www.writer3.com", 140 | ], 141 | duration: "300", 142 | release_date: "2011-04-19", 143 | tag: ["action", "train"], 144 | series: "https://www.series.com", 145 | }, 146 | 147 | article: { 148 | published_time: "2020-08-03T17:31:37Z", 149 | modified_time: "2020-08-20T09:31:37Z", 150 | expiration_time: "2025-12-21T17:31:37Z", 151 | section: "Section II", 152 | author: [ 153 | "https://www.example.com/authors/@firstnameA-lastnameA", 154 | "https://www.example.com/authors/@firstnameB-lastnameB", 155 | ], 156 | tag: ["Tag A", "Tag B", "Tag C"], 157 | }, 158 | 159 | book: { 160 | author: [ 161 | "https://ww.author.com", 162 | "https://ww.author1.com", 163 | "https://ww.author2.com", 164 | ], 165 | isbn: 1234567910, 166 | release_date: "2022-12-12", 167 | tag: ["romance", "love"], 168 | }, 169 | 170 | profile: { 171 | first_name: "John", 172 | last_name: "Doe", 173 | username: "johndoe", 174 | gender: "male", 175 | }, 176 | }, 177 | }; 178 | 179 | export default SEO; 180 | -------------------------------------------------------------------------------- /src/tests/open-graph.test.js: -------------------------------------------------------------------------------- 1 | import { expect, test } from "@playwright/test"; 2 | 3 | test.describe("Testing OpenGraph meta tags", async () => { 4 | test.beforeEach(async ({ page }) => { 5 | await page.goto("/"); 6 | }); 7 | 8 | test("Loads og:title tag correctly", async ({ page }) => { 9 | const element = page.locator("meta[property='og:title']"); 10 | expect(element, "The tag must exist").toBeDefined(); 11 | expect(await element.getAttribute("content")).toBe( 12 | "Open Graph Article Title" 13 | ); 14 | }); 15 | 16 | test("Loads og:type tag correctly", async ({ page }) => { 17 | const element = page.locator("meta[property='og:type']"); 18 | expect(element, "The tag must exist").toBeDefined(); 19 | expect(await element.getAttribute("content")).toBe("website"); 20 | }); 21 | 22 | test("Loads og:url tag correctly", async ({ page }) => { 23 | const element = page.locator("meta[property='og:url']"); 24 | expect(element, "The tag must exist").toBeDefined(); 25 | expect(await element.getAttribute("content")).toBe( 26 | "https://www.example.com" 27 | ); 28 | }); 29 | 30 | test("Loads og:image:url tag correctly", async ({ page }) => { 31 | const element = page.locator("meta[property='og:image:url']"); 32 | expect(element, "The tag must exist").toBeDefined(); 33 | expect(await element.count(), "Loads the right amount of tags").toBe(2); 34 | }); 35 | 36 | test("Loads og:image:secure_url tag correctly", async ({ page }) => { 37 | const element = page.locator("meta[property='og:image:secure_url']"); 38 | expect(element, "The tag must exist").toBeDefined(); 39 | expect(await element.count(), "Loads the right amount of tags").toBe(2); 40 | }); 41 | 42 | test("Loads og:image:type tag correctly", async ({ page }) => { 43 | const element = page.locator("meta[property='og:image:type']"); 44 | expect(element, "The tag must exist").toBeDefined(); 45 | expect(await element.count(), "Loads the right amount of tags").toBe(2); 46 | }); 47 | 48 | test("Loads og:image:width tag correctly", async ({ page }) => { 49 | const element = page.locator("meta[property='og:image:width']"); 50 | expect(element, "The tag must exist").toBeDefined(); 51 | expect(await element.count(), "Loads the right amount of tags").toBe(2); 52 | }); 53 | 54 | test("Loads og:image:height tag correctly", async ({ page }) => { 55 | const element = page.locator("meta[property='og:image:height']"); 56 | expect(element, "The tag must exist").toBeDefined(); 57 | expect(await element.count(), "Loads the right amount of tags").toBe(2); 58 | }); 59 | 60 | test("Loads og:image:alt tag correctly", async ({ page }) => { 61 | const element = page.locator("meta[property='og:image:alt']"); 62 | expect(element, "The tag must exist").toBeDefined(); 63 | expect(await element.count(), "Loads the right amount of tags").toBe(2); 64 | }); 65 | 66 | test("Loads og:audio tag correctly", async ({ page }) => { 67 | const element = page.locator("meta[property='og:audio']"); 68 | expect(element, "The tag must exist").toBeDefined(); 69 | expect(await element.getAttribute("content")).toBe( 70 | "http://www.example.com.audio" 71 | ); 72 | }); 73 | 74 | test("Loads og:audio:secure_url tag correctly", async ({ page }) => { 75 | const element = page.locator("meta[property='og:audio:secure_url']"); 76 | expect(element, "The tag must exist").toBeDefined(); 77 | expect(await element.getAttribute("content")).toBe( 78 | "https://www.example.com.audio" 79 | ); 80 | }); 81 | 82 | test("Loads og:audio:type tag correctly", async ({ page }) => { 83 | const element = page.locator("meta[property='og:audio:type']"); 84 | expect(element, "The tag must exist").toBeDefined(); 85 | expect(await element.getAttribute("content")).toBe("audio/mpeg"); 86 | }); 87 | 88 | test("Loads og:description tag correctly", async ({ page }) => { 89 | const element = page.locator("meta[property='og:description']"); 90 | expect(element, "The tag must exist").toBeDefined(); 91 | expect(await element.getAttribute("content")).toBe( 92 | "Description of open graph article" 93 | ); 94 | }); 95 | 96 | test("Loads og:determiner tag correctly", async ({ page }) => { 97 | const element = page.locator("meta[property='og:determiner']"); 98 | expect(element, "The tag must exist").toBeDefined(); 99 | expect(await element.getAttribute("content")).toBe("the"); 100 | }); 101 | 102 | test("Loads og:locale tag correctly", async ({ page }) => { 103 | const element = page.locator("meta[property='og:locale']"); 104 | expect(element, "The tag must exist").toBeDefined(); 105 | expect(await element.getAttribute("content")).toBe("en_US"); 106 | }); 107 | 108 | test("Loads og:locale:alternate tag correctly", async ({ page }) => { 109 | const element = page.locator("meta[property='og:locale:alternate']"); 110 | expect(element, "The tag must exist").toBeDefined(); 111 | expect(await element.count(), "Loads the right amount of tags").toBe(2); 112 | }); 113 | 114 | test("Loads og:site_name tag correctly", async ({ page }) => { 115 | const element = page.locator("meta[property='og:site_name']"); 116 | expect(element, "The tag must exist").toBeDefined(); 117 | expect(await element.getAttribute("content")).toBe("Svelte SEO"); 118 | }); 119 | 120 | test("Loads og:video tag correctly", async ({ page }) => { 121 | const element = page.locator("meta[property='og:video']"); 122 | expect(element, "The tag must exist").toBeDefined(); 123 | expect(await element.count(), "Loads the right amount of tags").toBe(3); 124 | }); 125 | 126 | test("Loads og:video:secure_url tag correctly", async ({ page }) => { 127 | const element = page.locator("meta[property='og:video:secure_url']"); 128 | expect(element, "The tag must exist").toBeDefined(); 129 | }); 130 | 131 | test("Loads og:video:type tag correctly", async ({ page }) => { 132 | const element = page.locator("meta[property='og:video:type']"); 133 | expect(element, "The tag must exist").toBeDefined(); 134 | }); 135 | 136 | test("Loads og:video:width tag correctly", async ({ page }) => { 137 | const element = page.locator("meta[property='og:video:width']"); 138 | expect(element, "The tag must exist").toBeDefined(); 139 | }); 140 | 141 | test("Loads og:video:height tag correctly", async ({ page }) => { 142 | const element = page.locator("meta[property='og:video:height']"); 143 | expect(element, "The tag must exist").toBeDefined(); 144 | }); 145 | 146 | test("Loads music:duration tag correctly", async ({ page }) => { 147 | const element = page.locator("meta[property='music:duration']"); 148 | expect(element, "The tag must exist").toBeDefined(); 149 | expect(await element.getAttribute("content")).toBe("236"); 150 | }); 151 | 152 | test("Loads music:album tag correctly", async ({ page }) => { 153 | const element = page.locator("meta[property='music:album']"); 154 | expect(element, "The tag must exist").toBeDefined(); 155 | expect(await element.getAttribute("content")).toBe( 156 | "http://open.spotify.com/album/7rq68qYz66mNdPfidhIEFa" 157 | ); 158 | }); 159 | 160 | test("Loads music:album:disc tag correctly", async ({ page }) => { 161 | const element = page.locator("meta[property='music:album:disc']"); 162 | expect(element, "The tag must exist").toBeDefined(); 163 | expect(await element.getAttribute("content")).toBe("1"); 164 | }); 165 | 166 | test("Loads music:album:track tag correctly", async ({ page }) => { 167 | const element = page.locator("meta[property='music:album:track']"); 168 | expect(element, "The tag must exist").toBeDefined(); 169 | expect(await element.getAttribute("content")).toBe("3"); 170 | }); 171 | 172 | test("Loads music:musician tag correctly", async ({ page }) => { 173 | const element = page.locator("meta[property='music:musician']"); 174 | expect(element, "The tag must exist").toBeDefined(); 175 | expect(await element.getAttribute("content")).toBe( 176 | "https://your-profile.com" 177 | ); 178 | }); 179 | 180 | test("Loads music:song tag correctly", async ({ page }) => { 181 | const element = page.locator("meta[property='music:song']"); 182 | expect(element, "The tag must exist").toBeDefined(); 183 | expect(await element.getAttribute("content")).toBe( 184 | "http://open.spotify.com/track/0pfHfdUNVwlXA0WDXznm2C" 185 | ); 186 | }); 187 | 188 | test("Loads music:song:disc tag correctly", async ({ page }) => { 189 | const element = page.locator("meta[property='music:song:disc']"); 190 | expect(element, "The tag must exist").toBeDefined(); 191 | expect(await element.getAttribute("content")).toBe("1"); 192 | }); 193 | 194 | test("Loads music:creator tag correctly", async ({ page }) => { 195 | const element = page.locator("meta[property='music:creator']"); 196 | expect(element, "The tag must exist").toBeDefined(); 197 | expect(await element.getAttribute("content")).toBe( 198 | "https://creator-profile.com" 199 | ); 200 | }); 201 | 202 | test("Loads video:actor tag correctly", async ({ page }) => { 203 | const element = page.locator("meta[property='video:actor']"); 204 | expect(element, "The tag must exist").toBeDefined(); 205 | expect(await element.count(), "Loads the right amount of tags").toBe(3); 206 | }); 207 | 208 | test("Loads video:actor:role tag correctly", async ({ page }) => { 209 | const element = page.locator("meta[property='video:actor:role']"); 210 | expect(element, "The tag must exist").toBeDefined(); 211 | expect(await element.getAttribute("content")).toBe("Cameo"); 212 | }); 213 | 214 | test("Loads video:director tag correctly", async ({ page }) => { 215 | const element = page.locator("meta[property='video:director']"); 216 | expect(element, "The tag must exist").toBeDefined(); 217 | expect(await element.count(), "Loads the right amount of tags").toBe(3); 218 | }); 219 | 220 | test("Loads video:writer tag correctly", async ({ page }) => { 221 | const element = page.locator("meta[property='video:writer']"); 222 | expect(element, "The tag must exist").toBeDefined(); 223 | expect(await element.count(), "Loads the right amount of tags").toBe(3); 224 | }); 225 | 226 | test("Loads video:duration tag correctly", async ({ page }) => { 227 | const element = page.locator("meta[property='video:duration']"); 228 | expect(element, "The tag must exist").toBeDefined(); 229 | expect(await element.getAttribute("content")).toBe("300"); 230 | }); 231 | 232 | test("Loads video:release_date tag correctly", async ({ page }) => { 233 | const element = page.locator("meta[property='video:release_date']"); 234 | expect(element, "The tag must exist").toBeDefined(); 235 | expect(await element.getAttribute("content")).toBe("2011-04-19"); 236 | }); 237 | 238 | test("Loads video:tag tag correctly", async ({ page }) => { 239 | const element = page.locator("meta[property='video:tag']"); 240 | expect(element, "The tag must exist").toBeDefined(); 241 | expect(await element.count(), "Loads the right amount of tags").toBe(2); 242 | }); 243 | 244 | test("Loads video:series tag correctly", async ({ page }) => { 245 | const element = page.locator("meta[property='video:series']"); 246 | expect(element, "The tag must exist").toBeDefined(); 247 | expect(await element.getAttribute("content")).toBe( 248 | "https://www.series.com" 249 | ); 250 | }); 251 | 252 | test("Loads article:published_time tag correctly", async ({ page }) => { 253 | const element = page.locator("meta[property='article:published_time']"); 254 | expect(element, "The tag must exist").toBeDefined(); 255 | expect(await element.getAttribute("content")).toBe("2020-08-03T17:31:37Z"); 256 | }); 257 | 258 | test("Loads article:modified_time tag correctly", async ({ page }) => { 259 | const element = page.locator("meta[property='article:modified_time']"); 260 | expect(element, "The tag must exist").toBeDefined(); 261 | expect(await element.getAttribute("content")).toBe("2020-08-20T09:31:37Z"); 262 | }); 263 | 264 | test("Loads article:expiration_time tag correctly", async ({ page }) => { 265 | const element = page.locator("meta[property='article:expiration_time']"); 266 | expect(element, "The tag must exist").toBeDefined(); 267 | expect(await element.getAttribute("content")).toBe("2025-12-21T17:31:37Z"); 268 | }); 269 | 270 | test("Loads article:author tag correctly", async ({ page }) => { 271 | const element = page.locator("meta[property='article:author']"); 272 | expect(element, "The tag must exist").toBeDefined(); 273 | expect(await element.count(), "Loads the right amount of tags").toBe(2); 274 | }); 275 | 276 | test("Loads article:section tag correctly", async ({ page }) => { 277 | const element = page.locator("meta[property='article:section']"); 278 | expect(element, "The tag must exist").toBeDefined(); 279 | expect(await element.getAttribute("content")).toBe("Section II"); 280 | }); 281 | 282 | test("Loads article:tag tag correctly", async ({ page }) => { 283 | const element = page.locator("meta[property='article:tag']"); 284 | expect(element, "The tag must exist").toBeDefined(); 285 | expect(await element.count(), "Loads the right amount of tags").toBe(3); 286 | }); 287 | 288 | test("Loads book:author tag correctly", async ({ page }) => { 289 | const element = page.locator("meta[property='book:author']"); 290 | expect(element, "The tag must exist").toBeDefined(); 291 | expect(await element.count(), "Loads the right amount of tags").toBe(3); 292 | }); 293 | 294 | test("Loads book:isbn tag correctly", async ({ page }) => { 295 | const element = page.locator("meta[property='book:isbn']"); 296 | expect(element, "The tag must exist").toBeDefined(); 297 | expect(await element.getAttribute("content")).toBe("1234567910"); 298 | }); 299 | 300 | test("Loads book:release_date tag correctly", async ({ page }) => { 301 | const element = page.locator("meta[property='book:release_date']"); 302 | expect(element, "The tag must exist").toBeDefined(); 303 | expect(await element.getAttribute("content")).toBe("2022-12-12"); 304 | }); 305 | 306 | test("Loads book:tag tag correctly", async ({ page }) => { 307 | const element = page.locator("meta[property='book:tag']"); 308 | expect(element, "The tag must exist").toBeDefined(); 309 | expect(await element.count(), "Loads the right amount of tags").toBe(2); 310 | }); 311 | 312 | test("Loads profile:first_name tag correctly", async ({ page }) => { 313 | const element = page.locator("meta[property='profile:first_name']"); 314 | expect(element, "The tag must exist").toBeDefined(); 315 | expect(await element.getAttribute("content")).toBe("John"); 316 | }); 317 | 318 | test("Loads profile:last_name tag correctly", async ({ page }) => { 319 | const element = page.locator("meta[property='profile:last_name']"); 320 | expect(element, "The tag must exist").toBeDefined(); 321 | expect(await element.getAttribute("content")).toBe("Doe"); 322 | }); 323 | 324 | test("Loads profile:username tag correctly", async ({ page }) => { 325 | const element = page.locator("meta[property='profile:username']"); 326 | expect(element, "The tag must exist").toBeDefined(); 327 | expect(await element.getAttribute("content")).toBe("johndoe"); 328 | }); 329 | 330 | test("Loads profile:gender tag correctly", async ({ page }) => { 331 | const element = page.locator("meta[property='profile:gender']"); 332 | expect(element, "The tag must exist").toBeDefined(); 333 | expect(await element.getAttribute("content")).toBe("male"); 334 | }); 335 | }); 336 | -------------------------------------------------------------------------------- /src/tests/seo.test.js: -------------------------------------------------------------------------------- 1 | import { test, expect } from "@playwright/test"; 2 | 3 | test.describe("Testing SEO and meta tags", () => { 4 | test.beforeEach(async ({ page }) => { 5 | await page.goto("/"); 6 | }); 7 | 8 | test("Loads the title", async ({ page }) => { 9 | await expect(page).toHaveTitle("Open Graph Article Title"); 10 | }); 11 | 12 | test("Loads description tag meta[name='description']", async ({ page }) => { 13 | expect( 14 | await page.locator("meta[name='description']").getAttribute("content") 15 | ).toBe("Description of open graph article"); 16 | }); 17 | 18 | test("Loads the base tag correctly", async ({ page }) => { 19 | expect(await page.locator("head base").getAttribute("href")).toBe( 20 | "https://www.example.com" 21 | ); 22 | }); 23 | 24 | test("Loads the keywords tag correctly", async ({ page }) => { 25 | const element = page.locator("meta[name='keywords']"); 26 | const keywords = await element.getAttribute("content"); 27 | expect(keywords, "Must render keywords tag").toBe("svelte,sveltekit,web"); 28 | expect( 29 | keywords?.split(",").length, 30 | "Loads the right number of keywords" 31 | ).toBe(3); 32 | }); 33 | 34 | test("Loads the 'application-name' meta tag correctly", async ({ page }) => { 35 | expect( 36 | await page 37 | .locator("meta[name='application-name']") 38 | .getAttribute("content") 39 | ).toBe("Svelte SEO"); 40 | }); 41 | 42 | test("Loads the canonical link tag correctly", async ({ page }) => { 43 | expect( 44 | await page.locator("link[rel='canonical']").getAttribute("href") 45 | ).toBe("https://www.example.com"); 46 | }); 47 | 48 | test("Loads the theme color tag correctly", async ({ page }) => { 49 | expect( 50 | await page.locator("meta[name='theme-color']").getAttribute("content") 51 | ).toBe("red"); 52 | }); 53 | 54 | test("Loads the nositelinkssearchbox meta tag correctly", async ({ 55 | page, 56 | }) => { 57 | expect( 58 | await page 59 | .locator("meta[content='nositelinkssearchbox']") 60 | .getAttribute("content") 61 | ).toBe("nositelinkssearchbox"); 62 | }); 63 | 64 | test("Loads the notranslate tag correctly", async ({ page }) => { 65 | expect( 66 | await page.locator("meta[content='notranslate']").getAttribute("content") 67 | ).toBe("notranslate"); 68 | }); 69 | 70 | test("Loads the amp tag correctly", async ({ page }) => { 71 | expect(await page.locator("link[rel='amphtml']").getAttribute("href")).toBe( 72 | "https://www.example.com/url/to/amp/document.html" 73 | ); 74 | }); 75 | 76 | test("Loads manifest correctly", async ({ page }) => { 77 | expect( 78 | await page.locator("link[rel='manifest']").getAttribute("href") 79 | ).toBe("/manifest.json"); 80 | }); 81 | 82 | test("Loads language alternates tags correctly", async ({ page }) => { 83 | const element = page.locator("link[rel='alternate']"); 84 | expect(await element.count(), "Loads the right number of tags").toBe(2); 85 | }); 86 | }); 87 | -------------------------------------------------------------------------------- /src/tests/twitter.test.js: -------------------------------------------------------------------------------- 1 | import { test, expect } from "@playwright/test"; 2 | 3 | test.describe("Loads twitter tags", () => { 4 | test.beforeEach(async ({ page }) => { 5 | await page.goto("/"); 6 | }); 7 | 8 | test("Loads twitter title tag correctly", async ({ page }) => { 9 | expect( 10 | await page.locator("meta[name='twitter:title']").getAttribute("content") 11 | ).toBe("Open Graph Article Title"); 12 | }); 13 | 14 | test("Loads twitter description tag correctly", async ({ page }) => { 15 | expect( 16 | await page 17 | .locator("meta[name='twitter:description']") 18 | .getAttribute("content") 19 | ).toBe("Description of open graph article"); 20 | }); 21 | 22 | test("Loads twitter card correctly", async ({ page }) => { 23 | expect( 24 | await page.locator("meta[name='twitter:card']").getAttribute("content") 25 | ).toBe("app"); 26 | }); 27 | 28 | test("Loads twitter image correctly", async ({ page }) => { 29 | expect( 30 | await page.locator("meta[name='twitter:image']").getAttribute("content") 31 | ).toBe("https://image.com"); 32 | }); 33 | 34 | test("Loads twitter image alt correctly", async ({ page }) => { 35 | expect( 36 | await page 37 | .locator("meta[name='twitter:image:alt']") 38 | .getAttribute("content") 39 | ).toBe("image Alt"); 40 | }); 41 | 42 | test("Loads twitter site tag correctly", async ({ page }) => { 43 | expect( 44 | await page.locator("meta[name='twitter:site']").getAttribute("content") 45 | ).toBe("@svelteseo"); 46 | }); 47 | 48 | test("Loads twitter creator tag correctly", async ({ page }) => { 49 | expect( 50 | await page.locator("meta[name='twitter:creator']").getAttribute("content") 51 | ).toBe("@artiebits"); 52 | }); 53 | 54 | test("Loads twitter player tags correctly", async ({ page }) => { 55 | expect( 56 | await page.locator("meta[name='twitter:player']").getAttribute("content") 57 | ).toBe("https://wakey.io/embed/26"); 58 | }); 59 | 60 | test("Loads twitter player width tag correctly", async ({ page }) => { 61 | expect( 62 | await page 63 | .locator("meta[name='twitter:player:width']") 64 | .getAttribute("content") 65 | ).toBe("720"); 66 | }); 67 | 68 | test("Loads twtter player height tag correctly", async ({ page }) => { 69 | expect( 70 | await page 71 | .locator("meta[name='twitter:player:height']") 72 | .getAttribute("content") 73 | ).toBe("720"); 74 | }); 75 | 76 | test("Loads twitter player stream tag correctly", async ({ page }) => { 77 | expect( 78 | await page 79 | .locator("meta[name='twitter:player:stream']") 80 | .getAttribute("content") 81 | ).toBe("https://wakey.io/public/vid/26.mp4"); 82 | }); 83 | 84 | test("Loads twitter app name Iphone tag correctly", async ({ page }) => { 85 | expect( 86 | await page 87 | .locator("meta[name='twitter:app:name:iphone']") 88 | .getAttribute("content") 89 | ).toBe("Svelte SEO"); 90 | }); 91 | 92 | test("Loads twitter app Id Iphone tag correctly", async ({ page }) => { 93 | expect( 94 | await page 95 | .locator("meta[name='twitter:app:id:iphone']") 96 | .getAttribute("content") 97 | ).toBe("23232"); 98 | }); 99 | 100 | test("Loads twitter app url iphone tag correctly", async ({ page }) => { 101 | expect( 102 | await page 103 | .locator("meta[name='twitter:app:url:iphone']") 104 | .getAttribute("content") 105 | ).toBe("applenews://"); 106 | }); 107 | 108 | test("Loads twitter app name ipad tag correctly", async ({ page }) => { 109 | expect( 110 | await page 111 | .locator("meta[name='twitter:app:name:ipad']") 112 | .getAttribute("content") 113 | ).toBe("Svelte SEO"); 114 | }); 115 | 116 | test("Loads twitter googleplay app id tag correctly", async ({ page }) => { 117 | expect( 118 | await page 119 | .locator("meta[name='twitter:app:id:googleplay']") 120 | .getAttribute("content") 121 | ).toBe("svelte.seo.com"); 122 | }); 123 | 124 | test("Loads twitter googleplay app name tag correctly", async ({ page }) => { 125 | expect( 126 | await page 127 | .locator("meta[name='twitter:app:name:googleplay']") 128 | .getAttribute("content") 129 | ).toBe("Svelte SEO"); 130 | }); 131 | 132 | test("Loads twitter googleplay app url correctly", async ({ page }) => { 133 | expect( 134 | await page 135 | .locator("meta[name='twitter:app:url:googleplay']") 136 | .getAttribute("content") 137 | ).toBe("https://play.google.com/store/apps/details?id=com.sega.sonicdash"); 138 | }); 139 | }); 140 | -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from "@sveltejs/adapter-auto"; 2 | 3 | /** @type {import('@sveltejs/kit').Config} */ 4 | const config = { 5 | kit: { 6 | adapter: adapter(), 7 | }, 8 | }; 9 | 10 | export default config; 11 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { sveltekit } from "@sveltejs/kit/vite"; 2 | 3 | /** @type {import('vite').UserConfig} */ 4 | const config = { 5 | plugins: [sveltekit()], 6 | }; 7 | 8 | export default config; 9 | --------------------------------------------------------------------------------