From ef1d99a4092edbfcaa449ab0a3acc66d9c2905f9 Mon Sep 17 00:00:00 2001 From: lidaxian Date: Mon, 4 Mar 2024 05:24:30 +0000 Subject: [PATCH 1/7] Translating pseudo_syscalls.md Signed-off-by: lidaxian --- sources/syzkaller/pseudo_syscalls.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sources/syzkaller/pseudo_syscalls.md b/sources/syzkaller/pseudo_syscalls.md index 8c9b801..a789c1c 100644 --- a/sources/syzkaller/pseudo_syscalls.md +++ b/sources/syzkaller/pseudo_syscalls.md @@ -1,9 +1,10 @@ --- -status: collected +status: translating title: "Pseudo-syscalls" author: Syzkaller Community collector: dzm91_hust collected_date: 20240229 +translator: lidaxian121 link: https://github.com/google/syzkaller/blob/master/docs/pseudo_syscalls.md --- From b9d4f7172468e08cf10fb5705114d8451fa60eee Mon Sep 17 00:00:00 2001 From: Cheng Ziqiu Date: Mon, 4 Mar 2024 18:29:18 +0800 Subject: [PATCH 2/7] chore: modify frontmatter. --- sources/kernel/20240220 linux kernel CVE assignment.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/kernel/20240220 linux kernel CVE assignment.md b/sources/kernel/20240220 linux kernel CVE assignment.md index 80a1be5..ea78ffc 100644 --- a/sources/kernel/20240220 linux kernel CVE assignment.md +++ b/sources/kernel/20240220 linux kernel CVE assignment.md @@ -5,7 +5,7 @@ author: Greg Kroah-Hartman collector: mudongliang collected_date: 20240220 translator: yanruo -translated_date:20240221 +translated_date: 20240221 link: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/cve.rst --- @@ -49,4 +49,4 @@ Linux内核中未修复的安全问题不会自动分配CVE;只有在安全修 简而言之,我们不知道您的用例,也不知道您使用的是内核的哪个部分,因此我们无法确定特定的CVE是否与您的系统相关。 -与往常一样,最好采取所有发布的内核更改,因为它们是由许多社区成员在一个统一的整体中一起进行测试的,而不是作为个别的精选更改。还要注意,对于许多bug来说,整体问题的解决方案并不是在单个更改中找到的,而是在彼此之上的许多修复的总和。理想情况下,CVEs将被分配给所有问题的所有修复,但有时我们将无法注意到一些修复,因此某些修复可能在没有CVE的情况下被采取。 \ No newline at end of file +与往常一样,最好采取所有发布的内核更改,因为它们是由许多社区成员在一个统一的整体中一起进行测试的,而不是作为个别的精选更改。还要注意,对于许多bug来说,整体问题的解决方案并不是在单个更改中找到的,而是在彼此之上的许多修复的总和。理想情况下,CVEs将被分配给所有问题的所有修复,但有时我们将无法注意到一些修复,因此某些修复可能在没有CVE的情况下被采取。 From 63d270716f341debeaaae4a43d7206c96366da28 Mon Sep 17 00:00:00 2001 From: Cheng Ziqiu Date: Mon, 4 Mar 2024 18:30:15 +0800 Subject: [PATCH 3/7] feat: github pages. --- pages/.eslintignore | 6 + pages/.eslintrc.js | 23 + pages/.gitignore | 35 + pages/.husky/pre-commit | 4 + pages/.markdownlint.json | 4 + pages/.npmrc | 2 + pages/.prettierignore | 13 + pages/.prettierrc | 20 + pages/.vscode/astro-paper.code-snippets | 34 + pages/.vscode/extensions.json | 4 + pages/.vscode/launch.json | 11 + pages/AstroPaper-lighthouse-score.svg | 159 + pages/LICENSE | 21 + pages/README.md | 158 + pages/astro.config.ts | 55 + pages/docker-compose.yml | 11 + pages/package-lock.json | 13598 ++++++++++++++++ pages/package.json | 64 + pages/plugin/BrokenMarkdownRemarkPlugin.ts | 21 + pages/public/assets/dev.svg | 361 + pages/public/assets/forrest-gump-quote.webp | Bin 0 -> 27316 bytes pages/public/assets/logo.png | Bin 0 -> 2989 bytes pages/public/assets/logo.svg | 10 + pages/public/astropaper-og.jpg | Bin 0 -> 148774 bytes pages/public/bad-image.png | Bin 0 -> 20273 bytes pages/public/favicon.svg | 13 + pages/public/toggle-theme.js | 76 + pages/remark-collapse.d.ts | 1 + pages/src/assets/images/AstroPaper-v3.png | Bin 0 -> 173038 bytes pages/src/assets/images/AstroPaper-v4.png | Bin 0 -> 161586 bytes pages/src/assets/socialIcons.ts | 211 + pages/src/components/Breadcrumbs.astro | 72 + pages/src/components/Card.tsx | 68 + pages/src/components/Datetime.tsx | 72 + pages/src/components/Footer.astro | 45 + pages/src/components/Header.astro | 210 + pages/src/components/Hr.astro | 12 + pages/src/components/LinkButton.astro | 33 + pages/src/components/Pagination.astro | 57 + pages/src/components/Search.tsx | 123 + pages/src/components/ShareLinks.astro | 66 + pages/src/components/Socials.astro | 35 + pages/src/components/Tag.astro | 38 + pages/src/config.ts | 147 + pages/src/content/blog | 1 + pages/src/content/config.ts | 22 + pages/src/content_bak/blog/adding-new-post.md | 170 + pages/src/content_bak/blog/astro-paper-2.md | 91 + pages/src/content_bak/blog/astro-paper-3.md | 173 + pages/src/content_bak/blog/astro-paper-4.md | 124 + ...tomizing-astropaper-theme-color-schemes.md | 132 + .../src/content_bak/blog/dynamic-og-images.md | 50 + .../content_bak/blog/example-draft-post.md | 21 + .../blog/how-to-add-a-new-social-icon.md | 125 + .../how-to-add-an-estimated-reading-time.md | 303 + .../blog/how-to-configure-astropaper-theme.md | 160 + ...nect-astro-paper-blog-with-forestry-cms.md | 126 + .../blog/how-to-update-dependencies.md | 114 + .../blog/portfolio-website-development.md | 104 + .../blog/predefined-color-schemes.md | 182 + .../blog/setting-dates-via-git-hooks.md | 194 + .../content_bak/blog/tailwind-typography.md | 208 + .../content_bak/blog/terminal-development.md | 88 + pages/src/content_bak/config.ts | 26 + pages/src/env.d.ts | 2 + pages/src/layouts/AboutLayout.astro | 28 + pages/src/layouts/Layout.astro | 115 + pages/src/layouts/Main.astro | 48 + pages/src/layouts/PostDetails.astro | 208 + pages/src/layouts/Posts.astro | 75 + pages/src/layouts/TagPosts.astro | 49 + pages/src/pages/404.astro | 42 + pages/src/pages/[status]/[page].astro | 44 + pages/src/pages/[status]/index.astro | 29 + pages/src/pages/about.md | 36 + pages/src/pages/index.astro | 18 + pages/src/pages/og.png.ts | 7 + pages/src/pages/posts/[...slug]/index.astro | 30 + pages/src/pages/robots.txt.ts | 17 + pages/src/pages/rss.xml.ts | 20 + pages/src/styles/base.css | 135 + pages/src/types.ts | 19 + pages/src/utils/generateOgImages.tsx | 59 + pages/src/utils/getPageNumbers.ts | 14 + pages/src/utils/getPagination.ts | 35 + pages/src/utils/getSortedPosts.ts | 19 + pages/src/utils/og-templates/post.tsx | 96 + pages/src/utils/og-templates/site.tsx | 87 + pages/src/utils/slugify.ts | 5 + pages/tailwind.config.cjs | 75 + pages/tmp.txt | 8864 ++++++++++ pages/tsconfig.json | 17 + pages/yarn.lock | 6511 ++++++++ 93 files changed, 35011 insertions(+) create mode 100644 pages/.eslintignore create mode 100644 pages/.eslintrc.js create mode 100644 pages/.gitignore create mode 100755 pages/.husky/pre-commit create mode 100644 pages/.markdownlint.json create mode 100644 pages/.npmrc create mode 100644 pages/.prettierignore create mode 100644 pages/.prettierrc create mode 100644 pages/.vscode/astro-paper.code-snippets create mode 100644 pages/.vscode/extensions.json create mode 100644 pages/.vscode/launch.json create mode 100644 pages/AstroPaper-lighthouse-score.svg create mode 100644 pages/LICENSE create mode 100644 pages/README.md create mode 100644 pages/astro.config.ts create mode 100644 pages/docker-compose.yml create mode 100644 pages/package-lock.json create mode 100644 pages/package.json create mode 100644 pages/plugin/BrokenMarkdownRemarkPlugin.ts create mode 100644 pages/public/assets/dev.svg create mode 100644 pages/public/assets/forrest-gump-quote.webp create mode 100644 pages/public/assets/logo.png create mode 100644 pages/public/assets/logo.svg create mode 100644 pages/public/astropaper-og.jpg create mode 100644 pages/public/bad-image.png create mode 100644 pages/public/favicon.svg create mode 100644 pages/public/toggle-theme.js create mode 100644 pages/remark-collapse.d.ts create mode 100644 pages/src/assets/images/AstroPaper-v3.png create mode 100644 pages/src/assets/images/AstroPaper-v4.png create mode 100644 pages/src/assets/socialIcons.ts create mode 100644 pages/src/components/Breadcrumbs.astro create mode 100644 pages/src/components/Card.tsx create mode 100644 pages/src/components/Datetime.tsx create mode 100644 pages/src/components/Footer.astro create mode 100644 pages/src/components/Header.astro create mode 100644 pages/src/components/Hr.astro create mode 100644 pages/src/components/LinkButton.astro create mode 100644 pages/src/components/Pagination.astro create mode 100644 pages/src/components/Search.tsx create mode 100644 pages/src/components/ShareLinks.astro create mode 100755 pages/src/components/Socials.astro create mode 100644 pages/src/components/Tag.astro create mode 100644 pages/src/config.ts create mode 120000 pages/src/content/blog create mode 100644 pages/src/content/config.ts create mode 100644 pages/src/content_bak/blog/adding-new-post.md create mode 100644 pages/src/content_bak/blog/astro-paper-2.md create mode 100644 pages/src/content_bak/blog/astro-paper-3.md create mode 100644 pages/src/content_bak/blog/astro-paper-4.md create mode 100644 pages/src/content_bak/blog/customizing-astropaper-theme-color-schemes.md create mode 100644 pages/src/content_bak/blog/dynamic-og-images.md create mode 100644 pages/src/content_bak/blog/example-draft-post.md create mode 100644 pages/src/content_bak/blog/how-to-add-a-new-social-icon.md create mode 100644 pages/src/content_bak/blog/how-to-add-an-estimated-reading-time.md create mode 100644 pages/src/content_bak/blog/how-to-configure-astropaper-theme.md create mode 100644 pages/src/content_bak/blog/how-to-connect-astro-paper-blog-with-forestry-cms.md create mode 100644 pages/src/content_bak/blog/how-to-update-dependencies.md create mode 100644 pages/src/content_bak/blog/portfolio-website-development.md create mode 100644 pages/src/content_bak/blog/predefined-color-schemes.md create mode 100644 pages/src/content_bak/blog/setting-dates-via-git-hooks.md create mode 100644 pages/src/content_bak/blog/tailwind-typography.md create mode 100644 pages/src/content_bak/blog/terminal-development.md create mode 100644 pages/src/content_bak/config.ts create mode 100644 pages/src/env.d.ts create mode 100644 pages/src/layouts/AboutLayout.astro create mode 100644 pages/src/layouts/Layout.astro create mode 100644 pages/src/layouts/Main.astro create mode 100644 pages/src/layouts/PostDetails.astro create mode 100644 pages/src/layouts/Posts.astro create mode 100644 pages/src/layouts/TagPosts.astro create mode 100644 pages/src/pages/404.astro create mode 100644 pages/src/pages/[status]/[page].astro create mode 100644 pages/src/pages/[status]/index.astro create mode 100644 pages/src/pages/about.md create mode 100644 pages/src/pages/index.astro create mode 100644 pages/src/pages/og.png.ts create mode 100644 pages/src/pages/posts/[...slug]/index.astro create mode 100644 pages/src/pages/robots.txt.ts create mode 100644 pages/src/pages/rss.xml.ts create mode 100644 pages/src/styles/base.css create mode 100644 pages/src/types.ts create mode 100644 pages/src/utils/generateOgImages.tsx create mode 100644 pages/src/utils/getPageNumbers.ts create mode 100644 pages/src/utils/getPagination.ts create mode 100644 pages/src/utils/getSortedPosts.ts create mode 100644 pages/src/utils/og-templates/post.tsx create mode 100644 pages/src/utils/og-templates/site.tsx create mode 100644 pages/src/utils/slugify.ts create mode 100644 pages/tailwind.config.cjs create mode 100644 pages/tmp.txt create mode 100644 pages/tsconfig.json create mode 100644 pages/yarn.lock diff --git a/pages/.eslintignore b/pages/.eslintignore new file mode 100644 index 0000000..e816868 --- /dev/null +++ b/pages/.eslintignore @@ -0,0 +1,6 @@ +.husky +.vscode +node_modules +public +dist +.yarn \ No newline at end of file diff --git a/pages/.eslintrc.js b/pages/.eslintrc.js new file mode 100644 index 0000000..d38ad6e --- /dev/null +++ b/pages/.eslintrc.js @@ -0,0 +1,23 @@ +module.exports = { + env: { + node: true, + es2022: true, + browser: true, + }, + extends: ["eslint:recommended", "plugin:astro/recommended"], + parserOptions: { + ecmaVersion: "latest", + sourceType: "module", + }, + overrides: [ + { + files: ["*.astro"], + parser: "astro-eslint-parser", + parserOptions: { + parser: "@typescript-eslint/parser", + extraFileExtensions: [".astro"], + }, + rules: {}, + }, + ], +}; diff --git a/pages/.gitignore b/pages/.gitignore new file mode 100644 index 0000000..2a2df19 --- /dev/null +++ b/pages/.gitignore @@ -0,0 +1,35 @@ +# build output +dist/ +.output/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +# ignore .astro directory +.astro + +# ignore Jampack cache files +.jampack/ + +# yarn +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions +.pnp.* diff --git a/pages/.husky/pre-commit b/pages/.husky/pre-commit new file mode 100755 index 0000000..d24fdfc --- /dev/null +++ b/pages/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx lint-staged diff --git a/pages/.markdownlint.json b/pages/.markdownlint.json new file mode 100644 index 0000000..4a9e17a --- /dev/null +++ b/pages/.markdownlint.json @@ -0,0 +1,4 @@ +{ + "MD033": false, + "MD013": false +} \ No newline at end of file diff --git a/pages/.npmrc b/pages/.npmrc new file mode 100644 index 0000000..ef83021 --- /dev/null +++ b/pages/.npmrc @@ -0,0 +1,2 @@ +# Expose Astro dependencies for `pnpm` users +shamefully-hoist=true diff --git a/pages/.prettierignore b/pages/.prettierignore new file mode 100644 index 0000000..5d1d4a4 --- /dev/null +++ b/pages/.prettierignore @@ -0,0 +1,13 @@ +# Ignore everything +/* + +# Except these files & folders +!/src +!/public +!/.github +!tsconfig.json +!astro.config.ts +!package.json +!.prettierrc +!.eslintrc.js +!README.md \ No newline at end of file diff --git a/pages/.prettierrc b/pages/.prettierrc new file mode 100644 index 0000000..5d921d9 --- /dev/null +++ b/pages/.prettierrc @@ -0,0 +1,20 @@ +{ + "arrowParens": "avoid", + "semi": true, + "tabWidth": 2, + "printWidth": 80, + "singleQuote": false, + "jsxSingleQuote": false, + "trailingComma": "es5", + "bracketSpacing": true, + "endOfLine": "lf", + "plugins": ["prettier-plugin-astro", "prettier-plugin-tailwindcss"], + "overrides": [ + { + "files": "*.astro", + "options": { + "parser": "astro" + } + } + ] +} diff --git a/pages/.vscode/astro-paper.code-snippets b/pages/.vscode/astro-paper.code-snippets new file mode 100644 index 0000000..869c4cb --- /dev/null +++ b/pages/.vscode/astro-paper.code-snippets @@ -0,0 +1,34 @@ +{ + "Frontmatter": { + "scope": "markdown", + "prefix": "frontmatter", + "body": [ + "---", + "author: $1", + "pubDatetime: $CURRENT_YEAR-$CURRENT_MONTH-${CURRENT_DATE}T$CURRENT_HOUR:$CURRENT_MINUTE:$CURRENT_SECOND.000$CURRENT_TIMEZONE_OFFSET", + "modDatetime: $3", + "title: $4", + "featured: ${5|false,true|}", + "draft: ${6|true,false|}", + "tags:", + " - $7", + "description: $8", + "---", + ], + "description": "Adds the frontmatter block for the AstroPaper Blog post" + }, + "Blog Template": { + "scope": "markdown", + "prefix": "template", + "body": [ + "${1:frontmatter}", + "", + "${2: Introductory Sentence}", + "", + "## Table of contents", + "", + "## ${3: heading 1}", + ], + "description": "Adds the template for the AstroPaper Blog post. You will need to trigger the snippet modal on the 'frontmatter' line to insert the other snipper." + } +} diff --git a/pages/.vscode/extensions.json b/pages/.vscode/extensions.json new file mode 100644 index 0000000..22a1505 --- /dev/null +++ b/pages/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + "recommendations": ["astro-build.astro-vscode"], + "unwantedRecommendations": [] +} diff --git a/pages/.vscode/launch.json b/pages/.vscode/launch.json new file mode 100644 index 0000000..d642209 --- /dev/null +++ b/pages/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "command": "./node_modules/.bin/astro dev", + "name": "Development server", + "request": "launch", + "type": "node-terminal" + } + ] +} diff --git a/pages/AstroPaper-lighthouse-score.svg b/pages/AstroPaper-lighthouse-score.svg new file mode 100644 index 0000000..db86b3d --- /dev/null +++ b/pages/AstroPaper-lighthouse-score.svg @@ -0,0 +1,159 @@ + + + + + + 100 + Performance + , + + + 100 + Accessibility + , + + + 100 + Best Practices + , + + + 100 + SEO + + + + + + + + + + + + + + 0-49 + 50-89 + 90-100 + + + \ No newline at end of file diff --git a/pages/LICENSE b/pages/LICENSE new file mode 100644 index 0000000..fa7c791 --- /dev/null +++ b/pages/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Sat Naing + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pages/README.md b/pages/README.md new file mode 100644 index 0000000..1e05d7a --- /dev/null +++ b/pages/README.md @@ -0,0 +1,158 @@ +# AstroPaper 📄 + +![AstroPaper](public/astropaper-og.jpg) +![Typescript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white) +![GitHub](https://img.shields.io/github/license/satnaing/astro-paper?color=%232F3741&style=for-the-badge) +[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits&logoColor=white&style=for-the-badge)](https://conventionalcommits.org) +[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=for-the-badge)](http://commitizen.github.io/cz-cli/) + +AstroPaper is a minimal, responsive, accessible and SEO-friendly Astro blog theme. This theme is designed and crafted based on [my personal blog](https://satnaing.dev/blog). + +This theme follows best practices and provides accessibility out of the box. Light and dark mode are supported by default. Moreover, additional color schemes can also be configured. + +This theme is self-documented \_ which means articles/posts in this theme can also be considered as documentations. Read [the blog posts](https://astro-paper.pages.dev/posts/) or check [the README Documentation Section](#-documentation) for more info. + +## 🔥 Features + +- [x] type-safe markdown +- [x] super fast performance +- [x] accessible (Keyboard/VoiceOver) +- [x] responsive (mobile ~ desktops) +- [x] SEO-friendly +- [x] light & dark mode +- [x] fuzzy search +- [x] draft posts & pagination +- [x] sitemap & rss feed +- [x] followed best practices +- [x] highly customizable +- [x] dynamic OG image generation for blog posts [#15](https://github.com/satnaing/astro-paper/pull/15) ([Blog Post](https://astro-paper.pages.dev/posts/dynamic-og-image-generation-in-astropaper-blog-posts/)) + +_Note: I've tested screen-reader accessibility of AstroPaper using **VoiceOver** on Mac and **TalkBack** on Android. I couldn't test all other screen-readers out there. However, accessibility enhancements in AstroPaper should be working fine on others as well._ + +## ✅ Lighthouse Score + +

+ + AstroPaper Lighthouse Score + +

+ +## 🚀 Project Structure + +Inside of AstroPaper, you'll see the following folders and files: + +```bash +/ +├── public/ +│ ├── assets/ +│ │ └── logo.svg +│ │ └── logo.png +│ └── favicon.svg +│ └── astropaper-og.jpg +│ └── robots.txt +│ └── toggle-theme.js +├── src/ +│ ├── assets/ +│ │ └── socialIcons.ts +│ ├── components/ +│ ├── content/ +│ │ | blog/ +│ │ | └── some-blog-posts.md +│ │ └── config.ts +│ ├── layouts/ +│ └── pages/ +│ └── styles/ +│ └── utils/ +│ └── config.ts +│ └── types.ts +└── package.json +``` + +Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. + +Any static assets, like images, can be placed in the `public/` directory. + +All blog posts are stored in `src/content/blog` directory. + +## 📖 Documentation + +Documentation can be read in two formats\_ _markdown_ & _blog post_. + +- Configuration - [markdown](src/content/blog/how-to-configure-astropaper-theme.md) | [blog post](https://astro-paper.pages.dev/posts/how-to-configure-astropaper-theme/) +- Add Posts - [markdown](src/content/blog/adding-new-post.md) | [blog post](https://astro-paper.pages.dev/posts/adding-new-posts-in-astropaper-theme/) +- Customize Color Schemes - [markdown](src/content/blog/customizing-astropaper-theme-color-schemes.md) | [blog post](https://astro-paper.pages.dev/posts/customizing-astropaper-theme-color-schemes/) +- Predefined Color Schemes - [markdown](src/content/blog/predefined-color-schemes.md) | [blog post](https://astro-paper.pages.dev/posts/predefined-color-schemes/) + +> For AstroPaper v1, check out [this branch](https://github.com/satnaing/astro-paper/tree/astro-paper-v1) and this [live URL](https://astro-paper-v1.astro-paper.pages.dev/) + +## 💻 Tech Stack + +**Main Framework** - [Astro](https://astro.build/) +**Type Checking** - [TypeScript](https://www.typescriptlang.org/) +**Component Framework** - [ReactJS](https://reactjs.org/) +**Styling** - [TailwindCSS](https://tailwindcss.com/) +**UI/UX** - [Figma](https://figma.com) +**Fuzzy Search** - [FuseJS](https://fusejs.io/) +**Icons** - [Boxicons](https://boxicons.com/) | [Tablers](https://tabler-icons.io/) +**Code Formatting** - [Prettier](https://prettier.io/) +**Deployment** - [Cloudflare Pages](https://pages.cloudflare.com/) +**Illustration in About Page** - [https://freesvgillustration.com](https://freesvgillustration.com/) +**Linting** - [ESLint](https://eslint.org) + +## 👨🏻‍💻 Running Locally + +The easiest way to run this project locally is to run the following command in your desired directory. + +```bash +# npm 6.x +npm create astro@latest --template satnaing/astro-paper + +# npm 7+, extra double-dash is needed: +npm create astro@latest -- --template satnaing/astro-paper + +# yarn +yarn create astro --template satnaing/astro-paper +``` + +## Google Site Verification (optional) + +You can easily add your [Google Site Verification HTML tag](https://support.google.com/webmasters/answer/9008080#meta_tag_verification&zippy=%2Chtml-tag) in AstroPaper using environment variable. This step is optional. If you don't add the following env variable, the google-site-verification tag won't appear in the html `` section. + +```bash +# in your environment variable file (.env) +PUBLIC_GOOGLE_SITE_VERIFICATION=your-google-site-verification-value +``` + +## 🧞 Commands + +All commands are run from the root of the project, from a terminal: + +> **_Note!_** For `Docker` commands we must have it [installed](https://docs.docker.com/engine/install/) in your machine. + +| Command | Action | +| :----------------------------------- | :------------------------------------------------------------------------------------------------------------------------------- | +| `npm install` | Installs dependencies | +| `npm run dev` | Starts local dev server at `localhost:4321` | +| `npm run build` | Build your production site to `./dist/` | +| `npm run preview` | Preview your build locally, before deploying | +| `npm run format:check` | Check code format with Prettier | +| `npm run format` | Format codes with Prettier | +| `npm run sync` | Generates TypeScript types for all Astro modules. [Learn more](https://docs.astro.build/en/reference/cli-reference/#astro-sync). | +| `npm run cz` | Commit code changes with commitizen | +| `npm run lint` | Lint with ESLint | +| `docker compose up -d` | Run AstroPaper on docker, You can access with the same hostname and port informed on `dev` command. | +| `docker compose run app npm install` | You can run any command above into the docker container. | + +> **_Warning!_** Windows PowerShell users may need to install the [concurrently package](https://www.npmjs.com/package/concurrently) if they want to [run diagnostics](https://docs.astro.build/en/reference/cli-reference/#astro-check) during development (`astro check --watch & astro dev`). For more info, see [this issue](https://github.com/satnaing/astro-paper/issues/113). + +## ✨ Feedback & Suggestions + +If you have any suggestions/feedback, you can contact me via [my email](mailto:contact@satnaing.dev). Alternatively, feel free to open an issue if you find bugs or want to request new features. + +## 📜 License + +Licensed under the MIT License, Copyright © 2023 + +--- + +Made with 🤍 by [Sat Naing](https://satnaing.dev) 👨🏻‍💻 and [contributors](https://github.com/satnaing/astro-paper/graphs/contributors). diff --git a/pages/astro.config.ts b/pages/astro.config.ts new file mode 100644 index 0000000..e337373 --- /dev/null +++ b/pages/astro.config.ts @@ -0,0 +1,55 @@ +import { defineConfig } from "astro/config"; +import tailwind from "@astrojs/tailwind"; +import react from "@astrojs/react"; +import remarkToc from "remark-toc"; +import remarkCollapse from "remark-collapse"; +import sitemap from "@astrojs/sitemap"; +import { SITE } from "./src/config"; + +import borkenMarkdownRemarkPlugin from "./plugin/BrokenMarkdownRemarkPlugin"; + +// https://astro.build/config +export default defineConfig({ + site: SITE.website, + integrations: [ + tailwind({ + applyBaseStyles: false, + }), + react(), + sitemap(), + ], + markdown: { + remarkPlugins: [ + remarkToc, + [ + remarkCollapse, + { + test: "Table of contents", + }, + ], + [ + borkenMarkdownRemarkPlugin, + null + ] + ], + + shikiConfig: { + theme: "one-dark-pro", + wrap: true, + }, + }, + vite: { + optimizeDeps: { + exclude: ["@resvg/resvg-js"], + }, + resolve: { + preserveSymlinks: true, + alias: { + "@config": "/src/config.ts", + "@utils": "/src/utils", + }, + } + }, + scopedStyleStrategy: "where", +}); + diff --git a/pages/docker-compose.yml b/pages/docker-compose.yml new file mode 100644 index 0000000..58355f7 --- /dev/null +++ b/pages/docker-compose.yml @@ -0,0 +1,11 @@ +version: '3' + +services: + app: + image: node:18 + ports: + - 4321:4321 + working_dir: /app + command: npm run dev -- --host 0.0.0.0 + volumes: + - ./:/app diff --git a/pages/package-lock.json b/pages/package-lock.json new file mode 100644 index 0000000..01afed0 --- /dev/null +++ b/pages/package-lock.json @@ -0,0 +1,13598 @@ +{ + "name": "astro-paper", + "version": "4.2.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "astro-paper", + "version": "4.2.0", + "dependencies": { + "@astrojs/check": "^0.4.1", + "@astrojs/rss": "^4.0.2", + "@resvg/resvg-js": "^2.6.0", + "astro": "^4.2.1", + "fuse.js": "^7.0.0", + "github-slugger": "^2.0.0", + "remark-collapse": "^0.1.2", + "remark-toc": "^9.0.0", + "satori": "^0.10.11", + "tailwindcss": "^3.4.1", + "typescript": "^5.3.3" + }, + "devDependencies": { + "@astrojs/react": "^3.0.9", + "@astrojs/sitemap": "^3.0.5", + "@astrojs/tailwind": "^5.1.0", + "@divriots/jampack": "^0.23.2", + "@tailwindcss/typography": "^0.5.10", + "@types/github-slugger": "^1.3.0", + "@types/react": "^18.2.48", + "@typescript-eslint/parser": "^6.19.0", + "astro-eslint-parser": "^0.16.2", + "commitizen": "^4.3.0", + "cz-conventional-changelog": "^3.3.0", + "eslint": "^8.56.0", + "eslint-plugin-astro": "^0.31.3", + "husky": "^8.0.3", + "lint-staged": "^15.2.0", + "prettier": "^3.2.4", + "prettier-plugin-astro": "^0.13.0", + "prettier-plugin-tailwindcss": "^0.5.11", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@astrojs/check": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.4.1.tgz", + "integrity": "sha512-XEsuU4TlWkgcsvdeessq5mXLXV1fejtxIioCPv/FfhTzb1bDYe2BtLiSBK+rFTyD9Hl686YOas9AGNMJcpoRsw==", + "dependencies": { + "@astrojs/language-server": "^2.6.2", + "chokidar": "^3.5.3", + "fast-glob": "^3.3.1", + "kleur": "^4.1.5", + "yargs": "^17.7.2" + }, + "bin": { + "astro-check": "dist/bin.js" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } + }, + "node_modules/@astrojs/compiler": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-1.5.7.tgz", + "integrity": "sha512-dFU7GAMbpTUGPkRoCoMQrGFlTe3qIiQMSOxIXp/nB1Do4My9uogjEmBHdR5Cwr4i6rc5/1R3Od9v8kU/pkHXGQ==", + "devOptional": true + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.2.1.tgz", + "integrity": "sha512-06DD2ZnItMwUnH81LBLco3tWjcZ1lGU9rLCCBaeUCGYe9cI0wKyY2W3kDyoW1I6GmcWgt1fu+D1CTvz+FIKf8A==" + }, + "node_modules/@astrojs/language-server": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.6.2.tgz", + "integrity": "sha512-RYzPRhS/WBXK5JtfR+0+nGj+N3VbJd5jU/uSNUev9baUx/RLmUwDk1f6Oy8QDEfDDLAr76Ig8YeDD/nxPdBSLw==", + "dependencies": { + "@astrojs/compiler": "^2.4.0", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@volar/kit": "~1.11.1", + "@volar/language-core": "~1.11.1", + "@volar/language-server": "~1.11.1", + "@volar/language-service": "~1.11.1", + "@volar/source-map": "~1.11.1", + "@volar/typescript": "~1.11.1", + "fast-glob": "^3.2.12", + "muggle-string": "^0.3.1", + "volar-service-css": "0.0.17", + "volar-service-emmet": "0.0.17", + "volar-service-html": "0.0.17", + "volar-service-prettier": "0.0.17", + "volar-service-typescript": "0.0.17", + "volar-service-typescript-twoslash-queries": "0.0.17", + "vscode-html-languageservice": "^5.1.0", + "vscode-uri": "^3.0.8" + }, + "bin": { + "astro-ls": "bin/nodeServer.js" + }, + "peerDependencies": { + "prettier": "^3.0.0", + "prettier-plugin-astro": ">=0.11.0" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + } + } + }, + "node_modules/@astrojs/language-server/node_modules/@astrojs/compiler": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.4.1.tgz", + "integrity": "sha512-4M6G6UBI84gPYzyN6jSG3c+jeZ3dBVOnGPzp47SS5ayc2tsWhbXZ4nnNWGJU+ESiQ6ScjywJnpddxTO2w41Qeg==" + }, + "node_modules/@astrojs/markdown-remark": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-4.1.0.tgz", + "integrity": "sha512-JnIy6zk+6f/SgSVMZecZFxQt0faT1uBckwYCuBxKH1hYYJsal8OOe+tx6JxfnyaV+xViyjUvQ28mmn+p/F5LkQ==", + "dependencies": { + "@astrojs/prism": "^3.0.0", + "github-slugger": "^2.0.0", + "import-meta-resolve": "^4.0.0", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.0", + "remark-gfm": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "remark-smartypants": "^2.0.0", + "shikiji": "^0.9.18", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.1" + } + }, + "node_modules/@astrojs/prism": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.0.0.tgz", + "integrity": "sha512-g61lZupWq1bYbcBnYZqdjndShr/J3l/oFobBKPA3+qMat146zce3nz2kdO4giGbhYDt4gYdhmoBz0vZJ4sIurQ==", + "dependencies": { + "prismjs": "^1.29.0" + }, + "engines": { + "node": ">=18.14.1" + } + }, + "node_modules/@astrojs/react": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-3.0.9.tgz", + "integrity": "sha512-31J5yF5p9yBFV1axBooLA9PB4B2+MYm7swWhtlezSsJiUNXRFo5Is9qI3teJ7cKgmaCv+ZA593Smskko0NGaDQ==", + "dev": true, + "dependencies": { + "@vitejs/plugin-react": "^4.2.0", + "ultrahtml": "^1.3.0" + }, + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "@types/react": "^17.0.50 || ^18.0.21", + "@types/react-dom": "^17.0.17 || ^18.0.6", + "react": "^17.0.2 || ^18.0.0", + "react-dom": "^17.0.2 || ^18.0.0" + } + }, + "node_modules/@astrojs/rss": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.2.tgz", + "integrity": "sha512-Hb9GKAyvsn5EUjZtB6SniesBScMQe7SQinEHLY5EFa74QEvgcWaXTmA0Mb0P3vqDSN3d/NTYbGivprrSAawfnA==", + "dependencies": { + "fast-xml-parser": "^4.2.7", + "kleur": "^4.1.5" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.0.5.tgz", + "integrity": "sha512-60eLzNjMza3ABypiQPUC6ElOSZNZeY5CwSwgJ03hfeonl+Db9x12CCzBFdTw7A5Mq+O54xEZVUrR0tB+yWgX8w==", + "dev": true, + "dependencies": { + "sitemap": "^7.1.1", + "zod": "^3.22.4" + } + }, + "node_modules/@astrojs/tailwind": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/tailwind/-/tailwind-5.1.0.tgz", + "integrity": "sha512-BJoCDKuWhU9FT2qYg+fr6Nfb3qP4ShtyjXGHKA/4mHN94z7BGcmauQK23iy+YH5qWvTnhqkd6mQPQ1yTZTe9Ig==", + "dev": true, + "dependencies": { + "autoprefixer": "^10.4.15", + "postcss": "^8.4.28", + "postcss-load-config": "^4.0.2" + }, + "peerDependencies": { + "astro": "^3.0.0 || ^4.0.0", + "tailwindcss": "^3.0.24" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.0.4.tgz", + "integrity": "sha512-A+0c7k/Xy293xx6odsYZuXiaHO0PL+bnDoXOc47sGDF5ffIKdKQGRPFl2NMlCF4L0NqN4Ynbgnaip+pPF0s7pQ==", + "dependencies": { + "ci-info": "^3.8.0", + "debug": "^4.3.4", + "dlv": "^1.1.3", + "dset": "^3.1.2", + "is-docker": "^3.0.0", + "is-wsl": "^3.0.0", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": ">=18.14.1" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz", + "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.6", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.6", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", + "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.6", + "@babel/types": "^7.23.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", + "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", + "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", + "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", + "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@commitlint/config-validator": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.6.7.tgz", + "integrity": "sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==", + "dev": true, + "optional": true, + "dependencies": { + "@commitlint/types": "^17.4.4", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz", + "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/load": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.7.1.tgz", + "integrity": "sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ==", + "dev": true, + "optional": true, + "dependencies": { + "@commitlint/config-validator": "^17.6.7", + "@commitlint/execute-rule": "^17.4.0", + "@commitlint/resolve-extends": "^17.6.7", + "@commitlint/types": "^17.4.4", + "@types/node": "20.4.7", + "chalk": "^4.1.0", + "cosmiconfig": "^8.0.0", + "cosmiconfig-typescript-loader": "^4.0.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0", + "resolve-from": "^5.0.0", + "ts-node": "^10.8.1", + "typescript": "^4.6.4 || ^5.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/load/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/load/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@commitlint/load/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/load/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "node_modules/@commitlint/load/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/load/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz", + "integrity": "sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==", + "dev": true, + "optional": true, + "dependencies": { + "@commitlint/config-validator": "^17.6.7", + "@commitlint/types": "^17.4.4", + "import-fresh": "^3.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/types": { + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz", + "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==", + "dev": true, + "optional": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@commitlint/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "node_modules/@commitlint/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "optional": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "optional": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@divriots/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@divriots/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-kQUVEgMDj0yE7LOdrDhKOC8JkfUzUKsUqp8m9WQDiSxim8Bnga+80opjXaCtHLhO3/W3DIZMow8QXtXUqNS+zA==", + "dev": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "encoding-sniffer": "^0.0.2", + "htmlparser2": "^9.0.0", + "parse5": "^7.1.2", + "parse5-htmlparser2-tree-adapter": "^7.0.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^5.22.1", + "whatwg-mimetype": "^3.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/@divriots/jampack": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/@divriots/jampack/-/jampack-0.23.2.tgz", + "integrity": "sha512-8mTmLwZ0DNVXkEHa1EH+8FUnCWihAabTFFsmtR+/OetVPS3nGPEUxygS8Grp6UZU7Ml0XdAlc0PO80vLym6OqA==", + "dev": true, + "dependencies": { + "@divriots/cheerio": "1.0.0-rc.12", + "@proload/core": "^0.3.3", + "@swc/core": "^1.3.100", + "add": "^2.0.6", + "browserslist": "^4.22.2", + "commander": "^10.0.1", + "critters": "^0.0.20", + "deepmerge": "^4.3.1", + "esbuild": "^0.19.9", + "file-type": "^18.7.0", + "globby": "^13.2.2", + "hasha": "^5.2.2", + "html-minifier-terser": "^7.2.0", + "kleur": "^4.1.5", + "lightningcss": "^1.22.1", + "mini-svg-data-uri": "^1.4.4", + "ora": "^7.0.1", + "quicklink": "^2.3.0", + "sharp": "^0.33.0", + "svgo": "^3.1.0", + "table": "^6.8.1", + "undici": "^5.24.0", + "unpic": "^3.16.0" + }, + "bin": { + "jampack": "dist/index.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@divriots/jampack/node_modules/quicklink": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/quicklink/-/quicklink-2.3.0.tgz", + "integrity": "sha512-FyTanYArl5Gz2/C0ZjErvfFJtem/+d1RM4eK0jiXO6mL4Zjje+xsYtcK3ZtKX2Yb3HSfah5HekWrH2qhttYQjQ==", + "dev": true, + "dependencies": { + "route-manifest": "^1.0.0", + "throttles": "^1.0.0" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" + } + }, + "node_modules/@divriots/jampack/node_modules/react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@divriots/jampack/node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.14.0" + } + }, + "node_modules/@divriots/jampack/node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/@emmetio/abbreviation": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz", + "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==", + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-abbreviation": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz", + "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==", + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/scanner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz", + "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==" + }, + "node_modules/@emnapi/runtime": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-0.44.0.tgz", + "integrity": "sha512-ZX/etZEZw8DR7zAB1eVQT40lNo0jeqpb6dCgOvctB6FIQ5PoXfMuNY8+ayQfu8tNQbAB8gQWSSJupR8NxeiZXw==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.10.tgz", + "integrity": "sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.10.tgz", + "integrity": "sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.10.tgz", + "integrity": "sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.10.tgz", + "integrity": "sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.10.tgz", + "integrity": "sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.10.tgz", + "integrity": "sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.10.tgz", + "integrity": "sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.10.tgz", + "integrity": "sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.10.tgz", + "integrity": "sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.10.tgz", + "integrity": "sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.10.tgz", + "integrity": "sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.10.tgz", + "integrity": "sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.10.tgz", + "integrity": "sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.10.tgz", + "integrity": "sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.10.tgz", + "integrity": "sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.10.tgz", + "integrity": "sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.10.tgz", + "integrity": "sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.10.tgz", + "integrity": "sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.10.tgz", + "integrity": "sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.10.tgz", + "integrity": "sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.10.tgz", + "integrity": "sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.10.tgz", + "integrity": "sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.10.tgz", + "integrity": "sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", + "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", + "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.1.tgz", + "integrity": "sha512-esr2BZ1x0bo+wl7Gx2hjssYhjrhUsD88VQulI0FrG8/otRQUOxLWHMBd1Y1qo2Gfg2KUvXNpT0ASnV9BzJCexw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.0" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.1.tgz", + "integrity": "sha512-YrnuB3bXuWdG+hJlXtq7C73lF8ampkhU3tMxg5Hh+E7ikxbUVOU9nlNtVTloDXz6pRHt2y2oKJq7DY/yt+UXYw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.0" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.0.tgz", + "integrity": "sha512-VzYd6OwnUR81sInf3alj1wiokY50DjsHz5bvfnsFpxs5tqQxESoHtJO6xyksDs3RIkyhMWq2FufXo6GNSU9BMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "macos": ">=11", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.0.tgz", + "integrity": "sha512-dD9OznTlHD6aovRswaPNEy8dKtSAmNo4++tO7uuR4o5VxbVAOoEQ1uSmN4iFAdQneTHws1lkTZeiXPrcCkh6IA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "macos": ">=10.13", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.0.tgz", + "integrity": "sha512-VwgD2eEikDJUk09Mn9Dzi1OW2OJFRQK+XlBTkUNmAWPrtj8Ly0yq05DFgu1VCMx2/DqCGQVi5A1dM9hTmxf3uw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.0.tgz", + "integrity": "sha512-xTYThiqEZEZc0PRU90yVtM3KE7lw1bKdnDQ9kCTHWbqWyHOe4NpPOtMGy27YnN51q0J5dqRrvicfPbALIOeAZA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.0.tgz", + "integrity": "sha512-o9E46WWBC6JsBlwU4QyU9578G77HBDT1NInd+aERfxeOPbk0qBZHgoDsQmA2v9TbqJRWzoBPx1aLOhprBMgPjw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.0.tgz", + "integrity": "sha512-naldaJy4hSVhWBgEjfdBY85CAa4UO+W1nx6a1sWStHZ7EUfNiuBTTN2KUYT5dH1+p/xij1t2QSXfCiFJoC5S/Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.0.tgz", + "integrity": "sha512-OdorplCyvmSAPsoJLldtLh3nLxRrkAAAOHsGWGDYfN0kh730gifK+UZb3dWORRa6EusNqCTjfXV4GxvgJ/nPDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.0.tgz", + "integrity": "sha512-FW8iK6rJrg+X2jKD0Ajhjv6y74lToIBEvkZhl42nZt563FfxkCYacrXZtd+q/sRQDypQLzY5WdLkVTbJoPyqNg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.1.tgz", + "integrity": "sha512-Ii4X1vnzzI4j0+cucsrYA5ctrzU9ciXERfJR633S2r39CiD8npqH2GMj63uFZRCFt3E687IenAdbwIpQOJ5BNA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.0" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.1.tgz", + "integrity": "sha512-59B5GRO2d5N3tIfeGHAbJps7cLpuWEQv/8ySd9109ohQ3kzyCACENkFVAnGPX00HwPTQcaBNF7HQYEfZyZUFfw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.0" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.1.tgz", + "integrity": "sha512-tRGrb2pHnFUXpOAj84orYNxHADBDIr0J7rrjwQrTNMQMWA4zy3StKmMvwsI7u3dEZcgwuMMooIIGWEWOjnmG8A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.0" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.1.tgz", + "integrity": "sha512-4y8osC0cAc1TRpy02yn5omBeloZZwS62fPZ0WUAYQiLhSFSpWJfY/gMrzKzLcHB9ulUV6ExFiu2elMaixKDbeg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.0" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.1.tgz", + "integrity": "sha512-D3lV6clkqIKUizNS8K6pkuCKNGmWoKlBGh5p0sLO2jQERzbakhu4bVX1Gz+RS4vTZBprKlWaf+/Rdp3ni2jLfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.0" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.1.tgz", + "integrity": "sha512-LOGKNu5w8uu1evVqUAUKTix2sQu1XDRIYbsi5Q0c/SrXhvJ4QyOx+GaajxmOg5PZSsSnCYPSmhjHHsRBx06/wQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.0" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.1.tgz", + "integrity": "sha512-vWI/sA+0p+92DLkpAMb5T6I8dg4z2vzCUnp8yvxHlwBpzN8CIcO3xlSXrLltSvK6iMsVMNswAv+ub77rsf25lA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/runtime": "^0.44.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.1.tgz", + "integrity": "sha512-/xhYkylsKL05R+NXGJc9xr2Tuw6WIVl2lubFJaFYfW4/MQ4J+dgjIo/T4qjNRizrqs/szF/lC9a5+updmY9jaQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.1.tgz", + "integrity": "sha512-XaM69X0n6kTEsp9tVYYLhXdg7Qj32vYJlAKRutxUsm1UlgQNx6BOhHwZPwukCGXBU2+tH87ip2eV1I/E8MQnZg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "devOptional": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@proload/core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@proload/core/-/core-0.3.3.tgz", + "integrity": "sha512-7dAFWsIK84C90AMl24+N/ProHKm4iw0akcnoKjRvbfHifJZBLhaDsDus1QJmhG12lXj4e/uB/8mB/0aduCW+NQ==", + "dev": true, + "dependencies": { + "deepmerge": "^4.2.2", + "escalade": "^3.1.1" + } + }, + "node_modules/@resvg/resvg-js": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.0.tgz", + "integrity": "sha512-Tf3YpbBKcQn991KKcw/vg7vZf98v01seSv6CVxZBbRkL/xyjnoYB6KgrFL6zskT1A4dWC/vg77KyNOW+ePaNlA==", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@resvg/resvg-js-android-arm-eabi": "2.6.0", + "@resvg/resvg-js-android-arm64": "2.6.0", + "@resvg/resvg-js-darwin-arm64": "2.6.0", + "@resvg/resvg-js-darwin-x64": "2.6.0", + "@resvg/resvg-js-linux-arm-gnueabihf": "2.6.0", + "@resvg/resvg-js-linux-arm64-gnu": "2.6.0", + "@resvg/resvg-js-linux-arm64-musl": "2.6.0", + "@resvg/resvg-js-linux-x64-gnu": "2.6.0", + "@resvg/resvg-js-linux-x64-musl": "2.6.0", + "@resvg/resvg-js-win32-arm64-msvc": "2.6.0", + "@resvg/resvg-js-win32-ia32-msvc": "2.6.0", + "@resvg/resvg-js-win32-x64-msvc": "2.6.0" + } + }, + "node_modules/@resvg/resvg-js-android-arm-eabi": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.0.tgz", + "integrity": "sha512-lJnZ/2P5aMocrFMW7HWhVne5gH82I8xH6zsfH75MYr4+/JOaVcGCTEQ06XFohGMdYRP3v05SSPLPvTM/RHjxfA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-android-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.0.tgz", + "integrity": "sha512-N527f529bjMwYWShZYfBD60dXA4Fux+D695QsHQ93BDYZSHUoOh1CUGUyICevnTxs7VgEl98XpArmUWBZQVMfQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-darwin-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-MabUKLVayEwlPo0mIqAmMt+qESN8LltCvv5+GLgVga1avpUrkxj/fkU1TKm8kQegutUjbP/B0QuMuUr0uhF8ew==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-darwin-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.0.tgz", + "integrity": "sha512-zrFetdnSw/suXjmyxSjfDV7i61hahv6DDG6kM7BYN2yJ3Es5+BZtqYZTcIWogPJedYKmzN1YTMWGd/3f0ubFiA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm-gnueabihf": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.0.tgz", + "integrity": "sha512-sH4gxXt7v7dGwjGyzLwn7SFGvwZG6DQqLaZ11MmzbCwd9Zosy1TnmrMJfn6TJ7RHezmQMgBPi18bl55FZ1AT4A==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm64-gnu": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.0.tgz", + "integrity": "sha512-fCyMncqCJtrlANADIduYF4IfnWQ295UKib7DAxFXQhBsM9PLDTpizr0qemZcCNadcwSVHnAIzL4tliZhCM8P6A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-ouLjTgBQHQyxLht4FdMPTvuY8xzJigM9EM2Tlu0llWkN1mKyTQrvYWi6TA6XnKdzDJHy7ZLpWpjZi7F5+Pg+Vg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-x64-gnu": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.0.tgz", + "integrity": "sha512-n3zC8DWsvxC1AwxpKFclIPapDFibs5XdIRoV/mcIlxlh0vseW1F49b97F33BtJQRmlntsqqN6GMMqx8byB7B+Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-x64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-n4tasK1HOlAxdTEROgYA1aCfsEKk0UOFDNd/AQTTZlTmCbHKXPq+O8npaaKlwXquxlVK8vrkcWbksbiGqbCAcw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-arm64-msvc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.0.tgz", + "integrity": "sha512-X2+EoBJFwDI5LDVb51Sk7ldnVLitMGr9WwU/i21i3fAeAXZb3hM16k67DeTy16OYkT2dk/RfU1tP1wG+rWbz2Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-ia32-msvc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.0.tgz", + "integrity": "sha512-L7oevWjQoUgK5W1fCKn0euSVemhDXVhrjtwqpc7MwBKKimYeiOshO1Li1pa8bBt5PESahenhWgdB6lav9O0fEg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-x64-msvc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.0.tgz", + "integrity": "sha512-8lJlghb+Unki5AyKgsnFbRJwkEj9r1NpwyuBG8yEJiG1W9eEGl03R3I7bsVa3haof/3J1NlWf0rzSa1G++A2iw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.1.tgz", + "integrity": "sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.1.tgz", + "integrity": "sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.1.tgz", + "integrity": "sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.1.tgz", + "integrity": "sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.1.tgz", + "integrity": "sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.1.tgz", + "integrity": "sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.1.tgz", + "integrity": "sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.1.tgz", + "integrity": "sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.1.tgz", + "integrity": "sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.1.tgz", + "integrity": "sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.1.tgz", + "integrity": "sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.1.tgz", + "integrity": "sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.1.tgz", + "integrity": "sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shuding/opentype.js": { + "version": "1.4.0-beta.0", + "resolved": "https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz", + "integrity": "sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==", + "dependencies": { + "fflate": "^0.7.3", + "string.prototype.codepointat": "^0.2.1" + }, + "bin": { + "ot": "bin/ot" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@swc/core": { + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.101.tgz", + "integrity": "sha512-w5aQ9qYsd/IYmXADAnkXPGDMTqkQalIi+kfFf/MHRKTpaOL7DHjMXwPp/n8hJ0qNjRvchzmPtOqtPBiER50d8A==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.101", + "@swc/core-darwin-x64": "1.3.101", + "@swc/core-linux-arm-gnueabihf": "1.3.101", + "@swc/core-linux-arm64-gnu": "1.3.101", + "@swc/core-linux-arm64-musl": "1.3.101", + "@swc/core-linux-x64-gnu": "1.3.101", + "@swc/core-linux-x64-musl": "1.3.101", + "@swc/core-win32-arm64-msvc": "1.3.101", + "@swc/core-win32-ia32-msvc": "1.3.101", + "@swc/core-win32-x64-msvc": "1.3.101" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.101.tgz", + "integrity": "sha512-mNFK+uHNPRXSnfTOG34zJOeMl2waM4hF4a2NY7dkMXrPqw9CoJn4MwTXJcyMiSz1/BnNjjTCHF3Yhj0jPxmkzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.101.tgz", + "integrity": "sha512-B085j8XOx73Fg15KsHvzYWG262bRweGr3JooO1aW5ec5pYbz5Ew9VS5JKYS03w2UBSxf2maWdbPz2UFAxg0whw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.101.tgz", + "integrity": "sha512-9xLKRb6zSzRGPqdz52Hy5GuB1lSjmLqa0lST6MTFads3apmx4Vgs8Y5NuGhx/h2I8QM4jXdLbpqQlifpzTlSSw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.101.tgz", + "integrity": "sha512-oE+r1lo7g/vs96Weh2R5l971dt+ZLuhaUX+n3BfDdPxNHfObXgKMjO7E+QS5RbGjv/AwiPCxQmbdCp/xN5ICJA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.101.tgz", + "integrity": "sha512-OGjYG3H4BMOTnJWJyBIovCez6KiHF30zMIu4+lGJTCrxRI2fAjGLml3PEXj8tC3FMcud7U2WUn6TdG0/te2k6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.101.tgz", + "integrity": "sha512-/kBMcoF12PRO/lwa8Z7w4YyiKDcXQEiLvM+S3G9EvkoKYGgkkz4Q6PSNhF5rwg/E3+Hq5/9D2R+6nrkF287ihg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.101.tgz", + "integrity": "sha512-kDN8lm4Eew0u1p+h1l3JzoeGgZPQ05qDE0czngnjmfpsH2sOZxVj1hdiCwS5lArpy7ktaLu5JdRnx70MkUzhXw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.101.tgz", + "integrity": "sha512-9Wn8TTLWwJKw63K/S+jjrZb9yoJfJwCE2RV5vPCCWmlMf3U1AXj5XuWOLUX+Rp2sGKau7wZKsvywhheWm+qndQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.101.tgz", + "integrity": "sha512-onO5KvICRVlu2xmr4//V2je9O2XgS1SGKpbX206KmmjcJhXN5EYLSxW9qgg+kgV5mip+sKTHTAu7IkzkAtElYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.101.tgz", + "integrity": "sha512-T3GeJtNQV00YmiVw/88/nxJ/H43CJvFnpvBHCVn17xbahiVUOPOduh3rc9LgAkKiNt/aV8vU3OJR+6PhfMR7UQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", + "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", + "dev": true + }, + "node_modules/@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", + "dev": true + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", + "integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==", + "dev": true, + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "dev": true + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "optional": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "optional": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "optional": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "optional": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" + }, + "node_modules/@types/github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==", + "dev": true + }, + "node_modules/@types/hast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz", + "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, + "node_modules/@types/nlcst": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-1.0.4.tgz", + "integrity": "sha512-ABoYdNQ/kBSsLvZAekMhIPMQ3YUZvavStpKYs7BjLLuKVmIMA0LUgZ7b54zzuWJRbHF80v1cNf4r90Vd6eMQDg==", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/nlcst/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + }, + "node_modules/@types/node": { + "version": "20.4.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz", + "integrity": "sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==", + "devOptional": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.48", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", + "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", + "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "dev": true + }, + "node_modules/@types/ungap__structured-clone": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@types/ungap__structured-clone/-/ungap__structured-clone-0.3.0.tgz", + "integrity": "sha512-eBWREUhVUGPze+bUW22AgUr05k8u+vETzuYdLYSvWqGTUe0KOf+zVnOB1qER5wMcw8V6D9Ar4DfJmVvD1yu0kQ==" + }, + "node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.0.tgz", + "integrity": "sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz", + "integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz", + "integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz", + "integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz", + "integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.19.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/@volar/kit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/kit/-/kit-1.11.1.tgz", + "integrity": "sha512-nqO+Hl9f1ygOK/3M7Hpnw0lhKvuMFhh823nilStpkTmm5WfrUnE+4WaQkb3dC6LM3TZq74j2m88yxRC+Z3sZZw==", + "dependencies": { + "@volar/language-service": "1.11.1", + "typesafe-path": "^0.2.2", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@volar/language-core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz", + "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", + "dependencies": { + "@volar/source-map": "1.11.1" + } + }, + "node_modules/@volar/language-server": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-1.11.1.tgz", + "integrity": "sha512-XYG4HcML2qimQV9UouQ7c1GuuqQw1NXoNDxAOAcfyYlz43P+HgzGQx4QEou+QMGHJeYIN86foDvkTN3fcopw9A==", + "dependencies": { + "@volar/language-core": "1.11.1", + "@volar/language-service": "1.11.1", + "@volar/typescript": "1.11.1", + "@vscode/l10n": "^0.0.16", + "path-browserify": "^1.0.1", + "request-light": "^0.7.0", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@volar/language-service": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-1.11.1.tgz", + "integrity": "sha512-dKo8z1UzQRPHnlXxwfONGrasS1wEWXMoLQiohZ8KgWqZALbekZCwdGImLZD4DeFGNjk3HTTdfeCzo3KjwohjEQ==", + "dependencies": { + "@volar/language-core": "1.11.1", + "@volar/source-map": "1.11.1", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@volar/source-map": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz", + "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", + "dependencies": { + "muggle-string": "^0.3.1" + } + }, + "node_modules/@volar/typescript": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", + "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", + "dependencies": { + "@volar/language-core": "1.11.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@vscode/emmet-helper": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.9.2.tgz", + "integrity": "sha512-MaGuyW+fa13q3aYsluKqclmh62Hgp0BpKIqS66fCxfOaBcVQ1OnMQxRRgQUYnCkxFISAQlkJ0qWWPyXjro1Qrg==", + "dependencies": { + "emmet": "^2.4.3", + "jsonc-parser": "^2.3.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.15.1", + "vscode-uri": "^2.1.2" + } + }, + "node_modules/@vscode/emmet-helper/node_modules/vscode-uri": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", + "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==" + }, + "node_modules/@vscode/l10n": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.16.tgz", + "integrity": "sha512-JT5CvrIYYCrmB+dCana8sUqJEcGB1ZDXNLMQ2+42bW995WmNoenijWMUdZfwmuQUTQcEVVIa2OecZzTYWUW9Cg==" + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "optional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz", + "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==", + "dev": true + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/astro": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-4.2.1.tgz", + "integrity": "sha512-TcrveW2/lohmljrbTUgcDxajEdF1yK+zBvb7SXroloGix/d4jkegO6GANFgvyy0zprMyajW7qgJEFyhWUX86Vw==", + "dependencies": { + "@astrojs/compiler": "^2.3.4", + "@astrojs/internal-helpers": "0.2.1", + "@astrojs/markdown-remark": "4.1.0", + "@astrojs/telemetry": "3.0.4", + "@babel/core": "^7.23.3", + "@babel/generator": "^7.23.3", + "@babel/parser": "^7.23.3", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/traverse": "^7.23.3", + "@babel/types": "^7.23.3", + "@types/babel__core": "^7.20.4", + "acorn": "^8.11.2", + "aria-query": "^5.3.0", + "axobject-query": "^4.0.0", + "boxen": "^7.1.1", + "chokidar": "^3.5.3", + "ci-info": "^4.0.0", + "clsx": "^2.0.0", + "common-ancestor-path": "^1.0.1", + "cookie": "^0.6.0", + "debug": "^4.3.4", + "deterministic-object-hash": "^2.0.1", + "devalue": "^4.3.2", + "diff": "^5.1.0", + "dlv": "^1.1.3", + "dset": "^3.1.3", + "es-module-lexer": "^1.4.1", + "esbuild": "^0.19.6", + "estree-walker": "^3.0.3", + "execa": "^8.0.1", + "fast-glob": "^3.3.2", + "flattie": "^1.1.0", + "github-slugger": "^2.0.0", + "gray-matter": "^4.0.3", + "html-escaper": "^3.0.3", + "http-cache-semantics": "^4.1.1", + "js-yaml": "^4.1.0", + "kleur": "^4.1.4", + "magic-string": "^0.30.3", + "mdast-util-to-hast": "13.0.2", + "mime": "^3.0.0", + "ora": "^7.0.1", + "p-limit": "^5.0.0", + "p-queue": "^8.0.1", + "path-to-regexp": "^6.2.1", + "preferred-pm": "^3.1.2", + "probe-image-size": "^7.2.3", + "prompts": "^2.4.2", + "rehype": "^13.0.1", + "resolve": "^1.22.4", + "semver": "^7.5.4", + "server-destroy": "^1.0.1", + "shikiji": "^0.9.18", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0", + "tsconfck": "^3.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.1", + "vite": "^5.0.10", + "vitefu": "^0.2.5", + "which-pm": "^2.1.1", + "yargs-parser": "^21.1.1", + "zod": "^3.22.4" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": ">=18.14.1", + "npm": ">=6.14.0" + }, + "optionalDependencies": { + "sharp": "^0.32.6" + } + }, + "node_modules/astro-eslint-parser": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/astro-eslint-parser/-/astro-eslint-parser-0.16.2.tgz", + "integrity": "sha512-JJ/AlnPEiFgu5Tuuj9AxkSjiyobg2x7hjiXpglZtyzN2Bkj7GSXVppDQL6oavwtk0kHOAAkvyuJJ+8cC5c1NqQ==", + "dev": true, + "dependencies": { + "@astrojs/compiler": "^2.0.0", + "@typescript-eslint/scope-manager": "^5.0.0", + "@typescript-eslint/types": "^5.0.0", + "astrojs-compiler-sync": "^0.3.0", + "debug": "^4.3.4", + "entities": "^4.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.8" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/astro-eslint-parser/node_modules/@astrojs/compiler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.1.0.tgz", + "integrity": "sha512-Mp+qrNhly+27bL/Zq8lGeUY+YrdoU0eDfIlAeGIPrzt0PnI/jGpvPUdCaugv4zbCrDkOUScFfcbeEiYumrdJnw==", + "dev": true + }, + "node_modules/astro-eslint-parser/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/astro-eslint-parser/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/astro-eslint-parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/astro/node_modules/@astrojs/compiler": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.3.4.tgz", + "integrity": "sha512-33/YtWoBCE0cBUNy1kh78FCDXBoBANX87ShgATlAHECYbG2+buNTAgq4Xgz4t5NgnEHPN21GIBC2Mvvwisoutw==" + }, + "node_modules/astro/node_modules/ci-info": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", + "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/astro/node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/astro/node_modules/rollup": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.1.tgz", + "integrity": "sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.1", + "@rollup/rollup-android-arm64": "4.9.1", + "@rollup/rollup-darwin-arm64": "4.9.1", + "@rollup/rollup-darwin-x64": "4.9.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.1", + "@rollup/rollup-linux-arm64-gnu": "4.9.1", + "@rollup/rollup-linux-arm64-musl": "4.9.1", + "@rollup/rollup-linux-riscv64-gnu": "4.9.1", + "@rollup/rollup-linux-x64-gnu": "4.9.1", + "@rollup/rollup-linux-x64-musl": "4.9.1", + "@rollup/rollup-win32-arm64-msvc": "4.9.1", + "@rollup/rollup-win32-ia32-msvc": "4.9.1", + "@rollup/rollup-win32-x64-msvc": "4.9.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/astro/node_modules/sharp": { + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.1", + "semver": "^7.5.4", + "simple-get": "^4.0.1", + "tar-fs": "^3.0.4", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/string-width": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz", + "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/astro/node_modules/vite": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz", + "integrity": "sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==", + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/astrojs-compiler-sync": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/astrojs-compiler-sync/-/astrojs-compiler-sync-0.3.3.tgz", + "integrity": "sha512-LbhchWgsvjvRBb5n5ez8/Q/f9ZKViuox27VxMDOdTUm8MRv9U7phzOiLue5KluqTmC0z1LId4gY2SekvoDrkuw==", + "dev": true, + "dependencies": { + "synckit": "^0.8.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "@astrojs/compiler": ">=0.27.0" + } + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", + "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001520", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "optional": true + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==" + }, + "node_modules/base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/boxen": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", + "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.1", + "chalk": "^5.2.0", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/boxen/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "devOptional": true + }, + "node_modules/buffer/node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001572", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001572.tgz", + "integrity": "sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "optional": true + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz", + "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "devOptional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "devOptional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "devOptional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "devOptional": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/commitizen": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", + "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", + "dev": true, + "dependencies": { + "cachedir": "2.3.0", + "cz-conventional-changelog": "3.3.0", + "dedent": "0.7.0", + "detect-indent": "6.1.0", + "find-node-modules": "^2.1.2", + "find-root": "1.1.0", + "fs-extra": "9.1.0", + "glob": "7.2.3", + "inquirer": "8.2.5", + "is-utf8": "^0.2.1", + "lodash": "4.17.21", + "minimist": "1.2.7", + "strip-bom": "4.0.0", + "strip-json-comments": "3.1.1" + }, + "bin": { + "commitizen": "bin/commitizen", + "cz": "bin/git-cz", + "git-cz": "bin/git-cz" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/conventional-commit-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", + "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "optional": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz", + "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "ts-node": ">=10", + "typescript": ">=4" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "optional": true + }, + "node_modules/critters": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.20.tgz", + "integrity": "sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/critters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/critters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/critters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-background-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/css-background-parser/-/css-background-parser-0.1.0.tgz", + "integrity": "sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==" + }, + "node_modules/css-box-shadow": { + "version": "1.0.0-3", + "resolved": "https://registry.npmjs.org/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz", + "integrity": "sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==" + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "dev": true + }, + "node_modules/cz-conventional-changelog": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", + "integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "commitizen": "^4.0.3", + "conventional-commit-types": "^3.0.0", + "lodash.map": "^4.5.1", + "longest": "^2.0.1", + "word-wrap": "^1.0.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@commitlint/load": ">6.1.1" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-browser/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/default-browser/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "devOptional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "dependencies": { + "base-64": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/devalue": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", + "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dset": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", + "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.616", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz", + "integrity": "sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==" + }, + "node_modules/emmet": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.6.tgz", + "integrity": "sha512-dJfbdY/hfeTyf/Ef7Y7ubLYzkBvPQ912wPaeVYpAxvFxkEBf/+hJu4H6vhAvFN6HlxqedlfVn2x1S44FfQ97pg==", + "dependencies": { + "@emmetio/abbreviation": "^2.3.3", + "@emmetio/css-abbreviation": "^2.1.8" + } + }, + "node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" + }, + "node_modules/encoding-sniffer": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.0.2.tgz", + "integrity": "sha512-c0VAA4I8IhhcXLe1W6wkAVvzImTFjWY1gns0FfNXkr8wCrU4x1RD2Y81PJgBmTJWGimtM8tJAV0poDNbSxL4vQ==", + "dev": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^2.0.0" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "optional": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "optional": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" + }, + "node_modules/esbuild": { + "version": "0.19.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.10.tgz", + "integrity": "sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.10", + "@esbuild/android-arm": "0.19.10", + "@esbuild/android-arm64": "0.19.10", + "@esbuild/android-x64": "0.19.10", + "@esbuild/darwin-arm64": "0.19.10", + "@esbuild/darwin-x64": "0.19.10", + "@esbuild/freebsd-arm64": "0.19.10", + "@esbuild/freebsd-x64": "0.19.10", + "@esbuild/linux-arm": "0.19.10", + "@esbuild/linux-arm64": "0.19.10", + "@esbuild/linux-ia32": "0.19.10", + "@esbuild/linux-loong64": "0.19.10", + "@esbuild/linux-mips64el": "0.19.10", + "@esbuild/linux-ppc64": "0.19.10", + "@esbuild/linux-riscv64": "0.19.10", + "@esbuild/linux-s390x": "0.19.10", + "@esbuild/linux-x64": "0.19.10", + "@esbuild/netbsd-x64": "0.19.10", + "@esbuild/openbsd-x64": "0.19.10", + "@esbuild/sunos-x64": "0.19.10", + "@esbuild/win32-arm64": "0.19.10", + "@esbuild/win32-ia32": "0.19.10", + "@esbuild/win32-x64": "0.19.10" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-compat-utils": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.4.1.tgz", + "integrity": "sha512-5N7ZaJG5pZxUeNNJfUchurLVrunD1xJvyg5kYOIVF8kg1f3ajTikmAu/5fZ9w100omNPOoMjngRszh/Q/uFGMg==", + "dev": true, + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-astro": { + "version": "0.31.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-astro/-/eslint-plugin-astro-0.31.3.tgz", + "integrity": "sha512-dxNT4cusvLiWFT0ebTd7HP9GixZbua7QYARD1ilqhJEANCSJA7RIas57vnD1PHNDCdYyTit7JU4NDPLWkcG2HA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@jridgewell/sourcemap-codec": "^1.4.14", + "@typescript-eslint/types": "^5.25.0", + "astro-eslint-parser": "^0.16.0", + "eslint-compat-utils": "^0.4.0", + "postcss": "^8.4.14", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-astro/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "optional": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-xml-parser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", + "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fflate": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz", + "integrity": "sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-type": { + "version": "18.7.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.7.0.tgz", + "integrity": "sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==", + "dev": true, + "dependencies": { + "readable-web-to-node-stream": "^3.0.2", + "strtok3": "^7.0.0", + "token-types": "^5.0.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-node-modules": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", + "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", + "dev": true, + "dependencies": { + "findup-sync": "^4.0.0", + "merge": "^2.1.1" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-yarn-workspace-root2": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", + "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==", + "dependencies": { + "micromatch": "^4.0.2", + "pkg-dir": "^4.2.0" + } + }, + "node_modules/findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "dev": true, + "dependencies": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/flattie": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.0.tgz", + "integrity": "sha512-xU99gDEnciIwJdGcBmNHnzTJ/w5AT+VFJOu6sTB6WM8diOYNA3Sa+K1DiEBQ7XH4QikQq3iFW1U+jRVcotQnBw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/fraction.js": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", + "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "optional": true + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/fuse.js": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz", + "integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==", + "engines": { + "node": ">=10" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "optional": true + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "dev": true, + "optional": true, + "dependencies": { + "ini": "^1.3.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz", + "integrity": "sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", + "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^8.0.0", + "property-information": "^6.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.1.tgz", + "integrity": "sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.0.tgz", + "integrity": "sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-raw": "^9.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", + "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hex-rgb": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/hex-rgb/-/hex-rgb-4.3.0.tgz", + "integrity": "sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==" + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/htmlparser2": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.0.0.tgz", + "integrity": "sha512-uxbSI98wmFT/G4P2zXx4OVx04qWUmyFPrD2/CNepa2Zo3GPNaCaaxElDgwUrwYWkK1nr9fft0Ya8dws8coDLLQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", + "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "devOptional": true + }, + "node_modules/inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inquirer/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/inquirer/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "optional": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jiti": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", + "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "optional": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", + "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.22.1.tgz", + "integrity": "sha512-Fy45PhibiNXkm0cK5FJCbfO8Y6jUpD/YcHf/BtuI+jvYYqSXKF4muk61jjE8YxCR9y+hDYIWSzHTc+bwhDE6rQ==", + "devOptional": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.22.1", + "lightningcss-darwin-x64": "1.22.1", + "lightningcss-freebsd-x64": "1.22.1", + "lightningcss-linux-arm-gnueabihf": "1.22.1", + "lightningcss-linux-arm64-gnu": "1.22.1", + "lightningcss-linux-arm64-musl": "1.22.1", + "lightningcss-linux-x64-gnu": "1.22.1", + "lightningcss-linux-x64-musl": "1.22.1", + "lightningcss-win32-x64-msvc": "1.22.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.22.1.tgz", + "integrity": "sha512-ldvElu+R0QimNTjsKpaZkUv3zf+uefzLy/R1R19jtgOfSRM+zjUCUgDhfEDRmVqJtMwYsdhMI2aJtJChPC6Osg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.22.1.tgz", + "integrity": "sha512-5p2rnlVTv6Gpw4PlTLq925nTVh+HFh4MpegX8dPDYJae+NFVjQ67gY7O6iHIzQjLipDiYejFF0yHrhjU3XgLBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.22.1.tgz", + "integrity": "sha512-1FaBtcFrZqB2hkFbAxY//Pnp8koThvyB6AhjbdVqKD4/pu13Rl91fKt2N9qyeQPUt3xy7ORUvSO+dPk3J6EjXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.22.1.tgz", + "integrity": "sha512-6rub98tYGfE5I5j0BP8t/2d4BZyu1S7Iz9vUkm0H26snAFHYxLfj3RbQn0xHHIePSetjLnhcg3QlfwUAkD/FYg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.22.1.tgz", + "integrity": "sha512-nYO5qGtb/1kkTZu3FeTiM+2B2TAb7m2DkLCTgQIs2bk2o9aEs7I96fwySKcoHWQAiQDGR9sMux9vkV4KQXqPaQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.22.1.tgz", + "integrity": "sha512-MCV6RuRpzXbunvzwY644iz8cw4oQxvW7oer9xPkdadYqlEyiJJ6wl7FyJOH7Q6ZYH4yjGAUCvxDBxPbnDu9ZVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.22.1.tgz", + "integrity": "sha512-RjNgpdM20VUXgV7us/VmlO3Vn2ZRiDnc3/bUxCVvySZWPiVPprpqW/QDWuzkGa+NCUf6saAM5CLsZLSxncXJwg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.22.1.tgz", + "integrity": "sha512-ZgO4C7Rd6Hv/5MnyY2KxOYmIlzk4rplVolDt3NbkNR8DndnyX0Q5IR4acJWNTBICQ21j3zySzKbcJaiJpk/4YA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.22.1.tgz", + "integrity": "sha512-4pozV4eyD0MDET41ZLHAeBo+H04Nm2UEYIk5w/ts40231dRFV7E0cjwbnZvSoc1DXFgecAhiC0L16ruv/ZDCpg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/linebreak": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz", + "integrity": "sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==", + "dependencies": { + "base64-js": "0.0.8", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/lint-staged": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.0.tgz", + "integrity": "sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==", + "dev": true, + "dependencies": { + "chalk": "5.3.0", + "commander": "11.1.0", + "debug": "4.3.4", + "execa": "8.0.1", + "lilconfig": "3.0.0", + "listr2": "8.0.0", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.4" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/lint-staged/node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/listr2": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.0.tgz", + "integrity": "sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==", + "dev": true, + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.0.0", + "rfdc": "^1.3.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz", + "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/load-yaml-file": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz", + "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==", + "dependencies": { + "graceful-fs": "^4.1.5", + "js-yaml": "^3.13.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/load-yaml-file/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/load-yaml-file/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/load-yaml-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/load-yaml-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true, + "optional": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "optional": true + }, + "node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-update": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", + "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^6.2.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^7.0.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "dev": true, + "dependencies": { + "type-fest": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz", + "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/longest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", + "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", + "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "optional": true + }, + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-heading-range": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/mdast-util-heading-range/-/mdast-util-heading-range-2.1.5.tgz", + "integrity": "sha512-jXbFD0C+MfRkwsaze+btzG9CmVrxnc5kpcJLtx3SvSlPWnNdGMlDRHKDB9/TIPEq9nRHnkixppT8yvaUJ5agJg==", + "dependencies": { + "mdast-util-to-string": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz", + "integrity": "sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.0.2.tgz", + "integrity": "sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-toc": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-7.0.0.tgz", + "integrity": "sha512-C28UcSqjmnWuvgT8d97qpaItHKvySqVPAECUzqQ51xuMyNFFJwcFoKW77KoMjtXrclTidLQFDzLUmTmrshRweA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/ungap__structured-clone": "^0.3.0", + "@ungap/structured-clone": "^1.0.0", + "github-slugger": "^2.0.0", + "mdast-util-to-string": "^4.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-toc/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "node_modules/merge": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz", + "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", + "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", + "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz", + "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "devOptional": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "optional": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nlcst-to-string": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-3.1.1.tgz", + "integrity": "sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==", + "dependencies": { + "@types/nlcst": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-abi": { + "version": "3.54.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz", + "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==", + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "optional": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", + "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.9.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.3.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "string-width": "^6.1.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.0.1.tgz", + "integrity": "sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", + "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-css-color": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/parse-css-color/-/parse-css-color-0.2.1.tgz", + "integrity": "sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==", + "dependencies": { + "color-name": "^1.1.4", + "hex-rgb": "^4.1.0" + } + }, + "node_modules/parse-css-color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-latin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-5.0.1.tgz", + "integrity": "sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg==", + "dependencies": { + "nlcst-to-string": "^3.0.0", + "unist-util-modify-children": "^3.0.0", + "unist-util-visit-children": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/peek-readable": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", + "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "engines": { + "node": ">=14" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prebuild-install/node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/prebuild-install/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/prebuild-install/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/prebuild-install/node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/prebuild-install/node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/prebuild-install/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/preferred-pm": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.1.2.tgz", + "integrity": "sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==", + "dependencies": { + "find-up": "^5.0.0", + "find-yarn-workspace-root2": "1.2.16", + "path-exists": "^4.0.0", + "which-pm": "2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/preferred-pm/node_modules/which-pm": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz", + "integrity": "sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==", + "dependencies": { + "load-yaml-file": "^0.2.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8.15" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", + "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", + "devOptional": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-astro": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-astro/-/prettier-plugin-astro-0.13.0.tgz", + "integrity": "sha512-5HrJNnPmZqTUNoA97zn4gNQv9BgVhv+et03314WpQ9H9N8m2L9OSV798olwmG2YLXPl1iSstlJCR1zB3x5xG4g==", + "devOptional": true, + "dependencies": { + "@astrojs/compiler": "^1.5.5", + "prettier": "^3.0.0", + "sass-formatter": "^0.7.6" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/prettier-plugin-tailwindcss": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.11.tgz", + "integrity": "sha512-AvI/DNyMctyyxGOjyePgi/gqj5hJYClZ1avtQvLlqMT3uDZkRbi4HhGUpok3DRzv9z7Lti85Kdj3s3/1CeNI0w==", + "dev": true, + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "@ianvs/prettier-plugin-sort-imports": "*", + "@prettier/plugin-pug": "*", + "@shopify/prettier-plugin-liquid": "*", + "@trivago/prettier-plugin-sort-imports": "*", + "prettier": "^3.0", + "prettier-plugin-astro": "*", + "prettier-plugin-css-order": "*", + "prettier-plugin-import-sort": "*", + "prettier-plugin-jsdoc": "*", + "prettier-plugin-marko": "*", + "prettier-plugin-organize-attributes": "*", + "prettier-plugin-organize-imports": "*", + "prettier-plugin-style-order": "*", + "prettier-plugin-svelte": "*" + }, + "peerDependenciesMeta": { + "@ianvs/prettier-plugin-sort-imports": { + "optional": true + }, + "@prettier/plugin-pug": { + "optional": true + }, + "@shopify/prettier-plugin-liquid": { + "optional": true + }, + "@trivago/prettier-plugin-sort-imports": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + }, + "prettier-plugin-css-order": { + "optional": true + }, + "prettier-plugin-import-sort": { + "optional": true + }, + "prettier-plugin-jsdoc": { + "optional": true + }, + "prettier-plugin-marko": { + "optional": true + }, + "prettier-plugin-organize-attributes": { + "optional": true + }, + "prettier-plugin-organize-imports": { + "optional": true + }, + "prettier-plugin-style-order": { + "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + }, + "prettier-plugin-twig-melody": { + "optional": true + } + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/probe-image-size": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.2.3.tgz", + "integrity": "sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==", + "dependencies": { + "lodash.merge": "^4.6.2", + "needle": "^2.5.2", + "stream-parser": "~0.3.1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", + "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "optional": true + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "peer": true + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "dev": true, + "dependencies": { + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexparam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-1.3.0.tgz", + "integrity": "sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/rehype": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.1.tgz", + "integrity": "sha512-AcSLS2mItY+0fYu9xKxOu1LhUZeBZZBx8//5HKzF+0XP+eP8+6a5MXn2+DW2kfXR6Dtp1FEXMVrjyKAcvcU8vg==", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.0.tgz", + "integrity": "sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", + "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-collapse": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/remark-collapse/-/remark-collapse-0.1.2.tgz", + "integrity": "sha512-x2lhtaT4nR1Tkp/hftoeiMHbdAntxu5Q9D6lymwMqUtoF2pg3bqNaa8NO/8yyOVhddYk0d0dkhGc+avGUf0lZA==", + "dependencies": { + "mdast-util-heading-range": "^2.0.1", + "mdast-util-to-string": "^1.0.2" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", + "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", + "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-2.1.0.tgz", + "integrity": "sha512-qoF6Vz3BjU2tP6OfZqHOvCU0ACmu/6jhGaINSQRI9mM7wCxNQTKB3JUAN4SVoN2ybElEDTxBIABRep7e569iJw==", + "dependencies": { + "retext": "^8.1.0", + "retext-smartypants": "^5.2.0", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-toc": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-toc/-/remark-toc-9.0.0.tgz", + "integrity": "sha512-KJ9txbo33GjDAV1baHFze7ij4G8c7SGYoY8Kzsm2gzFpbhL/bSoVpMMzGa3vrNDSWASNd/3ppAqL7cP2zD6JIA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-toc": "^7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/request-light": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz", + "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "optional": true, + "dependencies": { + "global-dirs": "^0.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/retext": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-8.1.0.tgz", + "integrity": "sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==", + "dependencies": { + "@types/nlcst": "^1.0.0", + "retext-latin": "^3.0.0", + "retext-stringify": "^3.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-3.1.0.tgz", + "integrity": "sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==", + "dependencies": { + "@types/nlcst": "^1.0.0", + "parse-latin": "^5.0.0", + "unherit": "^3.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + }, + "node_modules/retext-latin/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin/node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-5.2.0.tgz", + "integrity": "sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw==", + "dependencies": { + "@types/nlcst": "^1.0.0", + "nlcst-to-string": "^3.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + }, + "node_modules/retext-smartypants/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants/node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants/node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants/node_modules/unist-util-visit-parents": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants/node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-3.1.0.tgz", + "integrity": "sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==", + "dependencies": { + "@types/nlcst": "^1.0.0", + "nlcst-to-string": "^3.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + }, + "node_modules/retext-stringify/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify/node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + }, + "node_modules/retext/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext/node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.1.tgz", + "integrity": "sha512-c+ebvQz0VIH4KhhCpDsI+Bik0eT8ZFEVZEYw0cGMVqIP8zc+gnwl7iXCamTw7vzv2MeuZFZfdx5JJIq+ehzDlg==", + "devOptional": true, + "peer": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/route-manifest": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/route-manifest/-/route-manifest-1.0.0.tgz", + "integrity": "sha512-qn0xJr4nnF4caj0erOLLAHYiNyzqhzpUbgDQcEHrmBoG4sWCDLnIXLH7VccNSxe9cWgbP2Kw/OjME+eH3CeRSA==", + "dev": true, + "dependencies": { + "regexparam": "^1.3.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/run-applescript/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/run-applescript/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/s.color": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/s.color/-/s.color-0.0.15.tgz", + "integrity": "sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==", + "devOptional": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass-formatter": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/sass-formatter/-/sass-formatter-0.7.8.tgz", + "integrity": "sha512-7fI2a8THglflhhYis7k06eUf92VQuJoXzEs2KRP0r1bluFxKFvLx0Ns7c478oYGM0fPfrr846ZRWVi2MAgHt9Q==", + "devOptional": true, + "dependencies": { + "suf-log": "^2.5.3" + } + }, + "node_modules/satori": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/satori/-/satori-0.10.11.tgz", + "integrity": "sha512-yLm1xPRPZUaKcBZJ6nmezoJjHB4MqV8x7Mu0PyZUJodRWRDD27UbeMwzuY9LEGG57WYLO4CQsGPlbHWV1Ex9TQ==", + "dependencies": { + "@shuding/opentype.js": "1.4.0-beta.0", + "css-background-parser": "^0.1.0", + "css-box-shadow": "1.0.0-3", + "css-to-react-native": "^3.0.0", + "emoji-regex": "^10.2.1", + "escape-html": "^1.0.3", + "linebreak": "^1.1.0", + "parse-css-color": "^0.2.1", + "postcss-value-parser": "^4.2.0", + "yoga-wasm-web": "^0.3.3" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" + }, + "node_modules/sharp": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.1.tgz", + "integrity": "sha512-iAYUnOdTqqZDb3QjMneBKINTllCJDZ3em6WaWy7NPECM4aHncvqHRm0v0bN9nqJxMiwamv5KIdauJ6lUzKDpTQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "semver": "^7.5.4" + }, + "engines": { + "libvips": ">=8.15.0", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.1", + "@img/sharp-darwin-x64": "0.33.1", + "@img/sharp-libvips-darwin-arm64": "1.0.0", + "@img/sharp-libvips-darwin-x64": "1.0.0", + "@img/sharp-libvips-linux-arm": "1.0.0", + "@img/sharp-libvips-linux-arm64": "1.0.0", + "@img/sharp-libvips-linux-s390x": "1.0.0", + "@img/sharp-libvips-linux-x64": "1.0.0", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.0", + "@img/sharp-libvips-linuxmusl-x64": "1.0.0", + "@img/sharp-linux-arm": "0.33.1", + "@img/sharp-linux-arm64": "0.33.1", + "@img/sharp-linux-s390x": "0.33.1", + "@img/sharp-linux-x64": "0.33.1", + "@img/sharp-linuxmusl-arm64": "0.33.1", + "@img/sharp-linuxmusl-x64": "0.33.1", + "@img/sharp-wasm32": "0.33.1", + "@img/sharp-win32-ia32": "0.33.1", + "@img/sharp-win32-x64": "0.33.1" + } + }, + "node_modules/sharp/node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shikiji": { + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/shikiji/-/shikiji-0.9.19.tgz", + "integrity": "sha512-Kw2NHWktdcdypCj1GkKpXH4o6Vxz8B8TykPlPuLHOGSV8VkhoCLcFOH4k19K4LXAQYRQmxg+0X/eM+m2sLhAkg==", + "dependencies": { + "shikiji-core": "0.9.19" + } + }, + "node_modules/shikiji-core": { + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/shikiji-core/-/shikiji-core-0.9.19.tgz", + "integrity": "sha512-AFJu/vcNT21t0e6YrfadZ+9q86gvPum6iywRyt1OtIPjPFe25RQnYJyxHQPMLKCCWA992TPxmEmbNcOZCAJclw==" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "devOptional": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "devOptional": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/sitemap": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", + "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", + "dev": true, + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "dev": true + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "devOptional": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dependencies": { + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", + "dependencies": { + "debug": "2" + } + }, + "node_modules/stream-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stream-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/streamx": { + "version": "2.15.6", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", + "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", + "optional": true, + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", + "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^10.2.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string.prototype.codepointat": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==" + }, + "node_modules/stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/strtok3": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", + "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", + "dev": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^5.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/suf-log": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/suf-log/-/suf-log-2.5.3.tgz", + "integrity": "sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==", + "devOptional": true, + "dependencies": { + "s.color": "0.0.15" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.1.0.tgz", + "integrity": "sha512-R5SnNA89w1dYgNv570591F66v34b3eQShpIBcQtZtM5trJwm1VvxbIoMpRYY3ybTAutcKTLEmTsdnaknOHbiQA==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "css-what": "^6.1.0", + "csso": "5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/table/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/table/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar-fs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "optional": true, + "dependencies": { + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "optional": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/terser": { + "version": "5.19.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz", + "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==", + "devOptional": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "devOptional": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throttles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttles/-/throttles-1.0.1.tgz", + "integrity": "sha512-fab7Xg+zELr9KOv4fkaBoe/b3L0GMGLd0IBSCn16GoE/Qx6/OfCr1eGNyEcDU2pUA79qQfZ8kPQWlRuok4YwTw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/token-types": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", + "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", + "dev": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "optional": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "optional": true + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "optional": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfck": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.0.0.tgz", + "integrity": "sha512-w3wnsIrJNi7avf4Zb0VjOoodoO0woEqGgZGQm+LHH9przdUI+XDKsWAXwxHA1DaRTjeuZNcregSzr7RaA8zG9A==", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typesafe-path": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/typesafe-path/-/typesafe-path-0.2.2.tgz", + "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==" + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-auto-import-cache": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.2.tgz", + "integrity": "sha512-+laqe5SFL1vN62FPOOJSUDTZxtgsoOXjneYOXIpx5rQ4UMiN89NAtJLpqLqyebv9fgQ/IMeeTX+mQyRnwvJzvg==", + "dependencies": { + "semver": "^7.3.8" + } + }, + "node_modules/ultrahtml": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.5.2.tgz", + "integrity": "sha512-qh4mBffhlkiXwDAOxvSGxhL0QEQsTbnP9BozOK3OYPEGvPvdWzvAUaXNtUSMdNsKDtuyjEbyVUPFZ52SSLhLqw==", + "dev": true + }, + "node_modules/undici": { + "version": "5.26.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.3.tgz", + "integrity": "sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==", + "dev": true, + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/unherit": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-3.0.1.tgz", + "integrity": "sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-3.1.1.tgz", + "integrity": "sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==", + "dependencies": { + "@types/unist": "^2.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-2.0.2.tgz", + "integrity": "sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpic": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/unpic/-/unpic-3.16.0.tgz", + "integrity": "sha512-XXvQGL+fvzwEX3aPXggTCrzySFPqvpC8r1LKy5ft9573AoX8CrszmA0uOzi6xgylCvvqFg46IDOudJKzM2lQ5A==", + "dev": true + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "optional": true + }, + "node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", + "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", + "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", + "devOptional": true, + "peer": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "devOptional": true, + "hasInstallScript": true, + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/vitefu": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/volar-service-css": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.17.tgz", + "integrity": "sha512-bEDJykygMzn2+a9ud6KwZZLli9eqarxApAXZuf2CqJJh6Trw1elmbBCo9SlPfqMrIhpFnwV0Sa+Xoc9x5WPeGw==", + "dependencies": { + "vscode-css-languageservice": "^6.2.10", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~1.11.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-emmet": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.17.tgz", + "integrity": "sha512-C6hVnuQL52MqaydkrblYUbzIo5ZmIGo1hR8wmpcCjs5uNcjqn8aPqZRfznhLiUSaPHpFC+zQxJwFcZI9/u2iKQ==", + "dependencies": { + "@vscode/emmet-helper": "^2.9.2", + "volar-service-html": "0.0.17" + }, + "peerDependencies": { + "@volar/language-service": "~1.11.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-html": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.17.tgz", + "integrity": "sha512-OGkP+ZTo13j/+enafGe+esXvda/W4eU78YNLbbHxtV3rnX4odVrewenLJmXiECg6wdQz/PG8rLijZqQnDUYkfw==", + "dependencies": { + "vscode-html-languageservice": "^5.1.0", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~1.11.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-prettier": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.17.tgz", + "integrity": "sha512-YYnzZ+OT0M3Bx+xKuoAfs/uVuxk7ofz4dkZDQqjwa9iC63Ay4YGqONtmHd+xsO3lufkEBXlAQCbofDeZbSz3YQ==", + "peerDependencies": { + "@volar/language-service": "~1.11.0", + "prettier": "^2.2 || ^3.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + }, + "prettier": { + "optional": true + } + } + }, + "node_modules/volar-service-typescript": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.17.tgz", + "integrity": "sha512-Krs8pOIo2yoBVoJ91hKT1czhWt9ek7EbuK3MxxgvDYdd4HYHOtHi1eOlb7bFnZMNgFcwsL48yQI9vbPm160s9A==", + "dependencies": { + "path-browserify": "^1.0.1", + "semver": "^7.5.4", + "typescript-auto-import-cache": "^0.3.0", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-nls": "^5.2.0", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~1.11.0", + "@volar/typescript": "~1.11.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/volar-service-typescript-twoslash-queries": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.17.tgz", + "integrity": "sha512-6FHXK5AWeFzCL6uGmEcbkZmQsaQ0m9IjbeLdgOIQ4KGvauqT2aA1BhdfDJu6vRAFIfXe7xjEJ85keIlHl72tSA==", + "peerDependencies": { + "@volar/language-service": "~1.11.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } + } + }, + "node_modules/vscode-css-languageservice": { + "version": "6.2.11", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.2.11.tgz", + "integrity": "sha512-qn49Wa6K94LnizpVxmlYrcPf1Cb36gq1nNueW0COhi4shylXBzET5wuDbH8ZWQlJD0HM5Mmnn7WE9vQVVs+ULA==", + "dependencies": { + "@vscode/l10n": "^0.0.16", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-languageserver-types": "3.17.5", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/vscode-html-languageservice": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.1.1.tgz", + "integrity": "sha512-JenrspIIG/Q+93R6G3L6HdK96itSisMynE0glURqHpQbL3dKAKzdm8L40lAHNkwJeBg+BBPpAshZKv/38onrTQ==", + "dependencies": { + "@vscode/l10n": "^0.0.16", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-languageserver-types": "^3.17.5", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", + "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" + }, + "node_modules/vscode-nls": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==" + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-pm": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.1.1.tgz", + "integrity": "sha512-xzzxNw2wMaoCWXiGE8IJ9wuPMU+EYhFksjHxrRT8kMT5SnocBPRg69YAMtyV4D12fP582RA+k3P8H9J5EMdIxQ==", + "dependencies": { + "load-yaml-file": "^0.2.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8.15" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/widest-line/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoga-wasm-web": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz", + "integrity": "sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==" + }, + "node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/pages/package.json b/pages/package.json new file mode 100644 index 0000000..4867384 --- /dev/null +++ b/pages/package.json @@ -0,0 +1,64 @@ +{ + "name": "pages", + "version": "4.2.0", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro check && astro build", + "preview": "astro preview", + "sync": "astro sync", + "astro": "astro", + "format:check": "prettier --check . --plugin=prettier-plugin-astro", + "format": "prettier --write . --plugin=prettier-plugin-astro", + "cz": "cz", + "prepare": "husky install", + "lint": "eslint ." + }, + "dependencies": { + "@astrojs/check": "^0.5.6", + "@astrojs/rss": "^4.0.2", + "@resvg/resvg-js": "^2.6.0", + "astro": "^4.2.1", + "fuse.js": "^7.0.0", + "github-slugger": "^2.0.0", + "glob": "^10.3.10", + "remark-collapse": "^0.1.2", + "remark-toc": "^9.0.0", + "satori": "^0.10.11", + "sharp": "^0.33.2", + "tailwindcss": "^3.4.1", + "typescript": "^5.3.3" + }, + "devDependencies": { + "@astrojs/react": "^3.0.9", + "@astrojs/sitemap": "^3.0.5", + "@astrojs/tailwind": "^5.1.0", + "@divriots/jampack": "^0.23.2", + "@tailwindcss/typography": "^0.5.10", + "@types/github-slugger": "^1.3.0", + "@types/react": "^18.2.48", + "@typescript-eslint/parser": "^6.19.0", + "astro-eslint-parser": "^0.16.2", + "commitizen": "^4.3.0", + "cz-conventional-changelog": "^3.3.0", + "eslint": "^8.56.0", + "eslint-plugin-astro": "^0.31.3", + "husky": "^8.0.3", + "lint-staged": "^15.2.0", + "prettier": "^3.2.4", + "prettier-plugin-astro": "^0.13.0", + "prettier-plugin-tailwindcss": "^0.5.11", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "config": { + "commitizen": { + "path": "./node_modules/cz-conventional-changelog" + } + }, + "lint-staged": { + "*.{js,jsx,ts,tsx,md,mdx,json,astro}": [ + "prettier --write --plugin=prettier-plugin-astro" + ] + } +} diff --git a/pages/plugin/BrokenMarkdownRemarkPlugin.ts b/pages/plugin/BrokenMarkdownRemarkPlugin.ts new file mode 100644 index 0000000..baca12c --- /dev/null +++ b/pages/plugin/BrokenMarkdownRemarkPlugin.ts @@ -0,0 +1,21 @@ +// @ts-nocheck +import { modifyChildren } from 'unist-util-modify-children'; +import { globSync } from 'glob'; + +const plugin = (options) => (tree) => { + modifyChildren((node, index, parent) => { + if (node.children) { + for (var child of node.children) { + if (child.type == "image" && !child.url?.startsWith("/") && !child?.url?.startsWith("http")) { + if (globSync("src/**/" + child.url).length == 0) { + console.error(`Warning: Broken image link: ${child.url}`); + child.url = `/bad-image.png`; + } + } + } + } + })(tree) +} + + +export default plugin; \ No newline at end of file diff --git a/pages/public/assets/dev.svg b/pages/public/assets/dev.svg new file mode 100644 index 0000000..60e4f51 --- /dev/null +++ b/pages/public/assets/dev.svg @@ -0,0 +1,361 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/public/assets/forrest-gump-quote.webp b/pages/public/assets/forrest-gump-quote.webp new file mode 100644 index 0000000000000000000000000000000000000000..7223f43be80141d87ec9a2fe8a5ad652a08f2395 GIT binary patch literal 27316 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 literal 0 HcmV?d00001 diff --git a/pages/public/assets/logo.svg b/pages/public/assets/logo.svg new file mode 100644 index 0000000..6999eab --- /dev/null +++ b/pages/public/assets/logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pages/public/astropaper-og.jpg b/pages/public/astropaper-og.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b351f931a150496c7454e8c3f1deced1fe9d6a0 GIT binary patch literal 148774 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

l-!fH`U7r;E^%YZa?MZFa!1%m%F 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 literal 0 HcmV?d00001 diff --git a/pages/public/favicon.svg b/pages/public/favicon.svg new file mode 100644 index 0000000..0f39062 --- /dev/null +++ b/pages/public/favicon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/pages/public/toggle-theme.js b/pages/public/toggle-theme.js new file mode 100644 index 0000000..146af33 --- /dev/null +++ b/pages/public/toggle-theme.js @@ -0,0 +1,76 @@ +const primaryColorScheme = ""; // "light" | "dark" + +// Get theme data from local storage +const currentTheme = localStorage.getItem("theme"); + +function getPreferTheme() { + // return theme value in local storage if it is set + if (currentTheme) return currentTheme; + + // return primary color scheme if it is set + if (primaryColorScheme) return primaryColorScheme; + + // return user device's prefer color scheme + return window.matchMedia("(prefers-color-scheme: dark)").matches + ? "dark" + : "light"; +} + +let themeValue = getPreferTheme(); + +function setPreference() { + localStorage.setItem("theme", themeValue); + reflectPreference(); +} + +function reflectPreference() { + document.firstElementChild.setAttribute("data-theme", themeValue); + + document.querySelector("#theme-btn")?.setAttribute("aria-label", themeValue); + + // Get a reference to the body element + const body = document.body; + + // Check if the body element exists before using getComputedStyle + if (body) { + // Get the computed styles for the body element + const computedStyles = window.getComputedStyle(body); + + // Get the background color property + const bgColor = computedStyles.backgroundColor; + + // Set the background color in + document + .querySelector("meta[name='theme-color']") + ?.setAttribute("content", bgColor); + } +} + +// set early so no page flashes / CSS is made aware +reflectPreference(); + +window.onload = () => { + function setThemeFeature() { + // set on load so screen readers can get the latest value on the button + reflectPreference(); + + // now this script can find and listen for clicks on the control + document.querySelector("#theme-btn")?.addEventListener("click", () => { + themeValue = themeValue === "light" ? "dark" : "light"; + setPreference(); + }); + } + + setThemeFeature(); + + // Runs on view transitions navigation + document.addEventListener("astro:after-swap", setThemeFeature); +}; + +// sync with system changes +window + .matchMedia("(prefers-color-scheme: dark)") + .addEventListener("change", ({ matches: isDark }) => { + themeValue = isDark ? "dark" : "light"; + setPreference(); + }); diff --git a/pages/remark-collapse.d.ts b/pages/remark-collapse.d.ts new file mode 100644 index 0000000..2e0f26c --- /dev/null +++ b/pages/remark-collapse.d.ts @@ -0,0 +1 @@ +declare module 'remark-collapse'; \ No newline at end of file diff --git a/pages/src/assets/images/AstroPaper-v3.png b/pages/src/assets/images/AstroPaper-v3.png new file mode 100644 index 0000000000000000000000000000000000000000..7b9674130beccf063b59e22ce2d1e7d419ae04f3 GIT binary patch literal 173038 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

!R}YzKfJedF!9J14M%+>H2@fZ%EXyF0)9`ncY? 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

0+m`6?&>p(bf-WY6Xk5UEHKUM5p-}95%1u1n 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 + + + `, + Facebook: ` + + + `, + Instagram: ` + + + + + `, + LinkedIn: ` + + + + + + + `, + Mail: ` + + + + `, + Twitter: ` + + + `, + Twitch: ` + + `, + YouTube: ` + + + `, + WhatsApp: ` + + + + `, + Snapchat: ` + + + `, + Pinterest: ` + + + + + `, + TikTok: ` + + + `, + CodePen: ` + + + + + + + + `, + Discord: ` + + + + + + + + `, + GitLab: ` + + + `, + Reddit: ` + + + + + + + + `, + Skype: ` + + + + `, + Steam: ` + + + + `, + Telegram: ` + + + `, + Mastodon: ` + + `, +}; + +export default socialIcons; diff --git a/pages/src/components/Breadcrumbs.astro b/pages/src/components/Breadcrumbs.astro new file mode 100644 index 0000000..70d5b55 --- /dev/null +++ b/pages/src/components/Breadcrumbs.astro @@ -0,0 +1,72 @@ +--- +// Remove current url path and remove trailing slash if exists +const currentUrlPath = Astro.url.pathname.replace(/\/+$/, ""); + +// Get url array from path +// eg: /tags/tailwindcss => ['tags', 'tailwindcss'] +const breadcrumbList = currentUrlPath.split("/").slice(1); + +// if breadcrumb is Home > Posts > 1 +// replace Posts with Posts (page number) +breadcrumbList[0] === "posts" && + breadcrumbList.splice(0, 2, `Posts (page ${breadcrumbList[1] || 1})`); + +// if breadcrumb is Home > Tags > [tag] > [page] +// replace [tag] > [page] with [tag] (page number) +breadcrumbList[0] === "tags" && + !isNaN(Number(breadcrumbList[2])) && + breadcrumbList.splice( + 1, + 3, + `${breadcrumbList[1]} ${ + Number(breadcrumbList[2]) === 1 ? "" : "(page " + breadcrumbList[2] + ")" + }` + ); +--- + +

+ + diff --git a/pages/src/components/Card.tsx b/pages/src/components/Card.tsx new file mode 100644 index 0000000..6b8669a --- /dev/null +++ b/pages/src/components/Card.tsx @@ -0,0 +1,68 @@ +import { slugifyStr } from "@utils/slugify"; +import Datetime from "./Datetime"; +import type { CollectionEntry } from "astro:content"; + +export interface Props { + href?: string; + frontmatter: CollectionEntry<"blog">["data"]; + secHeading?: boolean; +} + +export default function Card({ href, frontmatter, secHeading = true }: Props) { + const { + title, + translator, + status + } = frontmatter; + + const headerProps = { + style: { viewTransitionName: slugifyStr(title) }, + className: "text-lg font-medium decoration-dashed hover:underline", + }; + + return ( +
  • + + {secHeading ? ( +

    {title}

    + ) : ( +

    {title}

    + )} +
    +
    + +
    + {/* */} + {/*

    {description}

    */} +
  • + ); +} + +function Status({ status }: { status: string }) { + const statusTextMap = { + 'translated': '已翻译', + 'translating': '翻译中', + 'collected': '已收集', + 'proofread': '校对中', + } as any; + + const statusStyleMap = { + 'translated': 'bg-green-500', + 'translating': 'bg-yellow-300', + 'collected': 'bg-gray-500', + 'proofread': 'bg-purple-500', + } as any; + + return ( + + + {statusTextMap[status] || status} + + ) + + + +} diff --git a/pages/src/components/Datetime.tsx b/pages/src/components/Datetime.tsx new file mode 100644 index 0000000..06267da --- /dev/null +++ b/pages/src/components/Datetime.tsx @@ -0,0 +1,72 @@ +import { LOCALE } from "@config"; + +interface DatetimesProps { + pubDatetime: string | Date; + modDatetime: string | Date | undefined | null; +} + +interface Props extends DatetimesProps { + size?: "sm" | "lg"; + className?: string; +} + +export default function Datetime({ + pubDatetime, + modDatetime, + size = "sm", + className, +}: Props) { + return ( +
    + + {modDatetime && modDatetime > pubDatetime ? ( + + Updated: + + ) : ( + Published: + )} + + + +
    + ); +} + +const FormattedDatetime = ({ pubDatetime, modDatetime }: DatetimesProps) => { + return <>; + // const myDatetime = new Date( + // modDatetime && modDatetime > pubDatetime ? modDatetime : pubDatetime + // ); + + // const date = myDatetime.toLocaleDateString(LOCALE.langTag, { + // year: "numeric", + // month: "short", + // day: "numeric", + // }); + + // const time = myDatetime.toLocaleTimeString(LOCALE.langTag, { + // hour: "2-digit", + // minute: "2-digit", + // }); + + // return ( + // <> + // + // + //  at  + // {time} + // + // ); +}; diff --git a/pages/src/components/Footer.astro b/pages/src/components/Footer.astro new file mode 100644 index 0000000..23d93e2 --- /dev/null +++ b/pages/src/components/Footer.astro @@ -0,0 +1,45 @@ +--- +import Hr from "./Hr.astro"; +import Socials from "./Socials.astro"; + +const currentYear = new Date().getFullYear(); + +export interface Props { + noMarginTop?: boolean; +} + +const { noMarginTop = false } = Astro.props; +--- + +
    +
    + +
    + + diff --git a/pages/src/components/Header.astro b/pages/src/components/Header.astro new file mode 100644 index 0000000..3c26faa --- /dev/null +++ b/pages/src/components/Header.astro @@ -0,0 +1,210 @@ +--- +import { LOGO_IMAGE, SITE } from "@config"; +import Hr from "./Hr.astro"; +import LinkButton from "./LinkButton.astro"; + +export interface Props { + activeNav?: "posts" | "tags" | "about" | "search"; +} + +const { activeNav } = Astro.props; +--- + +
    + Skip to content + +
    +
    + + + + diff --git a/pages/src/components/Hr.astro b/pages/src/components/Hr.astro new file mode 100644 index 0000000..d7e835b --- /dev/null +++ b/pages/src/components/Hr.astro @@ -0,0 +1,12 @@ +--- +export interface Props { + noPadding?: boolean; + ariaHidden?: boolean; +} + +const { noPadding = false, ariaHidden = true } = Astro.props; +--- + +
    +
    +
    diff --git a/pages/src/components/LinkButton.astro b/pages/src/components/LinkButton.astro new file mode 100644 index 0000000..4f38fd5 --- /dev/null +++ b/pages/src/components/LinkButton.astro @@ -0,0 +1,33 @@ +--- +export interface Props { + href: string; + className?: string; + ariaLabel?: string; + title?: string; + disabled?: boolean; +} + +const { href, className, ariaLabel, title, disabled = false } = Astro.props; +--- + +{ + disabled ? ( + + + + ) : ( + + + + ) +} diff --git a/pages/src/components/Pagination.astro b/pages/src/components/Pagination.astro new file mode 100644 index 0000000..b6761de --- /dev/null +++ b/pages/src/components/Pagination.astro @@ -0,0 +1,57 @@ +--- +import LinkButton from "./LinkButton.astro"; + +export interface Props { + currentPage: number; + totalPages: number; + prevUrl: string; + nextUrl: string; +} + +const { currentPage, totalPages, prevUrl, nextUrl } = Astro.props; + +const prev = currentPage > 1 ? "" : "disabled"; +const next = currentPage < totalPages ? "" : "disabled"; +--- + +{ + totalPages > 1 && ( + + ) +} + + diff --git a/pages/src/components/Search.tsx b/pages/src/components/Search.tsx new file mode 100644 index 0000000..e6f39ff --- /dev/null +++ b/pages/src/components/Search.tsx @@ -0,0 +1,123 @@ +import Fuse from "fuse.js"; +import { useEffect, useRef, useState, useMemo } from "react"; +import Card from "@components/Card"; +import type { CollectionEntry } from "astro:content"; + +export type SearchItem = { + title: string; + description: string; + data: CollectionEntry<"blog">["data"]; + slug: string; +}; + +interface Props { + searchList: SearchItem[]; +} + +interface SearchResult { + item: SearchItem; + refIndex: number; +} + +export default function SearchBar({ searchList }: Props) { + const inputRef = useRef(null); + const [inputVal, setInputVal] = useState(""); + const [searchResults, setSearchResults] = useState( + null + ); + + const handleChange = (e: React.FormEvent) => { + setInputVal(e.currentTarget.value); + }; + + const fuse = useMemo( + () => + new Fuse(searchList, { + keys: ["title", "description"], + includeMatches: true, + minMatchCharLength: 2, + threshold: 0.5, + }), + [searchList] + ); + + useEffect(() => { + // if URL has search query, + // insert that search query in input field + const searchUrl = new URLSearchParams(window.location.search); + const searchStr = searchUrl.get("q"); + if (searchStr) setInputVal(searchStr); + + // put focus cursor at the end of the string + setTimeout(function () { + inputRef.current!.selectionStart = inputRef.current!.selectionEnd = + searchStr?.length || 0; + }, 50); + }, []); + + useEffect(() => { + // Add search result only if + // input value is more than one character + let inputResult = inputVal.length > 1 ? fuse.search(inputVal) : []; + setSearchResults(inputResult); + + // Update search string in URL + if (inputVal.length > 0) { + const searchParams = new URLSearchParams(window.location.search); + searchParams.set("q", inputVal); + const newRelativePathQuery = + window.location.pathname + "?" + searchParams.toString(); + history.replaceState(history.state, "", newRelativePathQuery); + } else { + history.replaceState(history.state, "", window.location.pathname); + } + }, [inputVal]); + + return ( + <> + + + {inputVal.length > 1 && ( +
    + Found {searchResults?.length} + {searchResults?.length && searchResults?.length === 1 + ? " result" + : " results"}{" "} + for '{inputVal}' +
    + )} + +
      + {searchResults && + searchResults.map(({ item, refIndex }) => ( + + ))} +
    + + ); +} diff --git a/pages/src/components/ShareLinks.astro b/pages/src/components/ShareLinks.astro new file mode 100644 index 0000000..8505bb2 --- /dev/null +++ b/pages/src/components/ShareLinks.astro @@ -0,0 +1,66 @@ +--- +import LinkButton from "./LinkButton.astro"; +import socialIcons from "@assets/socialIcons"; + +const URL = Astro.url; + +const shareLinks = [ + { + name: "WhatsApp", + href: "https://wa.me/?text=", + linkTitle: `Share this post via WhatsApp`, + }, + { + name: "Facebook", + href: "https://www.facebook.com/sharer.php?u=", + linkTitle: `Share this post on Facebook`, + }, + { + name: "Twitter", + href: "https://twitter.com/intent/tweet?url=", + linkTitle: `Tweet this post`, + }, + { + name: "Telegram", + href: "https://t.me/share/url?url=", + linkTitle: `Share this post via Telegram`, + }, + { + name: "Pinterest", + href: "https://pinterest.com/pin/create/button/?url=", + linkTitle: `Share this post on Pinterest`, + }, + { + name: "Mail", + href: "mailto:?subject=See%20this%20post&body=", + linkTitle: `Share this post via email`, + }, +] as const; +--- + +
    + 快速分享: +
    + { + shareLinks.map(social => ( + + + {social.linkTitle} + + )) + } +
    +
    + + diff --git a/pages/src/components/Socials.astro b/pages/src/components/Socials.astro new file mode 100755 index 0000000..54832f9 --- /dev/null +++ b/pages/src/components/Socials.astro @@ -0,0 +1,35 @@ +--- +import { SOCIALS } from "@config"; +import LinkButton from "./LinkButton.astro"; +import socialIcons from "@assets/socialIcons"; + +export interface Props { + centered?: boolean; +} + +const { centered = false } = Astro.props; +--- + +
    + { + SOCIALS.filter(social => social.active).map(social => ( + + + {social.linkTitle} + + )) + } +
    + + diff --git a/pages/src/components/Tag.astro b/pages/src/components/Tag.astro new file mode 100644 index 0000000..5a4a376 --- /dev/null +++ b/pages/src/components/Tag.astro @@ -0,0 +1,38 @@ +--- +export interface Props { + tag: string; + size?: "sm" | "lg"; +} + +const { tag, size = "sm" } = Astro.props; +--- + +
  • + + + +  {tag} + +
  • + + diff --git a/pages/src/config.ts b/pages/src/config.ts new file mode 100644 index 0000000..b09b030 --- /dev/null +++ b/pages/src/config.ts @@ -0,0 +1,147 @@ +import type { Site, SocialObjects } from "./types"; + +export const SITE: Site = { + website: "https://astro-paper.pages.dev/", // replace this with your deployed domain + author: "HCTT", + desc: "A minimal, responsive and SEO-friendly Astro blog theme.", + title: "HCTT", + ogImage: "astropaper-og.jpg", + lightAndDarkMode: true, + postPerPage: 10, + scheduledPostMargin: 15 * 60 * 1000, // 15 minutes +}; + +export const LOCALE = { + lang: "en", // html lang code. Set this empty and default will be "en" + langTag: ["en-EN"], // BCP 47 Language Tags. Set this empty [] to use the environment default +} as const; + +export const LOGO_IMAGE = { + enable: false, + svg: true, + width: 216, + height: 46, +}; + +export const SOCIALS: SocialObjects = [ + { + name: "Github", + href: "https://github.com/satnaing/astro-paper", + linkTitle: ` ${SITE.title} on Github`, + active: true, + }, + { + name: "Facebook", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on Facebook`, + active: true, + }, + { + name: "Instagram", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on Instagram`, + active: true, + }, + { + name: "LinkedIn", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on LinkedIn`, + active: true, + }, + { + name: "Mail", + href: "mailto:yourmail@gmail.com", + linkTitle: `Send an email to ${SITE.title}`, + active: false, + }, + { + name: "Twitter", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on Twitter`, + active: false, + }, + { + name: "Twitch", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on Twitch`, + active: false, + }, + { + name: "YouTube", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on YouTube`, + active: false, + }, + { + name: "WhatsApp", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on WhatsApp`, + active: false, + }, + { + name: "Snapchat", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on Snapchat`, + active: false, + }, + { + name: "Pinterest", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on Pinterest`, + active: false, + }, + { + name: "TikTok", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on TikTok`, + active: false, + }, + { + name: "CodePen", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on CodePen`, + active: false, + }, + { + name: "Discord", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on Discord`, + active: false, + }, + { + name: "GitLab", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on GitLab`, + active: false, + }, + { + name: "Reddit", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on Reddit`, + active: false, + }, + { + name: "Skype", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on Skype`, + active: false, + }, + { + name: "Steam", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on Steam`, + active: false, + }, + { + name: "Telegram", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on Telegram`, + active: false, + }, + { + name: "Mastodon", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on Mastodon`, + active: false, + }, +]; diff --git a/pages/src/content/blog b/pages/src/content/blog new file mode 120000 index 0000000..73c92a9 --- /dev/null +++ b/pages/src/content/blog @@ -0,0 +1 @@ +../../../sources \ No newline at end of file diff --git a/pages/src/content/config.ts b/pages/src/content/config.ts new file mode 100644 index 0000000..8680971 --- /dev/null +++ b/pages/src/content/config.ts @@ -0,0 +1,22 @@ +import { SITE } from "@config"; +import { defineCollection, z } from "astro:content"; + +const blog = defineCollection({ + type: "content", + schema: z.object({ + author: z.string().default(SITE.author), + status: z.enum(["translated", "translating", "collected", "proofread"]).default("collected"), + title: z.string(), + collector: z.string().default(SITE.author), + collected_date: z.union( + [z.date(), z.string(), z.number()] + ).default(""), + translator: z.string().default(SITE.author), + translated_date: z.union( + [z.date(), z.string(), z.number()] + ).default(""), + link: z.string().url().default(""), + }), +}); + +export const collections = { blog }; diff --git a/pages/src/content_bak/blog/adding-new-post.md b/pages/src/content_bak/blog/adding-new-post.md new file mode 100644 index 0000000..449896d --- /dev/null +++ b/pages/src/content_bak/blog/adding-new-post.md @@ -0,0 +1,170 @@ +--- +author: Sat Naing +pubDatetime: 2022-09-23T15:22:00Z +modDatetime: 2023-12-21T09:12:47.400Z +title: Adding new posts in AstroPaper theme +slug: adding-new-posts-in-astropaper-theme +featured: true +draft: false +tags: + - docs +description: + Some rules & recommendations for creating or adding new posts using AstroPaper + theme. +--- + +Here are some rules/recommendations, tips & ticks for creating new posts in AstroPaper blog theme. + +## Table of contents + +## Frontmatter + +Frontmatter is the main place to store some important information about the blog post (article). Frontmatter lies at the top of the article and is written in YAML format. Read more about frontmatter and its usage in [astro documentation](https://docs.astro.build/en/guides/markdown-content/). + +Here is the list of frontmatter property for each post. + +| Property | Description | Remark | +| ------------------ | ------------------------------------------------------------------------------------------- | --------------------------------------------- | +| **_title_** | Title of the post. (h1) | required\* | +| **_description_** | Description of the post. Used in post excerpt and site description of the post. | required\* | +| **_pubDatetime_** | Published datetime in ISO 8601 format. | required\* | +| **_modDatetime_** | Modified datetime in ISO 8601 format. (only add this property when a blog post is modified) | optional | +| **_author_** | Author of the post. | default = SITE.author | +| **_slug_** | Slug for the post. This field is optional but cannot be an empty string. (slug: ""❌) | default = slugified file name | +| **_featured_** | Whether or not display this post in featured section of home page | default = false | +| **_draft_** | Mark this post 'unpublished'. | default = false | +| **_tags_** | Related keywords for this post. Written in array yaml format. | default = others | +| **_ogImage_** | OG image of the post. Useful for social media sharing and SEO. | default = SITE.ogImage or generated OG image | +| **_canonicalURL_** | Canonical URL (absolute), in case the article already exists on other source. | default = `Astro.site` + `Astro.url.pathname` | + +> Tip! You can get ISO 8601 datetime by running `new Date().toISOString()` in the console. Make sure you remove quotes though. + +Only `title`, `description` and `pubDatetime` fields in frontmatter must be specified. + +Title and description (excerpt) are important for search engine optimization (SEO) and thus AstroPaper encourages to include these in blog posts. + +`slug` is the unique identifier of the url. Thus, `slug` must be unique and different from other posts. The whitespace of `slug` should to be separated with `-` or `_` but `-` is recommended. Slug is automatically generated using the blog post file name. However, you can define your `slug` as a frontmatter in your blog post. + +For example, if the blog file name is `adding-new-post.md` and you don't specify the slug in your frontmatter, Astro will automatically create a slug for the blog post using the file name. Thus, the slug will be `adding-new-post`. But if you specify the `slug` in the frontmatter, this will override the default slug. You can read more about this in [Astro Docs](https://docs.astro.build/en/guides/content-collections/#defining-custom-slugs). + +If you omit `tags` in a blog post (in other words, if no tag is specified), the default tag `others` will be used as a tag for that post. You can set the default tag in the `/src/content/config.ts` file. + +```ts +// src/content/config.ts +export const blogSchema = z.object({ + // --- + draft: z.boolean().optional(), + tags: z.array(z.string()).default(["others"]), // replace "others" with whatever you want + // --- +}); +``` + +### Sample Frontmatter + +Here is the sample frontmatter for a post. + +```yaml +# src/content/blog/sample-post.md +--- +title: The title of the post +author: your name +pubDatetime: 2022-09-21T05:17:19Z +slug: the-title-of-the-post +featured: true +draft: false +tags: + - some + - example + - tags +ogImage: "" +description: This is the example description of the example post. +canonicalURL: https://example.org/my-article-was-already-posted-here +--- +``` + +## Adding table of contents + +By default, a post (article) does not include any table of contents (toc). To include toc, you have to specify it in a specific way. + +Write `Table of contents` in h2 format (## in markdown) and place it where you want it to be appeared on the post. + +For instance, if you want to place your table of contents just under the intro paragraph (like I usually do), you can do that in the following way. + +```md +--- +# some frontmatter +--- + +Here are some recommendations, tips & ticks for creating new posts in AstroPaper blog theme. + +## Table of contents + + +``` + +## Headings + +There's one thing to note about headings. The AstroPaper blog posts use title (title in the frontmatter) as the main heading of the post. Therefore, the rest of the heading in the post should be using h2 \~ h6. + +This rule is not mandatory, but highly recommended for visual, accessibility and SEO purposes. + +## Storing Images for Blog Content + +Here are two methods for storing images and displaying them inside a markdown file. + +> Note! If it's a requirement to style optimized images in markdown you should [use MDX](https://docs.astro.build/en/guides/images/#images-in-mdx-files). + +### Inside `src/assets/` directory (recommended) + +You can store images inside `src/assets/` directory. These images will be automatically optimized by Astro through [Image Service API](https://docs.astro.build/en/reference/image-service-reference/). + +You can use relative path or alias path (`@assets/`) to serve these images. + +Example: Suppose you want to display `example.jpg` whose path is `/src/assets/images/example.jpg`. + +```md +![something](@assets/images/example.jpg) + + + +![something](../../assets/images/example.jpg) + + +something + +``` + +> Technically, you can store images inside any directory under `src`. In here, `src/assets` is just a recommendation. + +### Inside `public` directory + +You can store images inside the `public` directory. Keep in mind that images stored in the `public` directory remain untouched by Astro, meaning they will be unoptimized and you need to handle image optimization by yourself. + +For these images, you should use an absolute path; and these images can be displayed using [markdown annotation](https://www.markdownguide.org/basic-syntax/#images-1) or [HTML img tag](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img). + +Example: Assume `example.jpg` is located at `/public/assets/images/example.jpg`. + +```md +![something](/assets/images/example.jpg) + + + +something +``` + +## Bonus + +### Image compression + +When you put images in the blog post (especially for images under `public` directory), it is recommended that the image is compressed. This will affect the overall performance of the website. + +My recommendation for image compression sites. + +- [TinyPng](https://tinypng.com/) +- [TinyJPG](https://tinyjpg.com/) + +### OG Image + +The default OG image will be placed if a post does not specify the OG image. Though not required, OG image related to the post should be specify in the frontmatter. The recommended size for OG image is **_1200 X 640_** px. + +> Since AstroPaper v1.4.0, OG images will be generated automatically if not specified. Check out [the announcement](https://astro-paper.pages.dev/posts/dynamic-og-image-generation-in-astropaper-blog-posts/). diff --git a/pages/src/content_bak/blog/astro-paper-2.md b/pages/src/content_bak/blog/astro-paper-2.md new file mode 100644 index 0000000..092606b --- /dev/null +++ b/pages/src/content_bak/blog/astro-paper-2.md @@ -0,0 +1,91 @@ +--- +author: Sat Naing +pubDatetime: 2023-01-30T15:57:52.737Z +title: AstroPaper 2.0 +slug: astro-paper-2 +featured: false +ogImage: https://user-images.githubusercontent.com/53733092/215771435-25408246-2309-4f8b-a781-1f3d93bdf0ec.png +tags: + - release +description: AstroPaper with the enhancements of Astro v2. Type-safe markdown contents, bug fixes and better dev experience etc. +--- + +Astro 2.0 has been released with some cool features, breaking changes, DX improvements, better error overlay and so on. AstroPaper takes advantage of those cool features, especially Content Collections API. + + + +![Introducing AstroPaper 2.0](https://user-images.githubusercontent.com/53733092/215771435-25408246-2309-4f8b-a781-1f3d93bdf0ec.png) + +## Table of contents + +## Features & Changes + +### Type-safe Frontmatters and Redefined Blog Schema + +Frontmatter of AstroPaper 2.0 markdown contents are now type-safe thanks to Astro’s Content Collections. Blog schema is defined inside the `src/content/_schemas.ts` file. + +### New Home for Blog contents + +All the blog posts were moved from `src/contents` to `src/content/blog` directory. + +### New Fetch API + +Contents are now fetched with `getCollection` function. No relative path to the content needs to be specified anymore. + +```ts +// old content fetching method +- const postImportResult = import.meta.glob>( + "../contents/**/**/*.md",); + +// new content fetching method ++ const postImportResult = await getCollection("blog"); +``` + +### Modified Search Logic for better Search Result + +In the older version of AstroPaper, when someone search some article, the search criteria keys that will be searched are `title`, `description` and `headings` (heading means all the headings h1 ~ h6 of the blog post). In AstroPaper v2, only `title` and `description` will be searched as the user types. + +### Renamed Frontmatter Properties + +The following frontmatter properties are renamed. + +| Old Names | New Names | +| --------- | ----------- | +| datetime | pubDatetime | +| slug | postSlug | + +### Default Tag for blog post + +If a blog post doesn't have any tag (in other words, frontmatter property `tags` is not specified), the default tag `others` will be used for that blog post. But you can set the default tag in the `/src/content/_schemas.ts` file. + +```ts +// src/contents/_schemas.ts +export const blogSchema = z.object({ + // --- + // replace "others" with whatever you want + tags: z.array(z.string()).default(["others"]), + ogImage: z.string().optional(), + description: z.string(), +}); +``` + +### New Predefined Dark Color Scheme + +AstroPaper v2 has a new dark color scheme (high contrast & low contrast) which is based on Astro's dark logo. Check out [this link](https://astro-paper.pages.dev/posts/predefined-color-schemes#astro-dark) for more info. + +![New Predefined Dark Color Scheme](https://user-images.githubusercontent.com/53733092/215680520-59427bb0-f4cb-48c0-bccc-f182a428d72d.svg) + +### Automatic Class Sorting + +AstroPaper 2.0 includes automatic class sorting with [TailwindCSS Prettier plugin](https://tailwindcss.com/blog/automatic-class-sorting-with-prettier) + +### Updated Docs & README + +All the [#docs](https://astro-paper.pages.dev/tags/docs/) blog posts and [README](https://github.com/satnaing/astro-paper#readme) are updated for this AstroPaper v2. + +## Bug Fixes + +- fix broken tags in the Blog Post page +- in a tag page, the last part of the breadcrumb is now updated to lower-case for consistency +- exclude draft posts in a tag page +- fix 'onChange value not updating issue' after a page reload diff --git a/pages/src/content_bak/blog/astro-paper-3.md b/pages/src/content_bak/blog/astro-paper-3.md new file mode 100644 index 0000000..b5ea073 --- /dev/null +++ b/pages/src/content_bak/blog/astro-paper-3.md @@ -0,0 +1,173 @@ +--- +author: Sat Naing +pubDatetime: 2023-09-25T10:25:54.547Z +title: AstroPaper 3.0 +slug: astro-paper-v3 +featured: false +ogImage: https://github.com/satnaing/astro-paper/assets/53733092/1ef0cf03-8137-4d67-ac81-84a032119e3a +tags: + - release +description: "AstroPaper Version 3: Elevating Your Web Experience with Astro v3 and Seamless View Transitions" +--- + +We're excited to announce the release of AstroPaper v3, packed with new features, enhancements, and bug fixes to elevate your web development experience. Let's dive into the highlights of this release: + +![AstroPaper v3](@assets/images/AstroPaper-v3.png) + +## Table of contents + +## Features & Changes + +### Astro v3 Integration + + + +AstroPaper now fully supports [Astro v3](https://astro.build/blog/astro-3/), offering improved performance and rendering speed. + +Besides, we've added support for Astro's [ViewTransitions API](https://docs.astro.build/en/guides/view-transitions/), allowing you to create captivating and dynamic transitions between views. + +In the "Recent Section", only non-featured posts will be displayed to avoid duplications and better support for ViewTransitions API. + +### Update OG Image Generation Logic + +![Example OG Image](https://user-images.githubusercontent.com/40914272/269252964-a0dc6735-80f7-41ed-8e74-4d4d70f96891.png) + +We've updated the logic for automatic OG image generation, making it even more reliable and efficient. Besides, it now supports special characters in post titles, ensuring accurate, flexible and eye-catching social media previews. + +`SITE.ogImage` is now optional. If it is not specified, AstroPaper will automatically generate an OG image using `SITE.title`, `SITE.desc` and `SITE.website` + +### Theme meta tag + +The theme-color meta tag has been added to dynamically adapt to theme switches, ensuring a seamless user experience. + +> Notice the difference at the top + +**_AstroPaper v2 theme switch_** + + + +**_AstroPaper v3 theme switch_** + + + +## Other Changes + +### Astro Prettier Plugin + +Astro Prettier Plugin is installed out-of-the-box in order to keep the project tidy and organized. + +### Minor Style Changes + +The single-line code block wrapping issue has been solved, making your code snippets look pristine. + +Update nav style CSS to allow adding more nav links to the navigation. + +## Upgrade to AstroPaper v3 + +> This section is only for those who want to upgrade AstroPaper v3 from the older versions. + +This section will help you migrate from AstroPaper v2 to AstroPaper v3. + +Before reading the rest of the section, you might also want to check [this article](https://astro-paper.pages.dev/posts/how-to-update-dependencies/) for upgrading dependencies and AstroPaper. + +## Option 1: Fresh Restart (recommended) + +In this release, a lot of changes have been made\_ replacing old Astro APIs with newer APIs, bug fixes, new features etc. Thus, if you are someone who didn't make customization very much, you should follow this approach. + +**_Step 1: Keep all your updated files_** + +It's important to keep all the files which have been already updated. These files include + +- `/src/config.ts` (didn't touch in v3) +- `/src/styles/base.css` (minor changes in v3; mentioned below) +- `/src/assets/` (didn't touch in v3) +- `/public/assets/` (didn't touch in v3) +- `/content/blog/` (it's your blog content directory 🤷🏻‍♂️) +- Any other customizations you've made. + +```css +/* file: /src/styles/base.css */ +@layer base { + /* Other Codes */ + ::-webkit-scrollbar-thumb:hover { + @apply bg-skin-card-muted; + } + + /* Old code + code { + white-space: pre; + overflow: scroll; + } + */ + + /* New code */ + code, + blockquote { + word-wrap: break-word; + } + pre > code { + white-space: pre; + } +} + +@layer components { + /* other codes */ +} +``` + +**_Step 1: Replace everything else with AstroPaper v3_** + +In this step, replace everything\_ except above files/directories (plus your customized files/directories)\_ with AstroPaper v3. + +**_Step 3: Schema Updates_** + +Keep in mind that `/src/content/_schemas.ts` has been replaced with `/src/content/config.ts`. + +Besides, there is no longer `BlogFrontmatter` type exported from `/src/content/config.ts`. + +Therefore, all the `BlogFrontmatter` type inside files need to be updated with `CollectionEntry<"blog">["data"]`. + +For example: `src/components/Card.tsx` + +```ts +// AstroPaper v2 +import type { BlogFrontmatter } from "@content/_schemas"; + +export interface Props { + href?: string; + frontmatter: BlogFrontmatter; + secHeading?: boolean; +} +``` + +```ts +// AstroPaper v3 +import type { CollectionEntry } from "astro:content"; + +export interface Props { + href?: string; + frontmatter: CollectionEntry<"blog">["data"]; + secHeading?: boolean; +} +``` + +## Option 2: Upgrade using Git + +This approach is not recommended for most users. You should do the "Option 1" if you can. Only do this if you know how to resolve merge conflicts and you know what you're doing. + +Actually, I've already written a blog post for this case and you can check out [here](https://astro-paper.pages.dev/posts/how-to-update-dependencies/#updating-astropaper-using-git). + +## Outro + +Ready to explore the exciting new features and improvements in AstroPaper v3? Start [using AstroPaper](https://github.com/satnaing/astro-paper) now. + +For other bug fixes and integration updates, check out the [release notes](https://github.com/satnaing/astro-paper/releases/tag/v3.0.0) to learn more. + +If you encounter any bugs or face difficulties during the upgrade process, please feel free to open an issue or start a discussion on [GitHub](https://github.com/satnaing/astro-paper). diff --git a/pages/src/content_bak/blog/astro-paper-4.md b/pages/src/content_bak/blog/astro-paper-4.md new file mode 100644 index 0000000..a3ebd76 --- /dev/null +++ b/pages/src/content_bak/blog/astro-paper-4.md @@ -0,0 +1,124 @@ +--- +author: Sat Naing +pubDatetime: 2024-01-04T09:30:41.816Z +title: AstroPaper 4.0 +slug: "astro-paper-v4" +featured: true +ogImage: ../../assets/images/AstroPaper-v4.png +tags: + - release +description: "AstroPaper v4: ensuring a smoother and more feature-rich blogging experience." +--- + +Hello everyone! Wishing you a happy New Year 🎉 and all the best for 2024! We're excited to announce the release of AstroPaper v4, a significant update that introduces a range of new features, improvements, and bug fixes to elevate your blogging experience. A big thank you to all the contributors for their valuable input and efforts in making version 4 possible! + +![AstroPaper v4](@assets/images/AstroPaper-v4.png) + +## Table of contents + +## Major Changes + +### Upgrade to Astro v4 [#202](https://github.com/satnaing/astro-paper/pull/202) + +AstroPaper now leverages the power and capabilities of Astro v4. However, it’s a subtle upgrade and won’t break most Astro users. + +![Astro v4](https://astro.build/_astro/header-astro-4.GLp8HjfV.webp) + +### Replace `postSlug` with Astro Content `slug` [#197](https://github.com/satnaing/astro-paper/pull/197) + +The `postSlug` in the blog content schema is no longer available in AstroPaper v4. Initially Astro doesn't have a `slug` mechanism and thus we have to figure it out on our own. Since Astro v3, it supports content collection and slug features. Now, we believe it's time to adopt Astro's out-of-the-box `slug` feature. + +**_file: src/content/blog/astro-paper-4.md_** + +```bash +--- +author: Sat Naing +pubDatetime: 2024-01-01T04:35:33.428Z +title: AstroPaper 4.0 +slug: "astro-paper-v4" # if slug is not specified, it will be 'astro-paper-4' (file name). +# slug: "" ❌ cannot be an empty string +--- +``` + +The behavior of the `slug` is slightly different now. In the previous versions of AstroPaper, if the `postSlug` is not specified in a blog post (markdown file), the title of that blog post would be slugified and used as the `slug`. However, in AstroPaper v4, if the `slug` field is not specified, the markdown file name will be used as the `slug`. One thing to keep in mind is that the `slug` field can be omitted, but it cannot be an empty string (slug: "" ❌). + +If you're upgrading AstroPaper from v3 to v4, make sure to replace `postSlug` in your `src/content/blog/*.md` files with `slug`. + +## New Features + +### Add code-snippets for content creation [#206](https://github.com/satnaing/astro-paper/pull/206) + +AstroPaper now includes VSCode snippets for new blog posts, eliminating the need for manual copy/pasting of the frontmatter and content structure (table of contents, heading, excerpt, etc.). + +Read more about VSCode Snippets [here](https://code.visualstudio.com/docs/editor/userdefinedsnippets#:~:text=In%20Visual%20Studio%20Code%2C%20snippets,Snippet%20in%20the%20Command%20Palette). + + + +### Add Modified Datetime in Blog Posts [#195](https://github.com/satnaing/astro-paper/pull/195) + +Keep readers informed about the latest updates by displaying the modified datetime in blog posts. This not only instills user trust in the freshness of the articles but also contributes to improved SEO for the blog. + +![Last Modified Date feature in AstroPaper](https://github.com/satnaing/astro-paper/assets/53733092/cc89585e-148e-444d-9da1-0d496e867175) + +You can add a `modDatetime` to your blog post if you've made modifications. Now, the sorting behavior of the posts is slightly different. All posts are sorted by both `pubDatetime` and `modDatetime`. If a post has both a `pubDatetime` and `modDatetime`, its sorting position will be determined by the `modDatetime`. If not, only `pubDatetime` will be considered to determine the post's sorting order. + +### Implement Back-to-Top Button [#188](https://github.com/satnaing/astro-paper/pull/188) + +Enhance user navigation on your blog detail post with the newly implemented back-to-top button. + +![Back to top button in AstroPaper](https://github.com/satnaing/astro-paper/assets/53733092/79854957-7877-4f19-936e-ad994b772074) + +### Add Pagination in Tag Posts [#201](https://github.com/satnaing/astro-paper/pull/201) + +Improve content organization and navigation with the addition of pagination in tag posts, making it easier for users to explore related content. This ensures that if a tag has many posts, readers won't be overwhelmed by all the tag-related posts. + + + +### Dynamically Generate robots.txt [#130](https://github.com/satnaing/astro-paper/pull/130) + +AstroPaper v4 now dynamically generates the robots.txt file, giving you more control over search engine indexing and web crawling. Besides, sitemap URL will also be added inside `robot.txt` file. + +### Add Docker-Compose File [#174](https://github.com/satnaing/astro-paper/pull/174) + +Managing your AstroPaper environment is now easier than ever with the addition of a Docker-Compose file, simplifying deployment and configuration. + +## Refactoring & Bug Fixes + +### Replace Slugified Title with Unslugified Tag Name [#198](https://github.com/satnaing/astro-paper/pull/198) + +To improve clarity, user experience and SEO, titles (`Tag: some-tag`) in tag page are no longer slugified (`Tag: Some Tag`). + +![Unslugified Tag Names](https://github.com/satnaing/astro-paper/assets/53733092/2fe90d6e-ec52-467b-9c44-95009b3ae0b7) + +### Implement 100svh for Min-Height ([79d569d](https://github.com/satnaing/astro-paper/commit/79d569d053036f2113519f41b0d257523d035b76)) + +We've updated the min-height on the body to use 100svh, offering a better UX for mobile users. + +### Update Site URL as Single Source of Truth [#143](https://github.com/satnaing/astro-paper/pull/143) + +The site URL is now a single source of truth, streamlining configuration and avoiding inconsistencies. Read more at this [PR](https://github.com/satnaing/astro-paper/pull/143) and its related issue(s). + +### Solve Invisible Text Code Block Issue in Light Mode [#163](https://github.com/satnaing/astro-paper/pull/163) + +We've fixed the invisible text code block issue in light mode. + +### Decode Unicode Tag Characters in Breadcrumb [#175](https://github.com/satnaing/astro-paper/pull/175) + +The last part of Tag in the breadcrumb is now decoded, making non-English Unicode characters display better. + +### Update LOCALE Config to Cover Overall Locales ([cd02b04](https://github.com/satnaing/astro-paper/commit/cd02b047d2b5e3b4a2940c0ff30568cdebcec0b8)) + +The LOCALE configuration has been updated to cover a broader range of locales, catering to a more diverse audience. + +## Outtro + +We believe these updates will significantly elevate your AstroPaper experience. Thank you to everyone who contributed, solved issues, and gave stars to AstroPaper. We look forward to seeing the amazing content you create with AstroPaper v4! + +Happy Blogging! + +[Sat Naing](https://satnaing.dev)
    +Creator of AstroPaper diff --git a/pages/src/content_bak/blog/customizing-astropaper-theme-color-schemes.md b/pages/src/content_bak/blog/customizing-astropaper-theme-color-schemes.md new file mode 100644 index 0000000..eb99c98 --- /dev/null +++ b/pages/src/content_bak/blog/customizing-astropaper-theme-color-schemes.md @@ -0,0 +1,132 @@ +--- +author: Sat Naing +pubDatetime: 2022-09-25T15:20:35Z +title: Customizing AstroPaper theme color schemes +featured: false +draft: false +tags: + - color-schemes + - docs +description: + How you can enable/disable light & dark mode; and customize color schemes + of AstroPaper theme. +--- + +This post will explain how you can enable/disable light & dark mode for the website. Moreover, you'll learn how you can customize color schemes of the entire website. + +## Table of contents + +## Enable/disable light & dark mode + +AstroPaper theme will include light and dark mode by default. In other words, there will be two color schemes\_ one for light mode and another for dark mode. This default behavior can be disabled in SITE configuration object of the `src/config.ts` file. + +```js +// file: src/config.ts +export const SITE = { + website: "https://astro-paper.pages.dev/", + author: "Sat Naing", + desc: "A minimal, responsive and SEO-friendly Astro blog theme.", + title: "AstroPaper", + ogImage: "astropaper-og.jpg", + lightAndDarkMode: true, // true by default + postPerPage: 3, +}; +``` + +To disable `light & dark mode` set `SITE.lightAndDarkMode` to `false`. + +## Choose primary color scheme + +By default, if we disable `SITE.lightAndDarkMode`, we will only get system's prefers-color-scheme. + +Thus, to choose primary color scheme instead of prefers-color-scheme, we have to set color scheme in the primaryColorScheme variable inside `public/toggle-theme.js`. + +```js +/* file: public/toggle-theme.js */ +const primaryColorScheme = ""; // "light" | "dark" + +// Get theme data from local storage +const currentTheme = localStorage.getItem("theme"); + +// other codes etc... +``` + +The **primaryColorScheme** variable can hold two values\_ `"light"`, `"dark"`. You can leave the empty string (default) if you don't want to specify the primary color scheme. + +- `""` - system's prefers-color-scheme. (default) +- `"light"` - use light mode as primary color scheme. +- `"dark"` - use dark mode as primary color scheme. + +
    Why 'primaryColorScheme' is not inside config.ts? + +> To avoid color flickering on page reload, we have to place the toggle-switch JavaScript codes as early as possible when the page loads. It solves the problem of flickering, but as a trade-off, we cannot use ESM imports anymore. + +[Click here](https://docs.astro.build/en/reference/directives-reference/#isinline) to know more about Astro's `is:inline` script. + +
    + +## Customize color schemes + +Both light & dark color schemes of AstroPaper theme can be customized. You can do this in `src/styles/base.css` file. + +```css +/* file: src/styles/base.css */ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root, + html[data-theme="light"] { + --color-fill: 251, 254, 251; + --color-text-base: 40, 39, 40; + --color-accent: 0, 108, 172; + --color-card: 230, 230, 230; + --color-card-muted: 205, 205, 205; + --color-border: 236, 233, 233; + } + html[data-theme="dark"] { + --color-fill: 47, 55, 65; + --color-text-base: 230, 230, 230; + --color-accent: 26, 217, 217; + --color-card: 63, 75, 90; + --color-card-muted: 89, 107, 129; + --color-border: 59, 70, 85; + } + /* other styles */ +} +``` + +In AstroPaper theme, `:root` and `html[data-theme="light"]` selectors are used as the light color scheme and `html[data-theme="dark"]` is used the dark color scheme. If you want to customize your custom color scheme, you have to specify your light color scheme inside `:root`,`html[data-theme="light"]` and dark color scheme inside `html[data-theme="dark"]`. + +Colors are declared in CSS custom property (CSS Variable) notation. Color property values are written in rgb values. (Note: instead of `rgb(40, 39, 40)`, only specify `40, 39, 40`) + +Here is the detail explanation of color properties. + +| Color Property | Definition & Usage | +| -------------------- | ---------------------------------------------------------- | +| `--color-fill` | Primary color of the website. Usually the main background. | +| `--color-text-base` | Secondary color of the website. Usually the text color. | +| `--color-accent` | Accent color of the website. Link color, hover color etc. | +| `--color-card` | Card, scrollbar and code background color (like `this`). | +| `--color-card-muted` | Card and scrollbar background color for hover state etc. | +| `--color-border` | Border color. Especially used in horizontal row (hr) | + +Here is an example of changing the light color scheme. + +```css +@layer base { + /* lobster color scheme */ + :root, + html[data-theme="light"] { + --color-fill: 246, 238, 225; + --color-text-base: 1, 44, 86; + --color-accent: 225, 74, 57; + --color-card: 220, 152, 145; + --color-card-muted: 233, 119, 106; + --color-border: 220, 152, 145; + } +} +``` + +> Check out some [predefined color schemes](https://astro-paper.pages.dev/posts/predefined-color-schemes/) AstroPaper has already crafted for you. diff --git a/pages/src/content_bak/blog/dynamic-og-images.md b/pages/src/content_bak/blog/dynamic-og-images.md new file mode 100644 index 0000000..8a60bb9 --- /dev/null +++ b/pages/src/content_bak/blog/dynamic-og-images.md @@ -0,0 +1,50 @@ +--- +author: Sat Naing +pubDatetime: 2022-12-28T04:59:04.866Z +title: Dynamic OG image generation in AstroPaper blog posts +slug: dynamic-og-image-generation-in-astropaper-blog-posts +featured: false +draft: false +tags: + - docs + - release +description: New feature in AstroPaper v1.4.0, introducing dynamic OG image generation for blog posts. +--- + +New feature in AstroPaper v1.4.0, introducing dynamic OG image generation for blog posts. + +## Table of contents + +## Intro + +OG images (aka Social Images) play an important role in social media engagements. In case you don't know what OG image means, it is an image displayed whenever we share our website URL on social media such as Facebook, Discord etc. + +> The Social Image used for Twitter is technically not called OG image. However, in this post, I'll be using the term OG image for all types of Social Images. + +## Default/Static OG image (the old way) + +AstroPaper already provided a way to add an OG image to a blog post. The author can specify the OG image in the frontmatter `ogImage`. Even when the author doesn't define the OG image in the frontmatter, the default OG image will be used as a fallback (in this case `public/astropaper-og.jpg`). But the problem is that the default OG image is static, which means every blog post that does not include an OG image in the frontmatter will always use the same default OG image despite each post title/content being different from others. + +## Dynamic OG Image + +Generating a dynamic OG image for each post allows the author to avoid specifying an OG image for every single blog post. Besides, this will prevent the fallback OG image from being identical to all blog posts. + +In AstroPaper v1.4.0, Vercel's [Satori](https://github.com/vercel/satori) package is used for dynamic OG image generation. + +Dynamic OG images will be generated at build time for blog posts that + +- don't include OG image in the frontmatter +- are not marked as draft. + +## Anatomy of AstroPaper dynamic OG image + +Dynamic OG image of AstroPaper includes _the blog post title_, _author name_ and _site title_. Author name and site title will be retrieved via `SITE.author` and `SITE.title` of **"src/config.ts"** file. The title is generated from the blog post frontmatter `title`. +![Example Dynamic OG Image link](https://user-images.githubusercontent.com/53733092/209704501-e9c2236a-3f4d-4c67-bab3-025aebd63382.png) + +## Limitations + +At the time of writing this, [Satori](https://github.com/vercel/satori) is fairly new and has not reached major release yet. So, there are still some limitations to this dynamic OG image feature. + +- If you have Blog posts with non-English titles, you have to set `embedFonts` option to `false` (file: `src/utils/generateOgImage.tsx`). Even after this, the OG image might not be displayed very well. +- Besides, RTL languages are not supported yet. +- [Using emoji](https://github.com/vercel/satori#emojis) in the title might be a little bit tricky. diff --git a/pages/src/content_bak/blog/example-draft-post.md b/pages/src/content_bak/blog/example-draft-post.md new file mode 100644 index 0000000..625a2bc --- /dev/null +++ b/pages/src/content_bak/blog/example-draft-post.md @@ -0,0 +1,21 @@ +--- +title: Example Draft Post +author: Sat Naing +pubDatetime: 2022-06-06T04:06:31Z +slug: example-draft-post +featured: false +draft: true +tags: + - TypeScript + - Astro +description: + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor + incididunt ut labore et dolore magna aliqua. Praesent elementum facilisis leo vel + fringilla est +--- + +Users cannot see this post because it is in draft. + +## Motivation + +rec 1 diff --git a/pages/src/content_bak/blog/how-to-add-a-new-social-icon.md b/pages/src/content_bak/blog/how-to-add-a-new-social-icon.md new file mode 100644 index 0000000..b1d25a8 --- /dev/null +++ b/pages/src/content_bak/blog/how-to-add-a-new-social-icon.md @@ -0,0 +1,125 @@ +--- +author: Simon Smale +pubDatetime: 2024-01-08T18:16:00.000Z +modDatetime: +title: How to add a new Social Icon to AstroPaper +featured: false +draft: false +tags: + - FAQ +description: How to add a new social icon to AstroPaper +--- + +Hot new platform? Niche corner of the internet? Or one specific to your area? This post will guide you through how to add a new social icon to the theme. + +## Table of contents + +## Merging back to the theme + +The maintainer of the theme [Sat Naing](https://github.com/satnaing) has said that he intends to only + +> keep the project supporting only a specific set of popular social icons. + +So there is a chance that your icon will not be in the repo, but fear not, it is very easy to add your own! + +## Getting things to match + +The icon set used by the theme come from [Tabler](https://tabler.io/icons) and there are a quite a few brands on there. + +## Adding your icon, by example + +For this guide we are going to use the StackOverflow icon as our example. + +### Find the icon + +> In this case, we are going to use the `StackOverflow` as an example. + +Searching on Tabler for 'StackOverflow' we get a single icon , we are going to need the svg code, so save it for later. + +```html + + + + + + + + +``` + +### Clean up + +We need to do some tidy up on what the theme provides us. + +1. remove all classes other than `icon-tabler` +2. remove width & height +3. remove the viewBox +4. remove the stroke-width +5. remove the stroke +6. remove the fill + +This should leave you with the following + +```html + + + + + + + + +``` + +Now we can add the clean svg code to the `src/assets/socialIcons.ts` file in `SocialIcons`. + +```typescript +const socialIcons = { + /* others */ + StackOverflow: ` + + + + + + + `, +}; +``` + +Finally we can configure it for our blog in `src/config.ts` under `SOCIALS`. Setting `active: true` to add it to the site. + +```typescript +export const SOCIALS: SocialObjects = [ + /* others */ + { + name: "StackOverflow", + href: "https://stackoverflow.com/search?q=astropaper", + linkTitle: `See what questions there are about ${SITE.title} on StackOverflow`, + active: true, + }, +]; +``` + +> Ensure that `href` and `linkTitle` are updated for the corresponding link and label. + +Full code for the above steps can be found in [this pull request](https://github.com/satnaing/astro-paper/pull/216/files) diff --git a/pages/src/content_bak/blog/how-to-add-an-estimated-reading-time.md b/pages/src/content_bak/blog/how-to-add-an-estimated-reading-time.md new file mode 100644 index 0000000..489840f --- /dev/null +++ b/pages/src/content_bak/blog/how-to-add-an-estimated-reading-time.md @@ -0,0 +1,303 @@ +--- +title: How to add an estimated reading time in AstroPaper +author: Sat Naing +pubDatetime: 2023-07-21T10:11:06.130Z +modDatetime: 2024-01-03T14:53:25Z +slug: how-to-add-estimated-reading-time +featured: false +draft: false +tags: + - FAQ +description: How you can add an 'Estimated Reading time' in your blog posts of AstroPaper. +--- + +As the [Astro docs](https://docs.astro.build/en/recipes/reading-time/) say, we can use remark plugin to add a reading time property in our frontmatter. However, for some reason, we can't add this feature by following what stated in Astro docs. Therefore, to achieve this, we have to tweak a little bit. This post will demonstrate how we can do that. + +## Table of contents + +## Add reading time in PostDetails + +Step (1) Install required dependencies. + +```bash +npm install reading-time mdast-util-to-string +``` + +Step (2) Create `remark-reading-time.mjs` file under `utils` directory + +```js +import getReadingTime from "reading-time"; +import { toString } from "mdast-util-to-string"; + +export function remarkReadingTime() { + return function (tree, { data }) { + const textOnPage = toString(tree); + const readingTime = getReadingTime(textOnPage); + data.astro.frontmatter.readingTime = readingTime.text; + }; +} +``` + +Step (3) Add the plugin to `astro.config.ts` + +```js +import { remarkReadingTime } from "./src/utils/remark-reading-time.mjs"; // make sure your relative path is correct + +// https://astro.build/config +export default defineConfig({ + site: SITE.website, + integrations: [ + // other integrations + ], + markdown: { + remarkPlugins: [ + remarkToc, + remarkReadingTime, // 👈🏻 our plugin + [ + remarkCollapse, + { + test: "Table of contents", + }, + ], + ], + // other config + }, + // other config +}); +``` + +Step (4) Add `readingTime` to blog schema (`src/content/config.ts`) + +```ts +import { SITE } from "@config"; +import { defineCollection, z } from "astro:content"; + +const blog = defineCollection({ + type: "content", + schema: ({ image }) => + z.object({ + // others... + canonicalURL: z.string().optional(), + readingTime: z.string().optional(), // 👈🏻 readingTime frontmatter + }), +}); + +export const collections = { blog }; +``` + +Step (5) Create a new file called `getPostsWithRT.ts` under `src/utils` directory. + +```ts +import type { MarkdownInstance } from "astro"; +import type { CollectionEntry } from "astro:content"; +import { slugifyStr } from "./slugify"; + +export const getReadingTime = async () => { + // Get all posts using glob. This is to get the updated frontmatter + const globPosts = import.meta.glob("../content/blog/*.md") as Promise< + CollectionEntry<"blog">["data"][] + >; + + // Then, set those frontmatter value in a JS Map with key value pair + const mapFrontmatter = new Map(); + const globPostsValues = Object.values(globPosts); + await Promise.all( + globPostsValues.map(async globPost => { + const { frontmatter } = await globPost(); + mapFrontmatter.set( + slugifyStr(frontmatter.title), + frontmatter.readingTime + ); + }) + ); + + return mapFrontmatter; +}; + +const getPostsWithRT = async (posts: CollectionEntry<"blog">[]) => { + const mapFrontmatter = await getReadingTime(); + return posts.map(post => { + post.data.readingTime = mapFrontmatter.get(slugifyStr(post.data.title)); + return post; + }); +}; + +export default getPostsWithRT; +``` + +Step (6) Refactor `getStaticPaths` of `/src/pages/posts/[slug].astro` as the following + +```ts +--- +// other imports +import getPostsWithRT from "@utils/getPostsWithRT"; + +export interface Props { + post: CollectionEntry<"blog">; +} + +export async function getStaticPaths() { + const posts = await getCollection("blog", ({ data }) => !data.draft); + + const postsWithRT = await getPostsWithRT(posts); // replace reading time logic with this func + + const postResult = postsWithRT.map(post => ({ // make sure to replace posts with postsWithRT + params: { slug: post.slug }, + props: { post }, + })); + +// other codes +``` + +Step (7) Refactor `PostDetails.astro` like this. Now you can access and display `readingTime` in `PostDetails.astro` + +```ts +--- +// imports + +export interface Props { + post: CollectionEntry<"blog">; +} + +const { post } = Astro.props; + +const { + title, + author, + description, + ogImage, + readingTime, // we can now directly access readingTime from frontmatter + pubDatetime, + modDatetime, + tags } = post.data; + +// other codes +--- +``` + +## Access reading time outside of PostDetails (optional) + +By following the previous steps, you can now access `readingTime` frontmatter property in you post details page. Sometimes, this is exactly what you want. If so, you can skip to the next section. However, if you want to display "estimated reading time" in index, posts, and technically everywhere, you need to do the following extra steps. + +Step (1) Update `utils/getSortedPosts.ts` as the following + +```ts +import type { CollectionEntry } from "astro:content"; +import getPostsWithRT from "./getPostsWithRT"; + +const getSortedPosts = async (posts: CollectionEntry<"blog">[]) => { + // make sure that this func is async + const postsWithRT = await getPostsWithRT(posts); // add reading time + return postsWithRT + .filter(({ data }) => !data.draft) + .sort( + (a, b) => + Math.floor( + new Date(b.data.modDatetime ?? b.data.pubDatetime).getTime() / 1000 + ) - + Math.floor( + new Date(a.data.modDatetime ?? a.data.pubDatetime).getTime() / 1000 + ) + ); +}; + +export default getSortedPosts; +``` + +Step (2) Make sure to refactor every file which uses `getSortedPosts` function. You can simply add `await` keyword in front of `getSortedPosts` function. + +Files that use `getSortedPosts` function are as follow + +- src/pages/index.astro +- src/pages/posts/index.astro +- src/pages/rss.xml.ts +- src/pages/posts/index.astro +- src/pages/posts/[slug].astro +- src/utils/getPostsByTag.ts + +All you have to do is like this + +```ts +const sortedPosts = getSortedPosts(posts); // old code ❌ +const sortedPosts = await getSortedPosts(posts); // new code ✅ +``` + +Now you can access `readingTime` in other places besides `PostDetails` + +## Displaying reading time (optional) + +Since you can now access `readingTime` in your post details (or everywhere if you do the above section), it's up to you to display `readingTime` wherever you want. + +But in this section, I'm gonna show you how I would display `readingTime` in my components. This is optional. You can ignore this section if you want. + +Step (1) Update `Datetime` component to display `readingTime` + +```tsx +import { LOCALE } from "@config"; + +export interface Props { + datetime: string | Date; + size?: "sm" | "lg"; + className?: string; + readingTime?: string; // new type +} + +export default function Datetime({ + datetime, + size = "sm", + className, + readingTime, // new prop +}: Props) { + return ( + // other codes + + + ({readingTime}) {/* display reading time */} + + // other codes + ); +} +``` + +Step (2) Then, pass `readingTime` props from its parent component. + +file: Card.tsx + +```ts +export default function Card({ href, frontmatter, secHeading = true }: Props) { + const { title, pubDatetime, modDatetime description, readingTime } = frontmatter; + return ( + ... + + ... + ); +} +``` + +file: PostDetails.tsx + +```jsx +// Other Codes +
    +

    {title}

    + + {/* Other Codes */} +
    +// Other Codes +``` + +## Conclusion + +By following the provided steps and tweaks, you can now incorporate this useful feature into your content. I hope this post helps you adding `readingTime` in your blog. AstroPaper might include reading time by default in future releases. 🤷🏻‍♂️ + +Kyay Zuu for Reading 🙏🏻 diff --git a/pages/src/content_bak/blog/how-to-configure-astropaper-theme.md b/pages/src/content_bak/blog/how-to-configure-astropaper-theme.md new file mode 100644 index 0000000..9ffc4b5 --- /dev/null +++ b/pages/src/content_bak/blog/how-to-configure-astropaper-theme.md @@ -0,0 +1,160 @@ +--- +author: Sat Naing +pubDatetime: 2022-09-23T04:58:53Z +modDatetime: 2024-01-15T13:05:56.066Z +title: How to configure AstroPaper theme +slug: how-to-configure-astropaper-theme +featured: true +draft: false +tags: + - configuration + - docs +description: How you can make AstroPaper theme absolutely yours. +--- + +AstroPaper is a highly customizable Astro blog theme. With AstroPaper, you can customize everything according to your personal taste. This article will explain how you can make some customizations easily in the config file. + +## Table of contents + +## Configuring SITE + +The important configurations lies in `src/config.ts` file. Within that file, you'll see the `SITE` object where you can specify your website's main configurations. + +During deveopment, it's okay to leave `SITE.website` empty. But in production mode, you should specify your deployed url in `SITE.website` option since this will be used for canonical URL, social card URL etc.. which are important for SEO. + +```js +// file: src/config.ts +export const SITE = { + website: "https://astro-paper.pages.dev/", + author: "Sat Naing", + desc: "A minimal, responsive and SEO-friendly Astro blog theme.", + title: "AstroPaper", + ogImage: "astropaper-og.jpg", + lightAndDarkMode: true, + postPerPage: 3, + scheduledPostMargin: 15 * 60 * 1000, // 15 minutes +}; +``` + +Here are SITE configuration options + +| Options | Description | +| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `website` | Your deployed website url | +| `author` | Your name | +| `desc` | Your site description. Useful for SEO and social media sharing. | +| `title` | Your site name | +| `ogImage` | Your default OG image for the site. Useful for social media sharing. OG images can be an external image url or they can be placed under `/public` directory. | +| `lightAndDarkMode` | Enable or disable `light & dark mode` for the website. If disabled, primary color scheme will be used. This option is enabled by default. | +| `postPerPage` | You can specify how many posts will be displayed in each posts page. (eg: if you set SITE.postPerPage to 3, each page will only show 3 posts per page) | +| `scheduledPostMargin` | In Production mode, posts with a future `pubDatetime` will not be visible. However, if a post's `pubDatetime` is within the next 15 minutes, it will be visible. You can set `scheduledPostMargin` if you don't like the default 15 minutes margin. | + +## Configuring locale + +You can configure the default locale used for the build (e.g., date format in the post page), and for the rendering in browsers (e.g., date format in the search page) + +```js +// file: src/config.ts +export const LOCALE = { + lang: "en", // html lang code. Set this empty and default will be "en" + langTag: ["en-EN"], // BCP 47 Language Tags. Set this empty [] to use the environment default +} as const; +``` + +`LOCALE.lang` will be used as HTML ISO Language code in ``. If you don't specify this, default fallback will be set to `en`. +`LOCALE.langTag` is used as [datetime locale](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString#locales). For this, you can specify an array of locales for fallback languages. Leave `LOCALE.langTag` empty `[]` to use the environment default at _build-_ and _run-time_. + +## Configuring logo or title + +You can specify site's title or logo image in `src/config.ts` file. + +![An arrow pointing at the website logo](https://res.cloudinary.com/noezectz/v1663911318/astro-paper/AstroPaper-logo-config_goff5l.png) + +```js +// file: src/config.ts +export const LOGO_IMAGE = { + enable: false, + svg: true, + width: 216, + height: 46, +}; +``` + +If you specify `LOGO_IMAGE.enable` => `false`, AstroPaper will automatically convert `SITE.title` to the main site text logo. + +If you specify `LOGO_IMAGE.enable` => `true`, AstroPaper will use the logo image as the site's main logo. + +You have to specify `logo.png` or `logo.svg` under `/public/assets` directory. Currently, only svg and png image file formats are supported. (**_Important!_** _logo name has to be logo.png or logo.svg)_ + +If your logo image is png file format, you have to set `LOGO_IMAGE.svg` => `false`. + +It is recommended that you specify width and height of your logo image. You can do that by setting `LOGO_IMAGE.width` _and_ `LOGO_IMAGE.height` + +## Configuring social links + +You can configure your own social links along with its icons. + +![An arrow pointing at social link icons](https://res.cloudinary.com/noezectz/v1663914759/astro-paper/astro-paper-socials_tkcjgq.png) + +Currently 20 social icons are supported. (Github, LinkedIn, Facebook etc.) + +You can specify and enable certain social links in hero section and footer. To do this, go to `/src/config.ts` and then you'll find `SOCIALS` array of object. + +```js +// file: src/config.ts +export const SOCIALS: SocialObjects = [ + { + name: "Github", + href: "https://github.com/satnaing/astro-paper", + linkTitle: ` ${SITE.title} on Github`, + active: true, + }, + { + name: "Facebook", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on Facebook`, + active: true, + }, + { + name: "Instagram", + href: "https://github.com/satnaing/astro-paper", + linkTitle: `${SITE.title} on Instagram`, + active: true, + }, + ... +] +``` + +You have to set specific social link to `active: true` in order to appear your social links in hero and footer section. Then, you also have to specify your social link in `href` property. + +For instance, if I want to make my Github appear, I'll make it like this. + +```js +export const SOCIALS: SocialObjects = [ + { + name: "Github", + href: "https://github.com/satnaing", // update account link + linkTitle: `${SITE.title} on Github`, // this text will appear on hover and VoiceOver + active: true, // makre sure to set active to true + } + ... +] +``` + +Another thing to note is that you can specify the `linkTitle` in the object. This text will display when hovering on the social icon link. Besides, this will improve accessibility and SEO. AstroPaper provides default link title values; but you can replace them with your own texts. + +For example, + +```js +linkTitle: `${SITE.title} on Twitter`, +``` + +to + +```js +linkTitle: `Follow ${SITE.title} on Twitter`; +``` + +## Conclusion + +This is the brief specification of how you can customize this theme. You can customize more if you know some coding. For customizing styles, please read [this article](https://astro-paper.pages.dev/posts/customizing-astropaper-theme-color-schemes/). Thanks for reading.✌🏻 diff --git a/pages/src/content_bak/blog/how-to-connect-astro-paper-blog-with-forestry-cms.md b/pages/src/content_bak/blog/how-to-connect-astro-paper-blog-with-forestry-cms.md new file mode 100644 index 0000000..e205c91 --- /dev/null +++ b/pages/src/content_bak/blog/how-to-connect-astro-paper-blog-with-forestry-cms.md @@ -0,0 +1,126 @@ +--- +title: How to connect AstroPaper blog with Forestry CMS +author: Sat Naing +pubDatetime: 2022-09-21T05:17:19Z +slug: how-to-connect-astro-paper-blog-with-forestry-cms +featured: false +draft: false +tags: + - docs + - forestry-cms + - astro-paper +ogImage: https://res.cloudinary.com/noezectz/v1663745737/astro-paper/astropaper-x-forestry-og_kqfwp0.png +description: + Step by step process of connecting Astro-Paper blog theme with Forestry + Headless CMS. +--- + +> Important!!! Forestry is going to be discontinued on April 22nd, 2023. You can [read their announcement](https://forestry.io/blog/forestry.io-end-of-life/) for more info. + +In this article, I will explain step by step process of connecting AstroPaper theme with the Forestry headless CMS. So, let's get started 🎉 + +## Table of contents + +## What is Forestry? + +[Forestry](https://forestry.io/ "Forestry Website") is a git-based headless CMS and we can manage our markdown contents easily by using that. Although it is not an open-sourced CMS, it has a good free plan by which we can import up to 3 sites (3 repositories). In this article, I'll demonstrate how we can use Forestry as git-based CMS of our AstroPaper blog theme. + +## Login / Register an account at Forestry.io + +First of all, you have to create an account at [Forestry website](https://app.forestry.io/login "Forestry Login Page"). I usually sign up with my Github account. + +![Forestry Login page](https://res.cloudinary.com/noezectz/v1663739096/astro-paper/Forestry-io_hk5yzv.png) + +## Import AstroPaper site (repository) + +This part is importing the repository to Forestry and a little bit of set up process. + +### Add Site + +After logging in/signing up an account, import your AstroPaper site by clicking "Add Site" button. + +![Forestry 'My sites' page](https://res.cloudinary.com/noezectz/v1663739752/astro-paper/Forestry-io_1_z1bdyd.png) + +### Select SSG + +In this case, just choose "Others" + +![Selecting 'Others' as a site generator](https://res.cloudinary.com/noezectz/v1663740872/astro-paper/Forestry-io_2_blrrw2.png) + +### Select Git Provider + +My git provider is Github and I assume yours is the same. So, choose "Github". + +![Selecting Github as a git provider](https://res.cloudinary.com/noezectz/v1663740922/astro-paper/Forestry-io_3_pj1v8v.png) + +After this, the process of importing site (repo) is done. + +## Set up Sidebar + +The next phase after importing site is setting up sidebar menu. You can add many sidebar menu as you want. However, I'll only add one sidebar menu in this case. + +Navigate to "Finish setup process" > "Set up sidebar" and click "Configure sitebar" + +![Forestry welcome screen](https://res.cloudinary.com/noezectz/v1663740974/astro-paper/forestry-io_4_j35uk9.png) + +Then, click "Add Section" button. + +![Clicking 'Add Section' for sidebar](https://res.cloudinary.com/noezectz/v1663741011/astro-paper/forestry-io_5_sxtgvx.png) + +After that, choose DIRECTORY for the Section Type. + +![Choosing 'DIRECTORY' as the Selection Type](https://res.cloudinary.com/noezectz/v1663741052/astro-paper/forestry-io_6_lddmkx.png) + +Then, configure the directory section. You can follow along with my setup. + +![Configuring the Directory Section](https://res.cloudinary.com/noezectz/v1663741105/astro-paper/forestry-io_7_jkwgi1.png) + +After this step, you should see a sidebar menu "Blog Posts" and some blog posts. + +## Set up Media Import + +In Forestry CMS, you can set up different options for media (aka assets) such as Cloudinary, git commit media etc. I usually store my assets in [Cloudinary](https://cloudinary.com/). To set up media import, go to Settings > Media. Then select your image storage provider. (I chose Cloudinary). + +![Setting up 'Cloudinary' as the media import](https://res.cloudinary.com/noezectz/v1663741636/astro-paper/forestry-io-media-import_1_f8i4lm.png) + +You can see details of Forestry Cloudinary setup at [Forestry documentation](https://forestry.io/docs/media/cloudinary/). + +## Set up Front matter template + +After setting everything up, you can set up front matter template for your future blog post. To set up front matter template, navigate to "Front matter" menu on the sidebar. + +Then, click "Add Template" button at the top right corner. + +![Front Matter Templates page](https://res.cloudinary.com/noezectz/v1663742060/astro-paper/forestry-io-frontmatter_yskfvn.png) + +Select new template based on existing document. + +![Creating new template based on existing document](https://res.cloudinary.com/noezectz/v1663742179/astro-paper/forestry-io-existing-doc_bwcb9q.png) + +Then, add template name and choose one of my document page as template. + +As the final setup, make some adjustment in the front matter field settings. + +![Making some adjustment in a front matter field setting](https://res.cloudinary.com/noezectz/v1663742450/astro-paper/forestry-io-fm-config_jqmgwz.png) + +Here are some adjustments you have to make. + +**_title_** + +- Validation => REQUIRED => true + +**_author_** + +- Default => your name + +**_datetime_** + +- Default => USE "NOW" AS DEFAULT + +**_description_** + +- Validation => REQUIRED => true + +## Conclusion + +You can now post your articles and write whatever you want. diff --git a/pages/src/content_bak/blog/how-to-update-dependencies.md b/pages/src/content_bak/blog/how-to-update-dependencies.md new file mode 100644 index 0000000..5f3ceeb --- /dev/null +++ b/pages/src/content_bak/blog/how-to-update-dependencies.md @@ -0,0 +1,114 @@ +--- +title: How to update dependencies of AstroPaper +author: Sat Naing +pubDatetime: 2023-07-20T15:33:05.569Z +slug: how-to-update-dependencies +featured: false +draft: false +ogImage: /assets/forrest-gump-quote.webp +tags: + - FAQ +description: How to update project dependencies and AstroPaper template. +--- + +Updating the dependencies of a project can be tedious. However, neglecting to update project dependencies is not a good idea either 😬. In this post, I will share how I usually update my projects, focusing on AstroPaper as an example. Nonetheless, these steps can be applied to other js/node projects as well. + +![Forrest Gump Fake Quote](/assets/forrest-gump-quote.webp) + +## Table of contents + +## Updating Package Dependencies + +There are several ways to update dependencies, and I've tried various methods to find the easiest path. One way to do it is by manually updating each package using `npm install package-name@latest`. This method is the most straightforward way of updating. However, it may not be the most efficient option. + +My recommended way of updating dependencies is by using the [npm-check-updates package](https://www.npmjs.com/package/npm-check-updates). There's a good [article](https://www.freecodecamp.org/news/how-to-update-npm-dependencies/) from freeCodeCamp about that, so I won't be explaining the details of what it is and how to use that package. Instead, I'll show you my typical approach. + +First, install `npm-check-updates` package globally. + +```bash +npm install -g npm-check-updates +``` + +Before making any updates, it’s a good idea to check all new dependencies that can be updated. + +```bash +ncu +``` + +Most of the time, patch dependencies can be updated without affecting the project at all. So, I usually update patch dependencies by running either `ncu -i --target patch` or `ncu -u --target patch`. The difference is that `ncu -u --target patch` will update all the patches, while `ncu -i --target patch` will give an option to toggle which package to update. It’s up to you to decide which approach to take. + +The next part involves updating minor dependencies. Minor package updates usually won't break the project, but it is always good to check the release notes of the respective packages. These minor updates often include some cool features that can be applied to our projects. + +```bash +ncu -i --target minor +``` + +Last but not least, there might be some major package updates in the dependencies. So, check the rest of the dependency updates by running + +```bash +ncu -i +``` + +If there are any major updates (or some updates you still have to make), the above command will output those remaining packages. If the package is a major version update, you have to be very careful since this will likely break the whole project. Therefore, please read the respective release note (or) docs very carefully and make changes accordingly. + +If you run `ncu -i` and found no more packages to be updated, _**Congrats!!!**_ you have successfully updated all the dependencies in your project. + +## Updating AstroPaper template + +Like other open-source projects, AstroPaper is evolving with bug fixes, feature updates, and so on. So if you’re someone who is using AstroPaper as a template, you might also want to update the template when there’s a new release. + +The thing is, you might already have updated the template according to your flavor. Therefore, I can’t exactly show **"the one-size-fits-all perfect way"** to update the template to the most recent release. However, here are some tips to update the template without breaking your repo. Keep in mind that, most of the time, updating the package dependencies might be sufficient for you. + +### Files and Directories to keep in mind + +In most cases, the files and directories you might not want to override (as you've likely updated those files) are `src/content/blog/`, `src/config.ts`, `src/pages/about.md`, and other assets & styles like `public/` and `src/styles/base.css`. + +If you’re someone who only updates the bare minimum of the template, it should be okay to replace everything with the latest AstroPaper except the above files and directories. It’s like pure Android OS and other vendor-specific OSes like OneUI. The less you modify the base, the less you have to update. + +You can manually replace every file one by one, or you can use the magic of git to update everything. I won’t show you the manual replacement process since it is very straightforward. If you’re not interested in that straightfoward and inefficient method, bear with me 🐻. + +### Updating AstroPaper using Git + +**IMPORTANT!!!** + +> Only do the following if you know how to resolve merge conflicts. Otherwise, you’d better replace files manually or update dependencies only. + +First, add astro-paper as the remote in your project. + +```bash +git remote add astro-paper https://github.com/satnaing/astro-paper.git +``` + +Checkout to a new branch in order to update the template. If you know what you’re doing and you’re confident with your git skill, you can omit this step. + +```bash +git checkout -b build/update-astro-paper +``` + +Then, pull the changes from astro-paper by running + +```bash +git pull astro-paper main +``` + +If you face `fatal: refusing to merge unrelated histories` error, you can resolve that by running the following command + +```bash +git pull astro-paper main --allow-unrelated-histories +``` + +After running the above command, you’re likely to encounter conflicts in your project. You'll need to resolve these conflicts manually and make the necessary adjustments according to your needs. + +After resolving the conflicts, test your blog thoroughly to ensure everything is working as expected. Check your articles, components, and any customizations you made. + +Once you're satisfied with the result, it's time to merge the update branch into your main branch (only if you are updating the template in another branch). Congratulations! You've successfully updated your template to the latest version. Your blog is now up-to-date and ready to shine! 🎉 + +## Conclusion + +In this article, I've shared some of my insights and processes for updating dependencies and the AstroPaper template. I genuinely hope this article proves valuable and assists you in managing your projects more efficiently. + +If you have any alternative or improved approaches for updating dependencies/AstroPaper, I would love to hear from you. Thus, don't hesitate to start a discussion in the repository, email me, or open an issue. Your input and ideas are highly appreciated! + +Please understand that my schedule is quite busy these days, and I may not be able to respond quickly. However, I promise to get back to you as soon as possible. 😬 + +Thank you for taking the time to read this article, and I wish you all the best with your projects! diff --git a/pages/src/content_bak/blog/portfolio-website-development.md b/pages/src/content_bak/blog/portfolio-website-development.md new file mode 100644 index 0000000..810e044 --- /dev/null +++ b/pages/src/content_bak/blog/portfolio-website-development.md @@ -0,0 +1,104 @@ +--- +title: How Do I Develop My Portfolio Website & Blog +author: Sat Naing +pubDatetime: 2022-03-25T16:55:12.000+00:00 +slug: how-do-i-develop-my-portfolio-and-blog +featured: false +draft: false +tags: + - NextJS + - TailwindCSS + - HeadlessCMS + - Blog +description: + "EXAMPLE POST: My experience about developing my first portfolio website and a blog + using NextJS and a headless CMS." +--- + +> This article is originally from my [blog post](https://satnaing.dev/blog/posts/how-do-i-develop-my-portfolio-and-blog). I put this article to demonstrate how you can write blog posts/articles using AstroPaper theme. + +My experience about developing my first portfolio website and a blog using NextJS and a headless CMS. + +![Building portfolio](https://satnaing.dev/_ipx/w_2048,q_75/https%3A%2F%2Fres.cloudinary.com%2Fnoezectz%2Fimage%2Fupload%2Fv1653050141%2FSatNaing%2Fblog_at_cafe_ei1wf4.jpg?url=https%3A%2F%2Fres.cloudinary.com%2Fnoezectz%2Fimage%2Fupload%2Fv1653050141%2FSatNaing%2Fblog_at_cafe_ei1wf4.jpg&w=2048&q=75) + +## Motivation + +I've been always thinking about launching my own website with my custom domain name (**satnaing.dev**) since my college student life. But that never happened until this project. I've done several projects and works about web application development but I didn't make an effort to do this. + +So, "what about blog?" you may ask. Yeah, blog also has been in my project list for some time. I always wanted to make a blog project using some of the latest technologies. However, I've been busy with my works and other projects so that blog project has never been started. + +In these days, I tend to develop my own projects with the focus in good quality rather than quantity. After the project is done, I usually put a proper readme file in the Github repo. But Github repo readme is only suitable for technical aspects (this is just my thought). I want to write down my experiences and challenges. Thus, I decided to make my own blog. Plus, at this point, I have decent experiences and confidence to develop this project. + +## Tech Stack + +For the front-end, I wanted to use [React](https://reactjs.org/ "React Official Website"). But React alone is not good enough for SEO; and I did have to consider many factors like routing, image optimization etc. So, I chose [NextJS](https://nextjs.org/ "NextJS Official Website") as my main front-end stack. And of course TypeScript for type checking. (It's said that you'll love TypeScript when you're used to it 😉) + +For styling, I use [TailwindCSS](https://tailwindcss.com/ "Tailwind CSS Official Website"). This is because I love developer experience that Tailwind gives and it has a lot of flexibilities compared to other component UI libraries like MUI or React Bootstrap. + +All contents of this project reside within the GitHub repository. All my blog posts (including this one) are written in Markdown file format since I'm very used to with this. But to write Markdown along with its frontmatter effortlessly, I use [Forestry](https://forestry.io/ "Forestry Official Website") headless CMS. It is a git-based CMS that can serve Markdown and other contents. Because of this, I can write my contents either using Markdown or wysiwyg editor. Besides, writing frontmatters with this is a breeze. + +Images and assets are uploaded and stored in [Cloudinary](https://cloudinary.com/ "Cloudinary Official Website"). I connect Cloudinary via Forestry and manage them directly in the dashboard. + +In conclusion, these are the tech stack I've used for this project. + +- Front-end: NextJS (TypeScript) +- Styling: TailwindCSS +- Animations: GSAP +- CMS: Forestry Headless CMS +- Deployment: Vercel + +## Features + +The following are certain features of my portfolio and blog + +### SEO Friendly + +The entire project is developed with SEO focus in mind. I've used proper meta tags, descriptions and heading alignments. This website is now indexed by Google. + +> You can search this website on google by using keywords like 'sat naing dev' + +![searching satnaing.dev on google](https://res.cloudinary.com/noezectz/image/upload/v1648231400/SatNaing/satnaing-on-google_asflq6.png "satnaing.dev is indexed") + +Moreover, this website will be displayed well when shared to social media due to properly used meta tags. + +![satnaing.dev card layout when shared to Facebook](https://res.cloudinary.com/noezectz/image/upload/v1653106955/SatNaing/satnaing-dev-share-on-facebook_1_zjoehx.png "Card layout when shared to Facebook") + +### Dynamic Sitemap + +Sitemap plays an important part in SEO. Because of this, every single page of this site should be included in sitemap.xml. I made an auto generated sitemap in my website whenever I create a new content or tags or categories. + +### Light & Dark Themes + +Due to dark theme trend in recent years, many websites include dark theme out of the box nowadays. Certainly, my website also supports light & dark themes. + +### Fully Accessible + +This website is fully accessible. You can navigate around by only using keyboard. I put all a11y enhancement best practices like including alt text in all images, no skipping headings, using semantic HTML tags, using aria-attributes properly. + +### Search box, Categories & Tags + +All blog contents can be searched by search box. Moreover, contents can be filtered by categories and tags. In this way, blog readers can search and read what they really want. + +### Performance and Lighthouse Score + +This website got very good performance and lighthouse score thanks to proper development and best practices. Here's the lighthouse score for this website. + +![satnaing.dev Lighthouse score](https://user-images.githubusercontent.com/53733092/159957822-7082e459-11e9-4616-8f1e-49d0881f7cbb.png "satnaing.dev Lighthouse score") + +### Animations + +Initially I used [Framer Motion](https://www.framer.com/motion/ "Framer Motion") to add animations and micro interactions for this website. However, when I tried to use some complex animations and parallax effects, I found it inconvenient to integrate with Framer Motion (Maybe I'm not very good at and used to working with it). Hence, I decided to use [GSAP](https://greensock.com/ "GSAP Animation Library") for all of my animations. It is one of the most popular animation library and it is capable of doing complex and advanced animations. You can see animations and micro interactions on pretty much every page of this website. + +![animations at satnaing.dev](https://res.cloudinary.com/noezectz/image/upload/v1653108324/SatNaing/ezgif.com-gif-maker_2_hehtlm.gif "satnaing.dev website") + +## Outro + +In conclusion, this project gives me a lot of experience and confidence about developing blog site (SSG). Now, I have gained knowledge of git-based CMS and how it interacts with NextJS. I've also learned about SEO, dynamic sitemap generation and indexing Google procedures. I will make better projects in the future. So, stay tuned! ✌🏻 + +And... last but not least, I would like to say 'thanks' to my friend [Swann Fevian Kyaw](https://www.facebook.com/bon.zai.3910 "Swann Fevian Kyaw's Facebook Account") (@[ToonHa](https://www.facebook.com/ToonHa-102639465752883 "ToonHa Facebook Page")) who has drawn a beautiful illustration for my hero section of the website. + +## Project Links + +- Website: [https://satnaing.dev/](https://satnaing.dev/ "https://satnaing.dev/") +- Blog: [https://satnaing.dev/blog](https://satnaing.dev/blog "https://satnaing.dev/blog") +- Repo: [https://github.com/satnaing/my-portfolio](https://github.com/satnaing/my-portfolio "https://github.com/satnaing/my-portfolio") diff --git a/pages/src/content_bak/blog/predefined-color-schemes.md b/pages/src/content_bak/blog/predefined-color-schemes.md new file mode 100644 index 0000000..96b17c6 --- /dev/null +++ b/pages/src/content_bak/blog/predefined-color-schemes.md @@ -0,0 +1,182 @@ +--- +author: Sat Naing +pubDatetime: 2022-09-26T12:13:24Z +modDatetime: 2024-01-04T09:09:06Z +title: Predefined color schemes +slug: predefined-color-schemes +featured: false +draft: false +tags: + - color-schemes +description: + Some of the well-crafted, predefined color schemes for AstroPaper blog + theme. +--- + +I've crafted some predefined color schemes for this AstroPaper blog theme. You can replace these color schemes with the original ones. + +If you don't know how you can configure color schemes, check [this blog post](https://astro-paper.pages.dev/posts/customizing-astropaper-theme-color-schemes/). + +## Table of contents + +## Light color schemes + +Light color scheme has to be defined using the css selector `:root` and `html[data-theme="light"]`. + +### Lobster + +![lobster-color-scheme](https://user-images.githubusercontent.com/53733092/192282447-1d222faf-a3ce-44a9-9cfe-ac873155e5a9.png) + +```css +:root, +html[data-theme="light"] { + --color-fill: 246, 238, 225; + --color-text-base: 1, 44, 86; + --color-accent: 225, 74, 57; + --color-card: 217, 209, 195; + --color-card-muted: 239, 216, 176; + --color-border: 220, 152, 145; +} +``` + +### Leaf Blue + +![leaf-blue-color-scheme](https://user-images.githubusercontent.com/53733092/192318782-e80e3c39-54b5-423e-8f4b-9ae60402fc8d.png) + +```css +:root, +html[data-theme="light"] { + --color-fill: 242, 245, 236; + --color-text-base: 53, 53, 56; + --color-accent: 17, 88, 209; + --color-card: 206, 213, 180; + --color-card-muted: 187, 199, 137; + --color-border: 124, 173, 255; +} +``` + +### Pinky light + +![pinky-color-scheme](https://user-images.githubusercontent.com/53733092/192286510-892d0042-2d6d-471e-bb72-954221ae2d17.png) + +```css +:root, +html[data-theme="light"] { + --color-fill: 250, 252, 252; + --color-text-base: 34, 46, 54; + --color-accent: 211, 0, 106; + --color-card: 234, 206, 219; + --color-card-muted: 241, 186, 212; + --color-border: 227, 169, 198; +} +``` + +## Dark color schemes + +Dark color scheme has to be defined as `html[data-theme="dark"]`. + +### AstroPaper 1 original Dark Theme + +![AstroPaper 1 default dark theme](https://user-images.githubusercontent.com/53733092/215769153-13b0ad8d-5ba2-44b1-af06-e5ae61293f62.png) + +```css +html[data-theme="dark"] { + --color-fill: 47, 55, 65; + --color-text-base: 230, 230, 230; + --color-accent: 26, 217, 217; + --color-card: 63, 75, 90; + --color-card-muted: 89, 107, 129; + --color-border: 59, 70, 85; +} +``` + +### Deep Oyster + +![deep-oyster-color-scheme](https://user-images.githubusercontent.com/53733092/192314524-45ec5904-3d8f-450a-9edf-1e32c5e11d6c.png) + +```css +html[data-theme="dark"] { + --color-fill: 33, 35, 61; + --color-text-base: 244, 247, 245; + --color-accent: 255, 82, 86; + --color-card: 57, 60, 102; + --color-card-muted: 74, 78, 134; + --color-border: 177, 47, 50; +} +``` + +### Pikky dark + +![pinky-dark-color-scheme](https://user-images.githubusercontent.com/53733092/192307050-fbd55326-911c-4001-87c6-a8ad9378ac2e.png) + +```css +html[data-theme="dark"] { + --color-fill: 53, 54, 64; + --color-text-base: 233, 237, 241; + --color-accent: 255, 120, 200; + --color-card: 75, 76, 89; + --color-card-muted: 113, 85, 102; + --color-border: 134, 67, 107; +} +``` + +### Astro dark (High Contrast) + +![astro-dark-color-scheme](https://user-images.githubusercontent.com/53733092/215680520-59427bb0-f4cb-48c0-bccc-f182a428d72d.svg) + +```css +html[data-theme="dark"] { + --color-fill: 16, 23, 42; /* higher contrast bgColor */ + --color-fill: 33, 39, 55; + --color-text-base: 234, 237, 243; + --color-accent: 255, 107, 1; + --color-card: 27, 39, 70; + --color-card-muted: 138, 51, 2; + --color-border: 171, 75, 8; +} +``` + +### Astro dark (New default dark theme in AstroPaper 2) + +![new dark color scheme - low contrast](https://user-images.githubusercontent.com/53733092/215772856-d5b7ae35-ddaa-4ed6-b0bf-3fa5dbcf834c.png) + +```css +html[data-theme="dark"] { + --color-fill: 33, 39, 55; /* lower contrast bgColor */ + --color-text-base: 234, 237, 243; + --color-accent: 255, 107, 1; + --color-card: 52, 63, 96; + --color-card-muted: 138, 51, 2; + --color-border: 171, 75, 8; +} +``` + +### Astro Deep Purple (New dark theme in AstroPaper 3) + +![AstroPaper v3 new theme](https://github.com/satnaing/astro-paper/assets/53733092/c8b5d7e1-a3bc-4852-a5ad-4abf7b3cec79) + +```css +html[data-theme="dark"] { + --color-fill: 33, 39, 55; + --color-text-base: 234, 237, 243; + --color-accent: 235, 63, 211; + --color-card: 52, 63, 96; + --color-card-muted: 125, 79, 124; + --color-border: 100, 36, 81; +} +``` + +### AstroPaper v4 Special (New dark theme in AstroPaper 4) + +![AstroPaper v4 new theme](https://github.com/satnaing/astro-paper/assets/53733092/66eb74dc-7a0e-4f2e-982d-25f5c443b25a) + +```css +html[data-theme="dark"] { + --color-fill: 0, 1, 35; + --color-accent: 97, 123, 255; + --color-text-base: 234, 237, 243; + --color-card: 33, 34, 83; + --color-card-muted: 12, 14, 79; + --color-border: 48, 63, 138; +} +``` diff --git a/pages/src/content_bak/blog/setting-dates-via-git-hooks.md b/pages/src/content_bak/blog/setting-dates-via-git-hooks.md new file mode 100644 index 0000000..f5f6763 --- /dev/null +++ b/pages/src/content_bak/blog/setting-dates-via-git-hooks.md @@ -0,0 +1,194 @@ +--- +author: Simon Smale +pubDatetime: 2024-01-03T20:40:08Z +modDatetime: 2024-01-08T18:59:05Z +title: How to use Git Hooks to set Created and Modified Dates +featured: false +draft: false +tags: + - docs + - FAQ +canonicalURL: https://smale.codes/posts/setting-dates-via-git-hooks/ +description: How to use Git Hooks to set your Created and Modified Dates on AstroPaper +--- + +In this post I will explain how to use the pre-commit Git hook to automate the input of the created (`pubDatetime`) and modified (`modDatetime`) in the AstroPaper blog theme frontmatter + +## Table of contents + +## Have them Everywhere + +[Git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) are great for automating tasks like [adding](https://gist.github.com/SSmale/3b380e5bbed3233159fb7031451726ea) or [checking](https://itnext.io/using-git-hooks-to-enforce-branch-naming-policy-ffd81fa01e5e) the branch name to your commit messages or [stopping you committing plain text secrets](https://gist.github.com/SSmale/367deee757a9b2e119d241e120249000). Their biggest flaw is that client-side hooks are per machine. + +You can get around this by having a `hooks` directory and manually copy them to the `.git/hooks` directory or set up a symlink, but this all requires you to remember to set it up, and that is not something I am good at doing. + +As this project uses npm, we are able to make use of a package called [Husky](https://typicode.github.io/husky/) (this is already installed in AstroPaper) to automatically install the hooks for us. + +## The Hook + +As we want this hook to run as we commit the code to update the dates and then have that as part of our change we are going to use the `pre-commit` hook. This has already been set up by this AstroPaper project, but if it hadn't, you would run `npx husky add .husky/pre-commit 'echo "This is our new pre-commit hook"'`. + +Navigating to the `hooks/pre-commit` file, we are going to add one or both of the following snippets. + +### Updating the modified date when a file is edited + +--- + +UPDATE: + +This section has been updated with a new version of the hook that is smarter. It will now not increment the `modDatetime` until the post is published. On the first publish, set the draft status to `first` and watch the magic happen. + +--- + +```shell +# Modified files, update the modDatetime +git diff --cached --name-status | +grep -i '^M.*\.md$' | +while read _ file; do + filecontent=$(cat "$file") + frontmatter=$(echo "$filecontent" | awk -v RS='---' 'NR==2{print}') + draft=$(echo "$frontmatter" | awk '/^draft: /{print $2}') + if [ "$draft" = "false" ]; then + echo "$file modDateTime updated" + cat $file | sed "/---.*/,/---.*/s/^modDatetime:.*$/modDatetime: $(date -u "+%Y-%m-%dT%H:%M:%SZ")/" > tmp + mv tmp $file + git add $file + fi + if [ "$draft" = "first" ]; then + echo "First release of $file, draft set to false and modDateTime removed" + cat $file | sed "/---.*/,/---.*/s/^modDatetime:.*$/modDatetime:/" | sed "/---.*/,/---.*/s/^draft:.*$/draft: false/" > tmp + mv tmp $file + git add $file + fi +done +``` + +`git diff --cached --name-status` gets the files from git that have been staged for committing. The output looks like: + +```shell +A src/content/blog/setting-dates-via-git-hooks.md +``` + +The letter at the start denotes what action has been taken, in the above example the file has been added. Modified files have `M` + +We pipe that output into the grep command where we are looking at each line to find that have been modified. The line needs to start with `M` (`^(M)`), have any number of characters after that (`.*`) and end with the `.md` file extension (`.(md)$`).This is going to filter out the lines that are not modified markdown files `egrep -i "^(M).*\.(md)$"`. + +--- + +#### Improvement - More Explicit + +This could be added to only look for files that we markdown files in the `blog` directory, as these are the only ones that will have the right frontmatter + +--- + +The regex will capture the two parts, the letter and the file path. We are going to pipe this list into a while loop to iterate over the matching lines and assign the letter to `a` and the path to `b`. We are going to ignore `a` for now. + +To know the draft staus of the file, we need its frontmatter. In the following code we are using `cat` to get the content of the file, then using `awk` to split the file on the frontmatter separator (`---`) and taking the second block (the fonmtmatter, the bit between the `---`). From here we are using `awk` again to find the draft key and print is value. + +```shell + filecontent=$(cat "$file") + frontmatter=$(echo "$filecontent" | awk -v RS='---' 'NR==2{print}') + draft=$(echo "$frontmatter" | awk '/^draft: /{print $2}') +``` + +Now we have the value for `draft` we are going to do 1 of 3 things, set the modDatetime to now (when draft is false `if [ "$draft" = "false" ]; then`), clear the modDatetime and set draft to false (when draft is set to first `if [ "$draft" = "first" ]; then`), or nothing (in any other case). + +The next part with the sed command is a bit magical to me as I don't often use it, it was copied from [another blog post on doing something similar](https://mademistakes.com/notes/adding-last-modified-timestamps-with-git/). In essence, it is looking inside the frontmatter tags (`---`) of the file to find the `pubDatetime:` key, getting the full line and replacing it with the `pubDatetime: $(date -u "+%Y-%m-%dT%H:%M:%SZ")/"` same key again and the current datetime formatted correctly. + +This replacement is in the context of the whole file so we put that into a temporary file (`> tmp`), then we move (`mv`) the new file into the location of the old file, overwriting it. This is then added to git ready to be committed as if we made the change ourselves. + +--- + +#### NOTE + +For the `sed` to work the frontmatter needs to already have the `modDatetime` key in the frontmatter. There are some other changes you will need to make for the app to build with a blank date, see [further down](#empty-moddatetime-changes) + +--- + +### Adding the Date for new files + +Adding the date for a new file is the same process as above, but this time we are looking for lines that have been added (`A`) and we are going to replace the `pubDatetime` value. + +```shell +# New files, add/update the pubDatetime +git diff --cached --name-status | egrep -i "^(A).*\.(md)$" | while read a b; do + cat $b | sed "/---.*/,/---.*/s/^pubDatetime:.*$/pubDatetime: $(date -u "+%Y-%m-%dT%H:%M:%SZ")/" > tmp + mv tmp $b + git add $b +done +``` + +--- + +#### Improvement - Only Loop Once + +We could use the `a` variable to switch inside the loop and either update the `modDatetime` or add the `pubDatetime` in one loop. + +--- + +## Populating the frontmatter + +If your IDE supports snippets then there is the option to create a custom snippet to populate the frontmatter.[In AstroPaper v4 will come with one for VSCode by default.](https://github.com/satnaing/astro-paper/pull/206) + + + +## Empty `modDatetime` changes + +To allow Astro to compile the markdown and do its thing, it needs to know what is expected in the frontmatter. It does this via the config in `src/content/config.ts` + +To allow the key to be there with no value we need to edit line 10 to add the `.nullable()` function. + +```typescript +const blog = defineCollection({ + type: "content", + schema: ({ image }) => + z.object({ + author: z.string().default(SITE.author), + pubDatetime: z.date(), +- modDatetime: z.date().optional(), ++ modDatetime: z.date().optional().nullable(), + title: z.string(), + featured: z.boolean().optional(), + draft: z.boolean().optional(), + tags: z.array(z.string()).default(["others"]), + ogImage: image() + .refine(img => img.width >= 1200 && img.height >= 630, { + message: "OpenGraph image must be at least 1200 X 630 pixels!", + }) + .or(z.string()) + .optional(), + description: z.string(), + canonicalURL: z.string().optional(), + readingTime: z.string().optional(), + }), +}); +``` + +To stop the IDE complaining in the blog engine files I have also done the following: + +1. added `| null` to line 15 in `src/layouts/Layout.astro` so that it looks like + +```typescript +export interface Props { + title?: string; + author?: string; + description?: string; + ogImage?: string; + canonicalURL?: string; + pubDatetime?: Date; + modDatetime?: Date | null; +} +``` + + + +2. added `| null` to line 5 in `src/components/Datetime.tsx` so that it looks like + +```typescript +interface DatetimesProps { + pubDatetime: string | Date; + modDatetime: string | Date | undefined | null; +} +``` diff --git a/pages/src/content_bak/blog/tailwind-typography.md b/pages/src/content_bak/blog/tailwind-typography.md new file mode 100644 index 0000000..fbbf653 --- /dev/null +++ b/pages/src/content_bak/blog/tailwind-typography.md @@ -0,0 +1,208 @@ +--- +title: Tailwind Typography Plugin +author: Sat Naing +pubDatetime: 2022-07-05T02:05:51Z +featured: false +draft: false +tags: + - TypeScript + - Astro +description: "EXAMPLE POST: About Tailwind Typography Plugin and how you can use it effectively." +--- + +> This article is from [TailwindLabs](https://tailwindcss-typography.vercel.app/). I put this article to demonstrate how you can write blog posts/articles using AstroPaper theme. + +By default, Tailwind removes all of the default browser styling from paragraphs, headings, lists and more. This ends up being really useful for building application UIs because you spend less time undoing user-agent styles, but when you _really are_ just trying to style some content that came from a rich-text editor in a CMS or a markdown file, it can be surprising and unintuitive. + +We get lots of complaints about it actually, with people regularly asking us things like: + +> Why is Tailwind removing the default styles on my `h1` elements? How do I disable this? What do you mean I lose all the other base styles too? +> We hear you, but we're not convinced that simply disabling our base styles is what you really want. You don't want to have to remove annoying margins every time you use a `p` element in a piece of your dashboard UI. And I doubt you really want your blog posts to use the user-agent styles either — you want them to look _awesome_, not awful. + +The `@tailwindcss/typography` plugin is our attempt to give you what you _actually_ want, without any of the downsides of doing something stupid like disabling our base styles. + +It adds a new `prose` class that you can slap on any block of vanilla HTML content and turn it into a beautiful, well-formatted document: + +```html +
    +

    Garlic bread with cheese: What the science tells us

    +

    + For years parents have espoused the health benefits of eating garlic bread + with cheese to their children, with the food earning such an iconic status + in our culture that kids will often dress up as warm, cheesy loaf for + Halloween. +

    +

    + But a recent study shows that the celebrated appetizer may be linked to a + series of rabies cases springing up around the country. +

    + +
    +``` + +For more information about how to use the plugin and the features it includes, [read the documentation](https://github.com/tailwindcss/typography/blob/master/README.md). + +--- + +## What to expect from here on out + +What follows from here is just a bunch of absolute nonsense I've written to dogfood the plugin itself. It includes every sensible typographic element I could think of, like **bold text**, unordered lists, ordered lists, code blocks, block quotes, _and even italics_. + +It's important to cover all of these use cases for a few reasons: + +1. We want everything to look good out of the box. +2. Really just the first reason, that's the whole point of the plugin. +3. Here's a third pretend reason though a list with three items looks more realistic than a list with two items. + +Now we're going to try out another header style. + +### Typography should be easy + +So that's a header for you — with any luck if we've done our job correctly that will look pretty reasonable. + +Something a wise person once told me about typography is: + +> Typography is pretty important if you don't want your stuff to look like trash. Make it good then it won't be bad. +> It's probably important that images look okay here by default as well: + +
    + +
    + Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of + classical Latin literature from 45 BC, making it over 2000 years old. +
    +
    + +Now I'm going to show you an example of an unordered list to make sure that looks good, too: + +- So here is the first item in this list. +- In this example we're keeping the items short. +- Later, we'll use longer, more complex list items. + +And that's the end of this section. + +## What if we stack headings? + +### We should make sure that looks good, too. + +Sometimes you have headings directly underneath each other. In those cases you often have to undo the top margin on the second heading because it usually looks better for the headings to be closer together than a paragraph followed by a heading should be. + +### When a heading comes after a paragraph … + +When a heading comes after a paragraph, we need a bit more space, like I already mentioned above. Now let's see what a more complex list would look like. + +- **I often do this thing where list items have headings.** + + For some reason I think this looks cool which is unfortunate because it's pretty annoying to get the styles right. + + I often have two or three paragraphs in these list items, too, so the hard part is getting the spacing between the paragraphs, list item heading, and separate list items to all make sense. Pretty tough honestly, you could make a strong argument that you just shouldn't write this way. + +- **Since this is a list, I need at least two items.** + + I explained what I'm doing already in the previous list item, but a list wouldn't be a list if it only had one item, and we really want this to look realistic. That's why I've added this second list item so I actually have something to look at when writing the styles. + +- **It's not a bad idea to add a third item either.** + + I think it probably would've been fine to just use two items but three is definitely not worse, and since I seem to be having no trouble making up arbitrary things to type, I might as well include it. + +After this sort of list I usually have a closing statement or paragraph, because it kinda looks weird jumping right to a heading. + +## Code should look okay by default. + +I think most people are going to use [highlight.js](https://highlightjs.org/) or [Prism](https://prismjs.com/) or something if they want to style their code blocks but it wouldn't hurt to make them look _okay_ out of the box, even with no syntax highlighting. + +Here's what a default `tailwind.config.js` file looks like at the time of writing: + +```js +module.exports = { + purge: [], + theme: { + extend: {}, + }, + variants: {}, + plugins: [], +}; +``` + +Hopefully that looks good enough to you. + +### What about nested lists? + +Nested lists basically always look bad which is why editors like Medium don't even let you do it, but I guess since some of you goofballs are going to do it we have to carry the burden of at least making it work. + +1. **Nested lists are rarely a good idea.** + - You might feel like you are being really "organized" or something but you are just creating a gross shape on the screen that is hard to read. + - Nested navigation in UIs is a bad idea too, keep things as flat as possible. + - Nesting tons of folders in your source code is also not helpful. +2. **Since we need to have more items, here's another one.** + - I'm not sure if we'll bother styling more than two levels deep. + - Two is already too much, three is guaranteed to be a bad idea. + - If you nest four levels deep you belong in prison. +3. **Two items isn't really a list, three is good though.** + - Again please don't nest lists if you want people to actually read your content. + - Nobody wants to look at this. + - I'm upset that we even have to bother styling this. + +The most annoying thing about lists in Markdown is that `
  • ` elements aren't given a child `

    ` tag unless there are multiple paragraphs in the list item. That means I have to worry about styling that annoying situation too. + +- **For example, here's another nested list.** + + But this time with a second paragraph. + + - These list items won't have `

    ` tags + - Because they are only one line each + +- **But in this second top-level list item, they will.** + + This is especially annoying because of the spacing on this paragraph. + + - As you can see here, because I've added a second line, this list item now has a `

    ` tag. + + This is the second line I'm talking about by the way. + + - Finally here's another list item so it's more like a list. + +- A closing list item, but with no nested list, because why not? + +And finally a sentence to close off this section. + +## There are other elements we need to style + +I almost forgot to mention links, like [this link to the Tailwind CSS website](https://tailwindcss.com). We almost made them blue but that's so yesterday, so we went with dark gray, feels edgier. + +We even included table styles, check it out: + +| Wrestler | Origin | Finisher | +| ----------------------- | ------------ | ------------------ | +| Bret "The Hitman" Hart | Calgary, AB | Sharpshooter | +| Stone Cold Steve Austin | Austin, TX | Stone Cold Stunner | +| Randy Savage | Sarasota, FL | Elbow Drop | +| Vader | Boulder, CO | Vader Bomb | +| Razor Ramon | Chuluota, FL | Razor's Edge | + +We also need to make sure inline code looks good, like if I wanted to talk about `` elements or tell you the good news about `@tailwindcss/typography`. + +### Sometimes I even use `code` in headings + +Even though it's probably a bad idea, and historically I've had a hard time making it look good. This _"wrap the code blocks in backticks"_ trick works pretty well though really. + +Another thing I've done in the past is put a `code` tag inside of a link, like if I wanted to tell you about the [`tailwindcss/docs`](https://github.com/tailwindcss/docs) repository. I don't love that there is an underline below the backticks but it is absolutely not worth the madness it would require to avoid it. + +#### We haven't used an `h4` yet + +But now we have. Please don't use `h5` or `h6` in your content, Medium only supports two heading levels for a reason, you animals. I honestly considered using a `before` pseudo-element to scream at you if you use an `h5` or `h6`. + +We don't style them at all out of the box because `h4` elements are already so small that they are the same size as the body copy. What are we supposed to do with an `h5`, make it _smaller_ than the body copy? No thanks. + +### We still need to think about stacked headings though. + +#### Let's make sure we don't screw that up with `h4` elements, either. + +Phew, with any luck we have styled the headings above this text and they look pretty good. + +Let's add a closing paragraph here so things end with a decently sized block of text. I can't explain why I want things to end that way but I have to assume it's because I think things will look weird or unbalanced if there is a heading too close to the end of the document. + +What I've written here is probably long enough, but adding this final sentence can't hurt. diff --git a/pages/src/content_bak/blog/terminal-development.md b/pages/src/content_bak/blog/terminal-development.md new file mode 100644 index 0000000..a6428bd --- /dev/null +++ b/pages/src/content_bak/blog/terminal-development.md @@ -0,0 +1,88 @@ +--- +title: How Do I Develop My Terminal Portfolio Website with React +author: Sat Naing +pubDatetime: 2022-06-09T03:42:51Z +slug: how-do-i-develop-my-terminal-portfolio-website-with-react +featured: false +draft: false +tags: + - JavaScript + - ReactJS + - ContextAPI + - Styled-Components + - TypeScript +description: + "EXAMPLE POST: Developing a terminal-like website using ReactJS, TypeScript and Styled-Components. + Includes features like autocomplete, multiple themes, command hints etc." +--- + +> This article is originally from my [blog post](https://satnaing.dev/blog/posts/how-do-i-develop-my-terminal-portfolio-website-with-react). I put this article to demonstrate how you can write blog posts/articles using AstroPaper theme. + +Developing a terminal-like website using ReactJS, TypeScript and Styled-Components. Includes features like autocomplete, multiple themes, command hints etc. + +![Sat Naing's Terminal Portfolio](https://satnaing.dev/_ipx/w_2048,q_75/https%3A%2F%2Fres.cloudinary.com%2Fnoezectz%2Fimage%2Fupload%2Fv1654754125%2FSatNaing%2Fterminal-screenshot_gu3kkc.png?url=https%3A%2F%2Fres.cloudinary.com%2Fnoezectz%2Fimage%2Fupload%2Fv1654754125%2FSatNaing%2Fterminal-screenshot_gu3kkc.png&w=2048&q=75) + +## Table of contents + +## Intro + +Recently, I've developed and published my portfolio + a blog. I’m glad I got some good feedback for it. Today, I want to introduce my new terminal-like portfolio website. It is developed using ReactJS, TypeScript. I got this idea from CodePen and YouTube. + +## Tech Stack + +This project is a frontend project without any backend codes. The UI/UX part is designed in Figma. For the frontend user-interface, I chose React over pain JavaScript and NextJS. Why? + +- Firstly, I want to write declarative code. Managing HTML DOM using JavaScript imperatively is really tedious. +- Secondly, because it is React!!! It is fast, and reliable. +- Lastly, I don’t need much of the SEO features, routing and image optimization provided by NextJS. + +And of course there's TypeScript for type checking. + +For styling, I took a different approach than what I usually do. Instead of choosing Pure CSS, Sass, or Utility CSS Framework like TailwindCSS, I chose the CSS-in-JS way (Styled-Components). Although I’ve known about Styled-Components for some time, I’ve never tried it out. So, the writing style and structures of Styled-Components in this project may not be very organized or very good. + +This project doesn’t need very complex state management. I just use ContextAPI in this project for multiple theming and to avoid prop drilling. + +Here’s a quick recap for the tech stack. + +- Frontend: [ReactJS](https://reactjs.org/ "React Website"), [TypeScript](https://www.typescriptlang.org/ "TypeScript Website") +- Styling: [Styled-Components](https://styled-components.com/ "Styled-Components Website") +- UI/UX: [Figma](https://figma.com/ "Figma Website") +- State Management: [ContextAPI](https://reactjs.org/docs/context.html "React ContextAPI") +- Deployment: [Netlify](https://www.netlify.com/ "Netlify Website") + +## Features + +Here are some features of the project. + +### Multiple Themes + +Users can change multiple themes. At the time of writing this post, there are 5 themes; and more themes will probably be added in the future. The selected theme is saved in local storage so that the theme won’t change on page refresh. + +![Setting different theme](https://i.ibb.co/fSTCnWB/terminal-portfolio-multiple-themes.gif) + +### Command-line Completion + +To look and feel as close to the actual terminal as possible, I put a command-line completion feature which auto fills in partially typed commands by simply pressing ‘Tab’ or ‘Ctrl + i’. + +![Demonstrating command-line completion](https://i.ibb.co/CQTGGLF/terminal-autocomplete.gif) + +### Previous Commands + +Users can go back to the previous commands or navigate the previously typed commands by pressing Up & Down Arrows. + +![Going back to previous commands with UP Arrow](https://i.ibb.co/vD1pSRv/terminal-up-down.gif) + +### View/Clear Command History + +previously typed commands can be viewed by typing ‘history’ in the command line. All the command history and terminal screen can be wiped out by typing ‘clear’ or pressing ‘Ctrl + l’. + +![Clearing the terminal with 'clear' or 'Ctrl + L' command](https://i.ibb.co/SJBy8Rr/terminal-clear.gif) + +## Outro + +This is a really fun project, and one special part of this project is I had to focus on logic rather than user-interface (even though this is kind of a frontend project). + +## Project Links + +- Website: [https://terminal.satnaing.dev/](https://terminal.satnaing.dev/ "https://terminal.satnaing.dev/") +- Repo: [https://github.com/satnaing/terminal-portfolio](https://github.com/satnaing/terminal-portfolio "https://github.com/satnaing/terminal-portfolio") diff --git a/pages/src/content_bak/config.ts b/pages/src/content_bak/config.ts new file mode 100644 index 0000000..4315718 --- /dev/null +++ b/pages/src/content_bak/config.ts @@ -0,0 +1,26 @@ +import { SITE } from "@config"; +import { defineCollection, z } from "astro:content"; + +const blog = defineCollection({ + type: "content", + schema: ({ image }) => + z.object({ + author: z.string().default(SITE.author), + pubDatetime: z.date(), + modDatetime: z.date().optional().nullable(), + title: z.string(), + featured: z.boolean().optional(), + draft: z.boolean().optional(), + tags: z.array(z.string()).default(["others"]), + ogImage: image() + .refine(img => img.width >= 1200 && img.height >= 630, { + message: "OpenGraph image must be at least 1200 X 630 pixels!", + }) + .or(z.string()) + .optional(), + description: z.string(), + canonicalURL: z.string().optional(), + }), +}); + +export const collections = { blog }; diff --git a/pages/src/env.d.ts b/pages/src/env.d.ts new file mode 100644 index 0000000..acef35f --- /dev/null +++ b/pages/src/env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/pages/src/layouts/AboutLayout.astro b/pages/src/layouts/AboutLayout.astro new file mode 100644 index 0000000..9f6dbc0 --- /dev/null +++ b/pages/src/layouts/AboutLayout.astro @@ -0,0 +1,28 @@ +--- +import { SITE } from "@config"; +import Breadcrumbs from "@components/Breadcrumbs.astro"; +import Footer from "@components/Footer.astro"; +import Header from "@components/Header.astro"; +import Layout from "./Layout.astro"; + +export interface Props { + frontmatter: { + title: string; + description?: string; + }; +} + +const { frontmatter } = Astro.props; +--- + + +

    + +
    +
    +

    {frontmatter.title}

    + +
    +
    +
    + diff --git a/pages/src/layouts/Layout.astro b/pages/src/layouts/Layout.astro new file mode 100644 index 0000000..dfeb001 --- /dev/null +++ b/pages/src/layouts/Layout.astro @@ -0,0 +1,115 @@ +--- +import { LOCALE, SITE } from "@config"; +import "@styles/base.css"; +import { ViewTransitions } from "astro:transitions"; + +const googleSiteVerification = import.meta.env.PUBLIC_GOOGLE_SITE_VERIFICATION; + +export interface Props { + title?: string; + author?: string; + description?: string; + ogImage?: string; + canonicalURL?: string; + pubDatetime?: Date; + modDatetime?: Date | null; + scrollSmooth?: boolean; +} + +const { + title = SITE.title, + author = SITE.author, + description = SITE.desc, + ogImage = SITE.ogImage, + canonicalURL = new URL(Astro.url.pathname, Astro.site).href, + pubDatetime, + modDatetime, + scrollSmooth = false, +} = Astro.props; + +const socialImageURL = new URL( + ogImage ?? SITE.ogImage ?? "og.png", + Astro.url.origin +).href; +--- + + + + + + + + + + + + {title} + + + + + + + + + + + + + { + pubDatetime && ( + + ) + } + { + modDatetime && ( + + ) + } + + + + + + + + + + + + + + + + { + // If PUBLIC_GOOGLE_SITE_VERIFICATION is set in the environment variable, + // include google-site-verification tag in the heading + // Learn more: https://support.google.com/webmasters/answer/9008080#meta_tag_verification&zippy=%2Chtml-tag + googleSiteVerification && ( + + ) + } + + + + + + + + + diff --git a/pages/src/layouts/Main.astro b/pages/src/layouts/Main.astro new file mode 100644 index 0000000..6d4b05a --- /dev/null +++ b/pages/src/layouts/Main.astro @@ -0,0 +1,48 @@ +--- +import Breadcrumbs from "@components/Breadcrumbs.astro"; + +interface StringTitleProp { + pageTitle: string; + pageDesc?: string; +} + +interface ArrayTitleProp { + pageTitle: [string, string]; + titleTransition: string; + pageDesc?: string; +} + +export type Props = StringTitleProp | ArrayTitleProp; + +const { props } = Astro; +--- + + +
    + { + "titleTransition" in props ? ( +

    + {props.pageTitle[0]} + + {props.pageTitle[1]} + +

    + ) : ( +

    {props.pageTitle}

    + ) + } +

    {props.pageDesc}

    + +
    + + diff --git a/pages/src/layouts/PostDetails.astro b/pages/src/layouts/PostDetails.astro new file mode 100644 index 0000000..8ba9dca --- /dev/null +++ b/pages/src/layouts/PostDetails.astro @@ -0,0 +1,208 @@ +--- +import Layout from "@layouts/Layout.astro"; +import Header from "@components/Header.astro"; +import Footer from "@components/Footer.astro"; +import Tag from "@components/Tag.astro"; +import Datetime from "@components/Datetime"; +import type { CollectionEntry } from "astro:content"; +import { slugifyStr } from "@utils/slugify"; +import ShareLinks from "@components/ShareLinks.astro"; +import { SITE } from "@config"; + +export interface Props { + post: CollectionEntry<"blog">; +} + +const { post } = Astro.props; + +const { title, author } = post.data; + +const { Content } = await post.render(); + +// const ogImageUrl = typeof ogImage === "string" ? ogImage : ogImage?.src; +// const ogUrl = new URL( +// ogImageUrl ?? `/posts/${slugifyStr(title)}.png`, +// Astro.url.origin +// ).href; + +const layoutProps = { + title: `${title} | ${SITE.title}`, + author, + // ogImage: ogUrl, + scrollSmooth: true, +}; +--- + + +
    + + + +
    + +
    +
    +

    {title}

    + + + + + + +
    + +
    + + + + + +
    + + + +
    +
    +
    + + + + + diff --git a/pages/src/layouts/Posts.astro b/pages/src/layouts/Posts.astro new file mode 100644 index 0000000..fad455a --- /dev/null +++ b/pages/src/layouts/Posts.astro @@ -0,0 +1,75 @@ +--- +import type { CollectionEntry } from "astro:content"; +import Layout from "@layouts/Layout.astro"; +import Main from "@layouts/Main.astro"; +import Header from "@components/Header.astro"; +import Footer from "@components/Footer.astro"; +import Pagination from "@components/Pagination.astro"; +import Card from "@components/Card"; +import { SITE } from "@config"; +import LinkButton from "@components/LinkButton.astro"; + +export interface Props { + currentPage: number; + totalPages: number; + paginatedPosts: CollectionEntry<"blog">[]; + status: string | undefined; +} + +const { currentPage, totalPages, paginatedPosts } = Astro.props; +const status = Astro.props.status || "all"; + +function getStyle(tabStatus: string) { + return tabStatus === status + ? "mr-4 select-none bg-skin-accent px-4 py-2 text-skin-inverted hover:text-skin-inverted" + : "mr-4 select-none px-4 py-2"; +} +--- + + +
    +
    + +
      + { + paginatedPosts.map(({ data, slug }) => ( + + )) + } +
    +
    + + + +
    1} /> + diff --git a/pages/src/layouts/TagPosts.astro b/pages/src/layouts/TagPosts.astro new file mode 100644 index 0000000..ebf169c --- /dev/null +++ b/pages/src/layouts/TagPosts.astro @@ -0,0 +1,49 @@ +--- +import { type CollectionEntry } from "astro:content"; +import Layout from "@layouts/Layout.astro"; +import Main from "@layouts/Main.astro"; +import Header from "@components/Header.astro"; +import Footer from "@components/Footer.astro"; +import Card from "@components/Card"; +import Pagination from "@components/Pagination.astro"; +import { SITE } from "@config"; + +export interface Props { + currentPage: number; + totalPages: number; + paginatedPosts: CollectionEntry<"blog">[]; + tag: string; + tagName: string; +} + +const { currentPage, totalPages, paginatedPosts, tag, tagName } = Astro.props; +--- + + +
    +
    +

    {`Tag:${tag}`}

    +
      + { + paginatedPosts.map(({ data, slug }) => ( + + )) + } +
    +
    + + + +
    1} /> + diff --git a/pages/src/pages/404.astro b/pages/src/pages/404.astro new file mode 100644 index 0000000..3b3a6c3 --- /dev/null +++ b/pages/src/pages/404.astro @@ -0,0 +1,42 @@ +--- +import { SITE } from "@config"; +import Layout from "@layouts/Layout.astro"; +import Header from "@components/Header.astro"; +import Footer from "@components/Footer.astro"; +import LinkButton from "@components/LinkButton.astro"; +--- + + +
    + +
    +
    +

    404

    + +

    Page Not Found

    + + Go back home + +
    +
    + +
    + + + diff --git a/pages/src/pages/[status]/[page].astro b/pages/src/pages/[status]/[page].astro new file mode 100644 index 0000000..31077d0 --- /dev/null +++ b/pages/src/pages/[status]/[page].astro @@ -0,0 +1,44 @@ +--- +import type { GetStaticPaths } from "astro"; +import { getCollection, type CollectionEntry } from "astro:content"; +import Posts from "@layouts/Posts.astro"; +import getSortedPosts from "@utils/getSortedPosts"; +import getPagination from "@utils/getPagination"; +import getPageNumbers from "@utils/getPageNumbers"; + +export async function getPostByStatus(status: string) { + return await getCollection("blog", ({ data }) => + status == "all" ? true : data?.status === status + ); +} + +export const STATUS_LIST = ["all", "translating", "translated", "untranslated"] as const; + +export const getStaticPaths = (async () => { + const statusList = STATUS_LIST; + const ret: { + params: { status: string; page: string }; + }[] = []; + + for (const status of statusList) { + const posts = await getPostByStatus(status); + const pagePaths = getPageNumbers(posts.length).map(pageNum => ({ + params: { status, page: pageNum.toString() }, + })); + ret.push(...pagePaths); + } + return ret; +}) satisfies GetStaticPaths; + +const { status, page } = Astro.params; +const posts = await getPostByStatus(status); +const sortedPosts = getSortedPosts(posts); + +const pagination = getPagination({ + posts: sortedPosts, + page: parseInt(page), + isIndex: false, +}); +--- + + diff --git a/pages/src/pages/[status]/index.astro b/pages/src/pages/[status]/index.astro new file mode 100644 index 0000000..1e41dee --- /dev/null +++ b/pages/src/pages/[status]/index.astro @@ -0,0 +1,29 @@ +--- +import type { GetStaticPaths } from "astro"; +import { STATUS_LIST, getPostByStatus } from "./[page].astro"; +import getSortedPosts from "@utils/getSortedPosts"; +import getPagination from "@utils/getPagination"; +import Posts from "@layouts/Posts.astro"; + +export const getStaticPaths = (async () => { + const statusList = STATUS_LIST; + + return statusList.map(status => { + return { + params: { status }, + }; + }); +}) satisfies GetStaticPaths; + +const { status } = Astro.params; +const posts = await getPostByStatus(status); +const sortedPosts = getSortedPosts(posts); + +const pagination = getPagination({ + posts: sortedPosts, + page: 1, + isIndex: true, +}); +--- + + diff --git a/pages/src/pages/about.md b/pages/src/pages/about.md new file mode 100644 index 0000000..531df7f --- /dev/null +++ b/pages/src/pages/about.md @@ -0,0 +1,36 @@ +--- +layout: ../layouts/AboutLayout.astro +title: "About" +--- + +AstroPaper is a minimal, responsive and SEO-friendly Astro blog theme. I designed and crafted this based on [my personal blog](https://satnaing.dev/blog). + +This theme is aimed to be accessible out of the box. Light and dark mode are supported by +default and additional color schemes can also be configured. + +This theme is self-documented \_ which means articles/posts in this theme can also be considered as documentations. So, see the documentation for more info. + +
    + coding dev illustration +
    + +## Tech Stack + +This theme is written in vanilla JavaScript (+ TypeScript for type checking) and a little bit of ReactJS for some interactions. TailwindCSS is used for styling; and Markdown is used for blog contents. + +## Features + +Here are certain features of this site. + +- fully responsive and accessible +- SEO-friendly +- light & dark mode +- fuzzy search +- super fast performance +- draft posts +- pagination +- sitemap & rss feed +- highly customizable + +If you like this theme, you can star/contribute to the [repo](https://github.com/satnaing/astro-paper). +Or you can even give any feedback via my [email](mailto:contact@satnaing.dev). diff --git a/pages/src/pages/index.astro b/pages/src/pages/index.astro new file mode 100644 index 0000000..d65fc82 --- /dev/null +++ b/pages/src/pages/index.astro @@ -0,0 +1,18 @@ +--- +import getSortedPosts from "@utils/getSortedPosts"; +import { getPostByStatus } from "./[status]/[page].astro"; +import getPagination from "@utils/getPagination"; +import Posts from "@layouts/Posts.astro"; + +const status = "all"; +const posts = await getPostByStatus(status); +const sortedPosts = getSortedPosts(posts); + +const pagination = getPagination({ + posts: sortedPosts, + page: 1, + isIndex: true, +}); +--- + + diff --git a/pages/src/pages/og.png.ts b/pages/src/pages/og.png.ts new file mode 100644 index 0000000..d35baee --- /dev/null +++ b/pages/src/pages/og.png.ts @@ -0,0 +1,7 @@ +import type { APIRoute } from "astro"; +import { generateOgImageForSite } from "@utils/generateOgImages"; + +export const GET: APIRoute = async () => + new Response(await generateOgImageForSite(), { + headers: { "Content-Type": "image/png" }, + }); diff --git a/pages/src/pages/posts/[...slug]/index.astro b/pages/src/pages/posts/[...slug]/index.astro new file mode 100644 index 0000000..0fc9b97 --- /dev/null +++ b/pages/src/pages/posts/[...slug]/index.astro @@ -0,0 +1,30 @@ +--- +import { type CollectionEntry, getCollection } from "astro:content"; +import Posts from "@layouts/Posts.astro"; +import PostDetails from "@layouts/PostDetails.astro"; +import getSortedPosts from "@utils/getSortedPosts"; +import getPageNumbers from "@utils/getPageNumbers"; +import getPagination from "@utils/getPagination"; + +export interface Props { + post: CollectionEntry<"blog">; +} + +export async function getStaticPaths() { + const posts = await getCollection("blog"); + + const postResult = posts.map(post => ({ + params: { slug: post.slug }, + props: { post }, + })); + + return [...postResult]; +} + +const { slug } = Astro.params; +const { post } = Astro.props; + +const posts = await getCollection("blog"); +--- + + diff --git a/pages/src/pages/robots.txt.ts b/pages/src/pages/robots.txt.ts new file mode 100644 index 0000000..0475e01 --- /dev/null +++ b/pages/src/pages/robots.txt.ts @@ -0,0 +1,17 @@ +import type { APIRoute } from "astro"; +import { SITE } from "@config"; + +const robots = ` +User-agent: Googlebot +Disallow: /nogooglebot/ + +User-agent: * +Allow: / + +Sitemap: ${new URL("sitemap-index.xml", SITE.website).href} +`.trim(); + +export const GET: APIRoute = () => + new Response(robots, { + headers: { "Content-Type": "text/plain" }, + }); diff --git a/pages/src/pages/rss.xml.ts b/pages/src/pages/rss.xml.ts new file mode 100644 index 0000000..2ab2994 --- /dev/null +++ b/pages/src/pages/rss.xml.ts @@ -0,0 +1,20 @@ +import rss from "@astrojs/rss"; +import { getCollection } from "astro:content"; +import getSortedPosts from "@utils/getSortedPosts"; +import { SITE } from "@config"; + +export async function GET() { + const posts = await getCollection("blog"); + const sortedPosts = getSortedPosts(posts); + return rss({ + title: SITE.title, + description: SITE.desc, + site: SITE.website, + items: sortedPosts.map(({ data, slug }) => ({ + link: `posts/${slug}/`, + title: data.title || "", + pubDate: new Date(), + description: "", + })), + }); +} diff --git a/pages/src/styles/base.css b/pages/src/styles/base.css new file mode 100644 index 0000000..6efa219 --- /dev/null +++ b/pages/src/styles/base.css @@ -0,0 +1,135 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root, + html[data-theme="light"] { + --color-fill: 251, 254, 251; + --color-text-base: 40, 39, 40; + --color-accent: 0, 108, 172; + --color-card: 230, 230, 230; + --color-card-muted: 205, 205, 205; + --color-border: 236, 233, 233; + } + html[data-theme="dark"] { + --color-fill: 33, 39, 55; + --color-text-base: 234, 237, 243; + --color-accent: 255, 107, 1; + --color-card: 52, 63, 96; + --color-card-muted: 138, 51, 2; + --color-border: 171, 75, 8; + } + #sun-svg, + html[data-theme="dark"] #moon-svg { + display: none; + } + #moon-svg, + html[data-theme="dark"] #sun-svg { + display: block; + } + body { + @apply flex min-h-[100svh] flex-col bg-skin-fill font-mono text-skin-base + selection:bg-skin-accent selection:bg-opacity-70 selection:text-skin-inverted; + } + section, + footer { + @apply mx-auto max-w-3xl px-4; + } + a { + @apply outline-2 outline-offset-1 outline-skin-fill + focus-visible:no-underline focus-visible:outline-dashed; + } + svg { + @apply inline-block h-6 w-6 fill-skin-base group-hover:fill-skin-accent; + } + svg.icon-tabler { + @apply inline-block h-6 w-6 scale-125 fill-transparent + stroke-current stroke-2 opacity-90 group-hover:fill-transparent + sm:scale-110; + } + .prose { + @apply prose-headings:!mb-3 prose-headings:!text-skin-base + prose-h3:italic prose-p:!text-skin-base + prose-a:!text-skin-base prose-a:!decoration-dashed prose-a:underline-offset-8 + hover:prose-a:text-skin-accent prose-blockquote:!border-l-skin-accent + prose-blockquote:border-opacity-50 prose-blockquote:opacity-80 + prose-figcaption:!text-skin-base prose-figcaption:opacity-70 + prose-strong:!text-skin-base + + + prose-code:rounded prose-code:bg-skin-card + prose-code:bg-opacity-75 prose-code:p-1 + prose-code:before:!content-none prose-code:after:!content-none + prose-ol:!text-skin-base + prose-ul:overflow-x-clip prose-ul:!text-skin-base prose-li:marker:!text-skin-accent + prose-table:text-skin-base prose-th:border + prose-th:border-skin-line prose-td:border + prose-td:border-skin-line prose-img:!my-2 + prose-img:mx-auto prose-img:border-2 + prose-img:border-skin-line prose-hr:!border-skin-line; + } + .prose a { + @apply break-words hover:!text-skin-accent; + } + .prose thead th:first-child, + tbody td:first-child, + tfoot td:first-child { + padding-left: 0.5714286em; + } + .prose h2#table-of-contents { + @apply mb-2; + } + .prose details { + @apply inline-block cursor-pointer select-none text-skin-base; + } + .prose summary { + @apply focus-outline; + } + .prose h2#table-of-contents + p { + @apply hidden; + } + + /* ===== scrollbar ===== */ + html { + overflow-y: scroll; + } + + /* width */ + ::-webkit-scrollbar { + @apply w-3; + } + + /* Track */ + ::-webkit-scrollbar-track { + @apply bg-skin-fill; + } + + /* Handle */ + ::-webkit-scrollbar-thumb { + @apply bg-skin-card; + } + + /* Handle on hover */ + ::-webkit-scrollbar-thumb:hover { + @apply bg-skin-card-muted; + } + + code, + blockquote { + word-wrap: break-word; + } + + pre > code { + white-space: pre; + } +} + +@layer components { + .display-none { + @apply hidden; + } + .focus-outline { + @apply outline-2 outline-offset-1 outline-skin-fill focus-visible:no-underline focus-visible:outline-dashed; + } +} diff --git a/pages/src/types.ts b/pages/src/types.ts new file mode 100644 index 0000000..72ba2f0 --- /dev/null +++ b/pages/src/types.ts @@ -0,0 +1,19 @@ +import type socialIcons from "@assets/socialIcons"; + +export type Site = { + website: string; + author: string; + desc: string; + title: string; + ogImage?: string; + lightAndDarkMode: boolean; + postPerPage: number; + scheduledPostMargin: number; +}; + +export type SocialObjects = { + name: keyof typeof socialIcons; + href: string; + active: boolean; + linkTitle: string; +}[]; diff --git a/pages/src/utils/generateOgImages.tsx b/pages/src/utils/generateOgImages.tsx new file mode 100644 index 0000000..c6752b5 --- /dev/null +++ b/pages/src/utils/generateOgImages.tsx @@ -0,0 +1,59 @@ +import satori, { type SatoriOptions } from "satori"; +import { Resvg } from "@resvg/resvg-js"; +import { type CollectionEntry } from "astro:content"; +import postOgImage from "./og-templates/post"; +import siteOgImage from "./og-templates/site"; + +const fetchFonts = async () => { + // Regular Font + const fontFileRegular = await fetch( + "https://www.1001fonts.com/download/font/ibm-plex-mono.regular.ttf" + ); + const fontRegular: ArrayBuffer = await fontFileRegular.arrayBuffer(); + + // Bold Font + const fontFileBold = await fetch( + "https://www.1001fonts.com/download/font/ibm-plex-mono.bold.ttf" + ); + const fontBold: ArrayBuffer = await fontFileBold.arrayBuffer(); + + return { fontRegular, fontBold }; +}; + +const { fontRegular, fontBold } = await fetchFonts(); + +const options: SatoriOptions = { + width: 1200, + height: 630, + embedFont: true, + fonts: [ + { + name: "IBM Plex Mono", + data: fontRegular, + weight: 400, + style: "normal", + }, + { + name: "IBM Plex Mono", + data: fontBold, + weight: 600, + style: "normal", + }, + ], +}; + +function svgBufferToPngBuffer(svg: string) { + const resvg = new Resvg(svg); + const pngData = resvg.render(); + return pngData.asPng(); +} + +export async function generateOgImageForPost(post: CollectionEntry<"blog">) { + const svg = await satori(postOgImage(post), options); + return svgBufferToPngBuffer(svg); +} + +export async function generateOgImageForSite() { + const svg = await satori(siteOgImage(), options); + return svgBufferToPngBuffer(svg); +} diff --git a/pages/src/utils/getPageNumbers.ts b/pages/src/utils/getPageNumbers.ts new file mode 100644 index 0000000..9fc64c3 --- /dev/null +++ b/pages/src/utils/getPageNumbers.ts @@ -0,0 +1,14 @@ +import { SITE } from "@config"; + +const getPageNumbers = (numberOfPosts: number) => { + const numberOfPages = numberOfPosts / Number(SITE.postPerPage); + + let pageNumbers: number[] = []; + for (let i = 1; i <= Math.ceil(numberOfPages); i++) { + pageNumbers = [...pageNumbers, i]; + } + + return pageNumbers; +}; + +export default getPageNumbers; diff --git a/pages/src/utils/getPagination.ts b/pages/src/utils/getPagination.ts new file mode 100644 index 0000000..ce73e4c --- /dev/null +++ b/pages/src/utils/getPagination.ts @@ -0,0 +1,35 @@ +import { SITE } from "@config"; +import getPageNumbers from "./getPageNumbers"; + +interface GetPaginationProps { + posts: T; + page: string | number; + isIndex?: boolean; +} + +const getPagination = ({ + posts, + page, + isIndex = false, +}: GetPaginationProps) => { + const totalPagesArray = getPageNumbers(posts.length); + const totalPages = totalPagesArray.length; + + const currentPage = isIndex + ? 1 + : page && !isNaN(Number(page)) && totalPagesArray.includes(Number(page)) + ? Number(page) + : 0; + + const lastPost = isIndex ? SITE.postPerPage : currentPage * SITE.postPerPage; + const startPost = isIndex ? 0 : lastPost - SITE.postPerPage; + const paginatedPosts = posts.slice(startPost, lastPost); + + return { + totalPages, + currentPage, + paginatedPosts, + }; +}; + +export default getPagination; diff --git a/pages/src/utils/getSortedPosts.ts b/pages/src/utils/getSortedPosts.ts new file mode 100644 index 0000000..43d45ad --- /dev/null +++ b/pages/src/utils/getSortedPosts.ts @@ -0,0 +1,19 @@ +import type { CollectionEntry } from "astro:content"; + +const getSortedPosts = (posts: CollectionEntry<"blog">[]) => { + return posts; + + // TODO: implement sorting + + // .sort( + // (a, b) => + // Math.floor( + // new Date(b.data.modDatetime ?? b.data.pubDatetime).getTime() / 1000 + // ) - + // Math.floor( + // new Date(a.data.modDatetime ?? a.data.pubDatetime).getTime() / 1000 + // ) + // ); +}; + +export default getSortedPosts; diff --git a/pages/src/utils/og-templates/post.tsx b/pages/src/utils/og-templates/post.tsx new file mode 100644 index 0000000..a0dcf60 --- /dev/null +++ b/pages/src/utils/og-templates/post.tsx @@ -0,0 +1,96 @@ +import { SITE } from "@config"; +import type { CollectionEntry } from "astro:content"; + +export default (post: CollectionEntry<"blog">) => { + return ( +
    +
    + +
    +
    +

    + {post.data.title} +

    +
    + + by{" "} + + " + + + {post.data.author} + + + + + {SITE.title} + +
    +
    +
    +
    + ); +}; diff --git a/pages/src/utils/og-templates/site.tsx b/pages/src/utils/og-templates/site.tsx new file mode 100644 index 0000000..33bddc6 --- /dev/null +++ b/pages/src/utils/og-templates/site.tsx @@ -0,0 +1,87 @@ +import { SITE } from "@config"; + +export default () => { + return ( +
    +
    + +
    +
    +
    +

    {SITE.title}

    +

    {SITE.desc}

    +
    + +
    + + {new URL(SITE.website).hostname} + +
    +
    +
    +
    + ); +}; diff --git a/pages/src/utils/slugify.ts b/pages/src/utils/slugify.ts new file mode 100644 index 0000000..007adae --- /dev/null +++ b/pages/src/utils/slugify.ts @@ -0,0 +1,5 @@ +import { slug as slugger } from "github-slugger"; + +export const slugifyStr = (str: string) => slugger(str); + +export const slugifyAll = (arr: string[]) => arr.map(str => slugifyStr(str)); diff --git a/pages/tailwind.config.cjs b/pages/tailwind.config.cjs new file mode 100644 index 0000000..8e43860 --- /dev/null +++ b/pages/tailwind.config.cjs @@ -0,0 +1,75 @@ +function withOpacity(variableName) { + return ({ opacityValue }) => { + if (opacityValue !== undefined) { + return `rgba(var(${variableName}), ${opacityValue})`; + } + return `rgb(var(${variableName}))`; + }; +} + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"], + theme: { + // Remove the following screen breakpoint or add other breakpoints + // if one breakpoint is not enough for you + screens: { + sm: "640px", + }, + + extend: { + textColor: { + skin: { + base: withOpacity("--color-text-base"), + accent: withOpacity("--color-accent"), + inverted: withOpacity("--color-fill"), + }, + }, + backgroundColor: { + skin: { + fill: withOpacity("--color-fill"), + accent: withOpacity("--color-accent"), + inverted: withOpacity("--color-text-base"), + card: withOpacity("--color-card"), + "card-muted": withOpacity("--color-card-muted"), + }, + }, + outlineColor: { + skin: { + fill: withOpacity("--color-accent"), + }, + }, + borderColor: { + skin: { + line: withOpacity("--color-border"), + fill: withOpacity("--color-text-base"), + accent: withOpacity("--color-accent"), + }, + }, + fill: { + skin: { + base: withOpacity("--color-text-base"), + accent: withOpacity("--color-accent"), + }, + transparent: "transparent", + }, + fontFamily: { + mono: ["IBM Plex Mono", "monospace"], + }, + + typography: { + DEFAULT: { + css: { + pre: { + color: false, + }, + code: { + color: false, + }, + }, + }, + }, + }, + }, + plugins: [require("@tailwindcss/typography")], +}; diff --git a/pages/tmp.txt b/pages/tmp.txt new file mode 100644 index 0000000..e50a784 --- /dev/null +++ b/pages/tmp.txt @@ -0,0 +1,8864 @@ +yarn run v1.22.21 +$ astro check && astro build && jampack ./dist +18:04:20 Types generated 107ms +18:04:20 [check] Getting diagnostics for Astro files in /home/chengziqiu/Workspace/translate-project/pages... +plugin/BrokenMarkdownRemarkPlugin.ts:5:34 - warning ts(6133): 'parent' is declared but its value is never read. + +5 modifyChildren((node, index, parent) => { +   ~~~~~~ +plugin/BrokenMarkdownRemarkPlugin.ts:5:27 - warning ts(6133): 'index' is declared but its value is never read. + +5 modifyChildren((node, index, parent) => { +   ~~~~~ +plugin/BrokenMarkdownRemarkPlugin.ts:4:17 - warning ts(6133): 'options' is declared but its value is never read. + +4 const plugin = (options) => (tree) => { +   ~~~~~~~ + +src/components/Card.tsx:14:5 - warning ts(6133): 'translator' is declared but its value is never read. + +14 translator, +   ~~~~~~~~~~ +src/components/Card.tsx:2:1 - warning ts(6133): 'Datetime' is declared but its value is never read. + +2 import Datetime from "./Datetime"; +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +src/components/Datetime.tsx:47:28 - warning ts(6198): All destructured elements are unused. + +47 const FormattedDatetime = ({ pubDatetime, modDatetime }: DatetimesProps) => { +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +src/components/Datetime.tsx:1:1 - warning ts(6133): 'LOCALE' is declared but its value is never read. + +1 import { LOCALE } from "@config"; +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +src/components/Footer.astro:5:7 - warning ts(6133): 'currentYear' is declared but its value is never read. + +5 const currentYear = new Date().getFullYear(); +   ~~~~~~~~~~~ +src/components/Footer.astro:3:1 - warning ts(6133): 'Socials' is declared but its value is never read. + +3 import Socials from "./Socials.astro"; +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +src/components/Header.astro:4:1 - warning ts(6133): 'LinkButton' is declared but its value is never read. + +4 import LinkButton from "./LinkButton.astro"; +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +src/layouts/Main.astro:2:1 - warning ts(6133): 'Breadcrumbs' is declared but its value is never read. + +2 import Breadcrumbs from "@components/Breadcrumbs.astro"; +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +src/layouts/PostDetails.astro:6:1 - warning ts(6133): 'Datetime' is declared but its value is never read. + +6 import Datetime from "@components/Datetime"; +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +src/layouts/PostDetails.astro:5:1 - warning ts(6133): 'Tag' is declared but its value is never read. + +5 import Tag from "@components/Tag.astro"; +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +src/pages/[status]/[page].astro:3:30 - warning ts(6133): 'CollectionEntry' is declared but its value is never read. + +3 import { getCollection, type CollectionEntry } from "astro:content"; +   ~~~~~~~~~~~~~~~ + +src/pages/posts/[...slug]/index.astro:27:7 - warning ts(6133): 'posts' is declared but its value is never read. + +27 const posts = await getCollection("blog"); +   ~~~~~ +src/pages/posts/[...slug]/index.astro:24:7 - warning ts(6133): 'slug' is declared but its value is never read. + +24 const { slug } = Astro.params; +   ~~~~~~~~ +src/pages/posts/[...slug]/index.astro:7:1 - warning ts(6133): 'getPagination' is declared but its value is never read. + +7 import getPagination from "@utils/getPagination"; +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +src/pages/posts/[...slug]/index.astro:6:1 - warning ts(6133): 'getPageNumbers' is declared but its value is never read. + +6 import getPageNumbers from "@utils/getPageNumbers"; +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +src/pages/posts/[...slug]/index.astro:5:1 - warning ts(6133): 'getSortedPosts' is declared but its value is never read. + +5 import getSortedPosts from "@utils/getSortedPosts"; +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +src/pages/posts/[...slug]/index.astro:3:1 - warning ts(6133): 'Posts' is declared but its value is never read. + +3 import Posts from "@layouts/Posts.astro"; +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Result (44 files): +- 0 errors +- 0 warnings +- 20 hints + +18:04:23 Types generated 104ms +18:04:23 [build] output: "static" +18:04:23 [build] directory: /home/chengziqiu/Workspace/translate-project/pages/dist/ +18:04:23 [build] Collecting build info... +18:04:23 [build] ✓ Completed in 123ms. +18:04:23 [build] Building static entrypoints... +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'AstroPaper is a minimal, responsive and SEO-friendly Astro blog theme. I designed and crafted this based on ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://satnaing.dev/blog', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 2, column: 1, offset: 1 }, + end: { line: 2, column: 155, offset: 155 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'This theme is aimed to be accessible out of the box. Light and dark mode are supported by\n' + + 'default and additional color schemes can also be configured.', + position: [Object] + } + ], + position: { + start: { line: 4, column: 1, offset: 157 }, + end: { line: 5, column: 61, offset: 307 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'This theme is self-documented _ which means articles/posts in this theme can also be considered as documentations. So, see the documentation for more info.', + position: [Object] + } + ], + position: { + start: { line: 7, column: 1, offset: 309 }, + end: { line: 7, column: 157, offset: 465 } + } +} +{ + type: 'html', + value: '
    \n' + + ' coding dev illustration\n' + + '
    ', + position: { + start: { line: 9, column: 1, offset: 467 }, + end: { line: 11, column: 7, offset: 564 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Tech Stack', position: [Object] } ], + position: { + start: { line: 13, column: 1, offset: 566 }, + end: { line: 13, column: 14, offset: 579 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'This theme is written in vanilla JavaScript (+ TypeScript for type checking) and a little bit of ReactJS for some interactions. TailwindCSS is used for styling; and Markdown is used for blog contents.', + position: [Object] + } + ], + position: { + start: { line: 15, column: 1, offset: 581 }, + end: { line: 15, column: 201, offset: 781 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Features', position: [Object] } ], + position: { + start: { line: 17, column: 1, offset: 783 }, + end: { line: 17, column: 12, offset: 794 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Here are certain features of this site.', + position: [Object] + } + ], + position: { + start: { line: 19, column: 1, offset: 796 }, + end: { line: 19, column: 40, offset: 835 } + } +} +{ + type: 'list', + ordered: false, + start: null, + spread: false, + children: [ + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 21, column: 1, offset: 837 }, + end: { line: 29, column: 22, offset: 1015 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'If you like this theme, you can star/contribute to the ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://github.com/satnaing/astro-paper', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.', position: [Object] }, + { type: 'break', position: [Object] }, + { + type: 'text', + value: 'Or you can even give any feedback via my ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'mailto:contact@satnaing.dev', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 31, column: 1, offset: 1017 }, + end: { line: 32, column: 79, offset: 1201 } + } +} +{ + type: 'heading', + depth: 1, + children: [ + { + type: 'text', + value: 'Linux Kernel 成为 CVE 编号机构', + position: [Object] + } + ], + position: { + start: { line: 2, column: 1, offset: 1 }, + end: { line: 2, column: 27, offset: 27 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'CVE 组织', position: [Object] }, + { + type: 'link', + title: null, + url: 'https://www.cve.org/Media/News/item/news/2024/02/13/kernel-org-Added-as-CNA', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ',Linux 内核已然正式成为 CVE 编号机构(CNA)。作为 CNA,Linux 具有在其软件产品中发现的漏洞分配 CVE 编号的权限,并向 CVE 数据库做出贡献。', + position: [Object] + } + ], + position: { + start: { line: 4, column: 1, offset: 29 }, + end: { line: 4, column: 175, offset: 203 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '这是一个趋势,越来越多的开源项目开始成为 CNA,以便自己管理对其项目的 CVE 分配,而不允许其他组织在未经他们参与的情况下分配 CVE。', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://daniel.haxx.se/blog/2024/01/16/curl-is-a-cna/', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '出于相同的原因也成为了 CNA。我想要指出', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://www.cve.org/Media/News/item/news/2023/08/29/Python-Software-Foundation-Added-as-CNA', + children: [Array], + position: [Object] + }, + { type: 'text', value: '在支持这一努力方面所做的出色工作,', position: [Object] }, + { + type: 'link', + title: null, + url: 'https://openssf.org/', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '也鼓励并为开源项目提供文档和帮助。我还想感谢 ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://www.cve.org/', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' 组织和董事会,因为他们在申请过程中给予了我们很大的帮助,并使这一切成为可能。', + position: [Object] + } + ], + position: { + start: { line: 6, column: 1, offset: 205 }, + end: { line: 6, column: 404, offset: 608 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: '众所周知,我之前曾', position: [Object] }, + { + type: 'link', + title: null, + url: 'https://kernel-recipes.org/en/2019/talks/cves-are-dead-long-live-the-cve/', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ',并且,我认为整个系统在许多方面都存在问题,但成为 CNA 这一变化也是我们承担更多责任的一种契机,并希望随着时间的推移系统能够改进。根据世界各地最近颁布的法律法规,所有的开源项目似乎都必须被要求进行这项工作,因此,有了内核的支持将使我们在未来有需要时能够通知各种不同的类似 CNA 的组织。', + position: [Object] + } + ], + position: { + start: { line: 8, column: 1, offset: 610 }, + end: { line: 8, column: 241, offset: 850 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: '有关内核将如何运作的更多细节,请参阅此', position: [Object] }, + { + type: 'link', + title: null, + url: 'https://lore.kernel.org/lkml/2024021314-unwelcome-shrill-690e@gregkh/', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '。这一流程可能会与其他CNA 的工作有些不同,但在很大程度上,这是因为内核存在于与大多数其他软件项目不同的层面,而且我们的用户群与几乎所有其他软件项目相比都是最广泛和最多样化的(当然,curl 项目是个例外,该项目', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://daniel.haxx.se/blog/2023/11/14/curl-on-100-operating-systems/', + children: [Array], + position: [Object] + }, + { type: 'text', value: '!)', position: [Object] } + ], + position: { + start: { line: 10, column: 1, offset: 852 }, + end: { line: 10, column: 283, offset: 1134 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: '您可以在此', position: [Object] }, + { + type: 'link', + title: null, + url: 'https://lore.kernel.org/linux-cve-announce/', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '上找到我们分配的所有 CVE,并且如果您希望自动收到所有 CVE 的通知,请订阅该列表。可以在', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://git.kernel.org/pub/scm/linux/security/vulns.git/', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '找到它们的 git 存储库,但请注意,随着时间的推移,存储库的结构会发生变化,因为我们在学习和管理流程方面会变得更加完善,所以暂时不要认为 git 树中的任何内容会固定不变。', + position: [Object] + } + ], + position: { + start: { line: 12, column: 1, offset: 1136 }, + end: { line: 12, column: 253, offset: 1388 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '一旦流程正常运转并且能够顺利分配 CVE,我会在未来写更多内容。这一公告只是第一步,它使我们成为了 Linux CVE 分配流程的管理者。', + position: [Object] + } + ], + position: { + start: { line: 14, column: 1, offset: 1390 }, + end: { line: 14, column: 70, offset: 1459 } + } +} +{ + type: 'heading', + depth: 1, + children: [ + { + type: 'text', + value: 'Kernel Memory Leak Detector', + position: [Object] + } + ], + position: { + start: { line: 1, column: 1, offset: 0 }, + end: { line: 1, column: 30, offset: 29 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Kmemleak provides a way of detecting possible kernel memory leaks in away similar to a ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://en.wikipedia.org/wiki/Tracing_garbage_collection', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ',with the difference that the orphan objects are not freed but only reported via /sys/kernel/debug/kmemleak. A similar method is used by the Valgrind tool (', + position: [Object] + }, + { + type: 'inlineCode', + value: 'memcheck --leak-check', + position: [Object] + }, + { + type: 'text', + value: ') to detect the memory leaks in user-space applications.', + position: [Object] + } + ], + position: { + start: { line: 3, column: 1, offset: 31 }, + end: { line: 3, column: 408, offset: 438 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Usage', position: [Object] } ], + position: { + start: { line: 5, column: 1, offset: 440 }, + end: { line: 5, column: 9, offset: 448 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'CONFIG_DEBUG_KMEMLEAK in “Kernel hacking” has to be enabled. A kernel thread scans the memory every 10 minutes (by default) and prints the number of new unreferenced objects found.If the ', + position: [Object] + }, + { type: 'inlineCode', value: 'debugfs', position: [Object] }, + { + type: 'text', + value: ' isn’t already mounted, mount with:', + position: [Object] + } + ], + position: { + start: { line: 7, column: 1, offset: 450 }, + end: { line: 7, column: 237, offset: 686 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '# mount -t debugfs nodev /sys/kernel/debug/', + position: { + start: { line: 9, column: 1, offset: 688 }, + end: { line: 9, column: 48, offset: 735 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'To display the details of all the possible scanned memory leaks:', + position: [Object] + } + ], + position: { + start: { line: 11, column: 1, offset: 737 }, + end: { line: 11, column: 65, offset: 801 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '# cat /sys/kernel/debug/kmemleak', + position: { + start: { line: 13, column: 1, offset: 803 }, + end: { line: 13, column: 37, offset: 839 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'To trigger an intermediate memory scan:', + position: [Object] + } + ], + position: { + start: { line: 15, column: 1, offset: 841 }, + end: { line: 15, column: 40, offset: 880 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '# echo scan > /sys/kernel/debug/kmemleak', + position: { + start: { line: 17, column: 1, offset: 882 }, + end: { line: 17, column: 45, offset: 926 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'To clear the list of all current possible memory leaks:', + position: [Object] + } + ], + position: { + start: { line: 19, column: 1, offset: 928 }, + end: { line: 19, column: 56, offset: 983 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '# echo clear > /sys/kernel/debug/kmemleak', + position: { + start: { line: 21, column: 1, offset: 985 }, + end: { line: 21, column: 46, offset: 1030 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'New leaks will then come up upon reading ', + position: [Object] + }, + { + type: 'inlineCode', + value: '/sys/kernel/debug/kmemleak', + position: [Object] + }, + { type: 'text', value: ' again.', position: [Object] } + ], + position: { + start: { line: 23, column: 1, offset: 1032 }, + end: { line: 23, column: 77, offset: 1108 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Note that the orphan objects are listed in the order they were allocated and one object at the beginning of the list may cause other subsequent objects to be reported as orphan.', + position: [Object] + } + ], + position: { + start: { line: 25, column: 1, offset: 1110 }, + end: { line: 25, column: 178, offset: 1287 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Memory scanning parameters can be modified at run-time by writing to the ', + position: [Object] + }, + { + type: 'inlineCode', + value: '/sys/kernel/debug/kmemleak', + position: [Object] + }, + { + type: 'text', + value: ' file. The following parameters are supported:', + position: [Object] + } + ], + position: { + start: { line: 27, column: 1, offset: 1289 }, + end: { line: 27, column: 148, offset: 1436 } + } +} +{ + type: 'list', + ordered: false, + start: null, + spread: false, + children: [ + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 29, column: 1, offset: 1438 }, + end: { line: 46, column: 56, offset: 2112 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Kmemleak can also be disabled at boot-time by passing ', + position: [Object] + }, + { type: 'inlineCode', value: 'kmemleak=off', position: [Object] }, + { + type: 'text', + value: ' on the kernel command line.', + position: [Object] + } + ], + position: { + start: { line: 48, column: 1, offset: 2114 }, + end: { line: 48, column: 97, offset: 2210 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Memory may be allocated or freed before kmemleak is initialised and these actions are stored in an early log buffer. The size of this buffer is configured via the CONFIG_DEBUG_KMEMLEAK_MEM_POOL_SIZE option.', + position: [Object] + } + ], + position: { + start: { line: 50, column: 1, offset: 2212 }, + end: { line: 50, column: 212, offset: 2423 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'If CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF are enabled, the kmemleak is disabled by default. Passing ', + position: [Object] + }, + { type: 'inlineCode', value: 'kmemleak=on', position: [Object] }, + { + type: 'text', + value: ' on the kernel command line enables the function.', + position: [Object] + } + ], + position: { + start: { line: 52, column: 1, offset: 2425 }, + end: { line: 52, column: 162, offset: 2586 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'If you are getting errors like “Error while writing to stdout” or “write_loop: Invalid argument”, make sure kmemleak is properly enabled.', + position: [Object] + } + ], + position: { + start: { line: 54, column: 1, offset: 2588 }, + end: { line: 54, column: 143, offset: 2730 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Basic Algorithm', position: [Object] } ], + position: { + start: { line: 56, column: 1, offset: 2732 }, + end: { line: 56, column: 19, offset: 2750 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The memory allocations via ', + position: [Object] + }, + { + type: 'link', + title: 'kmalloc', + url: 'https://docs.kernel.org/core-api/mm-api.html#c.kmalloc', + children: [Array], + position: [Object] + }, + { type: 'text', value: ', ', position: [Object] }, + { + type: 'link', + title: 'vmalloc', + url: 'https://docs.kernel.org/core-api/mm-api.html#c.vmalloc', + children: [Array], + position: [Object] + }, + { type: 'text', value: ', ', position: [Object] }, + { + type: 'link', + title: 'kmem_cache_alloc', + url: 'https://docs.kernel.org/core-api/mm-api.html#c.kmem_cache_alloc', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' and friends are traced and the pointers, together with additional information like size and stack trace, are stored in a rbtree. The corresponding freeing function calls are tracked and the pointers removed from the kmemleak data structures.', + position: [Object] + } + ], + position: { + start: { line: 58, column: 1, offset: 2752 }, + end: { line: 58, column: 538, offset: 3289 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'An allocated block of memory is considered orphan if no pointer to its start address or to any location inside the block can be found by scanning the memory (including saved registers). This means that there might be no way for the kernel to pass the address of the allocated block to a freeing function and therefore the block is considered a memory leak.', + position: [Object] + } + ], + position: { + start: { line: 60, column: 1, offset: 3291 }, + end: { line: 60, column: 357, offset: 3647 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The scanning algorithm steps:', + position: [Object] + } + ], + position: { + start: { line: 62, column: 1, offset: 3649 }, + end: { line: 62, column: 30, offset: 3678 } + } +} +{ + type: 'blockquote', + children: [ + { + type: 'list', + ordered: true, + start: 1, + spread: false, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 64, column: 1, offset: 3680 }, + end: { line: 68, column: 2, offset: 4231 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Some allocated memory blocks have pointers stored in the kernel’s internal data structures and they cannot be detected as orphans. To avoid this, kmemleak can also store the number of values pointing to an address inside the block address range that need to be found so that the block is not considered a leak. One example is __vmalloc().', + position: [Object] + } + ], + position: { + start: { line: 70, column: 1, offset: 4233 }, + end: { line: 70, column: 342, offset: 4574 } + } +} +{ + type: 'heading', + depth: 2, + children: [ + { + type: 'text', + value: 'Testing specific sections with kmemleak', + position: [Object] + } + ], + position: { + start: { line: 72, column: 1, offset: 4576 }, + end: { line: 72, column: 43, offset: 4618 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Upon initial bootup your /sys/kernel/debug/kmemleak output page may be quite extensive. This can also be the case if you have very buggy code when doing development. To work around these situations you can use the ‘clear’ command to clear all reported unreferenced objects from the\n' + + '/sys/kernel/debug/kmemleak output. By issuing a ‘scan’ after a ‘clear’ you can find new unreferenced objects; this should help with testing specific sections of code.', + position: [Object] + } + ], + position: { + start: { line: 74, column: 1, offset: 4620 }, + end: { line: 75, column: 171, offset: 5074 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'To test a critical section on demand with a clean kmemleak do:', + position: [Object] + } + ], + position: { + start: { line: 77, column: 1, offset: 5076 }, + end: { line: 77, column: 63, offset: 5138 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '# echo clear > /sys/kernel/debug/kmemleak\n' + + '... test your kernel or modules ...\n' + + '# echo scan > /sys/kernel/debug/kmemleak', + position: { + start: { line: 79, column: 1, offset: 5140 }, + end: { line: 81, column: 45, offset: 5270 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Then as usual to get your report with:', + position: [Object] + } + ], + position: { + start: { line: 83, column: 1, offset: 5272 }, + end: { line: 83, column: 39, offset: 5310 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '# cat /sys/kernel/debug/kmemleak', + position: { + start: { line: 85, column: 1, offset: 5312 }, + end: { line: 85, column: 37, offset: 5348 } + } +} +{ + type: 'heading', + depth: 2, + children: [ + { + type: 'text', + value: 'Freeing kmemleak internal objects', + position: [Object] + } + ], + position: { + start: { line: 87, column: 1, offset: 5350 }, + end: { line: 87, column: 37, offset: 5386 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'To allow access to previously found memory leaks after kmemleak has been disabled by the user or due to an fatal error, internal kmemleak objects won’t be freed when kmemleak is disabled, and those objects may occupy a large part of physical memory.', + position: [Object] + } + ], + position: { + start: { line: 89, column: 1, offset: 5388 }, + end: { line: 89, column: 251, offset: 5638 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'In this situation, you may reclaim memory with:', + position: [Object] + } + ], + position: { + start: { line: 91, column: 1, offset: 5640 }, + end: { line: 91, column: 48, offset: 5687 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '# echo clear > /sys/kernel/debug/kmemleak', + position: { + start: { line: 93, column: 1, offset: 5689 }, + end: { line: 93, column: 46, offset: 5734 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Kmemleak API', position: [Object] } ], + position: { + start: { line: 95, column: 1, offset: 5736 }, + end: { line: 95, column: 16, offset: 5751 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'See the include/linux/kmemleak.h header for the functions prototype.', + position: [Object] + } + ], + position: { + start: { line: 97, column: 1, offset: 5753 }, + end: { line: 97, column: 69, offset: 5821 } + } +} +{ + type: 'list', + ordered: false, + start: null, + spread: false, + children: [ + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 99, column: 1, offset: 5823 }, + end: { line: 115, column: 18, offset: 6787 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The following functions take a physical address as the object pointer and only perform the corresponding action if the address has a lowmem mapping:', + position: [Object] + } + ], + position: { + start: { line: 117, column: 1, offset: 6789 }, + end: { line: 117, column: 149, offset: 6937 } + } +} +{ + type: 'list', + ordered: false, + start: null, + spread: false, + children: [ + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 119, column: 1, offset: 6939 }, + end: { line: 121, column: 27, offset: 7021 } + } +} +{ + type: 'heading', + depth: 2, + children: [ + { + type: 'text', + value: 'Dealing with false positives/negatives', + position: [Object] + } + ], + position: { + start: { line: 123, column: 1, offset: 7023 }, + end: { line: 123, column: 42, offset: 7064 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The false negatives are real memory leaks (orphan objects) but not reported by kmemleak because values found during the memory scanning point to such objects. To reduce the number of false negatives, kmemleak provides the kmemleak_ignore, kmemleak_scan_area, kmemleak_no_scan and kmemleak_erase functions (see above). The task stacks also increase the amount of false negatives and their scanning is not enabled by default.', + position: [Object] + } + ], + position: { + start: { line: 125, column: 1, offset: 7066 }, + end: { line: 125, column: 430, offset: 7495 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The false positives are objects wrongly reported as being memory leaks (orphan). For objects known not to be leaks, kmemleak provides the kmemleak_not_leak function. The memleak_ignore could also be used if the memory block is known not to contain other pointers and it will no longer be scanned.', + position: [Object] + } + ], + position: { + start: { line: 127, column: 1, offset: 7497 }, + end: { line: 127, column: 300, offset: 7796 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Some of the reported leaks are only transient, especially on SMP systems, because of pointers temporarily stored in CPU registers or stacks. Kmemleak defines MSECS_MIN_AGE (defaulting to 1000) representing the minimum age of an object to be reported as a memory leak.', + position: [Object] + } + ], + position: { + start: { line: 129, column: 1, offset: 7798 }, + end: { line: 129, column: 270, offset: 8067 } + } +} +{ + type: 'heading', + depth: 2, + children: [ + { + type: 'text', + value: 'Limitations and Drawbacks', + position: [Object] + } + ], + position: { + start: { line: 131, column: 1, offset: 8069 }, + end: { line: 131, column: 29, offset: 8097 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The main drawback is the reduced performance of memory allocation and\n' + + 'freeing. To avoid other penalties, the memory scanning is only performed\n' + + 'when the /sys/kernel/debug/kmemleak file is read. Anyway, this tool is\n' + + 'intended for debugging purposes where the performance might not be the\n' + + 'most important requirement.', + position: [Object] + } + ], + position: { + start: { line: 133, column: 1, offset: 8099 }, + end: { line: 137, column: 28, offset: 8411 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'To keep the algorithm simple, kmemleak scans for values pointing to any\n' + + 'address inside a block’s address range. This may lead to an increased\n' + + 'number of false negatives. However, it is likely that a real memory leak\n' + + 'will eventually become visible.', + position: [Object] + } + ], + position: { + start: { line: 139, column: 1, offset: 8413 }, + end: { line: 142, column: 32, offset: 8660 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Another source of false negatives is the data stored in non-pointer\n' + + 'values. In a future version, kmemleak could only scan the pointer\n' + + 'members in the allocated structures. This feature would solve many of\n' + + 'the false negative cases described above.', + position: [Object] + } + ], + position: { + start: { line: 144, column: 1, offset: 8662 }, + end: { line: 147, column: 42, offset: 8907 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The tool can report false positives. These are cases where an allocated\n' + + 'block doesn’t need to be freed (some cases in the init_call\n' + + 'functions), the pointer is calculated by other methods than the usual\n' + + 'container_of macro or the pointer is stored in a location not scanned\n' + + 'by kmemleak.', + position: [Object] + } + ], + position: { + start: { line: 149, column: 1, offset: 8909 }, + end: { line: 153, column: 13, offset: 9196 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Page allocations and ioremap are not tracked.', + position: [Object] + } + ], + position: { + start: { line: 155, column: 1, offset: 9198 }, + end: { line: 155, column: 46, offset: 9243 } + } +} +{ + type: 'heading', + depth: 2, + children: [ + { + type: 'text', + value: 'Testing with kmemleak-test', + position: [Object] + } + ], + position: { + start: { line: 157, column: 1, offset: 9245 }, + end: { line: 157, column: 30, offset: 9274 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'To check if you have all set up to use kmemleak, you can use the kmemleak-test module, a module that deliberately leaks memory. Set CONFIG_SAMPLE_KMEMLEAK as module (it can’t be used as built-in) and boot the kernel with kmemleak enabled. Load the module and perform a scan with:', + position: [Object] + } + ], + position: { + start: { line: 159, column: 1, offset: 9276 }, + end: { line: 159, column: 283, offset: 9558 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '# modprobe kmemleak-test\n# echo scan > /sys/kernel/debug/kmemleak', + position: { + start: { line: 161, column: 1, offset: 9560 }, + end: { line: 162, column: 45, offset: 9633 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Note that the you may not get results instantly or on the first scanning. When kmemleak gets results, it’ll log ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'kmemleak: new suspected memory leaks', + position: [Object] + }, + { + type: 'text', + value: '. Then read the file to see then:', + position: [Object] + } + ], + position: { + start: { line: 164, column: 1, offset: 9635 }, + end: { line: 164, column: 202, offset: 9836 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '# cat /sys/kernel/debug/kmemleak\n' + + 'unreferenced object 0xffff89862ca702e8 (size 32):\n' + + ' comm "modprobe", pid 2088, jiffies 4294680594 (age 375.486s)\n' + + ' hex dump (first 32 bytes):\n' + + ' 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b kkkkkkkkkkkkkkkk\n' + + ' 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5 kkkkkkkkkkkkkkk.\n' + + ' backtrace:\n' + + ' [<00000000e0a73ec7>] 0xffffffffc01d2036\n' + + ' [<000000000c5d2a46>] do_one_initcall+0x41/0x1df\n' + + ' [<0000000046db7e0a>] do_init_module+0x55/0x200\n' + + ' [<00000000542b9814>] load_module+0x203c/0x2480\n' + + ' [<00000000c2850256>] __do_sys_finit_module+0xba/0xe0\n' + + ' [<000000006564e7ef>] do_syscall_64+0x43/0x110\n' + + ' [<000000007c873fa6>] entry_SYSCALL_64_after_hwframe+0x44/0xa9\n' + + '...', + position: { + start: { line: 166, column: 1, offset: 9838 }, + end: { line: 180, column: 8, offset: 10600 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Removing the module with ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'rmmod kmemleak_test', + position: [Object] + }, + { + type: 'text', + value: ' should also trigger some kmemleak results.', + position: [Object] + } + ], + position: { + start: { line: 182, column: 1, offset: 10602 }, + end: { line: 182, column: 90, offset: 10691 } + } +} +{ + type: 'heading', + depth: 1, + children: [ { type: 'text', value: '未定义行为消毒剂 - UBSAN', position: [Object] } ], + position: { + start: { line: 2, column: 1, offset: 1 }, + end: { line: 2, column: 19, offset: 19 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'UBSAN是一种动态未定义行为检查工具。', position: [Object] } + ], + position: { + start: { line: 4, column: 1, offset: 21 }, + end: { line: 4, column: 21, offset: 41 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'UBSAN 使用编译时插桩捕捉未定义行为。编译器在可能导致未定义行为\n' + + '的操作前插入特定检查代码。如果检查失败,即,检测到未定义行为,\n' + + '则 __', + position: [Object] + }, + { + type: 'link', + title: null, + url: '', + children: [Array], + position: [Object] + }, + { type: 'text', value: '* 函数将被调用打印错误信息。', position: [Object] } + ], + position: { + start: { line: 6, column: 1, offset: 43 }, + end: { line: 8, column: 39, offset: 148 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'GCC自4.9.x [', position: [Object] }, + { + type: 'link', + title: null, + url: 'https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Debugging-Options.html', + children: [Array], + position: [Object] + }, + { type: 'text', value: '] (详见 ', position: [Object] }, + { + type: 'inlineCode', + value: '-fsanitize=undefined', + position: [Object] + }, + { + type: 'text', + value: ' 选项及其子选项)之后引入\n这一特性。GCC 5.x 版本实现了更多检查器 [', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html', + children: [Array], + position: [Object] + }, + { type: 'text', value: ']。', position: [Object] } + ], + position: { + start: { line: 10, column: 1, offset: 150 }, + end: { line: 11, column: 92, offset: 370 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: '报告样例', position: [Object] } ], + position: { + start: { line: 13, column: 1, offset: 372 }, + end: { line: 13, column: 8, offset: 379 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '================================================================================\n' + + 'UBSAN: Undefined behaviour in ../include/linux/bitops.h:110:33\n' + + "shift exponent 32 is to large for 32-bit type 'unsigned int'\n" + + 'CPU: 0 PID: 0 Comm: swapper Not tainted 4.4.0-rc1+ #26\n' + + ' 0000000000000000 ffffffff82403cc8 ffffffff815e6cd6 0000000000000001\n' + + ' ffffffff82403cf8 ffffffff82403ce0 ffffffff8163a5ed 0000000000000020\n' + + ' ffffffff82403d78 ffffffff8163ac2b ffffffff815f0001 0000000000000002\n' + + 'Call Trace:\n' + + ' [] dump_stack+0x45/0x5f\n' + + ' [] ubsan_epilogue+0xd/0x40\n' + + ' [] __ubsan_handle_shift_out_of_bounds+0xeb/0x130\n' + + ' [] ? radix_tree_gang_lookup_slot+0x51/0x150\n' + + ' [] _mix_pool_bytes+0x1e6/0x480\n' + + ' [] ? dmi_walk_early+0x48/0x5c\n' + + ' [] add_device_randomness+0x61/0x130\n' + + ' [] ? dmi_save_one_device+0xaa/0xaa\n' + + ' [] dmi_walk_early+0x48/0x5c\n' + + ' [] dmi_scan_machine+0x278/0x4b4\n' + + ' [] ? vprintk_default+0x1a/0x20\n' + + ' [] ? early_idt_handler_array+0x120/0x120\n' + + ' [] setup_arch+0x405/0xc2c\n' + + ' [] ? early_idt_handler_array+0x120/0x120\n' + + ' [] start_kernel+0x83/0x49a\n' + + ' [] ? early_idt_handler_array+0x120/0x120\n' + + ' [] x86_64_start_reservations+0x2a/0x2c\n' + + ' [] x86_64_start_kernel+0x16b/0x17a\n' + + '================================================================================', + position: { + start: { line: 15, column: 1, offset: 381 }, + end: { line: 41, column: 85, offset: 2007 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: '用法', position: [Object] } ], + position: { + start: { line: 43, column: 1, offset: 2009 }, + end: { line: 43, column: 6, offset: 2014 } + } +} +{ + type: 'paragraph', + children: [ { type: 'text', value: '使用如下内核配置启用UBSAN:', position: [Object] } ], + position: { + start: { line: 45, column: 1, offset: 2016 }, + end: { line: 45, column: 17, offset: 2032 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'CONFIG_UBSAN=y', + position: { + start: { line: 47, column: 1, offset: 2034 }, + end: { line: 47, column: 19, offset: 2052 } + } +} +{ + type: 'paragraph', + children: [ { type: 'text', value: '使用如下内核配置检查整个内核:', position: [Object] } ], + position: { + start: { line: 49, column: 1, offset: 2054 }, + end: { line: 49, column: 16, offset: 2069 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'CONFIG_UBSAN_SANITIZE_ALL=y', + position: { + start: { line: 51, column: 1, offset: 2071 }, + end: { line: 51, column: 32, offset: 2102 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '为了在特定文件或目录中启动代码插桩,需要在相应的内核Makefile中添加\n一行类似内容:', + position: [Object] + } + ], + position: { + start: { line: 53, column: 1, offset: 2104 }, + end: { line: 54, column: 8, offset: 2149 } + } +} +{ + type: 'list', + ordered: false, + start: null, + spread: true, + children: [ + { + type: 'listItem', + spread: true, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: true, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 56, column: 1, offset: 2151 }, + end: { line: 62, column: 28, offset: 2250 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: '即使', position: [Object] }, + { + type: 'inlineCode', + value: 'CONFIG_UBSAN_SANITIZE_ALL=y', + position: [Object] + }, + { type: 'text', value: ',为了避免文件被插桩,可使用:', position: [Object] } + ], + position: { + start: { line: 64, column: 1, offset: 2252 }, + end: { line: 64, column: 49, offset: 2300 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'UBSAN_SANITIZE_main.o := n', + position: { + start: { line: 66, column: 1, offset: 2302 }, + end: { line: 66, column: 31, offset: 2332 } + } +} +{ + type: 'paragraph', + children: [ { type: 'text', value: '与:', position: [Object] } ], + position: { + start: { line: 68, column: 1, offset: 2334 }, + end: { line: 68, column: 3, offset: 2336 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'UBSAN_SANITIZE := n', + position: { + start: { line: 70, column: 1, offset: 2338 }, + end: { line: 70, column: 24, offset: 2361 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '未对齐的内存访问检测可通过开启独立选项-CONFIG_UBSAN_ALIGNMENT检测。\n' + + '该选项在支持未对齐访问的架构(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y)\n' + + '默认为关闭。该选项仍可通过内核配置启用,但它将产生大量的UBSAN报告。', + position: [Object] + } + ], + position: { + start: { line: 72, column: 1, offset: 2363 }, + end: { line: 74, column: 37, offset: 2502 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: '参考文献', position: [Object] } ], + position: { + start: { line: 76, column: 1, offset: 2504 }, + end: { line: 76, column: 8, offset: 2511 } + } +} +{ + type: 'heading', + depth: 1, + children: [ + { + type: 'text', + value: 'Linux Kernel CVE Assignment', + position: [Object] + } + ], + position: { + start: { line: 2, column: 1, offset: 1 }, + end: { line: 2, column: 30, offset: 30 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'CVEs', position: [Object] } ], + position: { + start: { line: 4, column: 1, offset: 32 }, + end: { line: 4, column: 8, offset: 39 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Common Vulnerabilities and Exposure(CVE®)编号是作为一种明确的方式来识别、定义和登记公开披露的安全漏洞。随着时间的推移,它们在内核项目中的实用性已经下降,CVE编号经常以不适当的方式和不适当的原因分配。因此,内核开发社区倾向于避免使用它们。然而,分配CVE和其他形式的安全标识符的持续压力,以及内核社区之外的个人和公司的持续滥用,已经清楚地表明内核社区应该控制这些CVE分配。', + position: [Object] + } + ], + position: { + start: { line: 6, column: 1, offset: 41 }, + end: { line: 6, column: 209, offset: 249 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Linux内核开发团队确实有能力为潜在的Linux内核安全问题分配CVE。当然,', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/security-bugs.rst', + children: [Array], + position: [Object] + }, + { type: 'text', value: '独立于内核安全漏洞报送过程。', position: [Object] } + ], + position: { + start: { line: 8, column: 1, offset: 251 }, + end: { line: 8, column: 177, offset: 427 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '所有分配给Linux内核的CVE列表可以在Linux-cve邮件列表的存档中找到,如', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://lore.kernel.org/linux-cve-announce/所示。要获得分配的CVE通知,请“订阅”该邮件列表。要获得分配的CVE通知,请订阅该邮件列表:`', + children: [Array], + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://subspace.kernel.org/subscribing.html', + children: [Array], + position: [Object] + }, + { type: 'text', value: '` 。', position: [Object] } + ], + position: { + start: { line: 10, column: 1, offset: 429 }, + end: { line: 10, column: 183, offset: 611 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: '过程', position: [Object] } ], + position: { + start: { line: 12, column: 1, offset: 613 }, + end: { line: 12, column: 6, offset: 618 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '作为正常稳定发布过程的一部分,可能存在安全问题的内核更改由负责CVE编号分配的开发人员识别,并自动为其分配CVE编号。这些分配作为通告经常发布在linux-cve-announce邮件列表上。', + position: [Object] + } + ], + position: { + start: { line: 14, column: 1, offset: 620 }, + end: { line: 14, column: 97, offset: 716 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '注意,由于Linux内核在系统中的特殊地位,几乎任何漏洞都可能被利用来危害内核的安全性,但是当漏洞被修复后,利用的可能性通常不明显。因此,CVE分配团队过于谨慎,并将CVE编号分配给他们识别的任何漏洞修复。这就解释了为什么Linux内核团队会发布大量的CVE。', + position: [Object] + } + ], + position: { + start: { line: 16, column: 1, offset: 718 }, + end: { line: 16, column: 131, offset: 848 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '如果CVE分配团队错过了任何用户认为应该分配CVE的特定修复,请发送电子邮件到', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'mailto:cve@kernel.org', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ',那里的团队将与您一起工作。请注意,不应将潜在的安全问题发送到此邮箱,它仅用于为已发布的内核树中的漏洞修复分配CVE。如果你觉得你发现了一个未修复的安全问题,请按照', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/security-bugs.rst', + children: [Array], + position: [Object] + }, + { type: 'text', value: '发送给Linux内核社区。', position: [Object] } + ], + position: { + start: { line: 18, column: 1, offset: 850 }, + end: { line: 18, column: 275, offset: 1124 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Linux内核中未修复的安全问题不会自动分配CVE;只有在安全修复可用并应用于稳定内核树后,CVE分配才会自动发生,并且它将通过安全修复的Git提交编号进行跟踪。如果有人希望在提交安全修复之前分配CVE,请联系内核CVE分配团队,从他们的一批保留编号中获得相应的CVE编号。', + position: [Object] + } + ], + position: { + start: { line: 20, column: 1, offset: 1126 }, + end: { line: 20, column: 138, offset: 1263 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '对于目前没有得到稳定/LTS内核团队积极支持的内核版本中发现的任何问题,都不会分配CVEs。当前支持的内核分支列表可以在 ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://kernel.org/releases.html', + children: [Array], + position: [Object] + }, + { type: 'text', value: ' 上找到。', position: [Object] } + ], + position: { + start: { line: 22, column: 1, offset: 1265 }, + end: { line: 22, column: 99, offset: 1363 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: '被分配CVE的争论', position: [Object] } ], + position: { + start: { line: 24, column: 1, offset: 1365 }, + end: { line: 24, column: 13, offset: 1377 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '对于为特定内核更改分配的CVE,其争论或修改的权限仅属于受影响的相关子系统的维护者。这一原则确保了漏洞报告的高度准确性和可问责性。只有那些具有深厚专业知识和对子系统深入了解的个人,才能有效评估报告漏洞的有效性和范围,并确定其适当的CVE指定策略。在此指定权限之外,争论或修改CVE的任何企图都可能导致混乱、不准确的报告,并最终危及系统。', + position: [Object] + } + ], + position: { + start: { line: 26, column: 1, offset: 1379 }, + end: { line: 26, column: 169, offset: 1547 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: '无效的CVE', position: [Object] } ], + position: { + start: { line: 28, column: 1, offset: 1549 }, + end: { line: 28, column: 10, offset: 1558 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '如果发现的安全问题存在于仅由Linux发行版支持的Linux内核中,即安全问题是由于Linux发行版所做的更改导致,或者Linux发行版内核版本不再是Linux内核社区支持的内核版本,那么Linux内核CVE团队将不能分配CVE,必须从Linux发行版本身请求。', + position: [Object] + } + ], + position: { + start: { line: 30, column: 1, offset: 1560 }, + end: { line: 30, column: 132, offset: 1691 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '任何由内核分配CVE团队以外的任何组针对Linux内核为积极支持的内核版本分配的CVE都不应被视为有效的CVE。请在通知内核CVE分配团队,以便他们可以通过CNA修复过程使这些条目失效。', + position: [Object] + } + ], + position: { + start: { line: 32, column: 1, offset: 1693 }, + end: { line: 32, column: 94, offset: 1786 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: '特定CVE的适用性', position: [Object] } ], + position: { + start: { line: 34, column: 1, offset: 1788 }, + end: { line: 34, column: 13, offset: 1800 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '由于Linux内核可以以许多不同的方式使用,外部用户可以通过许多不同的方式访问它,或者根本没有访问,因此任何特定CVE的适用性取决于Linux用户,而不是CVE分配团队。请不要与我们联系来确定任何特定CVE的适用性。', + position: [Object] + } + ], + position: { + start: { line: 36, column: 1, offset: 1802 }, + end: { line: 36, column: 109, offset: 1910 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '此外,由于源代码树非常大,而任何一个系统都只使用源代码树的一小部分,因此任何Linux用户都应该意识到,大量分配的CVEs与他们的系统无关。', + position: [Object] + } + ], + position: { + start: { line: 38, column: 1, offset: 1912 }, + end: { line: 38, column: 71, offset: 1982 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '简而言之,我们不知道您的用例,也不知道您使用的是内核的哪个部分,因此我们无法确定特定的CVE是否与您的系统相关。', + position: [Object] + } + ], + position: { + start: { line: 40, column: 1, offset: 1984 }, + end: { line: 40, column: 57, offset: 2040 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '与往常一样,最好采取所有发布的内核更改,因为它们是由许多社区成员在一个统一的整体中一起进行测试的,而不是作为个别的精选更改。还要注意,对于许多bug来说,整体问题的解决方案并不是在单个更改中找到的,而是在彼此之上的许多修复的总和。理想情况下,CVEs将被分配给所有问题的所有修复,但有时我们将无法注意到一些修复,因此某些修复可能在没有CVE的情况下被采取。', + position: [Object] + } + ], + position: { + start: { line: 42, column: 1, offset: 2042 }, + end: { line: 42, column: 179, offset: 2220 } + } +} +{ + type: 'heading', + depth: 1, + children: [ { type: 'text', value: 'Syz-bisect', position: [Object] } ], + position: { + start: { line: 2, column: 1, offset: 1 }, + end: { line: 2, column: 13, offset: 13 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: 'syz-bisect', position: [Object] }, + { + type: 'text', + value: ' program can be used to bisect culprit and fix commits for\n' + + 'crashes found by syzkaller. It can also identify configuration options\n' + + 'that are triggers for the crash.', + position: [Object] + } + ], + position: { + start: { line: 4, column: 1, offset: 15 }, + end: { line: 6, column: 33, offset: 189 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Usage', position: [Object] } ], + position: { + start: { line: 8, column: 1, offset: 191 }, + end: { line: 8, column: 9, offset: 199 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'Build ', position: [Object] }, + { type: 'inlineCode', value: 'syz-bisect', position: [Object] }, + { type: 'text', value: ' with ', position: [Object] }, + { type: 'inlineCode', value: 'make bisect', position: [Object] }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 10, column: 1, offset: 201 }, + end: { line: 10, column: 39, offset: 239 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'During bisection different compilers depending on kernel revision are\n' + + 'used. These compilers are available\n', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://storage.googleapis.com/syzkaller/bisect_bin.tar.gz', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 12, column: 1, offset: 241 }, + end: { line: 14, column: 68, offset: 414 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Install ccache to speed up kernel compilations during bisecton.', + position: [Object] + } + ], + position: { + start: { line: 16, column: 1, offset: 416 }, + end: { line: 16, column: 64, offset: 479 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Create user-space (chroot) using ', + position: [Object] + }, + { + type: 'link', + title: null, + url: '../tools/create-image.sh', + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 18, column: 1, offset: 481 }, + end: { line: 18, column: 77, offset: 557 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Create a config file with following lines adjusted for your environment:', + position: [Object] + } + ], + position: { + start: { line: 20, column: 1, offset: 559 }, + end: { line: 20, column: 73, offset: 631 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '{\n' + + '\t"bin_dir": "/home/syzkaller/bisect_bin",\n' + + '\t"ccache": "/usr/bin/ccache",\n' + + '\t"kernel_repo": "git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git",\n' + + '\t"kernel_branch": "master",\n' + + '\t"syzkaller_repo": "https://github.com/google/syzkaller",\n' + + '\t"userspace": "/home/syzkaller/image/chroot",\n' + + '\t"kernel_config": "/home/syzkaller/go/src/github.com/google/syzkaller/dashboard/config/linux/upstream-apparmor-kasan.config",\n' + + '\t"kernel_baseline_config": "/home/syzkaller/go/src/github.com/google/syzkaller/dashboard/config/linux/upstream-apparmor-kasan-base.config",\n' + + '\t"syzctl": /home/syzkaller/go/src/github.com/google/syzkaller/dashboard/config/linux/upstream.sysctl,\n' + + '\t"cmdline": /home/syzkaller/go/src/github.com/google/syzkaller/dashboard/config/linux/upstream.cmdline,\n' + + '\t"manager":\n' + + '\t{\n' + + '\t\t"name" : "bisect",\n' + + '\t\t"target": "linux/amd64",\n' + + '\t\t"http": "127.0.0.1:56741",\n' + + '\t\t"workdir": "/home/syzkaller/workdir",\n' + + '\t\t"kernel_obj": "/home/syzkaller/linux",\n' + + '\t\t"image": "/home/syzkaller/workdir/image/image",\n' + + '\t\t"sshkey": "/home/syzkaller/workdir/image/key",\n' + + '\t\t"syzkaller": "/home/syzkaller/go/src/github.com/google/syzkaller_bisect",\n' + + '\t\t"procs": 8,\n' + + '\t\t"type": "qemu",\n' + + '\t\t"kernel_src": "/syzkaller/linux",\n' + + '\t\t"vm": {\n' + + '\t\t "count": 4,\n' + + '\t\t "kernel": "/home/syzkaller/linux/arch/x86/boot/bzImage",\n' + + '\t\t "cpu": 2,\n' + + '\t\t "mem": 2048,\n' + + '\t\t "cmdline": "root=/dev/sda1 rw console=ttyS0 kaslr crashkernel=512M minnowboard_1:eth0::: security=none"\n' + + '\t\t}\n' + + '\t}\n' + + '}', + position: { + start: { line: 22, column: 1, offset: 633 }, + end: { line: 56, column: 4, offset: 2074 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'And run bisection with ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'bin/syz-bisect -config vm_bisect.cfg -crash\n' + + '/syzkaller/workdir/crashes/03ee30ae11dfd0ddd062af26566c34a8c853698d', + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 58, column: 1, offset: 2076 }, + end: { line: 59, column: 70, offset: 2213 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: 'Syz-bisect', position: [Object] }, + { + type: 'text', + value: ' is expecting finding repro.cprog or repro.prog in given\n' + + 'crash directory. It will also utilize repro.opts, but it’s not\n' + + 'mandatory.', + position: [Object] + } + ], + position: { + start: { line: 61, column: 1, offset: 2215 }, + end: { line: 63, column: 11, offset: 2357 } + } +} +{ + type: 'heading', + depth: 2, + children: [ + { type: 'text', value: 'Additional Arguments', position: [Object] } + ], + position: { + start: { line: 65, column: 1, offset: 2359 }, + end: { line: 65, column: 24, offset: 2382 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'inlineCode', + value: '-syzkaller_commit', + position: [Object] + }, + { + type: 'text', + value: ' use this if you want to use specific version of syzkaller', + position: [Object] + } + ], + position: { + start: { line: 67, column: 1, offset: 2384 }, + end: { line: 67, column: 78, offset: 2461 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: '-kernel_commit', position: [Object] }, + { + type: 'text', + value: ' kernel commit where crash is known to reproduce. You\n' + + 'want to use this when bisecting fixing commit', + position: [Object] + } + ], + position: { + start: { line: 69, column: 1, offset: 2463 }, + end: { line: 70, column: 46, offset: 2578 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: '-fix', position: [Object] }, + { + type: 'text', + value: ' use this if you want to bisect a fixing commit.', + position: [Object] + } + ], + position: { + start: { line: 72, column: 1, offset: 2580 }, + end: { line: 72, column: 55, offset: 2634 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Output', position: [Object] } ], + position: { + start: { line: 74, column: 1, offset: 2636 }, + end: { line: 74, column: 10, offset: 2645 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'It takes some time, but after ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-bisect', position: [Object] }, + { + type: 'text', + value: ' completes it dumps out it’s\n' + + 'results into console It also stores results into files in given crash\n' + + 'directory:', + position: [Object] + } + ], + position: { + start: { line: 76, column: 1, offset: 2647 }, + end: { line: 78, column: 11, offset: 2798 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: 'cause.commit', position: [Object] }, + { + type: 'text', + value: ' commit identified causing the crash or text “the crash\n' + + 'already happened on the oldest tested release”', + position: [Object] + } + ], + position: { + start: { line: 80, column: 1, offset: 2800 }, + end: { line: 81, column: 47, offset: 2916 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: 'fix.commit', position: [Object] }, + { + type: 'text', + value: ' commit identified fixing the crash or text “the crash\n' + + 'still happens on HEAD”', + position: [Object] + } + ], + position: { + start: { line: 83, column: 1, offset: 2918 }, + end: { line: 84, column: 23, offset: 3007 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: 'cause.config', position: [Object] }, + { + type: 'text', + value: ' config options identified working as one trigger for the crash', + position: [Object] + } + ], + position: { + start: { line: 86, column: 1, offset: 3009 }, + end: { line: 86, column: 78, offset: 3086 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'inlineCode', + value: 'original.config, baseline.config, minimized.config', + position: [Object] + }, + { + type: 'text', + value: ' config files used\nin config bisection', + position: [Object] + } + ], + position: { + start: { line: 88, column: 1, offset: 3088 }, + end: { line: 89, column: 20, offset: 3178 } + } +} +{ + type: 'heading', + depth: 1, + children: [ { type: 'text', value: 'Coverage', position: [Object] } ], + position: { + start: { line: 2, column: 1, offset: 1 }, + end: { line: 2, column: 11, offset: 11 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: 'syzkaller', position: [Object] }, + { type: 'text', value: ' uses ', position: [Object] }, + { + type: 'link', + title: null, + url: 'https://clang.llvm.org/docs/SanitizerCoverage.html#tracing-pcs', + children: [Array], + position: [Object] + }, + { type: 'text', value: '\nand ', position: [Object] }, + { + type: 'link', + title: null, + url: 'https://www.kernel.org/doc/html/latest/dev-tools/kcov.html', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' for coverage collection.\nSanitizer coverage is also supported by ', + position: [Object] + }, + { type: 'inlineCode', value: 'gcc', position: [Object] }, + { type: 'text', value: ' and ', position: [Object] }, + { type: 'inlineCode', value: 'KCOV', position: [Object] }, + { + type: 'text', + value: ' is supported by some other OSes.\nNote: ', + position: [Object] + }, + { type: 'inlineCode', value: 'gVisor', position: [Object] }, + { + type: 'text', + value: ' coverage is completely different.', + position: [Object] + } + ], + position: { + start: { line: 4, column: 1, offset: 13 }, + end: { line: 7, column: 49, offset: 364 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Coverage is based on tracing ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'coverage points', + position: [Object] + }, + { + type: 'text', + value: ' inserted into the object code by the compiler.\n' + + 'A coverage point generally refers to a ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://en.wikipedia.org/wiki/Basic_block', + children: [Array], + position: [Object] + }, + { type: 'text', value: ' of code\nor a ', position: [Object] }, + { + type: 'link', + title: null, + url: 'https://en.wikipedia.org/wiki/Control-flow_graph', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '\n' + + '(this depends on the compiler and instrumentation mode used during build,\n' + + 'e.g. for ', + position: [Object] + }, + { type: 'inlineCode', value: 'Linux', position: [Object] }, + { type: 'text', value: ' and ', position: [Object] }, + { type: 'inlineCode', value: 'clang', position: [Object] }, + { + type: 'text', + value: ' the default mode is CFG edges, while for ', + position: [Object] + }, + { type: 'inlineCode', value: 'gcc', position: [Object] }, + { + type: 'text', + value: ' the default mode is basic blocks).\n' + + 'Note that coverage points are inserted by the compiler in the middle-end after a significant number\n' + + 'of transformation and optimization passes. As the result coverage may poorly relate to the source code.\n' + + 'For example, you may see a covered line after a non-covered line, or you may not see a coverage point\n' + + 'where you would expect to see it, or vice versa (this may happen if the compiler splits basic blocks,\n' + + 'or turns control flow constructs into conditional moves without control flow, etc).\n' + + 'Assessing coverage is still generally very useful and allows to understand overall fuzzing progress,\n' + + 'but treat it with a grain of salt.', + position: [Object] + } + ], + position: { + start: { line: 9, column: 1, offset: 366 }, + end: { line: 20, column: 35, offset: 1442 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'See ', position: [Object] }, + { + type: 'link', + title: null, + url: 'linux/coverage.md', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' for Linux kernel specific coverage information.', + position: [Object] + } + ], + position: { + start: { line: 22, column: 1, offset: 1444 }, + end: { line: 22, column: 78, offset: 1521 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Web Interface', position: [Object] } ], + position: { + start: { line: 24, column: 1, offset: 1523 }, + end: { line: 24, column: 17, offset: 1539 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'When clicking on ', position: [Object] }, + { type: 'inlineCode', value: 'cover', position: [Object] }, + { + type: 'text', + value: ' link you get view showing each directory located in your kernel build directory. It’s showing either percentage number ', + position: [Object] + }, + { type: 'inlineCode', value: 'X% of N', position: [Object] }, + { type: 'text', value: ' or ', position: [Object] }, + { type: 'inlineCode', value: '---', position: [Object] }, + { type: 'text', value: '. ', position: [Object] }, + { type: 'inlineCode', value: 'X% of N', position: [Object] }, + { type: 'text', value: ' means that ', position: [Object] }, + { type: 'inlineCode', value: 'X%', position: [Object] }, + { type: 'text', value: ' of ', position: [Object] }, + { type: 'inlineCode', value: 'N', position: [Object] }, + { + type: 'text', + value: ' coverage points are covered so far, . ', + position: [Object] + }, + { type: 'inlineCode', value: '---', position: [Object] }, + { + type: 'text', + value: ' indicates there is no coverage in that directory.', + position: [Object] + } + ], + position: { + start: { line: 26, column: 1, offset: 1541 }, + end: { line: 26, column: 291, offset: 1831 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Directory can be clicked and you get view on files and possible subdirectories. On each source code file there is again either ', + position: [Object] + }, + { type: 'inlineCode', value: '---', position: [Object] }, + { + type: 'text', + value: ' or coverage percentage.', + position: [Object] + } + ], + position: { + start: { line: 28, column: 1, offset: 1833 }, + end: { line: 28, column: 157, offset: 1989 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'If you click on any C files you will get source code view. There is certain coloring used in the source code view. Color definitions can be found in ', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/pkg/cover/report.go#L504', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '. Coloring is described below.', + position: [Object] + } + ], + position: { + start: { line: 30, column: 1, offset: 1991 }, + end: { line: 30, column: 222, offset: 2212 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'If you click on percentage number of any listed source file you will get cover percentage for each function in that source file.', + position: [Object] + } + ], + position: { + start: { line: 32, column: 1, offset: 2214 }, + end: { line: 32, column: 129, offset: 2342 } + } +} +{ + type: 'heading', + depth: 3, + children: [ + { + type: 'text', + value: 'Covered: black (#000000)', + position: [Object] + } + ], + position: { + start: { line: 34, column: 1, offset: 2344 }, + end: { line: 34, column: 29, offset: 2372 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'All PC values associated to that line are covered. There is number on the left side indicating how many programs have triggered executing the PC values associated to this line. You can click on that number and it will open last executed program. Example below shows how single line which is fully covered is shown.', + position: [Object] + } + ], + position: { + start: { line: 36, column: 1, offset: 2374 }, + end: { line: 36, column: 315, offset: 2688 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'image', + title: null, + url: 'coverage_covered.png?raw=true', + alt: 'Code line is fully covered', + position: [Object] + } + ], + position: { + start: { line: 38, column: 1, offset: 2690 }, + end: { line: 38, column: 61, offset: 2750 } + } +} +{ + type: 'heading', + depth: 3, + children: [ + { + type: 'text', + value: 'Both: orange (#c86400)', + position: [Object] + } + ], + position: { + start: { line: 40, column: 1, offset: 2752 }, + end: { line: 40, column: 27, offset: 2778 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'There are several PC values associated to the line and not all of these are executed. Again there is number left to the source code line that can clicked to open last program triggering associated PC values. Example below shows single line which has both executed and non-executed PC values associated to it.', + position: [Object] + } + ], + position: { + start: { line: 42, column: 1, offset: 2780 }, + end: { line: 42, column: 309, offset: 3088 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'image', + title: null, + url: 'coverage_both.png?raw=true', + alt: 'Code line has executed and not executed PC values', + position: [Object] + } + ], + position: { + start: { line: 44, column: 1, offset: 3090 }, + end: { line: 44, column: 81, offset: 3170 } + } +} +{ + type: 'heading', + depth: 3, + children: [ + { + type: 'text', + value: 'Weak-uncovered: crimson red (#c80000)', + position: [Object] + } + ], + position: { + start: { line: 46, column: 1, offset: 3172 }, + end: { line: 46, column: 43, offset: 3214 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Function (symbol) this line is in doesn’t have any coverage. I.e. the function is not executed at all. Please note that if compiler have optimized certain symbol out and made the code inline instead symbol associated with this line is the one where the code is compiled into. This makes it sometimes real hard to figure out meaning of coloring. Example below shows how single line which is uncovered and PC values associated to it are in function(s) that are not executed either is shown.', + position: [Object] + } + ], + position: { + start: { line: 48, column: 1, offset: 3216 }, + end: { line: 48, column: 489, offset: 3704 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'image', + title: null, + url: 'coverage_weak-uncovered.png?raw=true', + alt: 'PC values associated to the line are not executed and these PC values are in functions that are not executed either', + position: [Object] + } + ], + position: { + start: { line: 50, column: 1, offset: 3706 }, + end: { line: 50, column: 157, offset: 3862 } + } +} +{ + type: 'heading', + depth: 3, + children: [ + { + type: 'text', + value: 'Uncovered: red (#ff0000)', + position: [Object] + } + ], + position: { + start: { line: 52, column: 1, offset: 3864 }, + end: { line: 52, column: 29, offset: 3892 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Line is uncovered. Function (symbol) this line is in is executed and one of the PC values associated to this line. Example below shows how single line which is not covered is shown.', + position: [Object] + } + ], + position: { + start: { line: 54, column: 1, offset: 3894 }, + end: { line: 54, column: 182, offset: 4075 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'image', + title: null, + url: 'coverage_uncovered.png?raw=true', + alt: 'Code line has no executed PC values associated. Function it is in is executed', + position: [Object] + } + ], + position: { + start: { line: 56, column: 1, offset: 4077 }, + end: { line: 56, column: 114, offset: 4190 } + } +} +{ + type: 'heading', + depth: 3, + children: [ + { + type: 'text', + value: 'Not instrumented: grey (#505050)', + position: [Object] + } + ], + position: { + start: { line: 58, column: 1, offset: 4192 }, + end: { line: 58, column: 37, offset: 4228 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'PC values associated to the line are not instrumented or source line doesn’t generate code at all. Example below shows how all not instrumented code is shown.', + position: [Object] + } + ], + position: { + start: { line: 60, column: 1, offset: 4230 }, + end: { line: 60, column: 159, offset: 4388 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'image', + title: null, + url: 'coverage_not_instrumented.png?raw=true', + alt: 'Not instrumented code lines', + position: [Object] + } + ], + position: { + start: { line: 62, column: 1, offset: 4390 }, + end: { line: 62, column: 71, offset: 4460 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'syz-cover', position: [Object] } ], + position: { + start: { line: 64, column: 1, offset: 4462 }, + end: { line: 64, column: 13, offset: 4474 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'There is small utility in syzkaller repository to generate coverage report based on raw coverage data. This is available in ', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/tools/syz-cover', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' and can be built by:', + position: [Object] + } + ], + position: { + start: { line: 66, column: 1, offset: 4476 }, + end: { line: 66, column: 175, offset: 4650 } + } +} +{ + type: 'code', + lang: 'bash', + meta: null, + value: 'GOOS=linux GOARCH=amd64 go build "-ldflags=-s -w" -o ./bin/syz-cover github.com/google/syzkaller/tools/syz-cover', + position: { + start: { line: 68, column: 1, offset: 4652 }, + end: { line: 70, column: 4, offset: 4777 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Raw coverage data can be obtained from running ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-manager', position: [Object] }, + { type: 'text', value: ' by:', position: [Object] } + ], + position: { + start: { line: 72, column: 1, offset: 4779 }, + end: { line: 72, column: 65, offset: 4843 } + } +} +{ + type: 'code', + lang: 'bash', + meta: null, + value: 'wget http://localhost:/rawcover', + position: { + start: { line: 74, column: 1, offset: 4845 }, + end: { line: 76, column: 4, offset: 4912 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Now this raw cover data can be fed to ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-cover', position: [Object] }, + { + type: 'text', + value: ' to generate coverage report:', + position: [Object] + } + ], + position: { + start: { line: 78, column: 1, offset: 4914 }, + end: { line: 78, column: 79, offset: 4992 } + } +} +{ + type: 'code', + lang: 'bash', + meta: null, + value: './bin/syz-cover --config rawcover', + position: { + start: { line: 80, column: 1, offset: 4994 }, + end: { line: 82, column: 4, offset: 5076 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'You can also export CSV file containing function coverage by:', + position: [Object] + } + ], + position: { + start: { line: 84, column: 1, offset: 5078 }, + end: { line: 84, column: 62, offset: 5139 } + } +} +{ + type: 'code', + lang: 'bash', + meta: null, + value: './bin/syz-cover --config --csv rawcover', + position: { + start: { line: 86, column: 1, offset: 5141 }, + end: { line: 88, column: 4, offset: 5257 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'You can export a JSON file containing line coverage info by:', + position: [Object] + } + ], + position: { + start: { line: 90, column: 1, offset: 5259 }, + end: { line: 90, column: 61, offset: 5319 } + } +} +{ + type: 'code', + lang: 'bash', + meta: null, + value: './bin/syz-cover --config --json rawcover', + position: { + start: { line: 92, column: 1, offset: 5321 }, + end: { line: 94, column: 4, offset: 5437 } + } +} +{ + type: 'heading', + depth: 1, + children: [ { type: 'text', value: '运行 syzkaller 程序', position: [Object] } ], + position: { + start: { line: 2, column: 1, offset: 1 }, + end: { line: 2, column: 18, offset: 18 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '本文描述了如何执行现有的 syzkaller 程序用以复现 bug。通过这种方式,你可以重放一个单独的程序或一个包含多个程序的完整执行日志。', + position: [Object] + } + ], + position: { + start: { line: 4, column: 1, offset: 20 }, + end: { line: 4, column: 71, offset: 90 } + } +} +{ + type: 'list', + ordered: true, + start: 1, + spread: false, + children: [ + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 6, column: 1, offset: 92 }, + end: { line: 7, column: 65, offset: 188 } + } +} +{ + type: 'code', + lang: 'bash', + meta: null, + value: 'export GOROOT=$HOME/goroot\nexport GOPATH=$HOME/gopath', + position: { + start: { line: 8, column: 1, offset: 189 }, + end: { line: 11, column: 4, offset: 255 } + } +} +{ + type: 'list', + ordered: true, + start: 2, + spread: false, + children: [ + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 13, column: 1, offset: 257 }, + end: { line: 13, column: 20, offset: 276 } + } +} +{ + type: 'code', + lang: 'bash', + meta: null, + value: 'git clone https://github.com/google/syzkaller', + position: { + start: { line: 14, column: 1, offset: 277 }, + end: { line: 16, column: 4, offset: 335 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '请注意,你的 syzkaller 版本必须和生成待执行程序的 syzkaller 版本一致。', + position: [Object] + } + ], + position: { + start: { line: 18, column: 1, offset: 337 }, + end: { line: 18, column: 47, offset: 383 } + } +} +{ + type: 'list', + ordered: true, + start: 3, + spread: false, + children: [ + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 20, column: 1, offset: 385 }, + end: { line: 20, column: 26, offset: 410 } + } +} +{ + type: 'code', + lang: 'bash', + meta: null, + value: 'cd syzkaller\nmake', + position: { + start: { line: 21, column: 1, offset: 411 }, + end: { line: 24, column: 4, offset: 441 } + } +} +{ + type: 'list', + ordered: true, + start: 4, + spread: false, + children: [ + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 26, column: 1, offset: 443 }, + end: { line: 26, column: 56, offset: 498 } + } +} +{ + type: 'code', + lang: 'bash', + meta: null, + value: 'scp -P 10022 -i bullseye.img.key bin/linux_amd64/syz-execprog bin/linux_amd64/syz-executor program root@localhost:', + position: { + start: { line: 27, column: 1, offset: 499 }, + end: { line: 29, column: 4, offset: 626 } + } +} +{ + type: 'list', + ordered: true, + start: 5, + spread: false, + children: [ + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 31, column: 1, offset: 628 }, + end: { line: 31, column: 15, offset: 642 } + } +} +{ + type: 'code', + lang: 'bash', + meta: null, + value: './syz-execprog -repeat=0 -procs=8 program', + position: { + start: { line: 32, column: 1, offset: 643 }, + end: { line: 34, column: 4, offset: 697 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: '下面是几个实用的 ', position: [Object] }, + { type: 'inlineCode', value: 'syz-execprog', position: [Object] }, + { type: 'text', value: ' 参数:', position: [Object] } + ], + position: { + start: { line: 36, column: 1, offset: 699 }, + end: { line: 36, column: 29, offset: 727 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: ' -procs int\n' + + ' 执行程序的并发进程数(默认值为 1)\n' + + ' -repeat int\n' + + ' 重复执行的次数(0 代表无限执行)(默认值为 1)\n' + + ' -sandbox string\n' + + ' 模糊测试的沙盒模式(none/setuid/namespace)(默认为 "setuid" 模式)\n' + + ' -threaded\n' + + ' 是否使用线程模式(默认为 是)', + position: { + start: { line: 37, column: 1, offset: 728 }, + end: { line: 46, column: 4, offset: 927 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: '-threaded=0', position: [Object] }, + { + type: 'text', + value: ' 参数将会使程序作为一个简单的单线程系统调用序列来执行;\n而 ', + position: [Object] + }, + { type: 'inlineCode', value: '-threaded=1', position: [Object] }, + { + type: 'text', + value: ' 强制每个系统调用使用单独的线程,这样就可以在阻塞的系统调用上继续执行。', + position: [Object] + } + ], + position: { + start: { line: 48, column: 1, offset: 929 }, + end: { line: 49, column: 52, offset: 1022 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '而较老版本的 syzkaller 还有如下参数:', + position: [Object] + } + ], + position: { + start: { line: 51, column: 1, offset: 1024 }, + end: { line: 51, column: 25, offset: 1048 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: ' -collide\n 是否使用冲突系统调用以引发数据竞争(默认为是)', + position: { + start: { line: 52, column: 1, offset: 1049 }, + end: { line: 55, column: 4, offset: 1097 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: '-collide=1', position: [Object] }, + { + type: 'text', + value: ' 参数的作用是当很多系统调用并发执行时,强制执行第二轮系统调用。\n当你使用较老版本的复现程序时,可能需要用到这个参数。', + position: [Object] + } + ], + position: { + start: { line: 56, column: 1, offset: 1098 }, + end: { line: 57, column: 27, offset: 1169 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '如果想要重放一个开头包含如下内容的复现程序:', + position: [Object] + } + ], + position: { + start: { line: 59, column: 1, offset: 1171 }, + end: { line: 59, column: 23, offset: 1193 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '# {Threaded:true Repeat:true RepeatTimes:0 Procs:8 Slowdown:1 Sandbox:none Leak:false NetInjection:true NetDevices:true NetReset:true Cgroups:true BinfmtMisc:true CloseFDs:true KCSAN:false DevlinkPCI:false USB:true VhciInjection:true Wifi:true IEEE802154:true Sysctl:true UseTmpDir:true HandleSegv:true Repro:false Trace:false LegacyOptions:{Collide:false Fault:false FaultCall:0 FaultNth:0}}', + position: { + start: { line: 60, column: 1, offset: 1194 }, + end: { line: 62, column: 4, offset: 1594 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: '你需要基于文件头中的值调整对应的参数。其中,', + position: [Object] + }, + { type: 'inlineCode', value: 'Threaded', position: [Object] }, + { type: 'text', value: '/', position: [Object] }, + { type: 'inlineCode', value: 'Procs', position: [Object] }, + { type: 'text', value: '/', position: [Object] }, + { type: 'inlineCode', value: 'Sandbox', position: [Object] }, + { type: 'text', value: ' 与 ', position: [Object] }, + { type: 'inlineCode', value: '-threaded', position: [Object] }, + { type: 'text', value: '/', position: [Object] }, + { type: 'inlineCode', value: '-procs', position: [Object] }, + { type: 'text', value: '/', position: [Object] }, + { type: 'inlineCode', value: '-sandbox', position: [Object] }, + { type: 'text', value: ' 参数对应。如果 ', position: [Object] }, + { type: 'inlineCode', value: 'Repeat', position: [Object] }, + { type: 'text', value: ' 的值为 ', position: [Object] }, + { type: 'inlineCode', value: 'true', position: [Object] }, + { type: 'text', value: ',则在 ', position: [Object] }, + { type: 'inlineCode', value: 'syz-execprog', position: [Object] }, + { type: 'text', value: ' 的参数中添加 ', position: [Object] }, + { type: 'inlineCode', value: '-repeat=0', position: [Object] }, + { type: 'text', value: '。', position: [Object] } + ], + position: { + start: { line: 63, column: 1, offset: 1595 }, + end: { line: 63, column: 151, offset: 1745 } + } +} +{ + type: 'heading', + depth: 1, + children: [ + { type: 'text', value: 'How syzkaller works', position: [Object] } + ], + position: { + start: { line: 2, column: 1, offset: 1 }, + end: { line: 2, column: 22, offset: 22 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Generic description of how syzkaller works are ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'internals.md#overview', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 4, column: 1, offset: 24 }, + end: { line: 4, column: 79, offset: 102 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Linux kernel specific internals can be found ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'linux/internals.md', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 6, column: 1, offset: 104 }, + end: { line: 6, column: 73, offset: 176 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Overview', position: [Object] } ], + position: { + start: { line: 8, column: 1, offset: 178 }, + end: { line: 8, column: 12, offset: 189 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The process structure for the syzkaller system is shown in the following diagram;\n' + + 'red labels indicate corresponding configuration options.', + position: [Object] + } + ], + position: { + start: { line: 10, column: 1, offset: 191 }, + end: { line: 11, column: 57, offset: 329 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'image', + title: null, + url: 'process_structure.png?raw=true', + alt: 'Process structure for syzkaller', + position: [Object] + } + ], + position: { + start: { line: 13, column: 1, offset: 331 }, + end: { line: 13, column: 67, offset: 397 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'The ', position: [Object] }, + { type: 'inlineCode', value: 'syz-manager', position: [Object] }, + { + type: 'text', + value: ' process starts, monitors and restarts several VM instances, and starts a ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-fuzzer', position: [Object] }, + { + type: 'text', + value: ' process inside of the VMs.\n', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-manager', position: [Object] }, + { + type: 'text', + value: ' is responsible for persistent corpus and crash storage.\n' + + 'It runs on a host with stable kernel which does not experience white-noise fuzzer load.', + position: [Object] + } + ], + position: { + start: { line: 15, column: 1, offset: 399 }, + end: { line: 17, column: 88, offset: 687 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'The ', position: [Object] }, + { type: 'inlineCode', value: 'syz-fuzzer', position: [Object] }, + { + type: 'text', + value: ' process runs inside of presumably unstable VMs.\nThe ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-fuzzer', position: [Object] }, + { + type: 'text', + value: ' guides fuzzing process (input generation, mutation, minimization, etc.) and sends inputs that trigger new coverage back to the ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-manager', position: [Object] }, + { + type: 'text', + value: ' process via RPC.\nIt also starts transient ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-executor', position: [Object] }, + { type: 'text', value: ' processes.', position: [Object] } + ], + position: { + start: { line: 19, column: 1, offset: 689 }, + end: { line: 21, column: 51, offset: 979 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'Each ', position: [Object] }, + { type: 'inlineCode', value: 'syz-executor', position: [Object] }, + { + type: 'text', + value: ' process executes a single input (a sequence of syscalls).\n' + + 'It accepts the program to execute from the ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-fuzzer', position: [Object] }, + { + type: 'text', + value: ' process and sends results back.\n' + + 'It is designed to be as simple as possible (to not interfere with fuzzing process), written in C++, compiled as static binary and uses shared memory for communication.', + position: [Object] + } + ], + position: { + start: { line: 23, column: 1, offset: 981 }, + end: { line: 25, column: 168, offset: 1314 } + } +} +{ + type: 'heading', + depth: 2, + children: [ + { type: 'text', value: 'Syscall descriptions', position: [Object] } + ], + position: { + start: { line: 27, column: 1, offset: 1316 }, + end: { line: 27, column: 24, offset: 1339 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'The ', position: [Object] }, + { type: 'inlineCode', value: 'syz-fuzzer', position: [Object] }, + { + type: 'text', + value: ' process generates programs to be executed by ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-executor', position: [Object] }, + { + type: 'text', + value: ' based on syscall descriptions described ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'syscall_descriptions.md', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 29, column: 1, offset: 1341 }, + end: { line: 29, column: 150, offset: 1490 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Coverage', position: [Object] } ], + position: { + start: { line: 31, column: 1, offset: 1492 }, + end: { line: 31, column: 12, offset: 1503 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Syzkaller is a coverage-guided fuzzer. The details about coverage collection can be found ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'coverage.md', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 33, column: 1, offset: 1505 }, + end: { line: 33, column: 111, offset: 1615 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Crash reports', position: [Object] } ], + position: { + start: { line: 35, column: 1, offset: 1617 }, + end: { line: 35, column: 17, offset: 1633 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'When ', position: [Object] }, + { type: 'inlineCode', value: 'syzkaller', position: [Object] }, + { + type: 'text', + value: ' finds a crasher, it saves information about it into ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'workdir/crashes', + position: [Object] + }, + { + type: 'text', + value: ' directory.\n' + + 'The directory contains one subdirectory per unique crash type.\n' + + 'Each subdirectory contains a ', + position: [Object] + }, + { type: 'inlineCode', value: 'description', position: [Object] }, + { + type: 'text', + value: ' file with a unique string identifying the crash (intended for bug identification and deduplication);\n' + + 'and up to 100 ', + position: [Object] + }, + { type: 'inlineCode', value: 'logN', position: [Object] }, + { type: 'text', value: ' and ', position: [Object] }, + { type: 'inlineCode', value: 'reportN', position: [Object] }, + { + type: 'text', + value: ' files, one pair per test machine crash:', + position: [Object] + } + ], + position: { + start: { line: 37, column: 1, offset: 1635 }, + end: { line: 40, column: 75, offset: 2014 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: ' - crashes/\n' + + ' - 6e512290efa36515a7a27e53623304d20d1c3e\n' + + ' - description\n' + + ' - log0\n' + + ' - report0\n' + + ' - log1\n' + + ' - report1\n' + + ' ...\n' + + ' - 77c578906abe311d06227b9dc3bffa4c52676f\n' + + ' - description\n' + + ' - log0\n' + + ' - report0\n' + + ' ...', + position: { + start: { line: 41, column: 1, offset: 2015 }, + end: { line: 55, column: 4, offset: 2259 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Descriptions are extracted using a set of ', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/pkg/report/', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '.\n' + + 'This set may need to be extended if you are using a different kernel architecture, or are just seeing a previously unseen kernel error messages.', + position: [Object] + } + ], + position: { + start: { line: 57, column: 1, offset: 2261 }, + end: { line: 58, column: 145, offset: 2484 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: 'logN', position: [Object] }, + { type: 'text', value: ' files contain raw ', position: [Object] }, + { type: 'inlineCode', value: 'syzkaller', position: [Object] }, + { + type: 'text', + value: ' logs and include kernel console output as well as programs executed before the crash.\n' + + 'These logs can be fed to ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-repro', position: [Object] }, + { type: 'text', value: ' tool for ', position: [Object] }, + { + type: 'link', + title: null, + url: 'reproducing_crashes.md', + children: [Array], + position: [Object] + }, + { type: 'text', value: ',\nor to ', position: [Object] }, + { type: 'inlineCode', value: 'syz-execprog', position: [Object] }, + { type: 'text', value: ' tool for ', position: [Object] }, + { + type: 'link', + title: null, + url: 'executing_syzkaller_programs.md', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.\n', position: [Object] }, + { type: 'inlineCode', value: 'reportN', position: [Object] }, + { + type: 'text', + value: ' files contain post-processed and symbolized kernel crash reports (e.g. a KASAN report).\n' + + 'Normally you need just 1 pair of these files (i.e. ', + position: [Object] + }, + { type: 'inlineCode', value: 'log0', position: [Object] }, + { type: 'text', value: ' and ', position: [Object] }, + { type: 'inlineCode', value: 'report0', position: [Object] }, + { + type: 'text', + value: '), because they all presumably describe the same kernel bug.\nHowever, ', + position: [Object] + }, + { type: 'inlineCode', value: 'syzkaller', position: [Object] }, + { + type: 'text', + value: ' saves up to 100 of them for the case when the crash is poorly reproducible, or if you just want to look at a set of crash reports to infer some similarities or differences.', + position: [Object] + } + ], + position: { + start: { line: 60, column: 1, offset: 2486 }, + end: { line: 65, column: 194, offset: 3223 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'There are 3 special types of crashes:', + position: [Object] + } + ], + position: { + start: { line: 67, column: 1, offset: 3225 }, + end: { line: 67, column: 38, offset: 3262 } + } +} +{ + type: 'list', + ordered: false, + start: null, + spread: false, + children: [ + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 68, column: 2, offset: 3264 }, + end: { line: 70, column: 129, offset: 3568 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Most likely you won’t see ', + position: [Object] + }, + { type: 'inlineCode', value: 'reportN', position: [Object] }, + { + type: 'text', + value: ' files for these crashes (e.g. if there is no output from the test machine, there is nothing to put into report).\n' + + 'Sometimes these crashes indicate a bug in ', + position: [Object] + }, + { type: 'inlineCode', value: 'syzkaller', position: [Object] }, + { + type: 'text', + value: ' itself (especially if you see a Go panic message in the logs).\n' + + 'However, frequently they mean a kernel lockup or something similarly bad (here are just a few examples of bugs found this way:\n', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://groups.google.com/d/msg/syzkaller/zfuHHRXL7Zg/Tc5rK8bdCAAJ', + children: [Array], + position: [Object] + }, + { type: 'text', value: ',\n', position: [Object] }, + { + type: 'link', + title: null, + url: 'https://groups.google.com/d/msg/syzkaller/kY_ml6TCm9A/wDd5fYFXBQAJ', + children: [Array], + position: [Object] + }, + { type: 'text', value: ',\n', position: [Object] }, + { + type: 'link', + title: null, + url: 'https://groups.google.com/d/msg/syzkaller/OM7CXieBCoY/etzvFPX3AQAJ', + children: [Array], + position: [Object] + }, + { type: 'text', value: ').', position: [Object] } + ], + position: { + start: { line: 72, column: 1, offset: 3570 }, + end: { line: 77, column: 74, offset: 4182 } + } +} +{ + type: 'heading', + depth: 1, + children: [ { type: 'text', value: 'Program syntax', position: [Object] } ], + position: { + start: { line: 2, column: 1, offset: 1 }, + end: { line: 2, column: 17, offset: 17 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Syzkaller uses a compact domain-specific language (DSL) for programs\n' + + 'to log executed programs, test its code, and persist programs in the\n' + + 'corpus. This page provides a brief description of the corresponding\n' + + 'syntax. Some useful information can also be found in the\n', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/sys/linux/test', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' and in the program\n', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/prog/encoding.go', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 4, column: 1, offset: 19 }, + end: { line: 9, column: 43, offset: 380 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Together with execution options, the DSL provides everything that\n' + + 'syz-executor needs to run a program.', + position: [Object] + } + ], + position: { + start: { line: 11, column: 1, offset: 382 }, + end: { line: 12, column: 37, offset: 484 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'For example, consider the program:', + position: [Object] + } + ], + position: { + start: { line: 14, column: 1, offset: 486 }, + end: { line: 14, column: 35, offset: 520 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'r0 = syz_open_dev$loop(&(0x7f00000011c0), 0x0, 0x0)\n' + + 'r1 = openat$6lowpan_control(0xffffffffffffff9c, &(0x7f00000000c0), 0x2, 0x0)\n' + + 'ioctl$LOOP_SET_FD(r0, 0x4c00, r1)', + position: { + start: { line: 15, column: 1, offset: 521 }, + end: { line: 19, column: 4, offset: 691 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Each line in this program describes a particular syscall invocation,\n' + + 'with the first two calls saving the result in temporary variables ', + position: [Object] + }, + { type: 'inlineCode', value: 'r0', position: [Object] }, + { type: 'text', value: '\nand ', position: [Object] }, + { type: 'inlineCode', value: 'r1', position: [Object] }, + { + type: 'text', + value: ', which are passed to the third call.', + position: [Object] + } + ], + position: { + start: { line: 21, column: 1, offset: 693 }, + end: { line: 23, column: 46, offset: 878 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'line = assignment | call\n' + + 'assignment = variable " = " call\n' + + 'call = syscall-name "(" [arg ["," arg]*] ")" ["(" [call-prop ["," call-prop*] ")"]\n' + + 'arg = "nil" | "AUTO" | const-arg | resource-arg | result-arg | pointer-arg | string-arg | struct-arg | array-arg | union-arg\n' + + 'const-arg = "0x" hex-integer\n' + + 'resource-arg = variable ["/" hex-integer] ["+" hex-integer]\n' + + 'result-arg = "<" variable "=>" arg\n' + + 'pointer-arg = "&" pointer-arg-addr ["=ANY"] "=" arg\n' + + 'pointer-arg-addr = "AUTO" | "(" pointer-addr ["/" region-size] ")"\n' + + `string-arg = "'" escaped-string "'" | "\\"" escaped-string "\\"" | "\\"$" escaped-string "\\""\n` + + 'struct-arg = "{" [arg ["," arg]*] "}"\n' + + 'array-arg = "[" [arg ["," arg]*] "]"\n' + + 'union-arg = "@" field-name ["=" arg]\n' + + 'call-prop = prop-name ": " prop-value\n' + + 'variable = "r" dec-integer\n' + + 'pointer-addr = hex-integer\n' + + 'region-size = hex-integer', + position: { + start: { line: 25, column: 1, offset: 880 }, + end: { line: 43, column: 4, offset: 1719 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Programs may also contain blank lines and comments.', + position: [Object] + } + ], + position: { + start: { line: 45, column: 1, offset: 1721 }, + end: { line: 45, column: 52, offset: 1772 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '# Obtain a file handle\n' + + "r0 = openat(0xffffffffffffff9c, &AUTO='./file1\\x00', 0x42, 0x1ff)\n" + + '\n' + + '# Perform a write operation\n' + + 'write(r0, &AUTO="01010101", 0x4)', + position: { + start: { line: 46, column: 1, offset: 1773 }, + end: { line: 52, column: 4, offset: 1931 } + } +} +{ + type: 'heading', + depth: 3, + children: [ { type: 'text', value: 'Memory management', position: [Object] } ], + position: { + start: { line: 54, column: 1, offset: 1933 }, + end: { line: 54, column: 22, offset: 1954 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Memory management is performed by syzkaller itself. It will allocate\n' + + 'virtual memory regions of the necessary size and set the final values\n' + + 'of pointer arguments.', + position: [Object] + } + ], + position: { + start: { line: 56, column: 1, offset: 1956 }, + end: { line: 58, column: 22, offset: 2116 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'By using the ', position: [Object] }, + { type: 'inlineCode', value: 'AUTO', position: [Object] }, + { + type: 'text', + value: ' keyword, programs can give syzkaller the full\n' + + 'control over storing the data. This may be convenient e.g. when a\n' + + 'parameter must be passed by reference, but the exact location of its\n' + + 'value is not of particular importance.', + position: [Object] + } + ], + position: { + start: { line: 60, column: 1, offset: 2118 }, + end: { line: 63, column: 39, offset: 2357 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: "r1 = syz_genetlink_get_family_id$nl80211(&AUTO='nl80211\\x00', 0xffffffffffffffff)\n" + + "ioctl$sock_SIOCGIFINDEX_80211(r0, 0x8933, &AUTO={'wlan0\\x00', 0x0})", + position: { + start: { line: 65, column: 1, offset: 2359 }, + end: { line: 68, column: 4, offset: 2521 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Alternatively, some data can be “anchored” to specific addresses. It\n' + + 'may be especially important when a memory region must be shared\n' + + 'between multiple calls. In this case, pointer addresses must be given\n' + + 'at the 0x7f0000000000 offset. Before the actual execution, syzkaller\n' + + 'will adjust pointers to the start of the actual mmap’ed region.', + position: [Object] + } + ], + position: { + start: { line: 70, column: 1, offset: 2523 }, + end: { line: 74, column: 64, offset: 2859 } + } +} +{ + type: 'heading', + depth: 3, + children: [ { type: 'text', value: 'Call properties', position: [Object] } ], + position: { + start: { line: 76, column: 1, offset: 2861 }, + end: { line: 76, column: 20, offset: 2880 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Call properties specify extra information about how a specific call\n' + + 'must be executed. Each call within a program has its own set of call\n' + + 'properties. If no properties are provided, syzkaller takes the default\n' + + 'ones.', + position: [Object] + } + ], + position: { + start: { line: 78, column: 1, offset: 2882 }, + end: { line: 81, column: 6, offset: 3095 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Currently, syzkaller supports the following call properties.', + position: [Object] + } + ], + position: { + start: { line: 83, column: 1, offset: 3097 }, + end: { line: 83, column: 61, offset: 3157 } + } +} +{ + type: 'heading', + depth: 4, + children: [ { type: 'text', value: 'Fault injection', position: [Object] } ], + position: { + start: { line: 85, column: 1, offset: 3159 }, + end: { line: 85, column: 21, offset: 3179 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'Syntax: ', position: [Object] }, + { type: 'inlineCode', value: 'fail_nth: N', position: [Object] }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 86, column: 1, offset: 3180 }, + end: { line: 86, column: 23, offset: 3202 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'It takes an integer (base 10) argument ', + position: [Object] + }, + { type: 'inlineCode', value: 'N', position: [Object] }, + { + type: 'text', + value: '. If the argument is\nnon-negative, a fault will be injected into the ', + position: [Object] + }, + { type: 'inlineCode', value: 'N', position: [Object] }, + { type: 'text', value: '-th occasion.', position: [Object] } + ], + position: { + start: { line: 88, column: 1, offset: 3204 }, + end: { line: 89, column: 65, offset: 3331 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'r0 = openat$6lowpan_control(0xffffffffffffff9c, &(0x7f00000000c0), 0x2, 0x0)\n' + + 'ioctl$LOOP_SET_FD(r0, 0x4c00, r0) (fail_nth: 5)', + position: { + start: { line: 91, column: 1, offset: 3333 }, + end: { line: 94, column: 4, offset: 3465 } + } +} +{ + type: 'heading', + depth: 4, + children: [ { type: 'text', value: 'Async', position: [Object] } ], + position: { + start: { line: 96, column: 1, offset: 3467 }, + end: { line: 96, column: 11, offset: 3477 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'Syntax: ', position: [Object] }, + { type: 'inlineCode', value: 'async', position: [Object] }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 97, column: 1, offset: 3478 }, + end: { line: 97, column: 17, offset: 3494 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'Instructs ', position: [Object] }, + { type: 'inlineCode', value: 'syz-executor', position: [Object] }, + { + type: 'text', + value: ' not to wait until the call completes and\n' + + 'to proceed immediately to the next call.', + position: [Object] + } + ], + position: { + start: { line: 99, column: 1, offset: 3496 }, + end: { line: 100, column: 41, offset: 3602 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: "r0 = openat(0xffffffffffffff9c, &AUTO='./file1\\x00', 0x42, 0x1ff)\n" + + 'write(r0, &AUTO="01010101", 0x4) (async)\n' + + 'read(r0, &AUTO=""/4, 0x4)\n' + + 'close(r0)', + position: { + start: { line: 102, column: 1, offset: 3604 }, + end: { line: 107, column: 4, offset: 3754 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'When setting ', position: [Object] }, + { type: 'inlineCode', value: 'async', position: [Object] }, + { + type: 'text', + value: ' flags be aware of the following considerations:', + position: [Object] + } + ], + position: { + start: { line: 109, column: 1, offset: 3756 }, + end: { line: 109, column: 69, offset: 3824 } + } +} +{ + type: 'list', + ordered: false, + start: null, + spread: false, + children: [ + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 110, column: 1, offset: 3825 }, + end: { line: 116, column: 46, offset: 4261 } + } +} +{ + type: 'heading', + depth: 1, + children: [ { type: 'text', value: 'Pseudo-syscalls', position: [Object] } ], + position: { + start: { line: 2, column: 1, offset: 1 }, + end: { line: 2, column: 18, offset: 18 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Besides regular system calls, a ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'syscall_descriptions.md', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' file can also contain\n' + + 'pseudo-syscalls. These are C functions defined in the\n' + + 'executor. When a test program uses a pseudo-syscall, the executor\n' + + 'will generate the pseudo-syscall function code in the resulting C program.', + position: [Object] + } + ], + position: { + start: { line: 4, column: 1, offset: 20 }, + end: { line: 8, column: 75, offset: 315 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'This allows a test program to have specific code blocks to perform\n' + + 'certain actions, they may also be used as more test-friendly wrappers\n' + + 'for primitive syscalls.', + position: [Object] + } + ], + position: { + start: { line: 10, column: 1, offset: 317 }, + end: { line: 12, column: 24, offset: 477 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Use of pseudo-syscalls is generally ', + position: [Object] + }, + { type: 'strong', children: [Array], position: [Object] }, + { + type: 'text', + value: ' because they ruin all\n' + + 'advantages of the declarative descriptions (declarativeness, conciseness,\n' + + 'fuzzer control over all aspects, possibility of global improvements to\n' + + 'the logic, static checking, fewer bugs, etc), increase maintenance burden,\n' + + 'are non-reusable and make C reproducers longer. However, syzlang is not\n' + + 'expressive enough to cover all possible cases, so use of pseudo-syscalls\n' + + 'needs to be considered on a case-by-cases basis (additional benefit,\n' + + 'amount of code, possibility of extending syzlang to cover this case, etc).', + position: [Object] + } + ], + position: { + start: { line: 14, column: 1, offset: 479 }, + end: { line: 21, column: 75, offset: 1061 } + } +} +{ + type: 'heading', + depth: 2, + children: [ + { + type: 'text', + value: 'How to add a pseudo-syscall to the executor', + position: [Object] + } + ], + position: { + start: { line: 23, column: 1, offset: 1063 }, + end: { line: 23, column: 47, offset: 1109 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'First, think about the scope of the pseudo-syscall and which systems and\n' + + 'subsystems it will be related to. The executor includes a fixed set of C\n' + + 'header files containing the code of the pseudo-syscalls. Check if the\n' + + 'new one can fit in one of the existing files before creating a new\n' + + 'one. These header files are defined in ', + position: [Object] + }, + { + type: 'link', + title: null, + url: '../pkg/csource/gen.go', + children: [Array], + position: [Object] + }, + { type: 'text', value: ':', position: [Object] } + ], + position: { + start: { line: 25, column: 1, offset: 1111 }, + end: { line: 29, column: 72, offset: 1465 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'executorFilenames := []string{\n' + + ' "common_linux.h",\n' + + ' "common_akaros.h",\n' + + ' "common_bsd.h",\n' + + ' "common_fuchsia.h",\n' + + ' "common_windows.h",\n' + + ' "common_test.h",\n' + + ' "common_kvm_amd64.h",\n' + + ' "common_kvm_arm64.h",\n' + + ' "common_usb_linux.h",\n' + + ' "common_usb_netbsd.h",\n' + + ' "common_usb.h",\n' + + ' "android/android_seccomp.h",\n' + + ' "kvm.h",\n' + + ' "kvm_amd64.S.h",\n' + + '}', + position: { + start: { line: 31, column: 1, offset: 1467 }, + end: { line: 46, column: 6, offset: 1945 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'For instance, if our new pseudo-syscall is Linux-specific, then\n', + position: [Object] + }, + { + type: 'link', + title: null, + url: '../executor/common_linux.h', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' would be the place to put it.', + position: [Object] + } + ], + position: { + start: { line: 48, column: 1, offset: 1947 }, + end: { line: 49, column: 75, offset: 2085 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The actual pseudo-syscall function may look something like this:', + position: [Object] + } + ], + position: { + start: { line: 51, column: 1, offset: 2087 }, + end: { line: 51, column: 65, offset: 2151 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '#if SYZ_EXECUTOR || __NR_syz_mycall\n' + + '/* Add all the necessary #include and #define headers */\n' + + '\n' + + 'static long syz_mycall(volatile long a0, volatile long a1)\n' + + '{\n' + + ' /* Function body */\n' + + '}\n' + + '#endif', + position: { + start: { line: 53, column: 1, offset: 2153 }, + end: { line: 60, column: 11, offset: 2372 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Make sure that all the function requirements are met and that it can\n' + + 'be compiled. Note that the function name must start with “syz_“. It may\n' + + 'also take a different number of arguments. Type of arguments must be\n', + position: [Object] + }, + { type: 'inlineCode', value: 'volatile long', position: [Object] }, + { type: 'text', value: ', return type - ', position: [Object] }, + { type: 'inlineCode', value: 'long', position: [Object] }, + { type: 'text', value: '. ', position: [Object] }, + { type: 'inlineCode', value: 'long', position: [Object] }, + { + type: 'text', + value: ' is required to avoid\n' + + 'potential calling convention issues because it is casted to a function\n' + + 'pointer that accepts ', + position: [Object] + }, + { type: 'inlineCode', value: 'long', position: [Object] }, + { type: 'text', value: '’s. The reason for ', position: [Object] }, + { type: 'inlineCode', value: 'volatile', position: [Object] }, + { + type: 'text', + value: ' is interesting:\n' + + 'lots of libc functions are annotated with various argument constraints\n' + + '(e.g. this argument should not be ', + position: [Object] + }, + { type: 'inlineCode', value: 'NULL', position: [Object] }, + { + type: 'text', + value: ', or that argument must be a\n' + + 'valid file descriptor); C reproducers may call these functions with\n' + + 'constant arguments and compiler may see that some of these constraints\n' + + 'are violated (e.g. passing ', + position: [Object] + }, + { type: 'inlineCode', value: 'NULL', position: [Object] }, + { type: 'text', value: ' to a ', position: [Object] }, + { type: 'inlineCode', value: 'non-NULL', position: [Object] }, + { + type: 'text', + value: ' argument, or passing\n', + position: [Object] + }, + { type: 'inlineCode', value: '-1', position: [Object] }, + { + type: 'text', + value: ' as file descriptor) and produce errors/warnings. ', + position: [Object] + }, + { type: 'inlineCode', value: 'volatile', position: [Object] }, + { type: 'text', value: ' prevents\nthat.', position: [Object] } + ], + position: { + start: { line: 62, column: 1, offset: 2374 }, + end: { line: 74, column: 6, offset: 3224 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Now, to handle the pseudo-syscall properly we have to update the\n', + position: [Object] + }, + { + type: 'inlineCode', + value: 'isSupportedSyzkall', + position: [Object] + }, + { type: 'text', value: ' in\n', position: [Object] }, + { + type: 'link', + title: null, + url: '../pkg/host/syscalls_linux.go', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' and add a particular\n' + + 'case for this syscall, enabling it when necessary. If we want to enable\n' + + 'it unconditionally we can simply make ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'isSupportedSyzkall', + position: [Object] + }, + { type: 'text', value: ' return ', position: [Object] }, + { type: 'inlineCode', value: 'true,\n""', position: [Object] }, + { type: 'text', value: ' for it:', position: [Object] } + ], + position: { + start: { line: 76, column: 1, offset: 3226 }, + end: { line: 81, column: 12, offset: 3543 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'func isSupportedSyzkall(sandbox string, c *prog.Syscall) (bool, string) {\n' + + ' switch c.CallName {\n' + + ' ...\n' + + ' case "syz_mycall":\n' + + ' return true, ""', + position: { + start: { line: 83, column: 1, offset: 3545 }, + end: { line: 87, column: 36, offset: 3737 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'Finally, run ', position: [Object] }, + { type: 'inlineCode', value: 'make generate', position: [Object] }, + { + type: 'text', + value: '. Now you can use it in a syscall\n' + + 'description file as if it was a regular system call:', + position: [Object] + } + ], + position: { + start: { line: 89, column: 1, offset: 3739 }, + end: { line: 90, column: 53, offset: 3853 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'syz_mycall(arg0 pid, arg1 const[0])', + position: { + start: { line: 92, column: 1, offset: 3855 }, + end: { line: 92, column: 40, offset: 3894 } + } +} +{ + type: 'html', + value: '
    ', + position: { + start: { line: 94, column: 1, offset: 3896 }, + end: { line: 94, column: 25, offset: 3920 } + } +} +{ + type: 'heading', + depth: 2, + children: [ + { + type: 'text', + value: 'External Dependencies', + position: [Object] + } + ], + position: { + start: { line: 96, column: 1, offset: 3922 }, + end: { line: 96, column: 25, offset: 3946 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The implementation must not use any external libraries nor external headers,\n' + + 'except for the most basic and standard ones (like ', + position: [Object] + }, + { type: 'inlineCode', value: '', position: [Object] }, + { type: 'text', value: ' and\n', position: [Object] }, + { type: 'inlineCode', value: '', position: [Object] }, + { + type: 'text', + value: '). In particular, it must not depend on libraries/headers\n' + + 'installed by additional packages nor on headers for recently added kernel\n' + + 'subsystems. External dependencies have proved to be brittle and easily cause\n' + + 'build breakage because all dependencies will be required for any build/run on\n' + + 'the fuzzer and any C reproducer. For example, packages/headers may be missing\n' + + 'on some distros, named differently, be of a wrong version, broken, or conflict\n' + + 'with other headers. Unfortunately, there is no way to reliably specify such\n' + + 'dependencies and requirements for C programs. Therefore, if the pseudo-syscall\n' + + 'requires definitions of some structures, constants, or helper functions, these\n' + + 'should be described in the executor code itself as minimally as possible (they\n' + + 'will be part of C reproducers).', + position: [Object] + } + ], + position: { + start: { line: 98, column: 1, offset: 3948 }, + end: { line: 110, column: 32, offset: 4894 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Testing', position: [Object] } ], + position: { + start: { line: 112, column: 1, offset: 4896 }, + end: { line: 112, column: 11, offset: 4906 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Each new pseudo-syscall should have at least one test in ', + position: [Object] + }, + { type: 'inlineCode', value: 'sys/OS/test', position: [Object] }, + { type: 'text', value: '.\nSee ', position: [Object] }, + { + type: 'link', + title: null, + url: '/sys/linux/test', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' for an example. A tests is just a program\n' + + 'with checked syscall return values. There should be at least one test\n' + + 'that contains “the main successful scenario” of using the pseudo-syscall.\n' + + 'See ', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/sys/linux/test/io_uring', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' as a good example.\n' + + 'Such tests are important because they ensure that the pseudo-syscall code\n' + + 'does not contain “stupid” bugs (e.g. crash on NULL-deref each time),\n' + + 'that it is possible for the fuzzer to come up with the successful scenario\n' + + '(as a combination of the pseudo-syscall and the surrounding descriptions)\n' + + 'and that it will continue to work in future.\n' + + 'See ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'syscall_descriptions.md#testing', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '\nfor details about the tests.', + position: [Object] + } + ], + position: { + start: { line: 114, column: 1, offset: 4908 }, + end: { line: 125, column: 29, offset: 5694 } + } +} +{ + type: 'heading', + depth: 1, + children: [ + { type: 'text', value: 'Syscall descriptions', position: [Object] } + ], + position: { + start: { line: 2, column: 1, offset: 1 }, + end: { line: 2, column: 23, offset: 23 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: 'syzkaller', position: [Object] }, + { + type: 'text', + value: ' uses declarative description of syscall interfaces to manipulate\n' + + 'programs (sequences of syscalls). Below you can see (hopefully self-explanatory)\n' + + 'excerpt from the descriptions:', + position: [Object] + } + ], + position: { + start: { line: 4, column: 1, offset: 25 }, + end: { line: 6, column: 31, offset: 213 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'open(file filename, flags flags[open_flags], mode flags[open_mode]) fd\n' + + 'read(fd fd, buf buffer[out], count len[buf])\n' + + 'close(fd fd)\n' + + 'open_mode = S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH', + position: { + start: { line: 8, column: 1, offset: 215 }, + end: { line: 13, column: 4, offset: 443 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The descriptions are contained in ', + position: [Object] + }, + { type: 'inlineCode', value: 'sys/$OS/*.txt', position: [Object] }, + { + type: 'text', + value: ' files.\nFor example see the ', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/sys/linux/dev_snd_midi.txt', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' file\nfor descriptions of the Linux MIDI interfaces.', + position: [Object] + } + ], + position: { + start: { line: 15, column: 1, offset: 445 }, + end: { line: 17, column: 47, offset: 631 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'A more formal description of the description syntax can be found ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'syscall_descriptions_syntax.md', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 19, column: 1, offset: 633 }, + end: { line: 19, column: 105, offset: 737 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Programs', position: [Object] } ], + position: { + start: { line: 21, column: 1, offset: 739 }, + end: { line: 21, column: 12, offset: 750 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The translated descriptions are then used to generate, mutate, execute, minimize, serialize\n' + + 'and deserialize programs. A program is a sequences of syscalls with concrete values for arguments.\n' + + 'Here is an example (of a textual representation) of a program:', + position: [Object] + } + ], + position: { + start: { line: 23, column: 1, offset: 752 }, + end: { line: 25, column: 63, offset: 1005 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'r0 = open(&(0x7f0000000000)="./file0", 0x3, 0x9)\n' + + 'read(r0, &(0x7f0000000000), 42)\n' + + 'close(r0)', + position: { + start: { line: 27, column: 1, offset: 1007 }, + end: { line: 31, column: 4, offset: 1105 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'For actual manipulations ', + position: [Object] + }, + { type: 'inlineCode', value: 'syzkaller', position: [Object] }, + { + type: 'text', + value: ' uses in-memory AST-like representation consisting of\n', + position: [Object] + }, + { type: 'inlineCode', value: 'Call', position: [Object] }, + { type: 'text', value: ' and ', position: [Object] }, + { type: 'inlineCode', value: 'Arg', position: [Object] }, + { type: 'text', value: ' values defined in ', position: [Object] }, + { + type: 'link', + title: null, + url: '/prog/prog.go', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '. That representation is used to\n', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/prog/analysis.go', + children: [Array], + position: [Object] + }, + { type: 'text', value: ', ', position: [Object] }, + { + type: 'link', + title: null, + url: '/prog/rand.go', + children: [Array], + position: [Object] + }, + { type: 'text', value: ', ', position: [Object] }, + { + type: 'link', + title: null, + url: '/prog/mutation.go', + children: [Array], + position: [Object] + }, + { type: 'text', value: ',\n', position: [Object] }, + { + type: 'link', + title: null, + url: '/prog/minimization.go', + children: [Array], + position: [Object] + }, + { type: 'text', value: ', ', position: [Object] }, + { + type: 'link', + title: null, + url: '/prog/validation.go', + children: [Array], + position: [Object] + }, + { type: 'text', value: ', etc programs.', position: [Object] } + ], + position: { + start: { line: 33, column: 1, offset: 1107 }, + end: { line: 36, column: 82, offset: 1461 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The in-memory representation can be ', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/prog/encoding.go', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' to/from\ntextual form to store in on-disk corpus, show to humans, etc.', + position: [Object] + } + ], + position: { + start: { line: 38, column: 1, offset: 1463 }, + end: { line: 39, column: 62, offset: 1601 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'There is also another ', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/prog/decodeexec.go', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '\nof the programs (called ', + position: [Object] + }, + { type: 'inlineCode', value: 'exec', position: [Object] }, + { + type: 'text', + value: '), that is much simpler, does not contain rich type information (irreversible)\n' + + 'and is used for actual execution (interpretation) of programs by ', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/executor/executor.cc', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 41, column: 1, offset: 1603 }, + end: { line: 43, column: 100, offset: 1878 } + } +} +{ + type: 'heading', + depth: 2, + children: [ + { + type: 'text', + value: 'Describing new system calls', + position: [Object] + } + ], + position: { + start: { line: 45, column: 1, offset: 1880 }, + end: { line: 45, column: 31, offset: 1910 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'This section describes how to extend syzkaller to allow fuzz testing of more kernel interfaces.\n' + + 'This is particularly useful for kernel developers who are proposing new system calls.', + position: [Object] + } + ], + position: { + start: { line: 47, column: 1, offset: 1912 }, + end: { line: 48, column: 86, offset: 2093 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Currently all syscall descriptions are manually-written. There is an\n', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://github.com/google/syzkaller/issues/590', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' to provide some aid\n' + + 'for this process and some ongoing work, but we are not there yet to have a\n' + + 'fully-automated way to generate descriptions.\n' + + 'There is a helper ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'headerparser_usage.md', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' utility that can auto-generate\n' + + 'some parts of descriptions from header files. Visual Studio Code has ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://marketplace.visualstudio.com/items?itemName=AndreyArtemiev.syzlang-extension&ssr=false#overview', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' for highlighting syntax.', + position: [Object] + } + ], + position: { + start: { line: 50, column: 1, offset: 2095 }, + end: { line: 55, column: 220, offset: 2672 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'To enable fuzzing of a new kernel interface:', + position: [Object] + } + ], + position: { + start: { line: 57, column: 1, offset: 2674 }, + end: { line: 57, column: 45, offset: 2718 } + } +} +{ + type: 'list', + ordered: true, + start: 1, + spread: true, + children: [ + { + type: 'listItem', + spread: true, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: true, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: true, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 59, column: 1, offset: 2720 }, + end: { line: 87, column: 65, offset: 4400 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'In the instructions above ', + position: [Object] + }, + { type: 'inlineCode', value: 'make extract', position: [Object] }, + { + type: 'text', + value: ' generates/updates the ', + position: [Object] + }, + { type: 'inlineCode', value: '*.const', position: [Object] }, + { type: 'text', value: ' files.\n', position: [Object] }, + { type: 'inlineCode', value: '$KSRC', position: [Object] }, + { + type: 'text', + value: ' should point to the ', + position: [Object] + }, + { type: 'emphasis', children: [Array], position: [Object] }, + { type: 'text', value: ' kernel checkout.', position: [Object] }, + { type: 'break', position: [Object] }, + { type: 'emphasis', children: [Array], position: [Object] }, + { type: 'text', value: ': for Linux the ', position: [Object] }, + { type: 'emphasis', children: [Array], position: [Object] }, + { + type: 'text', + value: ' kernel checkout generally means the\n', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/', + children: [Array], + position: [Object] + }, + { type: 'text', value: ' tree.', position: [Object] }, + { type: 'break', position: [Object] }, + { + type: 'text', + value: 'However, in some cases we add descriptions for interfaces that are not in the mainline tree yet,\n' + + 'so if ', + position: [Object] + }, + { type: 'inlineCode', value: 'make extract', position: [Object] }, + { + type: 'text', + value: ' complains about missing header files or constants undefined on all architectures,\n' + + 'try to use the latest ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/log/', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '\n' + + 'tree (or if it happens to be broken at the moment, try a slightly older linux-next tree).', + position: [Object] + }, + { type: 'break', position: [Object] }, + { type: 'emphasis', children: [Array], position: [Object] }, + { type: 'text', value: ': ', position: [Object] }, + { type: 'inlineCode', value: 'make extract', position: [Object] }, + { type: 'text', value: ' overwrites ', position: [Object] }, + { type: 'inlineCode', value: '.config', position: [Object] }, + { type: 'text', value: ' in ', position: [Object] }, + { type: 'inlineCode', value: '$KSRC', position: [Object] }, + { type: 'text', value: ' and ', position: [Object] }, + { type: 'inlineCode', value: 'mrproper', position: [Object] }, + { type: 'text', value: '’s it.\n', position: [Object] }, + { type: 'emphasis', children: [Array], position: [Object] }, + { type: 'text', value: ': ', position: [Object] }, + { type: 'inlineCode', value: '*.const', position: [Object] }, + { + type: 'text', + value: ' files are checked-in with the ', + position: [Object] + }, + { type: 'inlineCode', value: '*.txt', position: [Object] }, + { + type: 'text', + value: ' changes in the same commit.', + position: [Object] + } + ], + position: { + start: { line: 89, column: 1, offset: 4402 }, + end: { line: 98, column: 84, offset: 5254 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'Then ', position: [Object] }, + { type: 'inlineCode', value: 'make generate', position: [Object] }, + { + type: 'text', + value: ' updates generated code and ', + position: [Object] + }, + { type: 'inlineCode', value: 'make', position: [Object] }, + { type: 'text', value: ' rebuilds binaries.', position: [Object] }, + { type: 'break', position: [Object] }, + { type: 'text', value: 'Note: ', position: [Object] }, + { type: 'inlineCode', value: 'make generate', position: [Object] }, + { + type: 'text', + value: ' does not require any kernel sources, native compilers, etc\n' + + 'and is pure text processing.\n' + + 'Note: ', + position: [Object] + }, + { type: 'inlineCode', value: 'make generate', position: [Object] }, + { + type: 'text', + value: ' also updates the SYZ_REVISION under ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'executor/defs.h', + position: [Object] + }, + { + type: 'text', + value: ', which\n' + + 'is required for machine check while running syz-manager. This should be taken care\n' + + 'of especially if you are trying to rebase with your own change on syscall description.', + position: [Object] + } + ], + position: { + start: { line: 100, column: 1, offset: 5256 }, + end: { line: 105, column: 87, offset: 5693 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'Note: ', position: [Object] }, + { type: 'inlineCode', value: 'make extract', position: [Object] }, + { + type: 'text', + value: ' extracts constants for all architectures which requires\n' + + 'installed cross-compilers. If you get errors about missing compilers/libraries,\n' + + 'try ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'sudo make install_prerequisites', + position: [Object] + }, + { + type: 'text', + value: ' or install equivalent package for your distro.\nNote: ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'sudo make install_prerequisites', + position: [Object] + }, + { + type: 'text', + value: ' will success even with some package failed to\ninstall, ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'sudo apt-get update && sudo apt-get upgrade', + position: [Object] + }, + { + type: 'text', + value: ' might be required to make this\nmore efficient.', + position: [Object] + } + ], + position: { + start: { line: 107, column: 1, offset: 5695 }, + end: { line: 112, column: 16, offset: 6124 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'If you want to fuzz only the new subsystem that you described locally, you may\n' + + 'find the ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'enable_syscalls', + position: [Object] + }, + { + type: 'text', + value: ' configuration parameter useful to specifically target\n' + + 'the new system calls. All system calls in the ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'enable_syscalls', + position: [Object] + }, + { + type: 'text', + value: ' list\n' + + 'will be enabled if their requirements are met (ie. if they are supported\n' + + 'in the target machine and any other system calls that need to run in\n' + + 'order to provide inputs for them are also enabled). You can also include\n' + + 'wildcard definitions to enable multiple system calls in a single line,\n' + + 'for example: ', + position: [Object] + }, + { type: 'inlineCode', value: '"ioctl"', position: [Object] }, + { + type: 'text', + value: ' will enable all the described ioctls syscalls\n' + + 'that have their requirements met, ', + position: [Object] + }, + { + type: 'inlineCode', + value: '"ioctl$UDMABUF_CREATE"', + position: [Object] + }, + { + type: 'text', + value: ' enables\nonly that particular ioctl call, ', + position: [Object] + }, + { type: 'inlineCode', value: '"write$UHID_*"', position: [Object] }, + { + type: 'text', + value: ' enables all write\n' + + 'system calls that start with that description identifier.', + position: [Object] + } + ], + position: { + start: { line: 114, column: 1, offset: 6126 }, + end: { line: 124, column: 58, offset: 6906 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'When updating existing syzkaller descriptions, note, that unless there’s a drastic\n' + + 'change in descriptions for a particular syscall, the programs that are already in\n' + + 'the corpus will be kept there, unless you manually clear them out (for example by\n' + + 'removing the ', + position: [Object] + }, + { type: 'inlineCode', value: 'corpus.db', position: [Object] }, + { type: 'text', value: ' file).', position: [Object] } + ], + position: { + start: { line: 126, column: 1, offset: 6908 }, + end: { line: 129, column: 32, offset: 7186 } + } +} +{ + type: 'html', + value: '
    ', + position: { + start: { line: 131, column: 1, offset: 7188 }, + end: { line: 131, column: 17, offset: 7204 } + } +} +{ + type: 'heading', + depth: 2, + children: [ + { + type: 'text', + value: 'Description tips and FAQ', + position: [Object] + } + ], + position: { + start: { line: 133, column: 1, offset: 7206 }, + end: { line: 133, column: 28, offset: 7233 } + } +} +{ + type: 'html', + value: '
    ', + position: { + start: { line: 135, column: 1, offset: 7235 }, + end: { line: 135, column: 18, offset: 7252 } + } +} +{ + type: 'heading', + depth: 3, + children: [ + { + type: 'text', + value: 'Syscall, struct, field, flags names', + position: [Object] + } + ], + position: { + start: { line: 137, column: 1, offset: 7254 }, + end: { line: 137, column: 40, offset: 7293 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Stick with existing kernel names for things, don’t invent new names if possible.', + position: [Object] + } + ], + position: { + start: { line: 139, column: 1, offset: 7295 }, + end: { line: 139, column: 81, offset: 7375 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Following established naming conventions provides the following benefits:\n' + + '(1) consistency and familiarity of names used across kernel interfaces,\n' + + 'which also enables searching kernel sources for related names; and\n' + + '(2) enable static checking of descriptions (e.g. missed flags or mistyped fields)\n' + + 'with ', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/tools/syz-check/check.go', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 141, column: 1, offset: 7377 }, + end: { line: 145, column: 45, offset: 7716 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'For example, if there is an existing enum ', + position: [Object] + }, + { type: 'inlineCode', value: 'v4l2_buf_type', position: [Object] }, + { + type: 'text', + value: ' in the kernel headers,\n' + + 'use this name for flags in descriptions as well. The same for structs, unions,\n' + + 'fields, etc. For syscall and struct variants, append the variant name after the ', + position: [Object] + }, + { type: 'inlineCode', value: '$', position: [Object] }, + { + type: 'text', + value: ' sign.\nFor example, ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'fcntl$F_GET_RW_HINT', + position: [Object] + }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'ioctl$FIOCLEX', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { + type: 'inlineCode', + value: 'setsockopt$SO_TIMESTAMP', + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 147, column: 1, offset: 7718 }, + end: { line: 150, column: 80, offset: 8047 } + } +} +{ + type: 'html', + value: '
    ', + position: { + start: { line: 152, column: 1, offset: 8049 }, + end: { line: 152, column: 21, offset: 8069 } + } +} +{ + type: 'heading', + depth: 3, + children: [ + { + type: 'text', + value: 'Resources for syscall ordering', + position: [Object] + } + ], + position: { + start: { line: 154, column: 1, offset: 8071 }, + end: { line: 154, column: 35, offset: 8105 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Resources and resource directions (', + position: [Object] + }, + { type: 'inlineCode', value: 'in', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'out', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'inout', position: [Object] }, + { + type: 'text', + value: ') impose implicit ordering\nconstraints on involved syscalls.', + position: [Object] + } + ], + position: { + start: { line: 156, column: 1, offset: 8107 }, + end: { line: 157, column: 34, offset: 8222 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'If a syscall accepts a resource of a particular type (e.g. has ', + position: [Object] + }, + { type: 'inlineCode', value: 'fd_cdrom', position: [Object] }, + { + type: 'text', + value: ' as an input),\n' + + 'then it will be generally placed after a syscall that has this resource as output,\n' + + 'so that the resource value can be passed between syscalls. For example:', + position: [Object] + } + ], + position: { + start: { line: 159, column: 1, offset: 8224 }, + end: { line: 161, column: 72, offset: 8466 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'r0 = openat$cdrom(...)\nioctl$CDROMPAUSE(r0, 0x123)\nclose(r0)', + position: { + start: { line: 163, column: 1, offset: 8468 }, + end: { line: 167, column: 4, offset: 8536 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Syscall arguments are always ', + position: [Object] + }, + { type: 'inlineCode', value: 'in', position: [Object] }, + { type: 'text', value: ', return values are ', position: [Object] }, + { type: 'inlineCode', value: 'out', position: [Object] }, + { + type: 'text', + value: ' and pointer indirections\nhave explicit direction as ', + position: [Object] + }, + { type: 'inlineCode', value: 'ptr', position: [Object] }, + { + type: 'text', + value: ' type attribute. Also, it is possible to specify\n' + + 'direction attribute individually for struct fields to account for more complex\n' + + 'producer/consumer scenarios with structs that include both input/output resources.', + position: [Object] + } + ], + position: { + start: { line: 169, column: 1, offset: 8538 }, + end: { line: 172, column: 83, offset: 8864 } + } +} +{ + type: 'html', + value: '
    ', + position: { + start: { line: 174, column: 1, offset: 8866 }, + end: { line: 174, column: 19, offset: 8884 } + } +} +{ + type: 'heading', + depth: 3, + children: [ + { + type: 'text', + value: 'Use of unexpected/undeclared values', + position: [Object] + } + ], + position: { + start: { line: 176, column: 1, offset: 8886 }, + end: { line: 176, column: 40, offset: 8925 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'When specifying integer/string flags or integer fields stick with the official expected values only.', + position: [Object] + } + ], + position: { + start: { line: 178, column: 1, offset: 8927 }, + end: { line: 178, column: 101, offset: 9027 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Commonly, bugs are triggered by unexpected inputs. With that in mind, it can be too tempting to introduce\n' + + 'some unexpected values to descriptions (e.g. ', + position: [Object] + }, + { type: 'inlineCode', value: '-1', position: [Object] }, + { type: 'text', value: ' or ', position: [Object] }, + { type: 'inlineCode', value: 'INT_MAX', position: [Object] }, + { + type: 'text', + value: '). This is not encouraged for several reasons.\n' + + 'First, this is a cross-cutting aspect and these special unexpected values are applicable to just\n' + + 'any flags and integer fields. Manually specifying them thousands of times is not scalable and\n' + + 'is not maintainable. Second, It’s hard for the fuzzer to come up with correct complex syscall sequences,\n' + + 'and the descriptions are meant to help with this. Coming up with unexpected integer values is easy\n' + + 'and the fuzzer does not need help here. Overall the idea is to improve the generic fuzzer logic\n' + + 'to handle these cases better, which will help all descriptions, rather than over-specializing each\n' + + 'individual integer separately. Fuzzer already has several tricks to deal with this, e.g. comparison\n' + + 'operand value interception and list of typical magic values.', + position: [Object] + } + ], + position: { + start: { line: 180, column: 1, offset: 9029 }, + end: { line: 189, column: 61, offset: 9994 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Note: some values for flags may be undocumented only as an oversight. These values should be added to descriptions.', + position: [Object] + } + ], + position: { + start: { line: 191, column: 1, offset: 9996 }, + end: { line: 191, column: 116, offset: 10111 } + } +} +{ + type: 'html', + value: '
    ', + position: { + start: { line: 193, column: 1, offset: 10113 }, + end: { line: 193, column: 18, offset: 10130 } + } +} +{ + type: 'heading', + depth: 3, + children: [ { type: 'text', value: 'Flags/enums', position: [Object] } ], + position: { + start: { line: 195, column: 1, offset: 10132 }, + end: { line: 195, column: 16, offset: 10147 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'The ', position: [Object] }, + { type: 'inlineCode', value: 'flags', position: [Object] }, + { + type: 'text', + value: ' type is used for all of:', + position: [Object] + } + ], + position: { + start: { line: 197, column: 1, offset: 10149 }, + end: { line: 197, column: 37, offset: 10185 } + } +} +{ + type: 'list', + ordered: false, + start: null, + spread: false, + children: [ + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 199, column: 2, offset: 10188 }, + end: { line: 201, column: 33, offset: 10407 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The fuzzer has logic to distinguish enums and bit flags, and generates values\n' + + 'accordingly. So the general guideline is just to enumerate the meaningful values\n' + + 'in ', + position: [Object] + }, + { type: 'inlineCode', value: 'flags', position: [Object] }, + { + type: 'text', + value: ' without adding any “special” values to “help” the current fuzzer logic.\n' + + 'When/if the fuzzer logic changes/improves, these manual additions may become\n' + + 'unnecessary, or, worse, interfere with the fuzzer ability to generate good values.', + position: [Object] + } + ], + position: { + start: { line: 203, column: 1, offset: 10409 }, + end: { line: 207, column: 83, offset: 10810 } + } +} +{ + type: 'html', + value: '
    ', + position: { + start: { line: 209, column: 1, offset: 10812 }, + end: { line: 209, column: 18, offset: 10829 } + } +} +{ + type: 'heading', + depth: 3, + children: [ { type: 'text', value: 'Declaration order', position: [Object] } ], + position: { + start: { line: 211, column: 1, offset: 10831 }, + end: { line: 211, column: 22, offset: 10852 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: 'syzlang', position: [Object] }, + { + type: 'text', + value: ' does not require declaring entities before use (like C/C++ does), entities can refer to entities\n' + + 'declared later (like in Go). It’s recommended to declare things in the order of importance so that the reader\n' + + 'sees the most important things first and then proceeds to finer and finer implementation details. For example,\n' + + 'system calls usually should go before flag declarations used in these system calls. Note: this order is usually\n' + + 'the exact opposite of how things are declared in C: the least important things go first.', + position: [Object] + } + ], + position: { + start: { line: 213, column: 1, offset: 10854 }, + end: { line: 217, column: 89, offset: 11382 } + } +} +{ + type: 'heading', + depth: 2, + children: [ + { + type: 'text', + value: 'Description compilation internals', + position: [Object] + } + ], + position: { + start: { line: 219, column: 1, offset: 11384 }, + end: { line: 219, column: 37, offset: 11420 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The process of compiling the textual syscall descriptions into machine-usable\n' + + 'form used by ', + position: [Object] + }, + { type: 'inlineCode', value: 'syzkaller', position: [Object] }, + { + type: 'text', + value: ' to actually generate programs consists of 2 steps.', + position: [Object] + } + ], + position: { + start: { line: 221, column: 1, offset: 11422 }, + end: { line: 222, column: 76, offset: 11575 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The first step is extraction of values of symbolic constants from kernel sources using\n', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/sys/syz-extract', + children: [Array], + position: [Object] + }, + { type: 'text', value: ' utility. ', position: [Object] }, + { type: 'inlineCode', value: 'syz-extract', position: [Object] }, + { + type: 'text', + value: ' generates a small C program that\n' + + 'includes kernel headers referenced by ', + position: [Object] + }, + { type: 'inlineCode', value: 'include', position: [Object] }, + { + type: 'text', + value: ' directives, defines macros as specified\nby ', + position: [Object] + }, + { type: 'inlineCode', value: 'define', position: [Object] }, + { + type: 'text', + value: ' directives and prints values of symbolic constants.\n' + + 'Results are stored in ', + position: [Object] + }, + { type: 'inlineCode', value: '.const', position: [Object] }, + { + type: 'text', + value: ' files, one per arch.\nFor example, ', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/sys/linux/dev_ptmx.txt', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' is translated into\n', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/sys/linux/dev_ptmx.txt.const', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 224, column: 1, offset: 11577 }, + end: { line: 230, column: 63, offset: 12100 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The second step is translation of descriptions into Go code using\n', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/sys/syz-sysgen', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' utility (the actual compiler code lives in\n', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/pkg/ast/', + children: [Array], + position: [Object] + }, + { type: 'text', value: ' and ', position: [Object] }, + { + type: 'link', + title: null, + url: '/pkg/compiler/', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ').\n' + + 'This step uses syscall descriptions and the const files generated during the first step\n' + + 'and produces instantiations of ', + position: [Object] + }, + { type: 'inlineCode', value: 'Syscall', position: [Object] }, + { type: 'text', value: ' and ', position: [Object] }, + { type: 'inlineCode', value: 'Type', position: [Object] }, + { type: 'text', value: ' types defined in ', position: [Object] }, + { + type: 'link', + title: null, + url: '/prog/types.go', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '.\nYou can see an example of the compiler output for Akaros in ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'sys/akaros/gen/amd64.go', + position: [Object] + }, + { + type: 'text', + value: '.\n' + + 'This step also generates some minimal syscall metadata for C++ code in ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'executor/syscalls.h', + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 232, column: 1, offset: 12102 }, + end: { line: 238, column: 94, offset: 12669 } + } +} +{ + type: 'heading', + depth: 2, + children: [ + { + type: 'text', + value: 'Non-mainline subsystems', + position: [Object] + } + ], + position: { + start: { line: 240, column: 1, offset: 12671 }, + end: { line: 240, column: 27, offset: 12697 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: 'make extract', position: [Object] }, + { + type: 'text', + value: ' extracts constants for all ', + position: [Object] + }, + { type: 'inlineCode', value: '*.txt', position: [Object] }, + { + type: 'text', + value: ' files and for all supported architectures.\n' + + 'This may not work for subsystems that are not present in mainline kernel or if you have\n' + + 'problems with native kernel compilers, etc. In such cases the ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-extract', position: [Object] }, + { type: 'text', value: ' utility\nused by ', position: [Object] }, + { type: 'inlineCode', value: 'make extract', position: [Object] }, + { + type: 'text', + value: ' can be run manually for single file/arch as:', + position: [Object] + } + ], + position: { + start: { line: 242, column: 1, offset: 12699 }, + end: { line: 245, column: 68, offset: 13031 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'make bin/syz-extract\n' + + 'bin/syz-extract -os linux -arch $ARCH -sourcedir $KSRC -builddir $LINUXBLD .txt\n' + + 'make generate\n' + + 'make', + position: { + start: { line: 247, column: 1, offset: 13033 }, + end: { line: 252, column: 4, offset: 13165 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: '$ARCH', position: [Object] }, + { type: 'text', value: ' is one of ', position: [Object] }, + { type: 'inlineCode', value: 'amd64', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: '386', position: [Object] }, + { type: 'text', value: ' ', position: [Object] }, + { type: 'inlineCode', value: 'arm64', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'arm', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'ppc64le', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'mips64le', position: [Object] }, + { + type: 'text', + value: '.\nIf the subsystem is supported on several architectures, then run ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-extract', position: [Object] }, + { type: 'text', value: ' for each arch.\n', position: [Object] }, + { type: 'inlineCode', value: '$LINUX', position: [Object] }, + { + type: 'text', + value: ' should point to kernel source checkout, which is configured for the\n' + + 'corresponding arch (i.e. you need to run ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'make ARCH=arch someconfig && make ARCH=arch', + position: [Object] + }, + { + type: 'text', + value: ' there first,\nremember to add ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'CROSS_COMPILE=arm-linux-gnueabi-/aarch64-linux-gnu-/powerpc64le-linux-gnu-', + position: [Object] + }, + { + type: 'text', + value: ' if needed).\nIf the kernel was built into a separate directory (with ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'make O=output_dir', + position: [Object] + }, + { + type: 'text', + value: ', remember to put .config\n' + + 'into output_dir, this will be helpful if you’d like to work on different arch at the same time)\n' + + 'then also set ', + position: [Object] + }, + { type: 'inlineCode', value: '$LINUXBLD', position: [Object] }, + { + type: 'text', + value: ' to the location of the build directory.', + position: [Object] + } + ], + position: { + start: { line: 254, column: 1, offset: 13167 }, + end: { line: 261, column: 66, offset: 13877 } + } +} +{ + type: 'html', + value: '
    ', + position: { + start: { line: 263, column: 1, offset: 13879 }, + end: { line: 263, column: 20, offset: 13898 } + } +} +{ + type: 'heading', + depth: 3, + children: [ + { + type: 'text', + value: 'Testing of descriptions', + position: [Object] + } + ], + position: { + start: { line: 265, column: 1, offset: 13900 }, + end: { line: 265, column: 28, offset: 13927 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Descriptions themselves may contain bugs. After running ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-manager', position: [Object] }, + { + type: 'text', + value: ' with the new descriptions\n' + + 'it’s always useful to check the kernel code coverage report available in the ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-manager', position: [Object] }, + { + type: 'text', + value: ' web UI.\n' + + 'The report allows to assess if everything one expects to be covered is in fact covered,\n' + + 'and if not, where the fuzzer gets stuck. However, this is a useful but quite indirect assessment\n' + + 'of the descriptions correctness. The fuzzer may get around some bugs in the descriptions by diverging\n' + + 'from what the descriptions say, but it makes it considerably harder for the fuzzer to progress.', + position: [Object] + } + ], + position: { + start: { line: 267, column: 1, offset: 13929 }, + end: { line: 272, column: 96, offset: 14506 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'Tests stored in ', position: [Object] }, + { type: 'inlineCode', value: 'sys/OS/test/*', position: [Object] }, + { + type: 'text', + value: ' provide a more direct testing of the descriptions. Each test is just\n' + + 'a program with checked syscall return values. The syntax of the programs is briefly described ', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'program_syntax.md', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '.\nYou can also look at the ', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/sys/linux/test', + children: [Array], + position: [Object] + }, + { type: 'text', value: ' and at the program ', position: [Object] }, + { + type: 'link', + title: null, + url: '/prog/encoding.go', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.\n', position: [Object] }, + { type: 'inlineCode', value: 'AUTO', position: [Object] }, + { + type: 'text', + value: ' keyword can be used as a value for consts and pointers, for pointers it will lead to\n' + + 'some reasonable sequential allocation of memory addresses.', + position: [Object] + } + ], + position: { + start: { line: 274, column: 1, offset: 14508 }, + end: { line: 278, column: 59, offset: 15004 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'It’s always good to add a test at least for “the main successful scenario” for the subsystem.\n' + + 'It will ensure that the descriptions are actually correct and that it’s possible for the fuzzer\n' + + 'to come up with the successful scenario. See ', + position: [Object] + }, + { + type: 'link', + title: null, + url: '/sys/linux/test/io_uring', + children: [Array], + position: [Object] + }, + { type: 'text', value: ' as a good example.', position: [Object] } + ], + position: { + start: { line: 280, column: 1, offset: 15006 }, + end: { line: 282, column: 106, offset: 15301 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The tests can be run with the ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-runtest', position: [Object] }, + { type: 'text', value: ' utility as:', position: [Object] } + ], + position: { + start: { line: 284, column: 1, offset: 15303 }, + end: { line: 284, column: 56, offset: 15358 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'make runtest && bin/syz-runtest -config manager.config', + position: { + start: { line: 285, column: 1, offset: 15359 }, + end: { line: 287, column: 4, offset: 15421 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: 'syz-runtest', position: [Object] }, + { + type: 'text', + value: ' boots multiple VMs and runs these tests in different execution modes inside of the VMs.', + position: [Object] + } + ], + position: { + start: { line: 288, column: 1, offset: 15422 }, + end: { line: 288, column: 102, offset: 15523 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'However, full ', position: [Object] }, + { type: 'inlineCode', value: 'syz-runtest', position: [Object] }, + { + type: 'text', + value: ' run takes time, so while developing the test, it’s more handy to run it\n' + + 'using the ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-execprog', position: [Object] }, + { + type: 'text', + value: ' utility. To run the test, copy ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-execprog', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'syz-executor', position: [Object] }, + { + type: 'text', + value: ' and the test\n' + + 'into a manually booted VM and then run the following command inside of the VM:', + position: [Object] + } + ], + position: { + start: { line: 290, column: 1, offset: 15525 }, + end: { line: 292, column: 79, offset: 15803 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'syz-execprog -debug -threaded=0 mytest', + position: { + start: { line: 293, column: 1, offset: 15804 }, + end: { line: 295, column: 4, offset: 15850 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'It will show results of all executed syscalls. It’s also handy for manual debugging of pseudo-syscall code:\n' + + 'if you add some temporal ', + position: [Object] + }, + { type: 'inlineCode', value: 'debug', position: [Object] }, + { + type: 'text', + value: ' calls to the pseudo-syscall, ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'syz-execprog -debug', + position: [Object] + }, + { + type: 'text', + value: ' will show their output.', + position: [Object] + } + ], + position: { + start: { line: 296, column: 1, offset: 15851 }, + end: { line: 297, column: 108, offset: 16066 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The test syntax can be checked by running:', + position: [Object] + } + ], + position: { + start: { line: 299, column: 1, offset: 16068 }, + end: { line: 299, column: 43, offset: 16110 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'go test -run=TestParsing ./pkg/runtest', + position: { + start: { line: 300, column: 1, offset: 16111 }, + end: { line: 302, column: 4, offset: 16157 } + } +} +{ + type: 'heading', + depth: 1, + children: [ + { + type: 'text', + value: 'Syscall description language', + position: [Object] + } + ], + position: { + start: { line: 2, column: 1, offset: 1 }, + end: { line: 2, column: 31, offset: 31 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'aka ', position: [Object] }, + { type: 'inlineCode', value: 'syzlang', position: [Object] }, + { type: 'text', value: ' (', position: [Object] }, + { type: 'inlineCode', value: '[siːzˈlæŋg]', position: [Object] }, + { type: 'text', value: ')', position: [Object] } + ], + position: { + start: { line: 3, column: 1, offset: 32 }, + end: { line: 3, column: 30, offset: 61 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Pseudo-formal grammar of syscall description:', + position: [Object] + } + ], + position: { + start: { line: 5, column: 1, offset: 63 }, + end: { line: 5, column: 46, offset: 108 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'syscallname "(" [arg ["," arg]*] ")" [type] ["(" attribute* ")"]\n' + + 'arg = argname type\n' + + 'argname = identifier\n' + + 'type = typename [ "[" type-options "]" ]\n' + + 'typename = "const" | "intN" | "intptr" | "flags" | "array" | "ptr" |\n' + + '\t "string" | "strconst" | "filename" | "glob" | "len" |\n' + + '\t "bytesize" | "bytesizeN" | "bitsize" | "vma" | "proc" |\n' + + '\t "compressed_image"\n' + + 'type-options = [type-opt ["," type-opt]]', + position: { + start: { line: 7, column: 1, offset: 110 }, + end: { line: 17, column: 4, offset: 514 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'common type-options include:', + position: [Object] + } + ], + position: { + start: { line: 19, column: 1, offset: 516 }, + end: { line: 19, column: 29, offset: 544 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '"opt" - the argument is optional (like mmap fd argument, or accept peer argument)', + position: { + start: { line: 21, column: 1, offset: 546 }, + end: { line: 23, column: 4, offset: 635 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'rest of the type-options are type-specific:', + position: [Object] + } + ], + position: { + start: { line: 25, column: 1, offset: 637 }, + end: { line: 25, column: 44, offset: 680 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '"const": integer constant, type-options:\n' + + '\tvalue, underlying type (one of "intN", "intptr")\n' + + '"intN"/"intptr": an integer without a particular meaning, type-options:\n' + + '\teither an optional range of values (e.g. "5:10", or "100:200")\n' + + '\tor a reference to flags description (see below),\n' + + '\tor a single value\n' + + '\toptionally followed by an alignment parameter if using a range\n' + + '"flags": a set of values, type-options:\n' + + '\treference to flags description (see below), underlying int type (e.g. "int32")\n' + + '"array": a variable/fixed-length array, type-options:\n' + + '\ttype of elements, optional size (fixed "5", or ranged "5:10", boundaries inclusive)\n' + + '"ptr"/"ptr64": a pointer to an object, type-options:\n' + + '\tdirection (in/out/inout); type of the object\n' + + '\tptr64 has size of 8 bytes regardless of target pointer size\n' + + '"string": a zero-terminated memory buffer (no pointer indirection implied), type-options:\n' + + '\teither a string value in quotes for constant strings (e.g. "foo" or `deadbeef` for hex literal),\n' + + '\tor a reference to string flags (special value `filename` produces file names),\n' + + '\toptionally followed by a buffer size (string values will be padded with \\x00 to that size)\n' + + '"stringnoz": a non-zero-terminated memory buffer (no pointer indirection implied), type-options:\n' + + '\teither a string value in quotes for constant strings (e.g. "foo" or `deadbeef` for hex literal),\n' + + '\tor a reference to string flags,\n' + + '"glob": glob pattern to match on the target files, type-options:\n' + + '\ta pattern string in quotes (syntax: https://golang.org/pkg/path/filepath/#Match)\n' + + '\t(e.g. "/sys/" or "/sys/**/*"),\n' + + '\tor include exclude glob too (e.g. "/sys/**/*:-/sys/power/state")\n' + + '"fmt": a string representation of an integer (not zero-terminated), type-options:\n' + + '\tformat (one of "dec", "hex", "oct") and the value (a resource, int, flags, const or proc)\n' + + '\tthe resulting data is always fixed-size (formatted as "%020llu", "0x%016llx" or "%023llo", respectively)\n' + + '"len": length of another field (for array it is number of elements), type-options:\n' + + '\targname of the object\n' + + '"bytesize": similar to "len", but always denotes the size in bytes, type-options:\n' + + '\targname of the object\n' + + '"bitsize": similar to "len", but always denotes the size in bits, type-options:\n' + + '\targname of the object\n' + + '"offsetof": offset of the field from the beginning of the parent struct, type-options:\n' + + '\tfield\n' + + '"vma"/"vma64": a pointer to a set of pages (used as input for mmap/munmap/mremap/madvise), type-options:\n' + + '\toptional number of pages (e.g. vma[7]), or a range of pages (e.g. vma[2-4])\n' + + '\tvma64 has size of 8 bytes regardless of target pointer size\n' + + '"proc": per process int (see description below), type-options:\n' + + '\tvalue range start, how many values per process, underlying type\n' + + '"compressed_image": zlib-compressed disk image\n' + + '\tsyscalls accepting compressed images must be marked with `no_generate`\n' + + '\tand `no_minimize` call attributes.\n' + + '"text": machine code of the specified type, type-options:\n' + + '\ttext type (x86_real, x86_16, x86_32, x86_64, arm64)\n' + + '"void": type with static size 0\n' + + "\tmostly useful inside of templates and varlen unions, can't be syscall argument", + position: { + start: { line: 27, column: 1, offset: 682 }, + end: { line: 76, column: 4, offset: 3737 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'flags/len/flags also have trailing underlying type type-option when used in structs/unions/pointers.', + position: [Object] + } + ], + position: { + start: { line: 78, column: 1, offset: 3739 }, + end: { line: 78, column: 101, offset: 3839 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Flags are described as:', + position: [Object] + } + ], + position: { + start: { line: 80, column: 1, offset: 3841 }, + end: { line: 80, column: 24, offset: 3864 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'flagname = const ["," const]*', + position: { + start: { line: 82, column: 1, offset: 3866 }, + end: { line: 84, column: 4, offset: 3903 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'or for string flags as:', + position: [Object] + } + ], + position: { + start: { line: 86, column: 1, offset: 3905 }, + end: { line: 86, column: 24, offset: 3928 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'flagname = "\\"" literal "\\"" ["," "\\"" literal "\\""]*', + position: { + start: { line: 88, column: 1, offset: 3930 }, + end: { line: 90, column: 4, offset: 3991 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'Call attributes are:', position: [Object] } + ], + position: { + start: { line: 92, column: 1, offset: 3993 }, + end: { line: 92, column: 21, offset: 4013 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '"disabled": the call will not be used in fuzzing; useful to temporary disable some calls\n' + + '\tor prohibit particular argument combinations.\n' + + '"timeout[N]": additional execution timeout (in ms) for the call on top of some default value\n' + + '"prog_timeout[N]": additional execution timeout (in ms) for the whole program if it contains this call;\n' + + '\tif a program contains several such calls, the max value is used.\n' + + '"ignore_return": ignore return value of this syscall in fallback feedback; need to be used for calls\n' + + "\tthat don't return fixed error codes but rather something else (e.g. the current time).\n" + + `"breaks_returns": ignore return values of all subsequent calls in the program in fallback feedback (can't be trusted).\n` + + '"no_generate": do not try to generate this syscall, i.e. use only seed descriptions to produce it.\n' + + '"no_minimize": do not modify instances of this syscall when trying to minimize a crashing program.', + position: { + start: { line: 94, column: 1, offset: 4015 }, + end: { line: 105, column: 4, offset: 4927 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Ints', position: [Object] } ], + position: { + start: { line: 107, column: 1, offset: 4929 }, + end: { line: 107, column: 8, offset: 4936 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: 'int8', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'int16', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'int32', position: [Object] }, + { type: 'text', value: ' and ', position: [Object] }, + { type: 'inlineCode', value: 'int64', position: [Object] }, + { + type: 'text', + value: ' denote an integer of the corresponding size.\n', + position: [Object] + }, + { type: 'inlineCode', value: 'intptr', position: [Object] }, + { + type: 'text', + value: ' denotes a pointer-sized integer, i.e. C ', + position: [Object] + }, + { type: 'inlineCode', value: 'long', position: [Object] }, + { type: 'text', value: ' type.', position: [Object] } + ], + position: { + start: { line: 109, column: 1, offset: 4938 }, + end: { line: 110, column: 62, offset: 5081 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'By appending ', position: [Object] }, + { type: 'inlineCode', value: 'be', position: [Object] }, + { type: 'text', value: ' suffix (e.g. ', position: [Object] }, + { type: 'inlineCode', value: 'int16be', position: [Object] }, + { + type: 'text', + value: ') integers become big-endian.', + position: [Object] + } + ], + position: { + start: { line: 112, column: 1, offset: 5083 }, + end: { line: 112, column: 70, offset: 5152 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'It’s possible to specify a range of values for an integer in the format of ', + position: [Object] + }, + { type: 'inlineCode', value: 'int32[0:100]', position: [Object] }, + { type: 'text', value: ' or ', position: [Object] }, + { + type: 'inlineCode', + value: 'int32[0:4096, 512]', + position: [Object] + }, + { + type: 'text', + value: ' for a 512-aligned int.', + position: [Object] + } + ], + position: { + start: { line: 114, column: 1, offset: 5154 }, + end: { line: 114, column: 137, offset: 5290 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Integers can also take a reference to flags description or a value as its first type-option.\n' + + 'In that case, the alignment parameter is not supported.', + position: [Object] + } + ], + position: { + start: { line: 116, column: 1, offset: 5292 }, + end: { line: 117, column: 56, offset: 5440 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'To denote a bitfield of size N use ', + position: [Object] + }, + { type: 'inlineCode', value: 'int64:N', position: [Object] }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 119, column: 1, offset: 5442 }, + end: { line: 119, column: 46, offset: 5487 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'It’s possible to use these various kinds of ints as base types for ', + position: [Object] + }, + { type: 'inlineCode', value: 'const', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'flags', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'len', position: [Object] }, + { type: 'text', value: ' and ', position: [Object] }, + { type: 'inlineCode', value: 'proc', position: [Object] }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 121, column: 1, offset: 5489 }, + end: { line: 121, column: 103, offset: 5591 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'example_struct {\n' + + '\tf0\tint8\t\t\t# random 1-byte integer\n' + + '\tf1\tconst[0x42, int16be]\t# const 2-byte integer with value 0x4200 (big-endian 0x42)\n' + + '\tf2\tint32[0:100]\t\t# random 4-byte integer with values from 0 to 100 inclusive\n' + + '\tf3\tint32[1:10, 2]\t\t# random 4-byte integer with values {1, 3, 5, 7, 9}\n' + + '\tf4\tint64:20\t\t# random 20-bit bitfield\n' + + '\tf5\tint8[10]\t\t# const 1-byte integer with value 10\n' + + '\tf6\tint32[flagname]\t\t# random 4-byte integer from the set of values referenced by flagname\n' + + '}', + position: { + start: { line: 123, column: 1, offset: 5593 }, + end: { line: 133, column: 4, offset: 6069 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Structs', position: [Object] } ], + position: { + start: { line: 135, column: 1, offset: 6071 }, + end: { line: 135, column: 11, offset: 6081 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Structs are described as:', + position: [Object] + } + ], + position: { + start: { line: 137, column: 1, offset: 6083 }, + end: { line: 137, column: 26, offset: 6108 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'structname "{" "\\n"\n' + + '\t(fieldname type ("(" fieldattribute* ")")? (if[expression])? "\\n")+\n' + + '"}" ("[" attribute* "]")?', + position: { + start: { line: 139, column: 1, offset: 6110 }, + end: { line: 143, column: 4, offset: 6232 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Fields can have attributes specified in parentheses after the field, independent\n' + + 'of their type. ', + position: [Object] + }, + { type: 'inlineCode', value: 'in/out/inout', position: [Object] }, + { + type: 'text', + value: ' attribute specify per-field direction, for example:', + position: [Object] + } + ], + position: { + start: { line: 145, column: 1, offset: 6234 }, + end: { line: 146, column: 82, offset: 6396 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'foo {\n' + + '\tfield0\tconst[1, int32]\t(in)\n' + + '\tfield1\tint32\t\t(inout)\n' + + '\tfield2\tfd\t\t(out)\n' + + '}', + position: { + start: { line: 148, column: 1, offset: 6398 }, + end: { line: 154, column: 4, offset: 6483 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'You may specify conditions that determine whether a field will be included:', + position: [Object] + } + ], + position: { + start: { line: 156, column: 1, offset: 6485 }, + end: { line: 156, column: 76, offset: 6560 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'foo {\n\tfield0\tint32\n\tfield1\tint32 (if[value[field0] == 0x1])\n}', + position: { + start: { line: 158, column: 1, offset: 6562 }, + end: { line: 163, column: 4, offset: 6632 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'See ', position: [Object] }, + { + type: 'link', + title: null, + url: 'syscall_descriptions_syntax.md#conditional-fields', + children: [Array], + position: [Object] + }, + { type: 'text', value: '\nfor more details.', position: [Object] } + ], + position: { + start: { line: 165, column: 1, offset: 6634 }, + end: { line: 166, column: 18, offset: 6734 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: 'out_overlay', position: [Object] }, + { + type: 'text', + value: ' attribute allows to have separate input and output layouts for the struct.\n' + + 'Fields before the ', + position: [Object] + }, + { type: 'inlineCode', value: 'out_overlay', position: [Object] }, + { + type: 'text', + value: ' field are input, fields starting from ', + position: [Object] + }, + { type: 'inlineCode', value: 'out_overlay', position: [Object] }, + { + type: 'text', + value: ' are output.\n' + + 'Input and output fields overlap in memory (both start from the beginning of the struct in memory).\n' + + 'For example:', + position: [Object] + } + ], + position: { + start: { line: 168, column: 1, offset: 6736 }, + end: { line: 171, column: 13, offset: 7032 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'foo {\n' + + '\tin0\tconst[1, int32]\n' + + '\tin1\tflags[bar, int8]\n' + + '\tin2\tptr[in, string]\n' + + '\tout0\tfd\t(out_overlay)\n' + + '\tout1\tint32\n' + + '}', + position: { + start: { line: 173, column: 1, offset: 7034 }, + end: { line: 181, column: 4, offset: 7148 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Structs can have attributes specified in square brackets after the struct.\n' + + 'Attributes are:', + position: [Object] + } + ], + position: { + start: { line: 183, column: 1, offset: 7150 }, + end: { line: 184, column: 16, offset: 7240 } + } +} +{ + type: 'list', + ordered: false, + start: null, + spread: false, + children: [ + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 186, column: 1, offset: 7242 }, + end: { line: 188, column: 135, offset: 7761 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Unions', position: [Object] } ], + position: { + start: { line: 190, column: 1, offset: 7763 }, + end: { line: 190, column: 10, offset: 7772 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Unions are described as:', + position: [Object] + } + ], + position: { + start: { line: 192, column: 1, offset: 7774 }, + end: { line: 192, column: 25, offset: 7798 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'unionname "[" "\\n"\n' + + '\t(fieldname type (if[expression])? "\\n")+\n' + + '"]" ("[" attribute* "]")?', + position: { + start: { line: 194, column: 1, offset: 7800 }, + end: { line: 198, column: 4, offset: 7894 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'During fuzzing, syzkaller randomly picks one of the union options.', + position: [Object] + } + ], + position: { + start: { line: 200, column: 1, offset: 7896 }, + end: { line: 200, column: 67, offset: 7962 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'You may also specify conditions that determine whether the corresponding\n' + + 'option may or may not be selected, depending on values of other fields. See\n', + position: [Object] + }, + { + type: 'link', + title: null, + url: 'syscall_descriptions_syntax.md#conditional-fields', + children: [Array], + position: [Object] + }, + { type: 'text', value: '\nfor more details.', position: [Object] } + ], + position: { + start: { line: 202, column: 1, offset: 7964 }, + end: { line: 205, column: 18, offset: 8209 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Unions can have attributes specified in square brackets after the union.\n' + + 'Attributes are:', + position: [Object] + } + ], + position: { + start: { line: 207, column: 1, offset: 8211 }, + end: { line: 208, column: 16, offset: 8299 } + } +} +{ + type: 'list', + ordered: false, + start: null, + spread: false, + children: [ + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + }, + { + type: 'listItem', + spread: false, + checked: null, + children: [Array], + position: [Object] + } + ], + position: { + start: { line: 210, column: 1, offset: 8301 }, + end: { line: 211, column: 134, offset: 8624 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Resources', position: [Object] } ], + position: { + start: { line: 213, column: 1, offset: 8626 }, + end: { line: 213, column: 13, offset: 8638 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Resources represent values that need to be passed from output of one syscall to input of another syscall. For example, ', + position: [Object] + }, + { type: 'inlineCode', value: 'close', position: [Object] }, + { + type: 'text', + value: ' syscall requires an input value (fd) previously returned by ', + position: [Object] + }, + { type: 'inlineCode', value: 'open', position: [Object] }, + { type: 'text', value: ' or ', position: [Object] }, + { type: 'inlineCode', value: 'pipe', position: [Object] }, + { + type: 'text', + value: ' syscall. To achieve this, ', + position: [Object] + }, + { type: 'inlineCode', value: 'fd', position: [Object] }, + { + type: 'text', + value: ' is declared as a resource. This is a way of modelling dependencies between syscalls, as defining a syscall as the producer of a resource and another syscall as the consumer defines a loose sense of ordering between them. Resources are described as:', + position: [Object] + } + ], + position: { + start: { line: 215, column: 1, offset: 8640 }, + end: { line: 215, column: 484, offset: 9123 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: '"resource" identifier "[" underlying_type "]" [ ":" const ("," const)* ]', + position: { + start: { line: 217, column: 1, offset: 9125 }, + end: { line: 219, column: 4, offset: 9205 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'inlineCode', + value: 'underlying_type', + position: [Object] + }, + { type: 'text', value: ' is either one of ', position: [Object] }, + { type: 'inlineCode', value: 'int8', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'int16', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'int32', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'int64', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'intptr', position: [Object] }, + { + type: 'text', + value: ' or another resource (which models inheritance, for example, a socket is a subtype of fd). The optional set of constants represent resource special values, for example, ', + position: [Object] + }, + { + type: 'inlineCode', + value: '0xffffffffffffffff', + position: [Object] + }, + { + type: 'text', + value: ' (-1) for “no fd”, or ', + position: [Object] + }, + { type: 'inlineCode', value: 'AT_FDCWD', position: [Object] }, + { + type: 'text', + value: ' for “the current dir”. Special values are used once in a while as resource values. If no special values specified, special value of ', + position: [Object] + }, + { type: 'inlineCode', value: '0', position: [Object] }, + { + type: 'text', + value: ' is used. Resources can then be used as types, for example:', + position: [Object] + } + ], + position: { + start: { line: 221, column: 1, offset: 9207 }, + end: { line: 221, column: 495, offset: 9701 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'resource fd[int32]: 0xffffffffffffffff, AT_FDCWD, 1000000\n' + + 'resource sock[fd]\n' + + 'resource sock_unix[sock]\n' + + '\n' + + 'socket(...) sock\n' + + 'accept(fd sock, ...) sock\n' + + 'listen(fd sock, backlog int32)', + position: { + start: { line: 223, column: 1, offset: 9703 }, + end: { line: 231, column: 4, offset: 9886 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Resources don’t have to be necessarily returned by a syscall. They can be used as any other data type. For example:', + position: [Object] + } + ], + position: { + start: { line: 233, column: 1, offset: 9888 }, + end: { line: 233, column: 116, offset: 10003 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'resource my_resource[int32]\n' + + '\n' + + 'request_producer(..., arg ptr[out, my_resource])\n' + + 'request_consumer(..., arg ptr[inout, test_struct])\n' + + '\n' + + 'test_struct {\n' + + '\t...\n' + + '\tattr\tmy_resource\n' + + '}', + position: { + start: { line: 235, column: 1, offset: 10005 }, + end: { line: 245, column: 4, offset: 10181 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'For more complex producer/consumer scenarios, field attributes can be utilized.\n' + + 'For example:', + position: [Object] + } + ], + position: { + start: { line: 247, column: 1, offset: 10183 }, + end: { line: 248, column: 13, offset: 10275 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'resource my_resource_1[int32]\n' + + 'resource my_resource_2[int32]\n' + + '\n' + + 'request_produce1_consume2(..., arg ptr[inout, test_struct])\n' + + '\n' + + 'test_struct {\n' + + '\t...\n' + + '\tfield0\tmy_resource_1\t(out)\n' + + '\tfield1\tmy_resource_2\t(in)\n' + + '}', + position: { + start: { line: 250, column: 1, offset: 10277 }, + end: { line: 261, column: 4, offset: 10482 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Each resource type must be “produced” (used as an output) by at least one syscall\n' + + '(outside of unions and optional pointers) and “consumed” (used as an input)\n' + + 'by at least one syscall.', + position: [Object] + } + ], + position: { + start: { line: 263, column: 1, offset: 10484 }, + end: { line: 265, column: 25, offset: 10666 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Type Aliases', position: [Object] } ], + position: { + start: { line: 267, column: 1, offset: 10668 }, + end: { line: 267, column: 16, offset: 10683 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Complex types that are often repeated can be given short type aliases using the\n' + + 'following syntax:', + position: [Object] + } + ], + position: { + start: { line: 269, column: 1, offset: 10685 }, + end: { line: 270, column: 18, offset: 10782 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'type identifier underlying_type', + position: { + start: { line: 272, column: 1, offset: 10784 }, + end: { line: 274, column: 4, offset: 10823 } + } +} +{ + type: 'paragraph', + children: [ { type: 'text', value: 'For example:', position: [Object] } ], + position: { + start: { line: 276, column: 1, offset: 10825 }, + end: { line: 276, column: 13, offset: 10837 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'type signalno int32[0:65]\ntype net_port proc[20000, 4, int16be]', + position: { + start: { line: 278, column: 1, offset: 10839 }, + end: { line: 281, column: 4, offset: 10910 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Then, type alias can be used instead of the underlying type in any contexts.\n' + + 'Underlying type needs to be described as if it’s a struct field, that is,\n' + + 'with the base type if it’s required. However, type alias can be used as syscall\n' + + 'arguments as well. Underlying types are currently restricted to integer types,\n', + position: [Object] + }, + { type: 'inlineCode', value: 'ptr', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'ptr64', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'const', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'flags', position: [Object] }, + { type: 'text', value: ' and ', position: [Object] }, + { type: 'inlineCode', value: 'proc', position: [Object] }, + { type: 'text', value: ' types.', position: [Object] } + ], + position: { + start: { line: 283, column: 1, offset: 10912 }, + end: { line: 287, column: 51, offset: 11272 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'There are some builtin type aliases:', + position: [Object] + } + ], + position: { + start: { line: 289, column: 1, offset: 11274 }, + end: { line: 289, column: 37, offset: 11310 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'type bool8\tint8[0:1]\n' + + 'type bool16\tint16[0:1]\n' + + 'type bool32\tint32[0:1]\n' + + 'type bool64\tint64[0:1]\n' + + 'type boolptr\tintptr[0:1]\n' + + '\n' + + 'type fileoff[BASE] BASE\n' + + '\n' + + 'type filename string[filename]\n' + + '\n' + + 'type buffer[DIR] ptr[DIR, array[int8]]', + position: { + start: { line: 290, column: 1, offset: 11311 }, + end: { line: 302, column: 4, offset: 11530 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Type Templates', position: [Object] } ], + position: { + start: { line: 304, column: 1, offset: 11532 }, + end: { line: 304, column: 18, offset: 11549 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Type templates can be declared as follows:', + position: [Object] + } + ], + position: { + start: { line: 306, column: 1, offset: 11551 }, + end: { line: 306, column: 43, offset: 11593 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'type buffer[DIR] ptr[DIR, array[int8]]\n' + + 'type fileoff[BASE] BASE\n' + + 'type nlattr[TYPE, PAYLOAD] {\n' + + '\tnla_len\t\tlen[parent, int16]\n' + + '\tnla_type\tconst[TYPE, int16]\n' + + '\tpayload\t\tPAYLOAD\n' + + '} [align_4]', + position: { + start: { line: 307, column: 1, offset: 11594 }, + end: { line: 315, column: 4, offset: 11781 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'and later used as follows:', + position: [Object] + } + ], + position: { + start: { line: 317, column: 1, offset: 11783 }, + end: { line: 317, column: 27, offset: 11809 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'syscall(a buffer[in], b fileoff[int64], c ptr[in, nlattr[FOO, int32]])', + position: { + start: { line: 318, column: 1, offset: 11810 }, + end: { line: 320, column: 4, offset: 11888 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'There is builtin type template ', + position: [Object] + }, + { type: 'inlineCode', value: 'optional', position: [Object] }, + { type: 'text', value: ' defined as:', position: [Object] } + ], + position: { + start: { line: 322, column: 1, offset: 11890 }, + end: { line: 322, column: 54, offset: 11943 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'type optional[T] [\n\tval\tT\n\tvoid\tvoid\n] [varlen]', + position: { + start: { line: 323, column: 1, offset: 11944 }, + end: { line: 328, column: 4, offset: 11999 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Length', position: [Object] } ], + position: { + start: { line: 330, column: 1, offset: 12001 }, + end: { line: 330, column: 10, offset: 12010 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'You can specify length of a particular field in struct or a named argument by\n' + + 'using ', + position: [Object] + }, + { type: 'inlineCode', value: 'len', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: 'bytesize', position: [Object] }, + { type: 'text', value: ' and ', position: [Object] }, + { type: 'inlineCode', value: 'bitsize', position: [Object] }, + { type: 'text', value: ' types, for example:', position: [Object] } + ], + position: { + start: { line: 332, column: 1, offset: 12012 }, + end: { line: 333, column: 58, offset: 12147 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'write(fd fd, buf ptr[in, array[int8]], count len[buf])\n' + + '\n' + + 'sock_fprog {\n' + + '\tlen\tlen[filter, int16]\n' + + '\tfilter\tptr[in, array[sock_filter]]\n' + + '}', + position: { + start: { line: 335, column: 1, offset: 12149 }, + end: { line: 342, column: 4, offset: 12287 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'If ', position: [Object] }, + { type: 'inlineCode', value: 'len', position: [Object] }, + { + type: 'text', + value: '’s argument is a pointer, then the length of the pointee argument is used.', + position: [Object] + } + ], + position: { + start: { line: 344, column: 1, offset: 12289 }, + end: { line: 344, column: 83, offset: 12371 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'To denote the length of a field in N-byte words use ', + position: [Object] + }, + { type: 'inlineCode', value: 'bytesizeN', position: [Object] }, + { + type: 'text', + value: ', possible values\nfor N are 1, 2, 4 and 8.', + position: [Object] + } + ], + position: { + start: { line: 346, column: 1, offset: 12373 }, + end: { line: 347, column: 25, offset: 12478 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'To denote the length of the parent struct, you can use ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'len[parent, int8]', + position: [Object] + }, + { + type: 'text', + value: '.\n' + + 'To denote the length of the higher level parent when structs are embedded into\n' + + 'one another, you can specify the type name of the particular parent:', + position: [Object] + } + ], + position: { + start: { line: 349, column: 1, offset: 12480 }, + end: { line: 351, column: 69, offset: 12703 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 's1 {\n' + + ' f0 len[s2] # length of s2\n' + + '}\n' + + '\n' + + 's2 {\n' + + ' f0 s1\n' + + ' f1 array[int32]\n' + + ' f2 len[parent, int32]\n' + + '}', + position: { + start: { line: 353, column: 1, offset: 12705 }, + end: { line: 363, column: 4, offset: 12834 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'inlineCode', value: 'len', position: [Object] }, + { + type: 'text', + value: ' argument can also be a path expression which allows more complex\n' + + 'addressing. Path expressions are similar to C field references, but also allow\n' + + 'referencing parent and sibling elements. A special reference ', + position: [Object] + }, + { type: 'inlineCode', value: 'syscall', position: [Object] }, + { + type: 'text', + value: ' used\n' + + 'in the beginning of the path allows to refer directly to the syscall arguments.\n' + + 'For example:', + position: [Object] + } + ], + position: { + start: { line: 365, column: 1, offset: 12836 }, + end: { line: 369, column: 13, offset: 13154 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 's1 {\n' + + '\ta\tptr[in, s2]\n' + + '\tb\tptr[in, s3]\n' + + '\tc\tarray[int8]\n' + + '}\n' + + '\n' + + 's2 {\n' + + '\td\tarray[int8]\n' + + '}\n' + + '\n' + + 's3 {\n' + + '# This refers to the array c in the parent s1.\n' + + '\te\tlen[s1:c, int32]\n' + + '# This refers to the array d in the sibling s2.\n' + + '\tf\tlen[s1:a:d, int32]\n' + + '# This refers to the array k in the child s4.\n' + + '\tg\tlen[i:j, int32]\n' + + '# This refers to syscall argument l.\n' + + '\th\tlen[syscall:l, int32]\n' + + '\ti\tptr[in, s4]\n' + + '}\n' + + '\n' + + 's4 {\n' + + '\tj\tarray[int8]\n' + + '}\n' + + '\n' + + 'foo(k ptr[in, s1], l ptr[in, array[int8]])', + position: { + start: { line: 371, column: 1, offset: 13156 }, + end: { line: 399, column: 4, offset: 13592 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Proc', position: [Object] } ], + position: { + start: { line: 401, column: 1, offset: 13594 }, + end: { line: 401, column: 8, offset: 13601 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'The ', position: [Object] }, + { type: 'inlineCode', value: 'proc', position: [Object] }, + { + type: 'text', + value: ' type can be used to denote per process integers.\n' + + 'The idea is to have a separate range of values for each executor, so they don’t interfere.', + position: [Object] + } + ], + position: { + start: { line: 403, column: 1, offset: 13603 }, + end: { line: 404, column: 91, offset: 13753 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The simplest example is a port number.\nThe ', + position: [Object] + }, + { + type: 'inlineCode', + value: 'proc[20000, 4, int16be]', + position: [Object] + }, + { + type: 'text', + value: ' type means that we want to generate an ', + position: [Object] + }, + { type: 'inlineCode', value: 'int16be', position: [Object] }, + { + type: 'text', + value: '\ninteger starting from ', + position: [Object] + }, + { type: 'inlineCode', value: '20000', position: [Object] }, + { type: 'text', value: ' and assign ', position: [Object] }, + { type: 'inlineCode', value: '4', position: [Object] }, + { + type: 'text', + value: ' values for each process.\nAs a result the executor number ', + position: [Object] + }, + { type: 'inlineCode', value: 'n', position: [Object] }, + { + type: 'text', + value: ' will get values in the ', + position: [Object] + }, + { + type: 'inlineCode', + value: '[20000 + n * 4, 20000 + (n + 1) * 4)', + position: [Object] + }, + { type: 'text', value: ' range.', position: [Object] } + ], + position: { + start: { line: 406, column: 1, offset: 13755 }, + end: { line: 409, column: 105, offset: 14047 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Integer Constants', position: [Object] } ], + position: { + start: { line: 411, column: 1, offset: 14049 }, + end: { line: 411, column: 21, offset: 14069 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Integer constants can be specified as decimal literals, as ', + position: [Object] + }, + { type: 'inlineCode', value: '0x', position: [Object] }, + { + type: 'text', + value: '-prefixed\nhex literals, as ', + position: [Object] + }, + { type: 'inlineCode', value: "'", position: [Object] }, + { + type: 'text', + value: '-surrounded char literals, or as symbolic constants\n' + + 'extracted from kernel headers or defined by ', + position: [Object] + }, + { type: 'inlineCode', value: 'define', position: [Object] }, + { + type: 'text', + value: ' directives. For example:', + position: [Object] + } + ], + position: { + start: { line: 413, column: 1, offset: 14071 }, + end: { line: 415, column: 78, offset: 14293 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'foo(a const[10], b const[-10])\n' + + 'foo(a const[0xabcd])\n' + + "foo(a int8['a':'z'])\n" + + 'foo(a const[PATH_MAX])\n' + + 'foo(a int32[PATH_MAX])\n' + + 'foo(a ptr[in, array[int8, MY_PATH_MAX]])\n' + + 'define MY_PATH_MAX\tPATH_MAX + 2', + position: { + start: { line: 417, column: 1, offset: 14295 }, + end: { line: 425, column: 4, offset: 14494 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Conditional fields', position: [Object] } ], + position: { + start: { line: 427, column: 1, offset: 14496 }, + end: { line: 427, column: 22, offset: 14517 } + } +} +{ + type: 'heading', + depth: 3, + children: [ { type: 'text', value: 'In structures', position: [Object] } ], + position: { + start: { line: 429, column: 1, offset: 14519 }, + end: { line: 429, column: 18, offset: 14536 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'In syzlang, it’s possible to specify a condition for every struct field that\n' + + 'determines whether the field should be included or omitted:', + position: [Object] + } + ], + position: { + start: { line: 431, column: 1, offset: 14538 }, + end: { line: 432, column: 60, offset: 14674 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'header_fields {\n' + + ' magic const[0xabcd, int16]\n' + + ' haveInteger int8\n' + + '} [packed]\n' + + '\n' + + 'packet {\n' + + ' header header_fields\n' + + ' integer int64 (if[value[header:haveInteger] == 0x1])\n' + + ' body array[int8]\n' + + '} [packed]\n' + + '\n' + + 'some_call(a ptr[in, packet])', + position: { + start: { line: 434, column: 1, offset: 14676 }, + end: { line: 447, column: 4, offset: 14917 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'In this example, the ', + position: [Object] + }, + { type: 'inlineCode', value: 'packet', position: [Object] }, + { + type: 'text', + value: ' structure will include the field ', + position: [Object] + }, + { type: 'inlineCode', value: 'integer', position: [Object] }, + { type: 'text', value: ' only\nif ', position: [Object] }, + { + type: 'inlineCode', + value: 'header.haveInteger == 1', + position: [Object] + }, + { type: 'text', value: '. In memory, ', position: [Object] }, + { type: 'inlineCode', value: 'packet', position: [Object] }, + { + type: 'text', + value: ' will have the following\nlayout:', + position: [Object] + } + ], + position: { + start: { line: 449, column: 1, offset: 14919 }, + end: { line: 451, column: 8, offset: 15078 } + } +} +{ + type: 'table', + align: [ null, null, null, null ], + children: [ { type: 'tableRow', children: [Array], position: [Object] } ], + position: { + start: { line: 453, column: 1, offset: 15080 }, + end: { line: 454, column: 18, offset: 15179 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'That corresponds to e.g. the following program:', + position: [Object] + } + ], + position: { + start: { line: 457, column: 1, offset: 15182 }, + end: { line: 457, column: 48, offset: 15229 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'some_call(&AUTO={{AUTO, 0x1}, @value=0xabcd, []})', + position: { + start: { line: 458, column: 1, offset: 15230 }, + end: { line: 460, column: 4, offset: 15287 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'If ', position: [Object] }, + { + type: 'inlineCode', + value: 'header.haveInteger', + position: [Object] + }, + { type: 'text', value: ' is not ', position: [Object] }, + { type: 'inlineCode', value: '1', position: [Object] }, + { + type: 'text', + value: ', syzkaller will just pretend that the field\n', + position: [Object] + }, + { type: 'inlineCode', value: 'integer', position: [Object] }, + { type: 'text', value: ' does not exist.', position: [Object] } + ], + position: { + start: { line: 462, column: 1, offset: 15289 }, + end: { line: 463, column: 26, offset: 15393 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'some_call(&AUTO={{AUTO, 0x0}, @void, []})', + position: { + start: { line: 464, column: 1, offset: 15394 }, + end: { line: 466, column: 4, offset: 15443 } + } +} +{ + type: 'table', + align: [ null, null, null ], + children: [ { type: 'tableRow', children: [Array], position: [Object] } ], + position: { + start: { line: 468, column: 1, offset: 15445 }, + end: { line: 469, column: 14, offset: 15530 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Every conditional field is assumed to be of variable length and so is the struct\n' + + 'to which this field belongs.', + position: [Object] + } + ], + position: { + start: { line: 471, column: 1, offset: 15532 }, + end: { line: 472, column: 29, offset: 15641 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'When a variable length field appears in the middle of a structure, the structure\n' + + 'must be marked with ', + position: [Object] + }, + { type: 'inlineCode', value: '[packed].', position: [Object] } + ], + position: { + start: { line: 474, column: 1, offset: 15643 }, + end: { line: 475, column: 32, offset: 15755 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Conditions on bitfields are prohibited:', + position: [Object] + } + ], + position: { + start: { line: 477, column: 1, offset: 15757 }, + end: { line: 477, column: 40, offset: 15796 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'struct {\n' + + ' f0 int\n' + + ' f1 int:3 (if[value[f0] == 0x1]) # It will not compile.\n' + + '}', + position: { + start: { line: 478, column: 1, offset: 15797 }, + end: { line: 483, column: 4, offset: 15882 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'But you may reference bitfields in your conditions:', + position: [Object] + } + ], + position: { + start: { line: 485, column: 1, offset: 15884 }, + end: { line: 485, column: 52, offset: 15935 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'struct {\n' + + ' f0 int:1\n' + + ' f1 int:7\n' + + ' f2 int (if[value[f0] == value[f1]])\n' + + '} [packed]', + position: { + start: { line: 486, column: 1, offset: 15936 }, + end: { line: 492, column: 4, offset: 16025 } + } +} +{ + type: 'heading', + depth: 3, + children: [ { type: 'text', value: 'In unions', position: [Object] } ], + position: { + start: { line: 494, column: 1, offset: 16027 }, + end: { line: 494, column: 14, offset: 16040 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Let’s consider the following example.', + position: [Object] + } + ], + position: { + start: { line: 496, column: 1, offset: 16042 }, + end: { line: 496, column: 38, offset: 16079 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'struct {\n' + + ' type int\n' + + ' body alternatives\n' + + '}\n' + + '\n' + + 'alternatives [\n' + + ' int int64 (if[value[struct:type] == 0x1])\n' + + ' arr array[int64, 5] (if[value[struct:type] == 0x2])\n' + + ' default int32\n' + + '] [varlen]\n' + + '\n' + + 'some_call(a ptr[in, struct])', + position: { + start: { line: 498, column: 1, offset: 16081 }, + end: { line: 511, column: 4, offset: 16309 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'In this case, the union option will be selected depending on the value of the\n', + position: [Object] + }, + { type: 'inlineCode', value: 'type', position: [Object] }, + { + type: 'text', + value: ' field. For example, if ', + position: [Object] + }, + { type: 'inlineCode', value: 'type', position: [Object] }, + { type: 'text', value: ' is ', position: [Object] }, + { type: 'inlineCode', value: '0x1', position: [Object] }, + { + type: 'text', + value: ', then it can be either ', + position: [Object] + }, + { type: 'inlineCode', value: 'int', position: [Object] }, + { type: 'text', value: ' or\n', position: [Object] }, + { type: 'inlineCode', value: 'default', position: [Object] }, + { type: 'text', value: ':', position: [Object] } + ], + position: { + start: { line: 513, column: 1, offset: 16311 }, + end: { line: 515, column: 11, offset: 16477 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'some_call(&AUTO={0x1, @int=0x123})\nsome_call(&AUTO={0x1, @default=0x123})', + position: { + start: { line: 516, column: 1, offset: 16478 }, + end: { line: 519, column: 4, offset: 16559 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'If ', position: [Object] }, + { type: 'inlineCode', value: 'type', position: [Object] }, + { type: 'text', value: ' is ', position: [Object] }, + { type: 'inlineCode', value: '0x2', position: [Object] }, + { type: 'text', value: ', it can be either ', position: [Object] }, + { type: 'inlineCode', value: 'arr', position: [Object] }, + { type: 'text', value: ' or ', position: [Object] }, + { type: 'inlineCode', value: 'default', position: [Object] }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 521, column: 1, offset: 16561 }, + end: { line: 521, column: 57, offset: 16617 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'If ', position: [Object] }, + { type: 'inlineCode', value: 'type', position: [Object] }, + { type: 'text', value: ' is neither ', position: [Object] }, + { type: 'inlineCode', value: '0x1', position: [Object] }, + { type: 'text', value: ' nor ', position: [Object] }, + { type: 'inlineCode', value: '0x2', position: [Object] }, + { + type: 'text', + value: ', syzkaller may only select ', + position: [Object] + }, + { type: 'inlineCode', value: 'default', position: [Object] }, + { type: 'text', value: ':', position: [Object] } + ], + position: { + start: { line: 523, column: 1, offset: 16619 }, + end: { line: 523, column: 75, offset: 16693 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'some_call(&AUTO={0x0, @default=0xabcd})', + position: { + start: { line: 524, column: 1, offset: 16694 }, + end: { line: 526, column: 4, offset: 16741 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'To ensure that a union can always be constructed, the last union field ', + position: [Object] + }, + { type: 'strong', children: [Array], position: [Object] }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 528, column: 1, offset: 16743 }, + end: { line: 529, column: 21, offset: 16848 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Thus, the following definition would fail to compile:', + position: [Object] + } + ], + position: { + start: { line: 531, column: 1, offset: 16850 }, + end: { line: 531, column: 54, offset: 16903 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'alternatives [\n' + + ' int int64 (if[value[struct:type] == 0x1])\n' + + ' arr array[int64, 5] (if[value[struct:type] == 0x1])\n' + + '] [varlen]', + position: { + start: { line: 533, column: 1, offset: 16905 }, + end: { line: 538, column: 4, offset: 17036 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'During prog mutation and generation syzkaller will select a random union field\n' + + 'whose condition is satisfied.', + position: [Object] + } + ], + position: { + start: { line: 540, column: 1, offset: 17038 }, + end: { line: 541, column: 30, offset: 17146 } + } +} +{ + type: 'heading', + depth: 3, + children: [ { type: 'text', value: 'Expression syntax', position: [Object] } ], + position: { + start: { line: 544, column: 1, offset: 17149 }, + end: { line: 544, column: 22, offset: 17170 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'Currently, only ', position: [Object] }, + { type: 'inlineCode', value: '==', position: [Object] }, + { type: 'text', value: ', ', position: [Object] }, + { type: 'inlineCode', value: '!=', position: [Object] }, + { type: 'text', value: ' and ', position: [Object] }, + { type: 'inlineCode', value: '&', position: [Object] }, + { + type: 'text', + value: ' operators are supported. However, the\n' + + 'functionality was designed in such a way that adding more operators is easy.\n' + + 'Feel free to file a GitHub issue or write us an email in case it’s needed.', + position: [Object] + } + ], + position: { + start: { line: 546, column: 1, offset: 17172 }, + end: { line: 548, column: 75, offset: 17396 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Expressions are evaluated as ', + position: [Object] + }, + { type: 'inlineCode', value: 'int64', position: [Object] }, + { + type: 'text', + value: ' values. If the final result of an\n' + + 'expression is not 0, it’s assumed to be satisfied.', + position: [Object] + } + ], + position: { + start: { line: 550, column: 1, offset: 17398 }, + end: { line: 551, column: 51, offset: 17519 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'If you want to reference a field’s value, you can do it via\n', + position: [Object] + }, + { + type: 'inlineCode', + value: 'value[path:to:field]', + position: [Object] + }, + { + type: 'text', + value: ', which is similar to the ', + position: [Object] + }, + { type: 'inlineCode', value: 'len[]', position: [Object] }, + { type: 'text', value: ' argument.', position: [Object] } + ], + position: { + start: { line: 553, column: 1, offset: 17521 }, + end: { line: 554, column: 66, offset: 17646 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'sub_struct {\n' + + ' f0 int\n' + + ' # Reference a field in a parent struct.\n' + + ' f1 int (if[value[struct:f2]]) # Same as if[value[struct:f2] != 0]].\n' + + '}\n' + + '\n' + + 'struct {\n' + + ' f2 int\n' + + ' f3 sub_struct\n' + + ' f4 int (if[value[f2] == 0x2]) # Reference a sibling field.\n' + + ' f5 int (if[value[f3:f0] == 0x1]) # Reference a nested field.\n' + + '} [packed]\n' + + '\n' + + 'call(a ptr[in, struct])', + position: { + start: { line: 556, column: 1, offset: 17648 }, + end: { line: 571, column: 4, offset: 17986 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The referenced field must be of integer type and there must be no\n' + + 'conditional fields in the path to it. For example, the following\n' + + 'descriptions will not compile.', + position: [Object] + } + ], + position: { + start: { line: 573, column: 1, offset: 17988 }, + end: { line: 575, column: 31, offset: 18149 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'struct {\n' + + ' f0 int\n' + + ' f1 int (if[value[f0] == 0x1])\n' + + ' f2 int (if[value[f1] == 0x1])\n' + + '}', + position: { + start: { line: 577, column: 1, offset: 18151 }, + end: { line: 583, column: 4, offset: 18242 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'You may also reference constants in expressions:', + position: [Object] + } + ], + position: { + start: { line: 585, column: 1, offset: 18244 }, + end: { line: 585, column: 49, offset: 18292 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'struct {\n' + + ' f0 int\n' + + ' f1 int\n' + + ' f2 int (if[value[f0] & SOME_CONST == OTHER_CONST])\n' + + '}', + position: { + start: { line: 586, column: 1, offset: 18293 }, + end: { line: 592, column: 4, offset: 18382 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Meta', position: [Object] } ], + position: { + start: { line: 594, column: 1, offset: 18384 }, + end: { line: 594, column: 8, offset: 18391 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Description files can also contain ', + position: [Object] + }, + { type: 'inlineCode', value: 'meta', position: [Object] }, + { + type: 'text', + value: ' directives that specify meta-information for the whole file.', + position: [Object] + } + ], + position: { + start: { line: 596, column: 1, offset: 18393 }, + end: { line: 596, column: 103, offset: 18495 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'meta noextract', + position: { + start: { line: 598, column: 1, offset: 18497 }, + end: { line: 600, column: 4, offset: 18519 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'Tells ', position: [Object] }, + { type: 'inlineCode', value: 'make extract', position: [Object] }, + { + type: 'text', + value: ' to not extract constants for this file.\nThough, ', + position: [Object] + }, + { type: 'inlineCode', value: 'syz-extract', position: [Object] }, + { + type: 'text', + value: ' can still be invoked manually on this file.', + position: [Object] + } + ], + position: { + start: { line: 601, column: 1, offset: 18520 }, + end: { line: 602, column: 66, offset: 18646 } + } +} +{ + type: 'code', + lang: null, + meta: null, + value: 'meta arches["arch1", "arch2"]', + position: { + start: { line: 604, column: 1, offset: 18648 }, + end: { line: 606, column: 4, offset: 18685 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Restricts this file only to the given set of architectures.\n', + position: [Object] + }, + { type: 'inlineCode', value: 'make extract', position: [Object] }, + { type: 'text', value: ' and ', position: [Object] }, + { type: 'inlineCode', value: 'make generate', position: [Object] }, + { + type: 'text', + value: ' will not use it on other architectures.', + position: [Object] + } + ], + position: { + start: { line: 607, column: 1, offset: 18686 }, + end: { line: 608, column: 75, offset: 18820 } + } +} +{ + type: 'heading', + depth: 2, + children: [ { type: 'text', value: 'Misc', position: [Object] } ], + position: { + start: { line: 610, column: 1, offset: 18822 }, + end: { line: 610, column: 8, offset: 18829 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'Description files also contain ', + position: [Object] + }, + { type: 'inlineCode', value: 'include', position: [Object] }, + { + type: 'text', + value: ' directives that refer to Linux kernel header files,\n', + position: [Object] + }, + { type: 'inlineCode', value: 'incdir', position: [Object] }, + { + type: 'text', + value: ' directives that refer to custom Linux kernel header directories\nand ', + position: [Object] + }, + { type: 'inlineCode', value: 'define', position: [Object] }, + { + type: 'text', + value: ' directives that define symbolic constant values.', + position: [Object] + } + ], + position: { + start: { line: 612, column: 1, offset: 18831 }, + end: { line: 614, column: 62, offset: 19058 } + } +} +{ + type: 'paragraph', + children: [ + { + type: 'text', + value: 'The syzkaller executor defines some ', + position: [Object] + }, + { + type: 'link', + title: null, + url: './pseudo_syscalls.md', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: '\n' + + 'that can be used as any other syscall in a description file. These pseudo\n' + + 'system calls expand to literal C code and can perform user-defined\n' + + 'custom actions. You can find some examples in\n', + position: [Object] + }, + { + type: 'link', + title: null, + url: '../executor/common_linux.h', + children: [Array], + position: [Object] + }, + { type: 'text', value: '.', position: [Object] } + ], + position: { + start: { line: 616, column: 1, offset: 19060 }, + end: { line: 620, column: 55, offset: 19381 } + } +} +{ + type: 'paragraph', + children: [ + { type: 'text', value: 'Also see ', position: [Object] }, + { + type: 'link', + title: null, + url: 'syscall_descriptions.md#tips', + children: [Array], + position: [Object] + }, + { + type: 'text', + value: ' on writing good descriptions.', + position: [Object] + } + ], + position: { + start: { line: 622, column: 1, offset: 19383 }, + end: { line: 622, column: 76, offset: 19458 } + } +} +info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. diff --git a/pages/tsconfig.json b/pages/tsconfig.json new file mode 100644 index 0000000..d2e3c75 --- /dev/null +++ b/pages/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "astro/tsconfigs/strict", + "compilerOptions": { + "baseUrl": "src", + "jsx": "react-jsx", + "paths": { + "@assets/*": ["assets/*"], + "@config": ["config.ts"], + "@components/*": ["components/*"], + "@content/*": ["content/*"], + "@layouts/*": ["layouts/*"], + "@pages/*": ["pages/*"], + "@styles/*": ["styles/*"], + "@utils/*": ["utils/*"], + }, + }, +} diff --git a/pages/yarn.lock b/pages/yarn.lock new file mode 100644 index 0000000..53ef314 --- /dev/null +++ b/pages/yarn.lock @@ -0,0 +1,6511 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.npmmirror.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@alloc/quick-lru@^5.2.0": + version "5.2.0" + resolved "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@astrojs/check@^0.5.6": + version "0.5.6" + resolved "https://registry.npmmirror.com/@astrojs/check/-/check-0.5.6.tgz#75e58a76cd844dfd5690cfa65aa7fa6f703c37d6" + integrity sha512-i7j5ogoSg/Bu2NV5zVvwCo9R4kGWXWsJDejxpCu9F7iNNlR333u8EwpP4bpeKASDtjOA1rXKo9ogUTEVlIAHqA== + dependencies: + "@astrojs/language-server" "^2.7.6" + chokidar "^3.5.3" + fast-glob "^3.3.1" + kleur "^4.1.5" + yargs "^17.7.2" + +"@astrojs/compiler@^1.5.5": + version "1.8.2" + resolved "https://registry.npmmirror.com/@astrojs/compiler/-/compiler-1.8.2.tgz#f305d5724c45a9932a8ef4e87b2e7227d15d1c2b" + integrity sha512-o/ObKgtMzl8SlpIdzaxFnt7SATKPxu4oIP/1NL+HDJRzxfJcAkOTAb/ZKMRyULbz4q+1t2/DAebs2Z1QairkZw== + +"@astrojs/compiler@^2.0.0", "@astrojs/compiler@^2.4.0", "@astrojs/compiler@^2.5.3": + version "2.6.0" + resolved "https://registry.npmmirror.com/@astrojs/compiler/-/compiler-2.6.0.tgz#0d27c9a60530766b247f0cd1359fbe468d147fe6" + integrity sha512-c74k8iGHL3DzkosSJ0tGcHIEBEiIfBhr7eadSaPyvWlVKaieDVzVs8OW1tnRSQyBsfMc8DZQ4RcN2KAcESD8UQ== + +"@astrojs/internal-helpers@0.2.1": + version "0.2.1" + resolved "https://registry.npmmirror.com/@astrojs/internal-helpers/-/internal-helpers-0.2.1.tgz#4e2e6aabaa9819f17119aa10f413c4d6122c94cf" + integrity sha512-06DD2ZnItMwUnH81LBLco3tWjcZ1lGU9rLCCBaeUCGYe9cI0wKyY2W3kDyoW1I6GmcWgt1fu+D1CTvz+FIKf8A== + +"@astrojs/language-server@^2.7.6": + version "2.7.6" + resolved "https://registry.npmmirror.com/@astrojs/language-server/-/language-server-2.7.6.tgz#c76cf4c44e7d8a230609439b2b917bccbd5329b9" + integrity sha512-NhMSmMAuKBMXnvpfn9eYPR7R6zOasAjRb+ta8L+rCHHuKzUc0lBgAF5M6rx01FJqlpGqeqao13eYt4287Ze49g== + dependencies: + "@astrojs/compiler" "^2.4.0" + "@jridgewell/sourcemap-codec" "^1.4.15" + "@volar/kit" "~2.0.4" + "@volar/language-core" "~2.0.4" + "@volar/language-server" "~2.0.4" + "@volar/language-service" "~2.0.4" + "@volar/typescript" "~2.0.4" + fast-glob "^3.2.12" + volar-service-css "0.0.30" + volar-service-emmet "0.0.30" + volar-service-html "0.0.30" + volar-service-prettier "0.0.30" + volar-service-typescript "0.0.30" + volar-service-typescript-twoslash-queries "0.0.30" + vscode-html-languageservice "^5.1.2" + vscode-uri "^3.0.8" + +"@astrojs/markdown-remark@4.2.1": + version "4.2.1" + resolved "https://registry.npmmirror.com/@astrojs/markdown-remark/-/markdown-remark-4.2.1.tgz#2fba4aba6563914675cca759b635144b6c53e704" + integrity sha512-2RQBIwrq+2qPYtp99bH+eL5hfbK0BoxXla85lHsRpIX/IsGqFrPX6pXI2cbWPihBwGbKCdxS6uZNX2QerZWwpQ== + dependencies: + "@astrojs/prism" "^3.0.0" + github-slugger "^2.0.0" + import-meta-resolve "^4.0.0" + mdast-util-definitions "^6.0.0" + rehype-raw "^7.0.0" + rehype-stringify "^10.0.0" + remark-gfm "^4.0.0" + remark-parse "^11.0.0" + remark-rehype "^11.0.0" + remark-smartypants "^2.0.0" + shikiji "^0.9.18" + unified "^11.0.4" + unist-util-visit "^5.0.0" + vfile "^6.0.1" + +"@astrojs/prism@^3.0.0": + version "3.0.0" + resolved "https://registry.npmmirror.com/@astrojs/prism/-/prism-3.0.0.tgz#c9443e4cbf435acf0b5adc2c627d9789991514e7" + integrity sha512-g61lZupWq1bYbcBnYZqdjndShr/J3l/oFobBKPA3+qMat146zce3nz2kdO4giGbhYDt4gYdhmoBz0vZJ4sIurQ== + dependencies: + prismjs "^1.29.0" + +"@astrojs/react@^3.0.9": + version "3.0.10" + resolved "https://registry.npmmirror.com/@astrojs/react/-/react-3.0.10.tgz#aa47c206eea51fdec619d61559f32f00315a935a" + integrity sha512-uGRIwKMAn7tva2vxXMyoVIGxWFr0rjZ8ZWIlkTG/vIpnAjD2nM8Cz6B8j7yzj176jvl6gZ6xTbTVPm09aeK0Yw== + dependencies: + "@vitejs/plugin-react" "^4.2.0" + ultrahtml "^1.3.0" + +"@astrojs/rss@^4.0.2": + version "4.0.5" + resolved "https://registry.npmmirror.com/@astrojs/rss/-/rss-4.0.5.tgz#226b563cb52e18f90678dc40008e92cc4071549f" + integrity sha512-IyJVL6z09AQtxbgLaAwebT3T5YKe4oTHDesqydJv1KLHw+zEzzMCFuuNsEyxjiqu7df9+DDCpDXLj/WRiEUXvw== + dependencies: + fast-xml-parser "^4.2.7" + kleur "^4.1.5" + +"@astrojs/sitemap@^3.0.5": + version "3.1.1" + resolved "https://registry.npmmirror.com/@astrojs/sitemap/-/sitemap-3.1.1.tgz#2d0eb72d59f167f91067ff493f9b8cdf2be1cf20" + integrity sha512-qPgdBIcDUaea98mTtLfi5z9oXZpzSjEn/kes70/Ex8FOZZ+DIHVKRYOLOtvy8p+FTXr/9oc7BjmIbTYmYLLJVg== + dependencies: + sitemap "^7.1.1" + zod "^3.22.4" + +"@astrojs/tailwind@^5.1.0": + version "5.1.0" + resolved "https://registry.npmmirror.com/@astrojs/tailwind/-/tailwind-5.1.0.tgz#f63d285825f448704dbdccb3430980fee7ba7d26" + integrity sha512-BJoCDKuWhU9FT2qYg+fr6Nfb3qP4ShtyjXGHKA/4mHN94z7BGcmauQK23iy+YH5qWvTnhqkd6mQPQ1yTZTe9Ig== + dependencies: + autoprefixer "^10.4.15" + postcss "^8.4.28" + postcss-load-config "^4.0.2" + +"@astrojs/telemetry@3.0.4": + version "3.0.4" + resolved "https://registry.npmmirror.com/@astrojs/telemetry/-/telemetry-3.0.4.tgz#566257082c87df84fcc136db23e071e1104b13fd" + integrity sha512-A+0c7k/Xy293xx6odsYZuXiaHO0PL+bnDoXOc47sGDF5ffIKdKQGRPFl2NMlCF4L0NqN4Ynbgnaip+pPF0s7pQ== + dependencies: + ci-info "^3.8.0" + debug "^4.3.4" + dlv "^1.1.3" + dset "^3.1.2" + is-docker "^3.0.0" + is-wsl "^3.0.0" + which-pm-runs "^1.1.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + +"@babel/core@^7.23.3", "@babel/core@^7.23.5": + version "7.24.0" + resolved "https://registry.npmmirror.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" + integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.24.0" + "@babel/parser" "^7.24.0" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.23.3", "@babel/generator@^7.23.6": + version "7.23.6" + resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== + dependencies: + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-plugin-utils@^7.22.5": + version "7.24.0" + resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helpers@^7.24.0": + version "7.24.0" + resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" + integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== + dependencies: + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" + +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.3", "@babel/parser@^7.24.0": + version "7.24.0" + resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" + integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== + +"@babel/plugin-syntax-jsx@^7.23.3": + version "7.23.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-jsx-self@^7.23.3": + version "7.23.3" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz#ed3e7dadde046cce761a8e3cf003a13d1a7972d9" + integrity sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-jsx-source@^7.23.3": + version "7.23.3" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz#03527006bdc8775247a78643c51d4e715fe39a3e" + integrity sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-jsx@^7.22.5": + version "7.23.4" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" + integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/types" "^7.23.4" + +"@babel/template@^7.22.15", "@babel/template@^7.24.0": + version "7.24.0" + resolved "https://registry.npmmirror.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" + +"@babel/traverse@^7.23.3", "@babel/traverse@^7.24.0": + version "7.24.0" + resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" + integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.24.0": + version "7.24.0" + resolved "https://registry.npmmirror.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" + integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@commitlint/config-validator@^19.0.3": + version "19.0.3" + resolved "https://registry.npmmirror.com/@commitlint/config-validator/-/config-validator-19.0.3.tgz#052b181a30da6b4fc16dc5230f4589ac95e0bc81" + integrity sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q== + dependencies: + "@commitlint/types" "^19.0.3" + ajv "^8.11.0" + +"@commitlint/execute-rule@^19.0.0": + version "19.0.0" + resolved "https://registry.npmmirror.com/@commitlint/execute-rule/-/execute-rule-19.0.0.tgz#928fb239ae8deec82a6e3b05ec9cfe20afa83856" + integrity sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw== + +"@commitlint/load@>6.1.1": + version "19.0.3" + resolved "https://registry.npmmirror.com/@commitlint/load/-/load-19.0.3.tgz#f05ce3830482e3908799f8e6eb202c8d9713efd8" + integrity sha512-18Tk/ZcDFRKIoKfEcl7kC+bYkEQ055iyKmGsYDoYWpKf6FUvBrP9bIWapuy/MB+kYiltmP9ITiUx6UXtqC9IRw== + dependencies: + "@commitlint/config-validator" "^19.0.3" + "@commitlint/execute-rule" "^19.0.0" + "@commitlint/resolve-extends" "^19.0.3" + "@commitlint/types" "^19.0.3" + chalk "^5.3.0" + cosmiconfig "^8.3.6" + cosmiconfig-typescript-loader "^5.0.0" + lodash.isplainobject "^4.0.6" + lodash.merge "^4.6.2" + lodash.uniq "^4.5.0" + +"@commitlint/resolve-extends@^19.0.3": + version "19.0.3" + resolved "https://registry.npmmirror.com/@commitlint/resolve-extends/-/resolve-extends-19.0.3.tgz#04d0e95f9119983765741df603d36f4457f56c13" + integrity sha512-18BKmta8OC8+Ub+Q3QGM9l27VjQaXobloVXOrMvu8CpEwJYv62vC/t7Ka5kJnsW0tU9q1eMqJFZ/nN9T/cOaIA== + dependencies: + "@commitlint/config-validator" "^19.0.3" + "@commitlint/types" "^19.0.3" + global-directory "^4.0.1" + import-meta-resolve "^4.0.0" + lodash.mergewith "^4.6.2" + resolve-from "^5.0.0" + +"@commitlint/types@^19.0.3": + version "19.0.3" + resolved "https://registry.npmmirror.com/@commitlint/types/-/types-19.0.3.tgz#feff4ecac2b5c359f2a57f9ab094b2ac80ef0266" + integrity sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA== + dependencies: + "@types/conventional-commits-parser" "^5.0.0" + chalk "^5.3.0" + +"@divriots/cheerio@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.npmmirror.com/@divriots/cheerio/-/cheerio-1.0.0-rc.12.tgz#d8561ad12d97be8bad22e681f1e21b1e45165a55" + integrity sha512-kQUVEgMDj0yE7LOdrDhKOC8JkfUzUKsUqp8m9WQDiSxim8Bnga+80opjXaCtHLhO3/W3DIZMow8QXtXUqNS+zA== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.1.0" + encoding-sniffer "^0.0.2" + htmlparser2 "^9.0.0" + parse5 "^7.1.2" + parse5-htmlparser2-tree-adapter "^7.0.0" + parse5-parser-stream "^7.1.2" + undici "^5.22.1" + whatwg-mimetype "^3.0.0" + +"@divriots/jampack@^0.23.2": + version "0.23.3" + resolved "https://registry.npmmirror.com/@divriots/jampack/-/jampack-0.23.3.tgz#00ad42752e1f296100ff9fdad3b2c7066e71e90c" + integrity sha512-6/miLs7PzFh1SJ3VJjySrUYH7qsAm036JQVz/mvCPxH5A6EE2c5ojtha3NtTeYBT+4/l8vzWkQNYA2o2aqbBeA== + dependencies: + "@divriots/cheerio" "1.0.0-rc.12" + "@proload/core" "^0.3.3" + "@swc/core" "^1.3.100" + add "^2.0.6" + browserslist "^4.22.2" + commander "^10.0.1" + critters "^0.0.20" + deepmerge "^4.3.1" + esbuild "^0.19.9" + file-type "^18.7.0" + globby "^13.2.2" + hasha "^5.2.2" + html-minifier-terser "^7.2.0" + kleur "^4.1.5" + lightningcss "^1.22.1" + mini-svg-data-uri "^1.4.4" + ora "^7.0.1" + quicklink "^2.3.0" + sharp "^0.33.0" + svgo "^3.1.0" + table "^6.8.1" + undici "^5.24.0" + unpic "^3.16.0" + +"@emmetio/abbreviation@^2.3.3": + version "2.3.3" + resolved "https://registry.npmmirror.com/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz#ed2b88fe37b972292d6026c7c540aaf887cecb6e" + integrity sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA== + dependencies: + "@emmetio/scanner" "^1.0.4" + +"@emmetio/css-abbreviation@^2.1.8": + version "2.1.8" + resolved "https://registry.npmmirror.com/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz#b785313486eba6cb7eb623ad39378c4e1063dc00" + integrity sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw== + dependencies: + "@emmetio/scanner" "^1.0.4" + +"@emmetio/scanner@^1.0.4": + version "1.0.4" + resolved "https://registry.npmmirror.com/@emmetio/scanner/-/scanner-1.0.4.tgz#e9cdc67194fd91f8b7eb141014be4f2d086c15f1" + integrity sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA== + +"@emnapi/runtime@^0.45.0": + version "0.45.0" + resolved "https://registry.npmmirror.com/@emnapi/runtime/-/runtime-0.45.0.tgz#e754de04c683263f34fd0c7f32adfe718bbe4ddd" + integrity sha512-Txumi3td7J4A/xTTwlssKieHKTGl3j4A1tglBx72auZ49YK7ePY6XZricgIg9mnZT4xPfA+UPCUdnhRuEFDL+w== + dependencies: + tslib "^2.4.0" + +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== + +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== + +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== + +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== + +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== + +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== + +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== + +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== + +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== + +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== + +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== + +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== + +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== + +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== + +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== + +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== + +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== + +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== + +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== + +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== + +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== + +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== + +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.npmmirror.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== + +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.npmmirror.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + +"@img/sharp-darwin-arm64@0.33.2": + version "0.33.2" + resolved "https://registry.npmmirror.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.2.tgz#0a52a82c2169112794dac2c71bfba9e90f7c5bd1" + integrity sha512-itHBs1rPmsmGF9p4qRe++CzCgd+kFYktnsoR1sbIAfsRMrJZau0Tt1AH9KVnufc2/tU02Gf6Ibujx+15qRE03w== + optionalDependencies: + "@img/sharp-libvips-darwin-arm64" "1.0.1" + +"@img/sharp-darwin-x64@0.33.2": + version "0.33.2" + resolved "https://registry.npmmirror.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.2.tgz#982e26bb9d38a81f75915c4032539aed621d1c21" + integrity sha512-/rK/69Rrp9x5kaWBjVN07KixZanRr+W1OiyKdXcbjQD6KbW+obaTeBBtLUAtbBsnlTTmWthw99xqoOS7SsySDg== + optionalDependencies: + "@img/sharp-libvips-darwin-x64" "1.0.1" + +"@img/sharp-libvips-darwin-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.1.tgz#81e83ffc2c497b3100e2f253766490f8fad479cd" + integrity sha512-kQyrSNd6lmBV7O0BUiyu/OEw9yeNGFbQhbxswS1i6rMDwBBSX+e+rPzu3S+MwAiGU3HdLze3PanQ4Xkfemgzcw== + +"@img/sharp-libvips-darwin-x64@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.1.tgz#fc1fcd9d78a178819eefe2c1a1662067a83ab1d6" + integrity sha512-eVU/JYLPVjhhrd8Tk6gosl5pVlvsqiFlt50wotCvdkFGf+mDNBJxMh+bvav+Wt3EBnNZWq8Sp2I7XfSjm8siog== + +"@img/sharp-libvips-linux-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.1.tgz#26eb8c556a9b0db95f343fc444abc3effb67ebcf" + integrity sha512-bnGG+MJjdX70mAQcSLxgeJco11G+MxTz+ebxlz8Y3dxyeb3Nkl7LgLI0mXupoO+u1wRNx/iRj5yHtzA4sde1yA== + +"@img/sharp-libvips-linux-arm@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.1.tgz#2a377b959ff7dd6528deee486c25461296a4fa8b" + integrity sha512-FtdMvR4R99FTsD53IA3LxYGghQ82t3yt0ZQ93WMZ2xV3dqrb0E8zq4VHaTOuLEAuA83oDawHV3fd+BsAPadHIQ== + +"@img/sharp-libvips-linux-s390x@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.1.tgz#af28ac9ba929204467ecdf843330d791e9421e10" + integrity sha512-3+rzfAR1YpMOeA2zZNp+aYEzGNWK4zF3+sdMxuCS3ey9HhDbJ66w6hDSHDMoap32DueFwhhs3vwooAB2MaK4XQ== + +"@img/sharp-libvips-linux-x64@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.1.tgz#4273d182aa51912e655e1214ea47983d7c1f7f8d" + integrity sha512-3NR1mxFsaSgMMzz1bAnnKbSAI+lHXVTqAHgc1bgzjHuXjo4hlscpUxc0vFSAPKI3yuzdzcZOkq7nDPrP2F8Jgw== + +"@img/sharp-libvips-linuxmusl-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.1.tgz#d150c92151cea2e8d120ad168b9c358d09c77ce8" + integrity sha512-5aBRcjHDG/T6jwC3Edl3lP8nl9U2Yo8+oTl5drd1dh9Z1EBfzUKAJFUDTDisDjUwc7N4AjnPGfCA3jl3hY8uDg== + +"@img/sharp-libvips-linuxmusl-x64@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.1.tgz#e297c1a4252c670d93b0f9e51fca40a7a5b6acfd" + integrity sha512-dcT7inI9DBFK6ovfeWRe3hG30h51cBAP5JXlZfx6pzc/Mnf9HFCQDLtYf4MCBjxaaTfjCCjkBxcy3XzOAo5txw== + +"@img/sharp-linux-arm64@0.33.2": + version "0.33.2" + resolved "https://registry.npmmirror.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.2.tgz#af3409f801a9bee1d11d0c7e971dcd6180f80022" + integrity sha512-pz0NNo882vVfqJ0yNInuG9YH71smP4gRSdeL09ukC2YLE6ZyZePAlWKEHgAzJGTiOh8Qkaov6mMIMlEhmLdKew== + optionalDependencies: + "@img/sharp-libvips-linux-arm64" "1.0.1" + +"@img/sharp-linux-arm@0.33.2": + version "0.33.2" + resolved "https://registry.npmmirror.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.2.tgz#181f7466e6ac074042a38bfb679eb82505e17083" + integrity sha512-Fndk/4Zq3vAc4G/qyfXASbS3HBZbKrlnKZLEJzPLrXoJuipFNNwTes71+Ki1hwYW5lch26niRYoZFAtZVf3EGA== + optionalDependencies: + "@img/sharp-libvips-linux-arm" "1.0.1" + +"@img/sharp-linux-s390x@0.33.2": + version "0.33.2" + resolved "https://registry.npmmirror.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.2.tgz#9c171f49211f96fba84410b3e237b301286fa00f" + integrity sha512-MBoInDXDppMfhSzbMmOQtGfloVAflS2rP1qPcUIiITMi36Mm5YR7r0ASND99razjQUpHTzjrU1flO76hKvP5RA== + optionalDependencies: + "@img/sharp-libvips-linux-s390x" "1.0.1" + +"@img/sharp-linux-x64@0.33.2": + version "0.33.2" + resolved "https://registry.npmmirror.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.2.tgz#b956dfc092adc58c2bf0fae2077e6f01a8b2d5d7" + integrity sha512-xUT82H5IbXewKkeF5aiooajoO1tQV4PnKfS/OZtb5DDdxS/FCI/uXTVZ35GQ97RZXsycojz/AJ0asoz6p2/H/A== + optionalDependencies: + "@img/sharp-libvips-linux-x64" "1.0.1" + +"@img/sharp-linuxmusl-arm64@0.33.2": + version "0.33.2" + resolved "https://registry.npmmirror.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.2.tgz#10e0ec5a79d1234c6a71df44c9f3b0bef0bc0f15" + integrity sha512-F+0z8JCu/UnMzg8IYW1TMeiViIWBVg7IWP6nE0p5S5EPQxlLd76c8jYemG21X99UzFwgkRo5yz2DS+zbrnxZeA== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64" "1.0.1" + +"@img/sharp-linuxmusl-x64@0.33.2": + version "0.33.2" + resolved "https://registry.npmmirror.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.2.tgz#29e0030c24aa27c38201b1fc84e3d172899fcbe0" + integrity sha512-+ZLE3SQmSL+Fn1gmSaM8uFusW5Y3J9VOf+wMGNnTtJUMUxFhv+P4UPaYEYT8tqnyYVaOVGgMN/zsOxn9pSsO2A== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64" "1.0.1" + +"@img/sharp-wasm32@0.33.2": + version "0.33.2" + resolved "https://registry.npmmirror.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.2.tgz#38d7c740a22de83a60ad1e6bcfce17462b0d4230" + integrity sha512-fLbTaESVKuQcpm8ffgBD7jLb/CQLcATju/jxtTXR1XCLwbOQt+OL5zPHSDMmp2JZIeq82e18yE0Vv7zh6+6BfQ== + dependencies: + "@emnapi/runtime" "^0.45.0" + +"@img/sharp-win32-ia32@0.33.2": + version "0.33.2" + resolved "https://registry.npmmirror.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.2.tgz#09456314e223f68e5417c283b45c399635c16202" + integrity sha512-okBpql96hIGuZ4lN3+nsAjGeggxKm7hIRu9zyec0lnfB8E7Z6p95BuRZzDDXZOl2e8UmR4RhYt631i7mfmKU8g== + +"@img/sharp-win32-x64@0.33.2": + version "0.33.2" + resolved "https://registry.npmmirror.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.2.tgz#148e96dfd6e68747da41a311b9ee4559bb1b1471" + integrity sha512-E4magOks77DK47FwHUIGH0RYWSgRBfGdK56kIHSVeB9uIS4pPFr4N2kIVsXdQQo4LzOsENKV5KAhRlRL7eMAdg== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.25" + resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@medv/finder@^3.1.0": + version "3.2.0" + resolved "https://registry.npmmirror.com/@medv/finder/-/finder-3.2.0.tgz#dffeb5b04d754ca4e575bbbee89b24935277908e" + integrity sha512-JmU7JIBwyL8RAzefvzALT4sP2M0biGk8i2invAgpQmma/QgfsaqoHIvJ7S0YC8n9hUVG8X3Leul2nGa06PvhbQ== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@pkgr/core@^0.1.0": + version "0.1.1" + resolved "https://registry.npmmirror.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" + integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + +"@proload/core@^0.3.3": + version "0.3.3" + resolved "https://registry.npmmirror.com/@proload/core/-/core-0.3.3.tgz#0a30c5ab69e21254b339813c674a6197a42337c3" + integrity sha512-7dAFWsIK84C90AMl24+N/ProHKm4iw0akcnoKjRvbfHifJZBLhaDsDus1QJmhG12lXj4e/uB/8mB/0aduCW+NQ== + dependencies: + deepmerge "^4.2.2" + escalade "^3.1.1" + +"@resvg/resvg-js-android-arm-eabi@2.6.0": + version "2.6.0" + resolved "https://registry.npmmirror.com/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.0.tgz#fed7723ed5c5f7490762e025ad704bcbceee37b7" + integrity sha512-lJnZ/2P5aMocrFMW7HWhVne5gH82I8xH6zsfH75MYr4+/JOaVcGCTEQ06XFohGMdYRP3v05SSPLPvTM/RHjxfA== + +"@resvg/resvg-js-android-arm64@2.6.0": + version "2.6.0" + resolved "https://registry.npmmirror.com/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.0.tgz#e0531a220ec8954e41039b2483cc3706d30d3635" + integrity sha512-N527f529bjMwYWShZYfBD60dXA4Fux+D695QsHQ93BDYZSHUoOh1CUGUyICevnTxs7VgEl98XpArmUWBZQVMfQ== + +"@resvg/resvg-js-darwin-arm64@2.6.0": + version "2.6.0" + resolved "https://registry.npmmirror.com/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.0.tgz#38f609cd2bd71ce6a065df7a8b8144479b156969" + integrity sha512-MabUKLVayEwlPo0mIqAmMt+qESN8LltCvv5+GLgVga1avpUrkxj/fkU1TKm8kQegutUjbP/B0QuMuUr0uhF8ew== + +"@resvg/resvg-js-darwin-x64@2.6.0": + version "2.6.0" + resolved "https://registry.npmmirror.com/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.0.tgz#5c3f69d0cd68980e7e5cfcabf0db90e85d289559" + integrity sha512-zrFetdnSw/suXjmyxSjfDV7i61hahv6DDG6kM7BYN2yJ3Es5+BZtqYZTcIWogPJedYKmzN1YTMWGd/3f0ubFiA== + +"@resvg/resvg-js-linux-arm-gnueabihf@2.6.0": + version "2.6.0" + resolved "https://registry.npmmirror.com/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.0.tgz#6bcae7d4101e7fea2be0db167eda832cab63e27f" + integrity sha512-sH4gxXt7v7dGwjGyzLwn7SFGvwZG6DQqLaZ11MmzbCwd9Zosy1TnmrMJfn6TJ7RHezmQMgBPi18bl55FZ1AT4A== + +"@resvg/resvg-js-linux-arm64-gnu@2.6.0": + version "2.6.0" + resolved "https://registry.npmmirror.com/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.0.tgz#fb71ea6b9a4b30412fa096fdbf9e8427012b3a99" + integrity sha512-fCyMncqCJtrlANADIduYF4IfnWQ295UKib7DAxFXQhBsM9PLDTpizr0qemZcCNadcwSVHnAIzL4tliZhCM8P6A== + +"@resvg/resvg-js-linux-arm64-musl@2.6.0": + version "2.6.0" + resolved "https://registry.npmmirror.com/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.0.tgz#ec7e85b8b6eea23c0242faa1f1486241f253a190" + integrity sha512-ouLjTgBQHQyxLht4FdMPTvuY8xzJigM9EM2Tlu0llWkN1mKyTQrvYWi6TA6XnKdzDJHy7ZLpWpjZi7F5+Pg+Vg== + +"@resvg/resvg-js-linux-x64-gnu@2.6.0": + version "2.6.0" + resolved "https://registry.npmmirror.com/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.0.tgz#2a9b2a14554b0b1825c2ebc52b5fc2d95a831a63" + integrity sha512-n3zC8DWsvxC1AwxpKFclIPapDFibs5XdIRoV/mcIlxlh0vseW1F49b97F33BtJQRmlntsqqN6GMMqx8byB7B+Q== + +"@resvg/resvg-js-linux-x64-musl@2.6.0": + version "2.6.0" + resolved "https://registry.npmmirror.com/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.0.tgz#42081a8b06ccfa011aee9cc10b2f0fea3a4563ed" + integrity sha512-n4tasK1HOlAxdTEROgYA1aCfsEKk0UOFDNd/AQTTZlTmCbHKXPq+O8npaaKlwXquxlVK8vrkcWbksbiGqbCAcw== + +"@resvg/resvg-js-win32-arm64-msvc@2.6.0": + version "2.6.0" + resolved "https://registry.npmmirror.com/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.0.tgz#3af0d5f7bd9193ac6be8f226b539be6f7576302d" + integrity sha512-X2+EoBJFwDI5LDVb51Sk7ldnVLitMGr9WwU/i21i3fAeAXZb3hM16k67DeTy16OYkT2dk/RfU1tP1wG+rWbz2Q== + +"@resvg/resvg-js-win32-ia32-msvc@2.6.0": + version "2.6.0" + resolved "https://registry.npmmirror.com/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.0.tgz#64af45bfee41cb2bea0b6dd0bdc94175183f2b56" + integrity sha512-L7oevWjQoUgK5W1fCKn0euSVemhDXVhrjtwqpc7MwBKKimYeiOshO1Li1pa8bBt5PESahenhWgdB6lav9O0fEg== + +"@resvg/resvg-js-win32-x64-msvc@2.6.0": + version "2.6.0" + resolved "https://registry.npmmirror.com/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.0.tgz#08431a243c15f002d32e5e628857d19852323274" + integrity sha512-8lJlghb+Unki5AyKgsnFbRJwkEj9r1NpwyuBG8yEJiG1W9eEGl03R3I7bsVa3haof/3J1NlWf0rzSa1G++A2iw== + +"@resvg/resvg-js@^2.6.0": + version "2.6.0" + resolved "https://registry.npmmirror.com/@resvg/resvg-js/-/resvg-js-2.6.0.tgz#d811100796dda1f37a516c747dab3bbc9b24e5e4" + integrity sha512-Tf3YpbBKcQn991KKcw/vg7vZf98v01seSv6CVxZBbRkL/xyjnoYB6KgrFL6zskT1A4dWC/vg77KyNOW+ePaNlA== + optionalDependencies: + "@resvg/resvg-js-android-arm-eabi" "2.6.0" + "@resvg/resvg-js-android-arm64" "2.6.0" + "@resvg/resvg-js-darwin-arm64" "2.6.0" + "@resvg/resvg-js-darwin-x64" "2.6.0" + "@resvg/resvg-js-linux-arm-gnueabihf" "2.6.0" + "@resvg/resvg-js-linux-arm64-gnu" "2.6.0" + "@resvg/resvg-js-linux-arm64-musl" "2.6.0" + "@resvg/resvg-js-linux-x64-gnu" "2.6.0" + "@resvg/resvg-js-linux-x64-musl" "2.6.0" + "@resvg/resvg-js-win32-arm64-msvc" "2.6.0" + "@resvg/resvg-js-win32-ia32-msvc" "2.6.0" + "@resvg/resvg-js-win32-x64-msvc" "2.6.0" + +"@rollup/rollup-android-arm-eabi@4.12.0": + version "4.12.0" + resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz#38c3abd1955a3c21d492af6b1a1dca4bb1d894d6" + integrity sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w== + +"@rollup/rollup-android-arm64@4.12.0": + version "4.12.0" + resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz#3822e929f415627609e53b11cec9a4be806de0e2" + integrity sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ== + +"@rollup/rollup-darwin-arm64@4.12.0": + version "4.12.0" + resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz#6c082de71f481f57df6cfa3701ab2a7afde96f69" + integrity sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ== + +"@rollup/rollup-darwin-x64@4.12.0": + version "4.12.0" + resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz#c34ca0d31f3c46a22c9afa0e944403eea0edcfd8" + integrity sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg== + +"@rollup/rollup-linux-arm-gnueabihf@4.12.0": + version "4.12.0" + resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz#48e899c1e438629c072889b824a98787a7c2362d" + integrity sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA== + +"@rollup/rollup-linux-arm64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz#788c2698a119dc229062d40da6ada8a090a73a68" + integrity sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA== + +"@rollup/rollup-linux-arm64-musl@4.12.0": + version "4.12.0" + resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz#3882a4e3a564af9e55804beeb67076857b035ab7" + integrity sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ== + +"@rollup/rollup-linux-riscv64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz#0c6ad792e1195c12bfae634425a3d2aa0fe93ab7" + integrity sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw== + +"@rollup/rollup-linux-x64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz#9d62485ea0f18d8674033b57aa14fb758f6ec6e3" + integrity sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA== + +"@rollup/rollup-linux-x64-musl@4.12.0": + version "4.12.0" + resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz#50e8167e28b33c977c1f813def2b2074d1435e05" + integrity sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw== + +"@rollup/rollup-win32-arm64-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz#68d233272a2004429124494121a42c4aebdc5b8e" + integrity sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw== + +"@rollup/rollup-win32-ia32-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz#366ca62221d1689e3b55a03f4ae12ae9ba595d40" + integrity sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA== + +"@rollup/rollup-win32-x64-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz#9ffdf9ed133a7464f4ae187eb9e1294413fab235" + integrity sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg== + +"@shuding/opentype.js@1.4.0-beta.0": + version "1.4.0-beta.0" + resolved "https://registry.npmmirror.com/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz#5d1e7e9e056f546aad41df1c5043f8f85d39e24b" + integrity sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA== + dependencies: + fflate "^0.7.3" + string.prototype.codepointat "^0.2.1" + +"@swc/core-darwin-arm64@1.4.2": + version "1.4.2" + resolved "https://registry.npmmirror.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.2.tgz#3b5677c5b9c5a7a91d953b96cd603c94064e2835" + integrity sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw== + +"@swc/core-darwin-x64@1.4.2": + version "1.4.2" + resolved "https://registry.npmmirror.com/@swc/core-darwin-x64/-/core-darwin-x64-1.4.2.tgz#bbc8bbf420389b12541151255a50f319cc17ef96" + integrity sha512-TYD28+dCQKeuxxcy7gLJUCFLqrwDZnHtC2z7cdeGfZpbI2mbfppfTf2wUPzqZk3gEC96zHd4Yr37V3Tvzar+lQ== + +"@swc/core-linux-arm-gnueabihf@1.4.2": + version "1.4.2" + resolved "https://registry.npmmirror.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.2.tgz#aa9a18f130820717df08c9dd882043fc47e8d35a" + integrity sha512-Eyqipf7ZPGj0vplKHo8JUOoU1un2sg5PjJMpEesX0k+6HKE2T8pdyeyXODN0YTFqzndSa/J43EEPXm+rHAsLFQ== + +"@swc/core-linux-arm64-gnu@1.4.2": + version "1.4.2" + resolved "https://registry.npmmirror.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.2.tgz#5ef1de0ca7cc3a034aa3a1c3c1794b78e6ca207e" + integrity sha512-wZn02DH8VYPv3FC0ub4my52Rttsus/rFw+UUfzdb3tHMHXB66LqN+rR0ssIOZrH6K+VLN6qpTw9VizjyoH0BxA== + +"@swc/core-linux-arm64-musl@1.4.2": + version "1.4.2" + resolved "https://registry.npmmirror.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.2.tgz#5dfd2a8c0483770a307de0ccb6019a082ff0d902" + integrity sha512-3G0D5z9hUj9bXNcwmA1eGiFTwe5rWkuL3DsoviTj73TKLpk7u64ND0XjEfO0huVv4vVu9H1jodrKb7nvln/dlw== + +"@swc/core-linux-x64-gnu@1.4.2": + version "1.4.2" + resolved "https://registry.npmmirror.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.2.tgz#314aa76b7c1208e315e3156ab57b7188fb605bc2" + integrity sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg== + +"@swc/core-linux-x64-musl@1.4.2": + version "1.4.2" + resolved "https://registry.npmmirror.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.2.tgz#b2b226657f6a8d48f561cb3dbe2d414cfbafe467" + integrity sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ== + +"@swc/core-win32-arm64-msvc@1.4.2": + version "1.4.2" + resolved "https://registry.npmmirror.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.2.tgz#582f79fa328ce0f426ab8313b3d881e7315fab2f" + integrity sha512-HlVIiLMQkzthAdqMslQhDkoXJ5+AOLUSTV6fm6shFKZKqc/9cJvr4S8UveNERL9zUficA36yM3bbfo36McwnvQ== + +"@swc/core-win32-ia32-msvc@1.4.2": + version "1.4.2" + resolved "https://registry.npmmirror.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.2.tgz#15c8289e1c18857f79b9b888100ab1f871bf58f6" + integrity sha512-WCF8faPGjCl4oIgugkp+kL9nl3nUATlzKXCEGFowMEmVVCFM0GsqlmGdPp1pjZoWc9tpYanoXQDnp5IvlDSLhA== + +"@swc/core-win32-x64-msvc@1.4.2": + version "1.4.2" + resolved "https://registry.npmmirror.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.2.tgz#c999ca7b68124d058b40a1431cdd6f56779670d5" + integrity sha512-oV71rwiSpA5xre2C5570BhCsg1HF97SNLsZ/12xv7zayGzqr3yvFALFJN8tHKpqUdCB4FGPjoP3JFdV3i+1wUw== + +"@swc/core@^1.3.100": + version "1.4.2" + resolved "https://registry.npmmirror.com/@swc/core/-/core-1.4.2.tgz#310b0d5e93e47ca72f54150c8f9efcb434c39b17" + integrity sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg== + dependencies: + "@swc/counter" "^0.1.2" + "@swc/types" "^0.1.5" + optionalDependencies: + "@swc/core-darwin-arm64" "1.4.2" + "@swc/core-darwin-x64" "1.4.2" + "@swc/core-linux-arm-gnueabihf" "1.4.2" + "@swc/core-linux-arm64-gnu" "1.4.2" + "@swc/core-linux-arm64-musl" "1.4.2" + "@swc/core-linux-x64-gnu" "1.4.2" + "@swc/core-linux-x64-musl" "1.4.2" + "@swc/core-win32-arm64-msvc" "1.4.2" + "@swc/core-win32-ia32-msvc" "1.4.2" + "@swc/core-win32-x64-msvc" "1.4.2" + +"@swc/counter@^0.1.2": + version "0.1.3" + resolved "https://registry.npmmirror.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/types@^0.1.5": + version "0.1.5" + resolved "https://registry.npmmirror.com/@swc/types/-/types-0.1.5.tgz#043b731d4f56a79b4897a3de1af35e75d56bc63a" + integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw== + +"@tailwindcss/typography@^0.5.10": + version "0.5.10" + resolved "https://registry.npmmirror.com/@tailwindcss/typography/-/typography-0.5.10.tgz#2abde4c6d5c797ab49cf47610830a301de4c1e0a" + integrity sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw== + dependencies: + lodash.castarray "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.merge "^4.6.2" + postcss-selector-parser "6.0.10" + +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.npmmirror.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@types/babel__core@^7.20.4", "@types/babel__core@^7.20.5": + version "7.20.5" + resolved "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*": + version "7.20.5" + resolved "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + dependencies: + "@babel/types" "^7.20.7" + +"@types/conventional-commits-parser@^5.0.0": + version "5.0.0" + resolved "https://registry.npmmirror.com/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#8c9d23e0b415b24b91626d07017303755d542dc8" + integrity sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ== + dependencies: + "@types/node" "*" + +"@types/debug@^4.0.0": + version "4.1.12" + resolved "https://registry.npmmirror.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/estree@1.0.5", "@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/github-slugger@^1.3.0": + version "1.3.0" + resolved "https://registry.npmmirror.com/@types/github-slugger/-/github-slugger-1.3.0.tgz#16ab393b30d8ae2a111ac748a015ac05a1fc5524" + integrity sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g== + +"@types/hast@^3.0.0": + version "3.0.4" + resolved "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== + dependencies: + "@types/unist" "*" + +"@types/mdast@^4.0.0": + version "4.0.3" + resolved "https://registry.npmmirror.com/@types/mdast/-/mdast-4.0.3.tgz#1e011ff013566e919a4232d1701ad30d70cab333" + integrity sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg== + dependencies: + "@types/unist" "*" + +"@types/ms@*": + version "0.7.34" + resolved "https://registry.npmmirror.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +"@types/nlcst@^1.0.0": + version "1.0.4" + resolved "https://registry.npmmirror.com/@types/nlcst/-/nlcst-1.0.4.tgz#3b8a9c279a2367602512588a0ba6a0e93634ee3e" + integrity sha512-ABoYdNQ/kBSsLvZAekMhIPMQ3YUZvavStpKYs7BjLLuKVmIMA0LUgZ7b54zzuWJRbHF80v1cNf4r90Vd6eMQDg== + dependencies: + "@types/unist" "^2" + +"@types/node@*": + version "20.11.24" + resolved "https://registry.npmmirror.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792" + integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long== + dependencies: + undici-types "~5.26.4" + +"@types/node@^17.0.5": + version "17.0.45" + resolved "https://registry.npmmirror.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/prop-types@*": + version "15.7.11" + resolved "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" + integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== + +"@types/react@^18.2.48": + version "18.2.61" + resolved "https://registry.npmmirror.com/@types/react/-/react-18.2.61.tgz#5607308495037436779939ec0348a5816c08799d" + integrity sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/sax@^1.2.1": + version "1.2.7" + resolved "https://registry.npmmirror.com/@types/sax/-/sax-1.2.7.tgz#ba5fe7df9aa9c89b6dff7688a19023dd2963091d" + integrity sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A== + dependencies: + "@types/node" "*" + +"@types/scheduler@*": + version "0.16.8" + resolved "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" + integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== + +"@types/ungap__structured-clone@^0.3.0": + version "0.3.3" + resolved "https://registry.npmmirror.com/@types/ungap__structured-clone/-/ungap__structured-clone-0.3.3.tgz#cf7e1252f18f5ee39291a8f52fa83c31b0102fc6" + integrity sha512-RNmhIPwoip6K/zZOv3ypksTAqaqLEXvlNSXKyrC93xMSOAHZCR7PifW6xKZCwkbbnbM9dwB9X56PPoNTlNwEqw== + +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.2" + resolved "https://registry.npmmirror.com/@types/unist/-/unist-3.0.2.tgz#6dd61e43ef60b34086287f83683a5c1b2dc53d20" + integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ== + +"@types/unist@^2", "@types/unist@^2.0.0": + version "2.0.10" + resolved "https://registry.npmmirror.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" + integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== + +"@typescript-eslint/parser@^6.19.0": + version "6.21.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + +"@typescript-eslint/scope-manager@^5.0.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/types@5.62.0", "@typescript-eslint/types@^5.0.0", "@typescript-eslint/types@^5.25.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== + +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== + dependencies: + "@typescript-eslint/types" "6.21.0" + eslint-visitor-keys "^3.4.1" + +"@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +"@vitejs/plugin-react@^4.2.0": + version "4.2.1" + resolved "https://registry.npmmirror.com/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz#744d8e4fcb120fc3dbaa471dadd3483f5a304bb9" + integrity sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ== + dependencies: + "@babel/core" "^7.23.5" + "@babel/plugin-transform-react-jsx-self" "^7.23.3" + "@babel/plugin-transform-react-jsx-source" "^7.23.3" + "@types/babel__core" "^7.20.5" + react-refresh "^0.14.0" + +"@volar/kit@~2.0.4": + version "2.0.4" + resolved "https://registry.npmmirror.com/@volar/kit/-/kit-2.0.4.tgz#213d163d60639bbd2dfa9da162f3330ae52d02df" + integrity sha512-USRx/o0jKz7o8+lEKWMxWqbqvC46XFrf3IE6CZBYzRo9kM7RERQLwUYaoT2bOcHt5DQWublpnTgdgHMm37Gysg== + dependencies: + "@volar/language-service" "2.0.4" + "@volar/typescript" "2.0.4" + typesafe-path "^0.2.2" + vscode-languageserver-textdocument "^1.0.11" + vscode-uri "^3.0.8" + +"@volar/language-core@2.0.4", "@volar/language-core@~2.0.4": + version "2.0.4" + resolved "https://registry.npmmirror.com/@volar/language-core/-/language-core-2.0.4.tgz#5a037428f4520d04179ce26c721d82e90bf5aedd" + integrity sha512-VhC8i03P0x9LKGLTBi81xNTNWm40yxQ/Iba8IpH+LFr+Yb7c/D7fF90Cvf31MzPDM4G5rjIOlCfs+eQKPBkwQw== + dependencies: + "@volar/source-map" "2.0.4" + +"@volar/language-server@~2.0.4": + version "2.0.4" + resolved "https://registry.npmmirror.com/@volar/language-server/-/language-server-2.0.4.tgz#bafc1cdd1d6e65f1003a49ddffeb3ac2b5a560c8" + integrity sha512-VnljhooQjT6RhmvwwJK9+3YYs2ovFmav4IVNHiQgnTMfiOiyABzcghwvJrJrI39rJDI6LNOWF7BYUJq7K07BKQ== + dependencies: + "@volar/language-core" "2.0.4" + "@volar/language-service" "2.0.4" + "@volar/snapshot-document" "2.0.4" + "@volar/typescript" "2.0.4" + "@vscode/l10n" "^0.0.16" + path-browserify "^1.0.1" + request-light "^0.7.0" + vscode-languageserver "^9.0.1" + vscode-languageserver-protocol "^3.17.5" + vscode-languageserver-textdocument "^1.0.11" + vscode-uri "^3.0.8" + +"@volar/language-service@2.0.4", "@volar/language-service@~2.0.4": + version "2.0.4" + resolved "https://registry.npmmirror.com/@volar/language-service/-/language-service-2.0.4.tgz#15a67537f2fdde69c45abc687ce7e9d660abef17" + integrity sha512-DoanyU9I9Nl85lUytDl8jgyk+nrUDR5CFNVMrxWXGXclP4WTqBayBgSFAeF1L/5AwP3MywmWoK4GLAEVvl8D+Q== + dependencies: + "@volar/language-core" "2.0.4" + vscode-languageserver-protocol "^3.17.5" + vscode-languageserver-textdocument "^1.0.11" + vscode-uri "^3.0.8" + +"@volar/snapshot-document@2.0.4": + version "2.0.4" + resolved "https://registry.npmmirror.com/@volar/snapshot-document/-/snapshot-document-2.0.4.tgz#b15ec44e6ba826d6944866d001e787d85dcb9163" + integrity sha512-YzgdmvpdRFxiBFCOVWga67naAtbPtKmPaFtGnmxWx+KXrjGkpUXT/2tzeKn5FLdtoYV+DRTdpMdP/45ArnVwZQ== + dependencies: + vscode-languageserver-protocol "^3.17.5" + vscode-languageserver-textdocument "^1.0.11" + +"@volar/source-map@2.0.4": + version "2.0.4" + resolved "https://registry.npmmirror.com/@volar/source-map/-/source-map-2.0.4.tgz#20aaa722ec8dccc4ac44fdfaf6b003dff0293086" + integrity sha512-BbxUinEMoJZqrHsSj1aBa0boCBnN3BoXnf7j9IBwjxosxGXOhCvqmH2L9raJemadaKjeVR8ZQLhV7AOhyoHt/Q== + dependencies: + muggle-string "^0.4.0" + +"@volar/typescript@2.0.4", "@volar/typescript@~2.0.4": + version "2.0.4" + resolved "https://registry.npmmirror.com/@volar/typescript/-/typescript-2.0.4.tgz#dcc851bec2737ae69e0ecb8f43c9302172fc9ffc" + integrity sha512-KF7yh7GIo4iWuAQOKf/ONeFHdQA+wFriitW8LtGZB4iOOT6MdlRlYNsRL8do7XxmXvsBKcs4jTMtGn+uZRwlWg== + dependencies: + "@volar/language-core" "2.0.4" + path-browserify "^1.0.1" + +"@vscode/emmet-helper@^2.9.2": + version "2.9.2" + resolved "https://registry.npmmirror.com/@vscode/emmet-helper/-/emmet-helper-2.9.2.tgz#cd5d1e64e7138ad76300e8cba5fd84f1c03e13ee" + integrity sha512-MaGuyW+fa13q3aYsluKqclmh62Hgp0BpKIqS66fCxfOaBcVQ1OnMQxRRgQUYnCkxFISAQlkJ0qWWPyXjro1Qrg== + dependencies: + emmet "^2.4.3" + jsonc-parser "^2.3.0" + vscode-languageserver-textdocument "^1.0.1" + vscode-languageserver-types "^3.15.1" + vscode-uri "^2.1.2" + +"@vscode/l10n@^0.0.16": + version "0.0.16" + resolved "https://registry.npmmirror.com/@vscode/l10n/-/l10n-0.0.16.tgz#f075db346d0b08419a12540171b230bd803c42be" + integrity sha512-JT5CvrIYYCrmB+dCana8sUqJEcGB1ZDXNLMQ2+42bW995WmNoenijWMUdZfwmuQUTQcEVVIa2OecZzTYWUW9Cg== + +"@vscode/l10n@^0.0.18": + version "0.0.18" + resolved "https://registry.npmmirror.com/@vscode/l10n/-/l10n-0.0.18.tgz#916d3a5e960dbab47c1c56f58a7cb5087b135c95" + integrity sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.11.2, acorn@^8.8.2, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +add@^2.0.6: + version "2.0.6" + resolved "https://registry.npmmirror.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235" + integrity sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1, ajv@^8.11.0: + version "8.12.0" + resolved "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-align@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-escapes@^6.2.0: + version "6.2.0" + resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" + integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== + dependencies: + type-fest "^3.0.0" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: + version "6.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.0, arg@^5.0.2: + version "5.0.2" + resolved "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^5.3.0: + version "5.3.0" + resolved "https://registry.npmmirror.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +array-iterate@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/array-iterate/-/array-iterate-2.0.1.tgz#6efd43f8295b3fee06251d3d62ead4bd9805dd24" + integrity sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +astro-eslint-parser@^0.16.2, astro-eslint-parser@^0.16.3: + version "0.16.3" + resolved "https://registry.npmmirror.com/astro-eslint-parser/-/astro-eslint-parser-0.16.3.tgz#faf9ca45db0cbf29e9152d7f6cfb849c170255f3" + integrity sha512-CGaBseNtunAV2DCpwBXqTKq8+9Tw65XZetMaC0FsMoZuLj0gxNIkbCf2QyKYScVrNOU7/ayfNdVw8ZCSHBiqCg== + dependencies: + "@astrojs/compiler" "^2.0.0" + "@typescript-eslint/scope-manager" "^5.0.0" + "@typescript-eslint/types" "^5.0.0" + astrojs-compiler-sync "^0.3.0" + debug "^4.3.4" + entities "^4.5.0" + eslint-visitor-keys "^3.0.0" + espree "^9.0.0" + semver "^7.3.8" + +astro@^4.2.1: + version "4.4.9" + resolved "https://registry.npmmirror.com/astro/-/astro-4.4.9.tgz#7450df810dd8b5ba8a7cba1c491b5fe4f9524ce5" + integrity sha512-FTWhzKjao7rHHiF/CqPqPS18AFad+fmUcYUFhWWIsYETHcc9g0IIIiv6cHXUE7g6mEZf7ycAa+WdboeEHUhraQ== + dependencies: + "@astrojs/compiler" "^2.5.3" + "@astrojs/internal-helpers" "0.2.1" + "@astrojs/markdown-remark" "4.2.1" + "@astrojs/telemetry" "3.0.4" + "@babel/core" "^7.23.3" + "@babel/generator" "^7.23.3" + "@babel/parser" "^7.23.3" + "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/traverse" "^7.23.3" + "@babel/types" "^7.23.3" + "@medv/finder" "^3.1.0" + "@types/babel__core" "^7.20.4" + acorn "^8.11.2" + aria-query "^5.3.0" + axobject-query "^4.0.0" + boxen "^7.1.1" + chokidar "^3.5.3" + ci-info "^4.0.0" + clsx "^2.0.0" + common-ancestor-path "^1.0.1" + cookie "^0.6.0" + cssesc "^3.0.0" + debug "^4.3.4" + deterministic-object-hash "^2.0.1" + devalue "^4.3.2" + diff "^5.1.0" + dlv "^1.1.3" + dset "^3.1.3" + es-module-lexer "^1.4.1" + esbuild "^0.19.6" + estree-walker "^3.0.3" + execa "^8.0.1" + fast-glob "^3.3.2" + flattie "^1.1.0" + github-slugger "^2.0.0" + gray-matter "^4.0.3" + html-escaper "^3.0.3" + http-cache-semantics "^4.1.1" + js-yaml "^4.1.0" + kleur "^4.1.4" + magic-string "^0.30.3" + mdast-util-to-hast "13.0.2" + mime "^3.0.0" + ora "^7.0.1" + p-limit "^5.0.0" + p-queue "^8.0.1" + path-to-regexp "^6.2.1" + preferred-pm "^3.1.2" + prompts "^2.4.2" + rehype "^13.0.1" + resolve "^1.22.4" + semver "^7.5.4" + shikiji "^0.9.19" + shikiji-core "^0.9.19" + string-width "^7.0.0" + strip-ansi "^7.1.0" + tsconfck "^3.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.1" + vite "^5.1.4" + vitefu "^0.2.5" + which-pm "^2.1.1" + yargs-parser "^21.1.1" + zod "^3.22.4" + optionalDependencies: + sharp "^0.32.6" + +astrojs-compiler-sync@^0.3.0: + version "0.3.5" + resolved "https://registry.npmmirror.com/astrojs-compiler-sync/-/astrojs-compiler-sync-0.3.5.tgz#bdfeb511b30c908104375cdfe04545f56c8ade3f" + integrity sha512-y420rhIIJ2HHDkYeqKArBHSdJNIIGMztLH90KGIX3zjcJyt/cr9Z2wYA8CP5J1w6KE7xqMh0DAkhfjhNDpQb2Q== + dependencies: + synckit "^0.9.0" + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +autoprefixer@^10.4.15: + version "10.4.18" + resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.18.tgz#fcb171a3b017be7cb5d8b7a825f5aacbf2045163" + integrity sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g== + dependencies: + browserslist "^4.23.0" + caniuse-lite "^1.0.30001591" + fraction.js "^4.3.7" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +axobject-query@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/axobject-query/-/axobject-query-4.0.0.tgz#04a4c90dce33cc5d606c76d6216e3b250ff70dab" + integrity sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw== + dependencies: + dequal "^2.0.3" + +b4a@^1.6.4: + version "1.6.6" + resolved "https://registry.npmmirror.com/b4a/-/b4a-1.6.6.tgz#a4cc349a3851987c3c4ac2d7785c18744f6da9ba" + integrity sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg== + +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +bare-events@^2.0.0, bare-events@^2.2.0: + version "2.2.1" + resolved "https://registry.npmmirror.com/bare-events/-/bare-events-2.2.1.tgz#7b6d421f26a7a755e20bf580b727c84b807964c1" + integrity sha512-9GYPpsPFvrWBkelIhOhTWtkeZxVxZOdb3VnFTCzlOo3OjvmTvzLoZFUT8kNFACx0vJej6QPney1Cf9BvzCNE/A== + +bare-fs@^2.1.1: + version "2.2.1" + resolved "https://registry.npmmirror.com/bare-fs/-/bare-fs-2.2.1.tgz#c1985d8d3e07a178956b072d3af67cb8c1fa9391" + integrity sha512-+CjmZANQDFZWy4PGbVdmALIwmt33aJg8qTkVjClU6X4WmZkTPBDxRHiBn7fpqEWEfF3AC2io++erpViAIQbSjg== + dependencies: + bare-events "^2.0.0" + bare-os "^2.0.0" + bare-path "^2.0.0" + streamx "^2.13.0" + +bare-os@^2.0.0, bare-os@^2.1.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/bare-os/-/bare-os-2.2.0.tgz#24364692984d0bd507621754781b31d7872736b2" + integrity sha512-hD0rOPfYWOMpVirTACt4/nK8mC55La12K5fY1ij8HAdfQakD62M+H4o4tpfKzVGLgRDTuk3vjA4GqGXXCeFbag== + +bare-path@^2.0.0, bare-path@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/bare-path/-/bare-path-2.1.0.tgz#830f17fd39842813ca77d211ebbabe238a88cb4c" + integrity sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw== + dependencies: + bare-os "^2.1.0" + +base-64@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/base-64/-/base-64-1.0.0.tgz#09d0f2084e32a3fd08c2475b973788eee6ae8f4a" + integrity sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg== + +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.npmmirror.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bl@^5.0.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" + integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== + dependencies: + buffer "^6.0.3" + inherits "^2.0.4" + readable-stream "^3.4.0" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +boxen@^7.1.1: + version "7.1.1" + resolved "https://registry.npmmirror.com/boxen/-/boxen-7.1.1.tgz#f9ba525413c2fec9cdb88987d835c4f7cad9c8f4" + integrity sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog== + dependencies: + ansi-align "^3.0.1" + camelcase "^7.0.1" + chalk "^5.2.0" + cli-boxes "^3.0.0" + string-width "^5.1.2" + type-fest "^2.13.0" + widest-line "^4.0.1" + wrap-ansi "^8.1.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.22.2, browserslist@^4.23.0: + version "4.23.0" + resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + dependencies: + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +cachedir@2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" + integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== + +camelize@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" + integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== + +caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001591: + version "1.0.30001593" + resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001593.tgz#7cda1d9e5b0cad6ebab4133b1f239d4ea44fe659" + integrity sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ== + +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + +chalk@5.3.0, chalk@^5.0.0, chalk@^5.2.0, chalk@^5.3.0: + version "5.3.0" + resolved "https://registry.npmmirror.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + +chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +ci-info@^3.8.0: + version "3.9.0" + resolved "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +ci-info@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/ci-info/-/ci-info-4.0.0.tgz#65466f8b280fc019b9f50a5388115d17a63a44f2" + integrity sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg== + +clean-css@~5.3.2: + version "5.3.3" + resolved "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" + integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== + dependencies: + source-map "~0.6.0" + +cli-boxes@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" + integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== + dependencies: + restore-cursor "^4.0.0" + +cli-spinners@^2.5.0, cli-spinners@^2.9.0: + version "2.9.2" + resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-truncate@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" + integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== + dependencies: + slice-ansi "^5.0.0" + string-width "^7.0.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +clsx@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb" + integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.npmmirror.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + +commander@11.1.0: + version "11.1.0" + resolved "https://registry.npmmirror.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + +commander@^10.0.0, commander@^10.0.1: + version "10.0.1" + resolved "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commitizen@^4.0.3, commitizen@^4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/commitizen/-/commitizen-4.3.0.tgz#0d056c542a2d2b1f9b9aba981aa32575b2849924" + integrity sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw== + dependencies: + cachedir "2.3.0" + cz-conventional-changelog "3.3.0" + dedent "0.7.0" + detect-indent "6.1.0" + find-node-modules "^2.1.2" + find-root "1.1.0" + fs-extra "9.1.0" + glob "7.2.3" + inquirer "8.2.5" + is-utf8 "^0.2.1" + lodash "4.17.21" + minimist "1.2.7" + strip-bom "4.0.0" + strip-json-comments "3.1.1" + +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +conventional-commit-types@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" + integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + +cosmiconfig-typescript-loader@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz#0d3becfe022a871f7275ceb2397d692e06045dc8" + integrity sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA== + dependencies: + jiti "^1.19.1" + +cosmiconfig@^8.3.6: + version "8.3.6" + resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +critters@^0.0.20: + version "0.0.20" + resolved "https://registry.npmmirror.com/critters/-/critters-0.0.20.tgz#08ddb961550ab7b3a59370537e4f01df208f7646" + integrity sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw== + dependencies: + chalk "^4.1.0" + css-select "^5.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.2" + htmlparser2 "^8.0.2" + postcss "^8.4.23" + pretty-bytes "^5.3.0" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-background-parser@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/css-background-parser/-/css-background-parser-0.1.0.tgz#48a17f7fe6d4d4f1bca3177ddf16c5617950741b" + integrity sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA== + +css-box-shadow@1.0.0-3: + version "1.0.0-3" + resolved "https://registry.npmmirror.com/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz#9eaeb7140947bf5d649fc49a19e4bbaa5f602713" + integrity sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg== + +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-to-react-native@^3.0.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32" + integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^4.0.2" + +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.npmmirror.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.npmmirror.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== + dependencies: + css-tree "~2.2.0" + +csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +cz-conventional-changelog@3.3.0, cz-conventional-changelog@^3.3.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2" + integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw== + dependencies: + chalk "^2.4.1" + commitizen "^4.0.3" + conventional-commit-types "^3.0.0" + lodash.map "^4.5.1" + longest "^2.0.1" + word-wrap "^1.0.3" + optionalDependencies: + "@commitlint/load" ">6.1.1" + +debug@4.3.4, debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + dependencies: + character-entities "^2.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +dedent@0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2, deepmerge@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +dequal@^2.0.0, dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== + +detect-indent@6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + +detect-libc@^2.0.0, detect-libc@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" + integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== + +deterministic-object-hash@^2.0.1: + version "2.0.2" + resolved "https://registry.npmmirror.com/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz#b251ddc801443905f0e9fef08816a46bc9fe3807" + integrity sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ== + dependencies: + base-64 "^1.0.0" + +devalue@^4.3.2: + version "4.3.2" + resolved "https://registry.npmmirror.com/devalue/-/devalue-4.3.2.tgz#cc44e4cf3872ac5a78229fbce3b77e57032727b5" + integrity sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg== + +devlop@^1.0.0, devlop@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== + dependencies: + dequal "^2.0.0" + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +diff@^5.1.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1, domutils@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dset@^3.1.2, dset@^3.1.3: + version "3.1.3" + resolved "https://registry.npmmirror.com/dset/-/dset-3.1.3.tgz#c194147f159841148e8e34ca41f638556d9542d2" + integrity sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +electron-to-chromium@^1.4.668: + version "1.4.690" + resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.690.tgz#dd5145d45c49c08a9a6f7454127e660bdf9a3fa7" + integrity sha512-+2OAGjUx68xElQhydpcbqH50hE8Vs2K6TkAeLhICYfndb67CVH0UsZaijmRUE3rHlIxU1u0jxwhgVe6fK3YANA== + +emmet@^2.4.3: + version "2.4.6" + resolved "https://registry.npmmirror.com/emmet/-/emmet-2.4.6.tgz#f975094fb0fb5d2e78a7c94a65c308bdfd6436aa" + integrity sha512-dJfbdY/hfeTyf/Ef7Y7ubLYzkBvPQ912wPaeVYpAxvFxkEBf/+hJu4H6vhAvFN6HlxqedlfVn2x1S44FfQ97pg== + dependencies: + "@emmetio/abbreviation" "^2.3.3" + "@emmetio/css-abbreviation" "^2.1.8" + +emoji-regex@^10.2.1, emoji-regex@^10.3.0: + version "10.3.0" + resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" + integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encoding-sniffer@^0.0.2: + version "0.0.2" + resolved "https://registry.npmmirror.com/encoding-sniffer/-/encoding-sniffer-0.0.2.tgz#67914aa9a718860fc0401b0bcd632c83687dd213" + integrity sha512-c0VAA4I8IhhcXLe1W6wkAVvzImTFjWY1gns0FfNXkr8wCrU4x1RD2Y81PJgBmTJWGimtM8tJAV0poDNbSxL4vQ== + dependencies: + iconv-lite "^0.6.3" + whatwg-encoding "^2.0.0" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-module-lexer@^1.4.1: + version "1.4.1" + resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" + integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== + +esbuild@^0.19.3, esbuild@^0.19.6, esbuild@^0.19.9: + version "0.19.12" + resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" + "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" + +escalade@^3.1.1: + version "3.1.2" + resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-html@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +eslint-compat-utils@^0.4.0: + version "0.4.1" + resolved "https://registry.npmmirror.com/eslint-compat-utils/-/eslint-compat-utils-0.4.1.tgz#498d9dad03961174a283f7741838a3fbe4a34e89" + integrity sha512-5N7ZaJG5pZxUeNNJfUchurLVrunD1xJvyg5kYOIVF8kg1f3ajTikmAu/5fZ9w100omNPOoMjngRszh/Q/uFGMg== + dependencies: + semver "^7.5.4" + +eslint-plugin-astro@^0.31.3: + version "0.31.4" + resolved "https://registry.npmmirror.com/eslint-plugin-astro/-/eslint-plugin-astro-0.31.4.tgz#eb6e2a209f0e146e796d9ad4106272cadeb0a0d4" + integrity sha512-aU1KYSo7TdnSTBenyAWuRFB07lVUe0/6u9cltC2ZCx0QgcfC+HP7e87OkmvoKh+RZuaSsVgLG4zCOI8LZ6nS/Q== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@typescript-eslint/types" "^5.25.0" + astro-eslint-parser "^0.16.3" + eslint-compat-utils "^0.4.0" + postcss "^8.4.14" + postcss-selector-parser "^6.0.10" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.56.0: + version "8.57.0" + resolved "https://registry.npmmirror.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.0.0, espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.npmmirror.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +execa@8.0.1, execa@^8.0.1: + version "8.0.1" + resolved "https://registry.npmmirror.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== + dependencies: + homedir-polyfill "^1.0.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-fifo@^1.1.0, fast-fifo@^1.2.0: + version "1.3.2" + resolved "https://registry.npmmirror.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + +fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1, fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-xml-parser@^4.2.7: + version "4.3.5" + resolved "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-4.3.5.tgz#e2f2a2ae8377e9c3dc321b151e58f420ca7e5ccc" + integrity sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ== + dependencies: + strnum "^1.0.5" + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fflate@^0.7.3: + version "0.7.4" + resolved "https://registry.npmmirror.com/fflate/-/fflate-0.7.4.tgz#61587e5d958fdabb5a9368a302c25363f4f69f50" + integrity sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw== + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-type@^18.7.0: + version "18.7.0" + resolved "https://registry.npmmirror.com/file-type/-/file-type-18.7.0.tgz#cddb16f184d6b94106cfc4bb56978726b25cb2a2" + integrity sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw== + dependencies: + readable-web-to-node-stream "^3.0.2" + strtok3 "^7.0.0" + token-types "^5.0.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-node-modules@^2.1.2: + version "2.1.3" + resolved "https://registry.npmmirror.com/find-node-modules/-/find-node-modules-2.1.3.tgz#3c976cff2ca29ee94b4f9eafc613987fc4c0ee44" + integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg== + dependencies: + findup-sync "^4.0.0" + merge "^2.1.1" + +find-root@1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-yarn-workspace-root2@1.2.16: + version "1.2.16" + resolved "https://registry.npmmirror.com/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz#60287009dd2f324f59646bdb4b7610a6b301c2a9" + integrity sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA== + dependencies: + micromatch "^4.0.2" + pkg-dir "^4.2.0" + +findup-sync@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" + integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^4.0.2" + resolve-dir "^1.0.1" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.npmmirror.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + +flattie@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/flattie/-/flattie-1.1.0.tgz#1459504209f2001c478751b4e2fb69d6b1ee3241" + integrity sha512-xU99gDEnciIwJdGcBmNHnzTJ/w5AT+VFJOu6sTB6WM8diOYNA3Sa+K1DiEBQ7XH4QikQq3iFW1U+jRVcotQnBw== + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +fraction.js@^4.3.7: + version "4.3.7" + resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@9.1.0: + version "9.1.0" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +fuse.js@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/fuse.js/-/fuse.js-7.0.0.tgz#6573c9fcd4c8268e403b4fc7d7131ffcf99a9eb2" + integrity sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-east-asian-width@^1.0.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz#5e6ebd9baee6fb8b7b6bd505221065f0cd91f64e" + integrity sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA== + +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.npmmirror.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +github-slugger@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a" + integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.2.3, glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^10.3.10: + version "10.3.10" + resolved "https://registry.npmmirror.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + +global-directory@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/global-directory/-/global-directory-4.0.1.tgz#4d7ac7cfd2cb73f304c53b8810891748df5e361e" + integrity sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q== + dependencies: + ini "4.1.1" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.2.2: + version "13.2.2" + resolved "https://registry.npmmirror.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" + integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.3.0" + ignore "^5.2.4" + merge2 "^1.4.1" + slash "^4.0.0" + +graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.npmmirror.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +hasha@^5.2.2: + version "5.2.2" + resolved "https://registry.npmmirror.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" + integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== + dependencies: + is-stream "^2.0.0" + type-fest "^0.8.0" + +hasown@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== + dependencies: + function-bind "^1.1.2" + +hast-util-from-html@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz#9cd38ee81bf40b2607368b92a04b0905fa987488" + integrity sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g== + dependencies: + "@types/hast" "^3.0.0" + devlop "^1.1.0" + hast-util-from-parse5 "^8.0.0" + parse5 "^7.0.0" + vfile "^6.0.0" + vfile-message "^4.0.0" + +hast-util-from-parse5@^8.0.0: + version "8.0.1" + resolved "https://registry.npmmirror.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz#654a5676a41211e14ee80d1b1758c399a0327651" + integrity sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + devlop "^1.0.0" + hastscript "^8.0.0" + property-information "^6.0.0" + vfile "^6.0.0" + vfile-location "^5.0.0" + web-namespaces "^2.0.0" + +hast-util-parse-selector@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27" + integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== + dependencies: + "@types/hast" "^3.0.0" + +hast-util-raw@^9.0.0: + version "9.0.2" + resolved "https://registry.npmmirror.com/hast-util-raw/-/hast-util-raw-9.0.2.tgz#39b4a4886bd9f0a5dd42e86d02c966c2c152884c" + integrity sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + "@ungap/structured-clone" "^1.0.0" + hast-util-from-parse5 "^8.0.0" + hast-util-to-parse5 "^8.0.0" + html-void-elements "^3.0.0" + mdast-util-to-hast "^13.0.0" + parse5 "^7.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + +hast-util-to-html@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/hast-util-to-html/-/hast-util-to-html-9.0.0.tgz#51c0ae2a3550b9aa988c094c4fc4e327af0dddd1" + integrity sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-raw "^9.0.0" + hast-util-whitespace "^3.0.0" + html-void-elements "^3.0.0" + mdast-util-to-hast "^13.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + stringify-entities "^4.0.0" + zwitch "^2.0.4" + +hast-util-to-parse5@^8.0.0: + version "8.0.0" + resolved "https://registry.npmmirror.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz#477cd42d278d4f036bc2ea58586130f6f39ee6ed" + integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw== + dependencies: + "@types/hast" "^3.0.0" + comma-separated-tokens "^2.0.0" + devlop "^1.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + +hast-util-whitespace@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== + dependencies: + "@types/hast" "^3.0.0" + +hastscript@^8.0.0: + version "8.0.0" + resolved "https://registry.npmmirror.com/hastscript/-/hastscript-8.0.0.tgz#4ef795ec8dee867101b9f23cc830d4baf4fd781a" + integrity sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw== + dependencies: + "@types/hast" "^3.0.0" + comma-separated-tokens "^2.0.0" + hast-util-parse-selector "^4.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + +hex-rgb@^4.1.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/hex-rgb/-/hex-rgb-4.3.0.tgz#af5e974e83bb2fefe44d55182b004ec818c07776" + integrity sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw== + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +html-escaper@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/html-escaper/-/html-escaper-3.0.3.tgz#4d336674652beb1dcbc29ef6b6ba7f6be6fdfed6" + integrity sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ== + +html-minifier-terser@^7.2.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz#18752e23a2f0ed4b0f550f217bb41693e975b942" + integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA== + dependencies: + camel-case "^4.1.2" + clean-css "~5.3.2" + commander "^10.0.0" + entities "^4.4.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.15.1" + +html-void-elements@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" + integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== + +htmlparser2@^8.0.2: + version "8.0.2" + resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +htmlparser2@^9.0.0: + version "9.1.0" + resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23" + integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.1.0" + entities "^4.5.0" + +http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + +husky@^8.0.3: + version "8.0.3" + resolved "https://registry.npmmirror.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== + +iconv-lite@0.6.3, iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0, ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.npmmirror.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-meta-resolve@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz#0b1195915689f60ab00f830af0f15cc841e8919e" + integrity sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" + integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== + +ini@^1.3.4, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inquirer@8.2.5: + version "8.2.5" + resolved "https://registry.npmmirror.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" + integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + +is-fullwidth-code-point@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704" + integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA== + dependencies: + get-east-asian-width "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-interactive@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" + integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-unicode-supported@^1.1.0, is-unicode-supported@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== + +is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== + +is-windows@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.npmmirror.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jiti@^1.19.1: + version "1.21.0" + resolved "https://registry.npmmirror.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" + integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.0, js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@^2.3.0: + version "2.3.1" + resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342" + integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +kleur@^4.1.4, kleur@^4.1.5: + version "4.1.5" + resolved "https://registry.npmmirror.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lightningcss-darwin-arm64@1.24.0: + version "1.24.0" + resolved "https://registry.npmmirror.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.24.0.tgz#3d2450fe6881ed84c825f91510415dfa35dc3237" + integrity sha512-rTNPkEiynOu4CfGdd5ZfVOQe2gd2idfQd4EfX1l2ZUUwd+2SwSdbb7cG4rlwfnZckbzCAygm85xkpekRE5/wFw== + +lightningcss-darwin-x64@1.24.0: + version "1.24.0" + resolved "https://registry.npmmirror.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.24.0.tgz#98cb96ad7ea78990ee24cd7741b9983696c1adab" + integrity sha512-4KCeF2RJjzp9xdGY8zIH68CUtptEg8uz8PfkHvsIdrP4t9t5CIgfDBhiB8AmuO75N6SofdmZexDZIKdy9vA7Ww== + +lightningcss-freebsd-x64@1.24.0: + version "1.24.0" + resolved "https://registry.npmmirror.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.24.0.tgz#d8c94574f8e12b09cb8dcdd05333d9e2288cd906" + integrity sha512-FJAYlek1wXuVTsncNU0C6YD41q126dXcIUm97KAccMn9C4s/JfLSqGWT2gIzAblavPFkyGG2gIADTWp3uWfN1g== + +lightningcss-linux-arm-gnueabihf@1.24.0: + version "1.24.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.24.0.tgz#b59678c2f9e29176740193a54b62cd2c28112e13" + integrity sha512-N55K6JqzMx7C0hYUu1YmWqhkHwzEJlkQRMA6phY65noO0I1LOAvP4wBIoFWrzRE+O6zL0RmXJ2xppqyTbk3sYw== + +lightningcss-linux-arm64-gnu@1.24.0: + version "1.24.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.24.0.tgz#20af7648d894253c97afe3b58c91dc224243985c" + integrity sha512-MqqUB2TpYtFWeBvvf5KExDdClU3YGLW5bHKs50uKKootcvG9KoS7wYwd5UichS+W3mYLc5yXUPGD1DNWbLiYKw== + +lightningcss-linux-arm64-musl@1.24.0: + version "1.24.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.24.0.tgz#be696ac45e7d211accc812750bfe6d61ef37b480" + integrity sha512-5wn4d9tFwa5bS1ao9mLexYVJdh3nn09HNIipsII6ZF7z9ZA5J4dOEhMgKoeCl891axTGTUYd8Kxn+Hn3XUSYRQ== + +lightningcss-linux-x64-gnu@1.24.0: + version "1.24.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.24.0.tgz#1990787be06a75e396f03ee86f8fe7b90d34f945" + integrity sha512-3j5MdTh+LSDF3o6uDwRjRUgw4J+IfDCVtdkUrJvKxL79qBLUujXY7CTe5X3IQDDLKEe/3wu49r8JKgxr0MfjbQ== + +lightningcss-linux-x64-musl@1.24.0: + version "1.24.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.24.0.tgz#26edd10bcbd95833c602d3c4b71b628b26603d62" + integrity sha512-HI+rNnvaLz0o36z6Ki0gyG5igVGrJmzczxA5fznr6eFTj3cHORoR/j2q8ivMzNFR4UKJDkTWUH5LMhacwOHWBA== + +lightningcss-win32-x64-msvc@1.24.0: + version "1.24.0" + resolved "https://registry.npmmirror.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.24.0.tgz#268a4a6ad2ef25703a7f0d9edec60c409f80dd09" + integrity sha512-oeije/t7OZ5N9vSs6amyW/34wIYoBCpE6HUlsSKcP2SR1CVgx9oKEM00GtQmtqNnYiMIfsSm7+ppMb4NLtD5vg== + +lightningcss@^1.22.1: + version "1.24.0" + resolved "https://registry.npmmirror.com/lightningcss/-/lightningcss-1.24.0.tgz#41bcdf5de381ae5fe1e7f9a2bf6bcaded556082c" + integrity sha512-y36QEEDVx4IM7/yIZNsZJMRREIu26WzTsauIysf5s76YeCmlSbRZS7aC97IGPuoFRnyZ5Wx43OBsQBFB5Ne7ng== + dependencies: + detect-libc "^1.0.3" + optionalDependencies: + lightningcss-darwin-arm64 "1.24.0" + lightningcss-darwin-x64 "1.24.0" + lightningcss-freebsd-x64 "1.24.0" + lightningcss-linux-arm-gnueabihf "1.24.0" + lightningcss-linux-arm64-gnu "1.24.0" + lightningcss-linux-arm64-musl "1.24.0" + lightningcss-linux-x64-gnu "1.24.0" + lightningcss-linux-x64-musl "1.24.0" + lightningcss-win32-x64-msvc "1.24.0" + +lilconfig@3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" + integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== + +lilconfig@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lilconfig@^3.0.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" + integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== + +linebreak@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b" + integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ== + dependencies: + base64-js "0.0.8" + unicode-trie "^2.0.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lint-staged@^15.2.0: + version "15.2.2" + resolved "https://registry.npmmirror.com/lint-staged/-/lint-staged-15.2.2.tgz#ad7cbb5b3ab70e043fa05bff82a09ed286bc4c5f" + integrity sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw== + dependencies: + chalk "5.3.0" + commander "11.1.0" + debug "4.3.4" + execa "8.0.1" + lilconfig "3.0.0" + listr2 "8.0.1" + micromatch "4.0.5" + pidtree "0.6.0" + string-argv "0.3.2" + yaml "2.3.4" + +listr2@8.0.1: + version "8.0.1" + resolved "https://registry.npmmirror.com/listr2/-/listr2-8.0.1.tgz#4d3f50ae6cec3c62bdf0e94f5c2c9edebd4b9c34" + integrity sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA== + dependencies: + cli-truncate "^4.0.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^6.0.0" + rfdc "^1.3.0" + wrap-ansi "^9.0.0" + +load-yaml-file@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/load-yaml-file/-/load-yaml-file-0.2.0.tgz#af854edaf2bea89346c07549122753c07372f64d" + integrity sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw== + dependencies: + graceful-fs "^4.1.5" + js-yaml "^3.13.0" + pify "^4.0.1" + strip-bom "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.castarray@^4.4.0: + version "4.4.0" + resolved "https://registry.npmmirror.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115" + integrity sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.map@^4.5.1: + version "4.6.0" + resolved "https://registry.npmmirror.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.mergewith@^4.6.2: + version "4.6.2" + resolved "https://registry.npmmirror.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@4.17.21, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-symbols@^5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" + integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== + dependencies: + chalk "^5.0.0" + is-unicode-supported "^1.1.0" + +log-update@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/log-update/-/log-update-6.0.0.tgz#0ddeb7ac6ad658c944c1de902993fce7c33f5e59" + integrity sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw== + dependencies: + ansi-escapes "^6.2.0" + cli-cursor "^4.0.0" + slice-ansi "^7.0.0" + strip-ansi "^7.1.0" + wrap-ansi "^9.0.0" + +longest-streak@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== + +longest@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" + integrity sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q== + +loose-envify@^1.1.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +"lru-cache@^9.1.1 || ^10.0.0": + version "10.2.0" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +magic-string@^0.30.3: + version "0.30.8" + resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613" + integrity sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +markdown-table@^3.0.0: + version "3.0.3" + resolved "https://registry.npmmirror.com/markdown-table/-/markdown-table-3.0.3.tgz#e6331d30e493127e031dd385488b5bd326e4a6bd" + integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== + +mdast-util-definitions@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz#c1bb706e5e76bb93f9a09dd7af174002ae69ac24" + integrity sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + unist-util-visit "^5.0.0" + +mdast-util-find-and-replace@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz#a6fc7b62f0994e973490e45262e4bc07607b04e0" + integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA== + dependencies: + "@types/mdast" "^4.0.0" + escape-string-regexp "^5.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + +mdast-util-from-markdown@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz#52f14815ec291ed061f2922fd14d6689c810cb88" + integrity sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + mdast-util-to-string "^4.0.0" + micromark "^4.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-decode-string "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-stringify-position "^4.0.0" + +mdast-util-gfm-autolink-literal@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz#5baf35407421310a08e68c15e5d8821e8898ba2a" + integrity sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg== + dependencies: + "@types/mdast" "^4.0.0" + ccount "^2.0.0" + devlop "^1.0.0" + mdast-util-find-and-replace "^3.0.0" + micromark-util-character "^2.0.0" + +mdast-util-gfm-footnote@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz#25a1753c7d16db8bfd53cd84fe50562bd1e6d6a9" + integrity sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.1.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + +mdast-util-gfm-strikethrough@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz#d44ef9e8ed283ac8c1165ab0d0dfd058c2764c16" + integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm-table@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz#7a435fb6223a72b0862b33afbd712b6dae878d38" + integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + markdown-table "^3.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm-task-list-item@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz#e68095d2f8a4303ef24094ab642e1047b991a936" + integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== + dependencies: + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-gfm@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz#3f2aecc879785c3cb6a81ff3a243dc11eca61095" + integrity sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw== + dependencies: + mdast-util-from-markdown "^2.0.0" + mdast-util-gfm-autolink-literal "^2.0.0" + mdast-util-gfm-footnote "^2.0.0" + mdast-util-gfm-strikethrough "^2.0.0" + mdast-util-gfm-table "^2.0.0" + mdast-util-gfm-task-list-item "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-heading-range@^2.0.1: + version "2.1.5" + resolved "https://registry.npmmirror.com/mdast-util-heading-range/-/mdast-util-heading-range-2.1.5.tgz#9a8e07bd46d07d40ad1596b0b6ab8535337725c3" + integrity sha512-jXbFD0C+MfRkwsaze+btzG9CmVrxnc5kpcJLtx3SvSlPWnNdGMlDRHKDB9/TIPEq9nRHnkixppT8yvaUJ5agJg== + dependencies: + mdast-util-to-string "^1.0.0" + +mdast-util-phrasing@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" + integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== + dependencies: + "@types/mdast" "^4.0.0" + unist-util-is "^6.0.0" + +mdast-util-to-hast@13.0.2: + version "13.0.2" + resolved "https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-13.0.2.tgz#74c0a9f014bb2340cae6118f6fccd75467792be7" + integrity sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + +mdast-util-to-hast@^13.0.0: + version "13.1.0" + resolved "https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz#1ae54d903150a10fe04d59f03b2b95fd210b2124" + integrity sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + +mdast-util-to-markdown@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz#9813f1d6e0cdaac7c244ec8c6dabfdb2102ea2b4" + integrity sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + longest-streak "^3.0.0" + mdast-util-phrasing "^4.0.0" + mdast-util-to-string "^4.0.0" + micromark-util-decode-string "^2.0.0" + unist-util-visit "^5.0.0" + zwitch "^2.0.0" + +mdast-util-to-string@^1.0.0, mdast-util-to-string@^1.0.2: + version "1.1.0" + resolved "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" + integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== + +mdast-util-to-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" + integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== + dependencies: + "@types/mdast" "^4.0.0" + +mdast-util-toc@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/mdast-util-toc/-/mdast-util-toc-7.0.0.tgz#d09715600eb32a053345803010a9b394bf5af179" + integrity sha512-C28UcSqjmnWuvgT8d97qpaItHKvySqVPAECUzqQ51xuMyNFFJwcFoKW77KoMjtXrclTidLQFDzLUmTmrshRweA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/ungap__structured-clone" "^0.3.0" + "@ungap/structured-clone" "^1.0.0" + github-slugger "^2.0.0" + mdast-util-to-string "^4.0.0" + unist-util-is "^6.0.0" + unist-util-visit "^5.0.0" + +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +merge@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" + integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== + +micromark-core-commonmark@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz#50740201f0ee78c12a675bf3e68ffebc0bf931a3" + integrity sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA== + dependencies: + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-factory-destination "^2.0.0" + micromark-factory-label "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-factory-title "^2.0.0" + micromark-factory-whitespace "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-html-tag-name "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-autolink-literal@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz#f1e50b42e67d441528f39a67133eddde2bbabfd9" + integrity sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-footnote@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz#91afad310065a94b636ab1e9dab2c60d1aab953c" + integrity sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg== + dependencies: + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-strikethrough@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz#6917db8e320da70e39ffbf97abdbff83e6783e61" + integrity sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-table@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz#2cf3fe352d9e089b7ef5fff003bdfe0da29649b7" + integrity sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm-tagfilter@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz#f26d8a7807b5985fba13cf61465b58ca5ff7dc57" + integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== + dependencies: + micromark-util-types "^2.0.0" + +micromark-extension-gfm-task-list-item@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz#ee8b208f1ced1eb9fb11c19a23666e59d86d4838" + integrity sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw== + dependencies: + devlop "^1.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-extension-gfm@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz#3e13376ab95dd7a5cfd0e29560dfe999657b3c5b" + integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== + dependencies: + micromark-extension-gfm-autolink-literal "^2.0.0" + micromark-extension-gfm-footnote "^2.0.0" + micromark-extension-gfm-strikethrough "^2.0.0" + micromark-extension-gfm-table "^2.0.0" + micromark-extension-gfm-tagfilter "^2.0.0" + micromark-extension-gfm-task-list-item "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-destination@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz#857c94debd2c873cba34e0445ab26b74f6a6ec07" + integrity sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-label@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz#17c5c2e66ce39ad6f4fc4cbf40d972f9096f726a" + integrity sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw== + dependencies: + devlop "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-space@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz#5e7afd5929c23b96566d0e1ae018ae4fcf81d030" + integrity sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-title@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz#726140fc77892af524705d689e1cf06c8a83ea95" + integrity sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-whitespace@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz#9e92eb0f5468083381f923d9653632b3cfb5f763" + integrity sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-character@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-2.1.0.tgz#31320ace16b4644316f6bf057531689c71e2aee1" + integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-chunked@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz#e51f4db85fb203a79dbfef23fd41b2f03dc2ef89" + integrity sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-classify-character@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz#8c7537c20d0750b12df31f86e976d1d951165f34" + integrity sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-combine-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz#75d6ab65c58b7403616db8d6b31315013bfb7ee5" + integrity sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ== + dependencies: + micromark-util-chunked "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-decode-numeric-character-reference@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz#2698bbb38f2a9ba6310e359f99fcb2b35a0d2bd5" + integrity sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-decode-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz#7dfa3a63c45aecaa17824e656bcdb01f9737154a" + integrity sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz#0921ac7953dc3f1fd281e3d1932decfdb9382ab1" + integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA== + +micromark-util-html-tag-name@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz#ae34b01cbe063363847670284c6255bb12138ec4" + integrity sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw== + +micromark-util-normalize-identifier@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz#91f9a4e65fe66cc80c53b35b0254ad67aa431d8b" + integrity sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-resolve-all@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz#189656e7e1a53d0c86a38a652b284a252389f364" + integrity sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA== + dependencies: + micromark-util-types "^2.0.0" + +micromark-util-sanitize-uri@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz#ec8fbf0258e9e6d8f13d9e4770f9be64342673de" + integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-subtokenize@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz#9f412442d77e0c5789ffdf42377fa8a2bcbdf581" + integrity sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-symbol@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz#12225c8f95edf8b17254e47080ce0862d5db8044" + integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw== + +micromark-util-types@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-2.0.0.tgz#63b4b7ffeb35d3ecf50d1ca20e68fc7caa36d95e" + integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w== + +micromark@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/micromark/-/micromark-4.0.0.tgz#84746a249ebd904d9658cfabc1e8e5f32cbc6249" + integrity sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromatch@4.0.5, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +mini-svg-data-uri@^1.4.4: + version "1.4.4" + resolved "https://registry.npmmirror.com/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz#8ab0aabcdf8c29ad5693ca595af19dd2ead09939" + integrity sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg== + +minimatch@9.0.3, minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@1.2.7: + version "1.2.7" + resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +minimist@^1.2.0, minimist@^1.2.3: + version "1.2.8" + resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.4" + resolved "https://registry.npmmirror.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.npmmirror.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +muggle-string@^0.4.0: + version "0.4.1" + resolved "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.4.1.tgz#3b366bd43b32f809dc20659534dd30e7c8a0d328" + integrity sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +nlcst-to-string@^3.0.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/nlcst-to-string/-/nlcst-to-string-3.1.1.tgz#83b90f2e1ee2081e14701317efc26d3bbadc806e" + integrity sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw== + dependencies: + "@types/nlcst" "^1.0.0" + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-abi@^3.3.0: + version "3.56.0" + resolved "https://registry.npmmirror.com/node-abi/-/node-abi-3.56.0.tgz#ca807d5ff735ac6bbbd684ae3ff2debc1c2a40a7" + integrity sha512-fZjdhDOeRcaS+rcpve7XuwHBmktS1nS1gzgghwKUQQ8nTy2FdSDr6ZT8k6YhvlJeHmmQMYiT/IH9hfco5zeW2Q== + dependencies: + semver "^7.3.5" + +node-addon-api@^6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" + integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +npm-run-path@^5.1.0: + version "5.3.0" + resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + dependencies: + path-key "^4.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +ora@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/ora/-/ora-7.0.1.tgz#cdd530ecd865fe39e451a0e7697865669cb11930" + integrity sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw== + dependencies: + chalk "^5.3.0" + cli-cursor "^4.0.0" + cli-spinners "^2.9.0" + is-interactive "^2.0.0" + is-unicode-supported "^1.3.0" + log-symbols "^5.1.0" + stdin-discarder "^0.1.0" + string-width "^6.1.0" + strip-ansi "^7.1.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-limit@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985" + integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== + dependencies: + yocto-queue "^1.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-queue@^8.0.1: + version "8.0.1" + resolved "https://registry.npmmirror.com/p-queue/-/p-queue-8.0.1.tgz#718b7f83836922ef213ddec263ff4223ce70bef8" + integrity sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA== + dependencies: + eventemitter3 "^5.0.1" + p-timeout "^6.1.2" + +p-timeout@^6.1.2: + version "6.1.2" + resolved "https://registry.npmmirror.com/p-timeout/-/p-timeout-6.1.2.tgz#22b8d8a78abf5e103030211c5fc6dee1166a6aa5" + integrity sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@^0.2.5: + version "0.2.9" + resolved "https://registry.npmmirror.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-css-color@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/parse-css-color/-/parse-css-color-0.2.1.tgz#b687a583f2e42e66ffdfce80a570706966e807c9" + integrity sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg== + dependencies: + color-name "^1.1.4" + hex-rgb "^4.1.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-latin@^5.0.0: + version "5.0.1" + resolved "https://registry.npmmirror.com/parse-latin/-/parse-latin-5.0.1.tgz#f3b4fac54d06f6a0501cf8b8ecfafa4cbb4f2f47" + integrity sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg== + dependencies: + nlcst-to-string "^3.0.0" + unist-util-modify-children "^3.0.0" + unist-util-visit-children "^2.0.0" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5-parser-stream@^7.1.2: + version "7.1.2" + resolved "https://registry.npmmirror.com/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz#d7c20eadc37968d272e2c02660fff92dd27e60e1" + integrity sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow== + dependencies: + parse5 "^7.0.0" + +parse5@^7.0.0, parse5@^7.1.2: + version "7.1.2" + resolved "https://registry.npmmirror.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-to-regexp@^6.2.1: + version "6.2.1" + resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" + integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +peek-readable@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/peek-readable/-/peek-readable-5.0.0.tgz#7ead2aff25dc40458c60347ea76cfdfd63efdfec" + integrity sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pidtree@0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pirates@^4.0.1: + version "4.0.6" + resolved "https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +postcss-import@^15.1.0: + version "15.1.0" + resolved "https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^4.0.1, postcss-load-config@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== + dependencies: + lilconfig "^3.0.0" + yaml "^2.3.4" + +postcss-nested@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" + integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== + dependencies: + postcss-selector-parser "^6.0.11" + +postcss-selector-parser@6.0.10: + version "6.0.10" + resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11: + version "6.0.15" + resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535" + integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.4.14, postcss@^8.4.23, postcss@^8.4.28, postcss@^8.4.35: + version "8.4.35" + resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" + integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prebuild-install@^7.1.1: + version "7.1.2" + resolved "https://registry.npmmirror.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" + integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +preferred-pm@^3.1.2: + version "3.1.3" + resolved "https://registry.npmmirror.com/preferred-pm/-/preferred-pm-3.1.3.tgz#4125ea5154603136c3b6444e5f5c94ecf90e4916" + integrity sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w== + dependencies: + find-up "^5.0.0" + find-yarn-workspace-root2 "1.2.16" + path-exists "^4.0.0" + which-pm "2.0.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-plugin-astro@^0.13.0: + version "0.13.0" + resolved "https://registry.npmmirror.com/prettier-plugin-astro/-/prettier-plugin-astro-0.13.0.tgz#0e1ff91caae17cad5b9493eb55bbd7114515bc5b" + integrity sha512-5HrJNnPmZqTUNoA97zn4gNQv9BgVhv+et03314WpQ9H9N8m2L9OSV798olwmG2YLXPl1iSstlJCR1zB3x5xG4g== + dependencies: + "@astrojs/compiler" "^1.5.5" + prettier "^3.0.0" + sass-formatter "^0.7.6" + +prettier-plugin-tailwindcss@^0.5.11: + version "0.5.11" + resolved "https://registry.npmmirror.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.11.tgz#1aa9308c3285b3cb7942aaeaec8d0e0775ac54d0" + integrity sha512-AvI/DNyMctyyxGOjyePgi/gqj5hJYClZ1avtQvLlqMT3uDZkRbi4HhGUpok3DRzv9z7Lti85Kdj3s3/1CeNI0w== + +prettier@^3.0.0, prettier@^3.2.4: + version "3.2.5" + resolved "https://registry.npmmirror.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + +pretty-bytes@^5.3.0: + version "5.6.0" + resolved "https://registry.npmmirror.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +prismjs@^1.29.0: + version "1.29.0" + resolved "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" + integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== + +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +property-information@^6.0.0: + version "6.4.1" + resolved "https://registry.npmmirror.com/property-information/-/property-information-6.4.1.tgz#de8b79a7415fd2107dfbe65758bb2cc9dfcf60ac" + integrity sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +queue-tick@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" + integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== + +quicklink@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/quicklink/-/quicklink-2.3.0.tgz#3601458e4e0b276343ce1f48c74b24b9375344b2" + integrity sha512-FyTanYArl5Gz2/C0ZjErvfFJtem/+d1RM4eK0jiXO6mL4Zjje+xsYtcK3ZtKX2Yb3HSfah5HekWrH2qhttYQjQ== + dependencies: + route-manifest "^1.0.0" + throttles "^1.0.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.npmmirror.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-refresh@^0.14.0: + version "0.14.0" + resolved "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" + integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== + +react@^18.2.0: + version "18.2.0" + resolved "https://registry.npmmirror.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-web-to-node-stream@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" + integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== + dependencies: + readable-stream "^3.6.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +regexparam@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/regexparam/-/regexparam-1.3.0.tgz#2fe42c93e32a40eff6235d635e0ffa344b92965f" + integrity sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g== + +rehype-parse@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/rehype-parse/-/rehype-parse-9.0.0.tgz#3949faeec6f466ec57774215661e0d75469195d9" + integrity sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw== + dependencies: + "@types/hast" "^3.0.0" + hast-util-from-html "^2.0.0" + unified "^11.0.0" + +rehype-raw@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4" + integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww== + dependencies: + "@types/hast" "^3.0.0" + hast-util-raw "^9.0.0" + vfile "^6.0.0" + +rehype-stringify@^10.0.0: + version "10.0.0" + resolved "https://registry.npmmirror.com/rehype-stringify/-/rehype-stringify-10.0.0.tgz#2031cf6fdd0355393706f0474ec794c75e5492f2" + integrity sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ== + dependencies: + "@types/hast" "^3.0.0" + hast-util-to-html "^9.0.0" + unified "^11.0.0" + +rehype@^13.0.1: + version "13.0.1" + resolved "https://registry.npmmirror.com/rehype/-/rehype-13.0.1.tgz#56384ba83955e2f3aa7eca1975b406c67d9dbd5e" + integrity sha512-AcSLS2mItY+0fYu9xKxOu1LhUZeBZZBx8//5HKzF+0XP+eP8+6a5MXn2+DW2kfXR6Dtp1FEXMVrjyKAcvcU8vg== + dependencies: + "@types/hast" "^3.0.0" + rehype-parse "^9.0.0" + rehype-stringify "^10.0.0" + unified "^11.0.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +remark-collapse@^0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/remark-collapse/-/remark-collapse-0.1.2.tgz#7ebf0b0e0932f39a8599a754906e0a097906070b" + integrity sha512-x2lhtaT4nR1Tkp/hftoeiMHbdAntxu5Q9D6lymwMqUtoF2pg3bqNaa8NO/8yyOVhddYk0d0dkhGc+avGUf0lZA== + dependencies: + mdast-util-heading-range "^2.0.1" + mdast-util-to-string "^1.0.2" + +remark-gfm@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/remark-gfm/-/remark-gfm-4.0.0.tgz#aea777f0744701aa288b67d28c43565c7e8c35de" + integrity sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-gfm "^3.0.0" + micromark-extension-gfm "^3.0.0" + remark-parse "^11.0.0" + remark-stringify "^11.0.0" + unified "^11.0.0" + +remark-parse@^11.0.0: + version "11.0.0" + resolved "https://registry.npmmirror.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" + integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + micromark-util-types "^2.0.0" + unified "^11.0.0" + +remark-rehype@^11.0.0: + version "11.1.0" + resolved "https://registry.npmmirror.com/remark-rehype/-/remark-rehype-11.1.0.tgz#d5f264f42bcbd4d300f030975609d01a1697ccdc" + integrity sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + mdast-util-to-hast "^13.0.0" + unified "^11.0.0" + vfile "^6.0.0" + +remark-smartypants@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/remark-smartypants/-/remark-smartypants-2.1.0.tgz#afd26d8ff40def346c6516e38b46994449fb2efe" + integrity sha512-qoF6Vz3BjU2tP6OfZqHOvCU0ACmu/6jhGaINSQRI9mM7wCxNQTKB3JUAN4SVoN2ybElEDTxBIABRep7e569iJw== + dependencies: + retext "^8.1.0" + retext-smartypants "^5.2.0" + unist-util-visit "^5.0.0" + +remark-stringify@^11.0.0: + version "11.0.0" + resolved "https://registry.npmmirror.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3" + integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-to-markdown "^2.0.0" + unified "^11.0.0" + +remark-toc@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/remark-toc/-/remark-toc-9.0.0.tgz#7197950fe218a725e3f122a48495cb0dbd4026d0" + integrity sha512-KJ9txbo33GjDAV1baHFze7ij4G8c7SGYoY8Kzsm2gzFpbhL/bSoVpMMzGa3vrNDSWASNd/3ppAqL7cP2zD6JIA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-toc "^7.0.0" + +request-light@^0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/request-light/-/request-light-0.7.0.tgz#885628bb2f8040c26401ebf258ec51c4ae98ac2a" + integrity sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.1.7, resolve@^1.22.2, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +restore-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retext-latin@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/retext-latin/-/retext-latin-3.1.0.tgz#72b0176af2c69a373fd0d37eadd3924418bb3a89" + integrity sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ== + dependencies: + "@types/nlcst" "^1.0.0" + parse-latin "^5.0.0" + unherit "^3.0.0" + unified "^10.0.0" + +retext-smartypants@^5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/retext-smartypants/-/retext-smartypants-5.2.0.tgz#da9cb79cc60f36aa33a20a462dfc663bec0068b4" + integrity sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw== + dependencies: + "@types/nlcst" "^1.0.0" + nlcst-to-string "^3.0.0" + unified "^10.0.0" + unist-util-visit "^4.0.0" + +retext-stringify@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/retext-stringify/-/retext-stringify-3.1.0.tgz#46ed45e077bfc4a8334977f6c2d6611e1d36263a" + integrity sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w== + dependencies: + "@types/nlcst" "^1.0.0" + nlcst-to-string "^3.0.0" + unified "^10.0.0" + +retext@^8.1.0: + version "8.1.0" + resolved "https://registry.npmmirror.com/retext/-/retext-8.1.0.tgz#c43437fb84cd46285ad240a9279142e239bada8d" + integrity sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q== + dependencies: + "@types/nlcst" "^1.0.0" + retext-latin "^3.0.0" + retext-stringify "^3.0.0" + unified "^10.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.3.0: + version "1.3.1" + resolved "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup@^4.2.0: + version "4.12.0" + resolved "https://registry.npmmirror.com/rollup/-/rollup-4.12.0.tgz#0b6d1e5f3d46bbcf244deec41a7421dc54cc45b5" + integrity sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q== + dependencies: + "@types/estree" "1.0.5" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.12.0" + "@rollup/rollup-android-arm64" "4.12.0" + "@rollup/rollup-darwin-arm64" "4.12.0" + "@rollup/rollup-darwin-x64" "4.12.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.12.0" + "@rollup/rollup-linux-arm64-gnu" "4.12.0" + "@rollup/rollup-linux-arm64-musl" "4.12.0" + "@rollup/rollup-linux-riscv64-gnu" "4.12.0" + "@rollup/rollup-linux-x64-gnu" "4.12.0" + "@rollup/rollup-linux-x64-musl" "4.12.0" + "@rollup/rollup-win32-arm64-msvc" "4.12.0" + "@rollup/rollup-win32-ia32-msvc" "4.12.0" + "@rollup/rollup-win32-x64-msvc" "4.12.0" + fsevents "~2.3.2" + +route-manifest@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/route-manifest/-/route-manifest-1.0.0.tgz#0155513f3cd158c18827413845ab1a8ec2ad15e1" + integrity sha512-qn0xJr4nnF4caj0erOLLAHYiNyzqhzpUbgDQcEHrmBoG4sWCDLnIXLH7VccNSxe9cWgbP2Kw/OjME+eH3CeRSA== + dependencies: + regexparam "^1.3.0" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.5: + version "7.8.1" + resolved "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +s.color@0.0.15: + version "0.0.15" + resolved "https://registry.npmmirror.com/s.color/-/s.color-0.0.15.tgz#6b32cd22d8dba95703a5122ddede2020a1560186" + integrity sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA== + +safe-buffer@^5.0.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-formatter@^0.7.6: + version "0.7.9" + resolved "https://registry.npmmirror.com/sass-formatter/-/sass-formatter-0.7.9.tgz#cf77e02e98f81daabd91b185192144d29fc04ca5" + integrity sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw== + dependencies: + suf-log "^2.5.3" + +satori@^0.10.11: + version "0.10.13" + resolved "https://registry.npmmirror.com/satori/-/satori-0.10.13.tgz#658a9920f55268d2002819387a80a0b6d4bdc262" + integrity sha512-klCwkVYMQ/ZN5inJLHzrUmGwoRfsdP7idB5hfpJ1jfiJk1ErDitK8Hkc6Kll1+Ox2WtqEuGecSZLnmup3CGzvQ== + dependencies: + "@shuding/opentype.js" "1.4.0-beta.0" + css-background-parser "^0.1.0" + css-box-shadow "1.0.0-3" + css-to-react-native "^3.0.0" + emoji-regex "^10.2.1" + escape-html "^1.0.3" + linebreak "^1.1.0" + parse-css-color "^0.2.1" + postcss-value-parser "^4.2.0" + yoga-wasm-web "^0.3.3" + +sax@^1.2.4: + version "1.3.0" + resolved "https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" + integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.5, semver@^7.3.8, semver@^7.5.4: + version "7.6.0" + resolved "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +sharp@^0.32.6: + version "0.32.6" + resolved "https://registry.npmmirror.com/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a" + integrity sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== + dependencies: + color "^4.2.3" + detect-libc "^2.0.2" + node-addon-api "^6.1.0" + prebuild-install "^7.1.1" + semver "^7.5.4" + simple-get "^4.0.1" + tar-fs "^3.0.4" + tunnel-agent "^0.6.0" + +sharp@^0.33.0, sharp@^0.33.2: + version "0.33.2" + resolved "https://registry.npmmirror.com/sharp/-/sharp-0.33.2.tgz#fcd52f2c70effa8a02160b1bfd989a3de55f2dfb" + integrity sha512-WlYOPyyPDiiM07j/UO+E720ju6gtNtHjEGg5vovUk1Lgxyjm2LFO+37Nt/UI3MMh2l6hxTWQWi7qk3cXJTutcQ== + dependencies: + color "^4.2.3" + detect-libc "^2.0.2" + semver "^7.5.4" + optionalDependencies: + "@img/sharp-darwin-arm64" "0.33.2" + "@img/sharp-darwin-x64" "0.33.2" + "@img/sharp-libvips-darwin-arm64" "1.0.1" + "@img/sharp-libvips-darwin-x64" "1.0.1" + "@img/sharp-libvips-linux-arm" "1.0.1" + "@img/sharp-libvips-linux-arm64" "1.0.1" + "@img/sharp-libvips-linux-s390x" "1.0.1" + "@img/sharp-libvips-linux-x64" "1.0.1" + "@img/sharp-libvips-linuxmusl-arm64" "1.0.1" + "@img/sharp-libvips-linuxmusl-x64" "1.0.1" + "@img/sharp-linux-arm" "0.33.2" + "@img/sharp-linux-arm64" "0.33.2" + "@img/sharp-linux-s390x" "0.33.2" + "@img/sharp-linux-x64" "0.33.2" + "@img/sharp-linuxmusl-arm64" "0.33.2" + "@img/sharp-linuxmusl-x64" "0.33.2" + "@img/sharp-wasm32" "0.33.2" + "@img/sharp-win32-ia32" "0.33.2" + "@img/sharp-win32-x64" "0.33.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shikiji-core@0.9.19, shikiji-core@^0.9.19: + version "0.9.19" + resolved "https://registry.npmmirror.com/shikiji-core/-/shikiji-core-0.9.19.tgz#227975e998eb2a579cf83de30977762be3802507" + integrity sha512-AFJu/vcNT21t0e6YrfadZ+9q86gvPum6iywRyt1OtIPjPFe25RQnYJyxHQPMLKCCWA992TPxmEmbNcOZCAJclw== + +shikiji@^0.9.18, shikiji@^0.9.19: + version "0.9.19" + resolved "https://registry.npmmirror.com/shikiji/-/shikiji-0.9.19.tgz#351a32b291a04cf9a6b69933f8044fe135b70f6f" + integrity sha512-Kw2NHWktdcdypCj1GkKpXH4o6Vxz8B8TykPlPuLHOGSV8VkhoCLcFOH4k19K4LXAQYRQmxg+0X/eM+m2sLhAkg== + dependencies: + shikiji-core "0.9.19" + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1, signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0, simple-get@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +sitemap@^7.1.1: + version "7.1.1" + resolved "https://registry.npmmirror.com/sitemap/-/sitemap-7.1.1.tgz#eeed9ad6d95499161a3eadc60f8c6dce4bea2bef" + integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== + dependencies: + "@types/node" "^17.0.5" + "@types/sax" "^1.2.1" + arg "^5.0.0" + sax "^1.2.4" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +slice-ansi@^7.0.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" + integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== + dependencies: + ansi-styles "^6.2.1" + is-fullwidth-code-point "^5.0.0" + +source-map-js@^1.0.1, source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stdin-discarder@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/stdin-discarder/-/stdin-discarder-0.1.0.tgz#22b3e400393a8e28ebf53f9958f3880622efde21" + integrity sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ== + dependencies: + bl "^5.0.0" + +streamx@^2.13.0, streamx@^2.15.0: + version "2.16.1" + resolved "https://registry.npmmirror.com/streamx/-/streamx-2.16.1.tgz#2b311bd34832f08aa6bb4d6a80297c9caef89614" + integrity sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ== + dependencies: + fast-fifo "^1.1.0" + queue-tick "^1.0.1" + optionalDependencies: + bare-events "^2.2.0" + +string-argv@0.3.2: + version "0.3.2" + resolved "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string-width@^6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/string-width/-/string-width-6.1.0.tgz#96488d6ed23f9ad5d82d13522af9e4c4c3fd7518" + integrity sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^10.2.1" + strip-ansi "^7.0.1" + +string-width@^7.0.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/string-width/-/string-width-7.1.0.tgz#d994252935224729ea3719c49f7206dc9c46550a" + integrity sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw== + dependencies: + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" + +string.prototype.codepointat@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz#004ad44c8afc727527b108cd462b4d971cd469bc" + integrity sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg== + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +stringify-entities@^4.0.0: + version "4.0.3" + resolved "https://registry.npmmirror.com/stringify-entities/-/stringify-entities-4.0.3.tgz#cfabd7039d22ad30f3cc435b0ca2c1574fc88ef8" + integrity sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1, strip-ansi@^7.1.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + +strip-bom@4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-json-comments@3.1.1, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + +strtok3@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/strtok3/-/strtok3-7.0.0.tgz#868c428b4ade64a8fd8fee7364256001c1a4cbe5" + integrity sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^5.0.0" + +sucrase@^3.32.0: + version "3.35.0" + resolved "https://registry.npmmirror.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "^10.3.10" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +suf-log@^2.5.3: + version "2.5.3" + resolved "https://registry.npmmirror.com/suf-log/-/suf-log-2.5.3.tgz#0919a7fceea532a99b578c97814c4e335b2d64d1" + integrity sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow== + dependencies: + s.color "0.0.15" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svgo@^3.1.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/svgo/-/svgo-3.2.0.tgz#7a5dff2938d8c6096e00295c2390e8e652fa805d" + integrity sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^5.1.0" + css-tree "^2.3.1" + css-what "^6.1.0" + csso "^5.0.5" + picocolors "^1.0.0" + +synckit@^0.9.0: + version "0.9.0" + resolved "https://registry.npmmirror.com/synckit/-/synckit-0.9.0.tgz#5b33b458b3775e4466a5b377fba69c63572ae449" + integrity sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +table@^6.8.1: + version "6.8.1" + resolved "https://registry.npmmirror.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tailwindcss@^3.4.1: + version "3.4.1" + resolved "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d" + integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA== + dependencies: + "@alloc/quick-lru" "^5.2.0" + arg "^5.0.2" + chokidar "^3.5.3" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.3.0" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.19.1" + lilconfig "^2.1.0" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.23" + postcss-import "^15.1.0" + postcss-js "^4.0.1" + postcss-load-config "^4.0.1" + postcss-nested "^6.0.1" + postcss-selector-parser "^6.0.11" + resolve "^1.22.2" + sucrase "^3.32.0" + +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-fs@^3.0.4: + version "3.0.5" + resolved "https://registry.npmmirror.com/tar-fs/-/tar-fs-3.0.5.tgz#f954d77767e4e6edf973384e1eb95f8f81d64ed9" + integrity sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg== + dependencies: + pump "^3.0.0" + tar-stream "^3.1.5" + optionalDependencies: + bare-fs "^2.1.1" + bare-path "^2.1.0" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar-stream@^3.1.5: + version "3.1.7" + resolved "https://registry.npmmirror.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + +terser@^5.15.1: + version "5.28.1" + resolved "https://registry.npmmirror.com/terser/-/terser-5.28.1.tgz#bf00f7537fd3a798c352c2d67d67d65c915d1b28" + integrity sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +throttles@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/throttles/-/throttles-1.0.1.tgz#3abdcde28df88d5eddf7e57cad8da35bd403ddd0" + integrity sha512-fab7Xg+zELr9KOv4fkaBoe/b3L0GMGLd0IBSCn16GoE/Qx6/OfCr1eGNyEcDU2pUA79qQfZ8kPQWlRuok4YwTw== + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tiny-inflate@^1.0.0: + version "1.0.3" + resolved "https://registry.npmmirror.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" + integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +token-types@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/token-types/-/token-types-5.0.1.tgz#aa9d9e6b23c420a675e55413b180635b86a093b4" + integrity sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + +trough@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== + +ts-api-utils@^1.0.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" + integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +tsconfck@^3.0.0: + version "3.0.2" + resolved "https://registry.npmmirror.com/tsconfck/-/tsconfck-3.0.2.tgz#d8e279f7a049d55f207f528d13fa493e1d8e7ceb" + integrity sha512-6lWtFjwuhS3XI4HsX4Zg0izOI3FU/AI9EGVlPEUMDIhvLPMD4wkiof0WCoDgW7qY+Dy198g4d9miAqUHWHFH6Q== + +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.8.0: + version "0.8.1" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-fest@^2.13.0: + version "2.19.0" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + +type-fest@^3.0.0: + version "3.13.1" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" + integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== + +typesafe-path@^0.2.2: + version "0.2.2" + resolved "https://registry.npmmirror.com/typesafe-path/-/typesafe-path-0.2.2.tgz#91a436681b2f514badb114061b6a5e5c2b8943b1" + integrity sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA== + +typescript-auto-import-cache@^0.3.1: + version "0.3.2" + resolved "https://registry.npmmirror.com/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.2.tgz#89b1ab7cb6786b8e18dda735a30ec1e7d48a2679" + integrity sha512-+laqe5SFL1vN62FPOOJSUDTZxtgsoOXjneYOXIpx5rQ4UMiN89NAtJLpqLqyebv9fgQ/IMeeTX+mQyRnwvJzvg== + dependencies: + semver "^7.3.8" + +typescript@^5.3.3: + version "5.3.3" + resolved "https://registry.npmmirror.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + +ultrahtml@^1.3.0: + version "1.5.3" + resolved "https://registry.npmmirror.com/ultrahtml/-/ultrahtml-1.5.3.tgz#e7a903a4b28a0e49b71b0801b444050bb0a369c7" + integrity sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici@^5.22.1, undici@^5.24.0: + version "5.28.3" + resolved "https://registry.npmmirror.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" + integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== + dependencies: + "@fastify/busboy" "^2.0.0" + +unherit@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/unherit/-/unherit-3.0.1.tgz#65b98bb7cb58cee755d7ec699a49e9e8ff172e23" + integrity sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg== + +unicode-trie@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" + integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== + dependencies: + pako "^0.2.5" + tiny-inflate "^1.0.0" + +unified@^10.0.0: + version "10.1.2" + resolved "https://registry.npmmirror.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" + integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== + dependencies: + "@types/unist" "^2.0.0" + bail "^2.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^5.0.0" + +unified@^11.0.0, unified@^11.0.4: + version "11.0.4" + resolved "https://registry.npmmirror.com/unified/-/unified-11.0.4.tgz#f4be0ac0fe4c88cb873687c07c64c49ed5969015" + integrity sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ== + dependencies: + "@types/unist" "^3.0.0" + bail "^2.0.0" + devlop "^1.0.0" + extend "^3.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^6.0.0" + +unist-util-is@^5.0.0: + version "5.2.1" + resolved "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9" + integrity sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-is@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" + integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-modify-children@^3.0.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/unist-util-modify-children/-/unist-util-modify-children-3.1.1.tgz#c4018b86441aa3b54b3edff1151d0aa062384c82" + integrity sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA== + dependencies: + "@types/unist" "^2.0.0" + array-iterate "^2.0.0" + +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-stringify-position@^3.0.0: + version "3.0.3" + resolved "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" + integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-visit-children@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/unist-util-visit-children/-/unist-util-visit-children-2.0.2.tgz#0f00a5caff567074568da2d89c54b5ee4a8c5440" + integrity sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-visit-parents@^5.1.1: + version "5.1.3" + resolved "https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb" + integrity sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + +unist-util-visit-parents@^6.0.0: + version "6.0.1" + resolved "https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" + integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + +unist-util-visit@^4.0.0: + version "4.1.2" + resolved "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2" + integrity sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + unist-util-visit-parents "^5.1.1" + +unist-util-visit@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpic@^3.16.0: + version "3.17.0" + resolved "https://registry.npmmirror.com/unpic/-/unpic-3.17.0.tgz#6b39f850b9619b091b32960545ba213d20a4b05b" + integrity sha512-1b0ACPDLWqDE4MJ+IW5e48pGVSA5zKU2nF05EDxl/vvHq610MnfHNczIm6RBNPKuAA+G1tQ2ef1mgxj5J7+plw== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +vfile-location@^5.0.0: + version "5.0.2" + resolved "https://registry.npmmirror.com/vfile-location/-/vfile-location-5.0.2.tgz#220d9ca1ab6f8b2504a4db398f7ebc149f9cb464" + integrity sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg== + dependencies: + "@types/unist" "^3.0.0" + vfile "^6.0.0" + +vfile-message@^3.0.0: + version "3.1.4" + resolved "https://registry.npmmirror.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" + integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^3.0.0" + +vfile-message@^4.0.0: + version "4.0.2" + resolved "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" + integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" + +vfile@^5.0.0: + version "5.3.7" + resolved "https://registry.npmmirror.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7" + integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^3.0.0" + vfile-message "^3.0.0" + +vfile@^6.0.0, vfile@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/vfile/-/vfile-6.0.1.tgz#1e8327f41eac91947d4fe9d237a2dd9209762536" + integrity sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" + vfile-message "^4.0.0" + +vite@^5.1.4: + version "5.1.4" + resolved "https://registry.npmmirror.com/vite/-/vite-5.1.4.tgz#14e9d3e7a6e488f36284ef13cebe149f060bcfb6" + integrity sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg== + dependencies: + esbuild "^0.19.3" + postcss "^8.4.35" + rollup "^4.2.0" + optionalDependencies: + fsevents "~2.3.3" + +vitefu@^0.2.5: + version "0.2.5" + resolved "https://registry.npmmirror.com/vitefu/-/vitefu-0.2.5.tgz#c1b93c377fbdd3e5ddd69840ea3aa70b40d90969" + integrity sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q== + +volar-service-css@0.0.30: + version "0.0.30" + resolved "https://registry.npmmirror.com/volar-service-css/-/volar-service-css-0.0.30.tgz#cbd2ac6a013bd4f9d8aa95efef4b764f8d4e1292" + integrity sha512-jui+1N0HBfjW43tRfhyZp0axhBee4997BRyX4os8xQm/7cjD2KjAuyz92nMIPRt1QDoG4/7uQT28xNhy0TPJTA== + dependencies: + vscode-css-languageservice "^6.2.10" + vscode-uri "^3.0.8" + +volar-service-emmet@0.0.30: + version "0.0.30" + resolved "https://registry.npmmirror.com/volar-service-emmet/-/volar-service-emmet-0.0.30.tgz#2069779ae2eb4ed18a71bef45ef2dbe61722e6b8" + integrity sha512-HEeIrmqQ/DTfuQDI9ER5+YReXXjE9f7W6MlBmn5biUuPyizVTGfuILN8pJhmYvmPHCA7qHhU7CJqwE9DAh9AJg== + dependencies: + "@vscode/emmet-helper" "^2.9.2" + volar-service-html "0.0.30" + +volar-service-html@0.0.30: + version "0.0.30" + resolved "https://registry.npmmirror.com/volar-service-html/-/volar-service-html-0.0.30.tgz#79763957afbc9ca8057324e44cff9e803b42f200" + integrity sha512-wW3TEeRTeHv/3mC8Ik6T62SwewMWFungb8ydyEK/2GDHEntBEG/J9wtuh01/J0kYqPerhlT9zhdGB6PGYHAGuA== + dependencies: + vscode-html-languageservice "^5.1.0" + vscode-uri "^3.0.8" + +volar-service-prettier@0.0.30: + version "0.0.30" + resolved "https://registry.npmmirror.com/volar-service-prettier/-/volar-service-prettier-0.0.30.tgz#027f719486c7e9f120f5c6232ebae8d7c61848ba" + integrity sha512-Qdc5Zc0y4hJmJbpIQ52cSDjs0uvVug/e2nuL/XZWPJM6Cr5/3RjjoRVKtDQbKItFYlGk+JH+LSXvwQeD5TXZqg== + dependencies: + vscode-uri "^3.0.8" + +volar-service-typescript-twoslash-queries@0.0.30: + version "0.0.30" + resolved "https://registry.npmmirror.com/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.30.tgz#50f2e7dd3a2a0a97b8f691f949b7f7ff70ed30d5" + integrity sha512-ahj6woBxhkZu7icQR58x5TnUaS8ZRKn7a+UvY+andmiTWsOaSu85zj36+LPZgZQi1MG+BtjNwUjKoxtZiN51PA== + +volar-service-typescript@0.0.30: + version "0.0.30" + resolved "https://registry.npmmirror.com/volar-service-typescript/-/volar-service-typescript-0.0.30.tgz#2009023908fae70c148fc733126151eb703e4c6a" + integrity sha512-jA8c0Mhy9rgAsrgtwocK95Smws1M2E0MxlQ/SVo/rmOGH32cX9UGgI0IENWKa3yagp/khfoemOIQDz/KNhI3zg== + dependencies: + path-browserify "^1.0.1" + semver "^7.5.4" + typescript-auto-import-cache "^0.3.1" + vscode-languageserver-textdocument "^1.0.11" + vscode-nls "^5.2.0" + vscode-uri "^3.0.8" + +vscode-css-languageservice@^6.2.10: + version "6.2.12" + resolved "https://registry.npmmirror.com/vscode-css-languageservice/-/vscode-css-languageservice-6.2.12.tgz#f8f9f335fb4b433f557c51c62e687b4f62c0c786" + integrity sha512-PS9r7HgNjqzRl3v91sXpCyZPc8UDotNo6gntFNtGCKPhGA9Frk7g/VjX1Mbv3F00pn56D+rxrFzR9ep4cawOgA== + dependencies: + "@vscode/l10n" "^0.0.18" + vscode-languageserver-textdocument "^1.0.11" + vscode-languageserver-types "3.17.5" + vscode-uri "^3.0.8" + +vscode-html-languageservice@^5.1.0, vscode-html-languageservice@^5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/vscode-html-languageservice/-/vscode-html-languageservice-5.1.2.tgz#8309fa7f319c873af11cf23ddbba4e68d6c42e2c" + integrity sha512-wkWfEx/IIR3s2P5yD4aTGHiOb8IAzFxgkSt1uSC3itJ4oDAm23yG7o0L29JljUdnXDDgLafPAvhv8A2I/8riHw== + dependencies: + "@vscode/l10n" "^0.0.18" + vscode-languageserver-textdocument "^1.0.11" + vscode-languageserver-types "^3.17.5" + vscode-uri "^3.0.8" + +vscode-jsonrpc@8.2.0: + version "8.2.0" + resolved "https://registry.npmmirror.com/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz#f43dfa35fb51e763d17cd94dcca0c9458f35abf9" + integrity sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA== + +vscode-languageserver-protocol@3.17.5, vscode-languageserver-protocol@^3.17.5: + version "3.17.5" + resolved "https://registry.npmmirror.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz#864a8b8f390835572f4e13bd9f8313d0e3ac4bea" + integrity sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg== + dependencies: + vscode-jsonrpc "8.2.0" + vscode-languageserver-types "3.17.5" + +vscode-languageserver-textdocument@^1.0.1, vscode-languageserver-textdocument@^1.0.11: + version "1.0.11" + resolved "https://registry.npmmirror.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz#0822a000e7d4dc083312580d7575fe9e3ba2e2bf" + integrity sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA== + +vscode-languageserver-types@3.17.5, vscode-languageserver-types@^3.15.1, vscode-languageserver-types@^3.17.5: + version "3.17.5" + resolved "https://registry.npmmirror.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz#3273676f0cf2eab40b3f44d085acbb7f08a39d8a" + integrity sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg== + +vscode-languageserver@^9.0.1: + version "9.0.1" + resolved "https://registry.npmmirror.com/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz#500aef82097eb94df90d008678b0b6b5f474015b" + integrity sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g== + dependencies: + vscode-languageserver-protocol "3.17.5" + +vscode-nls@^5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/vscode-nls/-/vscode-nls-5.2.0.tgz#3cb6893dd9bd695244d8a024bdf746eea665cc3f" + integrity sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng== + +vscode-uri@^2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c" + integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A== + +vscode-uri@^3.0.8: + version "3.0.8" + resolved "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f" + integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +web-namespaces@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" + integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== + +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +which-pm-runs@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/which-pm-runs/-/which-pm-runs-1.1.0.tgz#35ccf7b1a0fce87bd8b92a478c9d045785d3bf35" + integrity sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA== + +which-pm@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/which-pm/-/which-pm-2.0.0.tgz#8245609ecfe64bf751d0eef2f376d83bf1ddb7ae" + integrity sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w== + dependencies: + load-yaml-file "^0.2.0" + path-exists "^4.0.0" + +which-pm@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/which-pm/-/which-pm-2.1.1.tgz#0be2b70c67e94a32e87b9768a94a7f0954f2dcfa" + integrity sha512-xzzxNw2wMaoCWXiGE8IJ9wuPMU+EYhFksjHxrRT8kMT5SnocBPRg69YAMtyV4D12fP582RA+k3P8H9J5EMdIxQ== + dependencies: + load-yaml-file "^0.2.0" + path-exists "^4.0.0" + +which@^1.2.14: + version "1.3.1" + resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" + integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== + dependencies: + string-width "^5.0.1" + +word-wrap@^1.0.3: + version "1.2.5" + resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrap-ansi@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e" + integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== + dependencies: + ansi-styles "^6.2.1" + string-width "^7.0.0" + strip-ansi "^7.1.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@2.3.4: + version "2.3.4" + resolved "https://registry.npmmirror.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" + integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== + +yaml@^2.3.4: + version "2.4.0" + resolved "https://registry.npmmirror.com/yaml/-/yaml-2.4.0.tgz#2376db1083d157f4b3a452995803dbcf43b08140" + integrity sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== + +yoga-wasm-web@^0.3.3: + version "0.3.3" + resolved "https://registry.npmmirror.com/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz#eb8e9fcb18e5e651994732f19a220cb885d932ba" + integrity sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA== + +zod@^3.22.4: + version "3.22.4" + resolved "https://registry.npmmirror.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== + +zwitch@^2.0.0, zwitch@^2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== From 47161d1d77b463a5cb8ed1d8952eb3a870b170d1 Mon Sep 17 00:00:00 2001 From: Cheng Ziqiu Date: Mon, 4 Mar 2024 18:35:22 +0800 Subject: [PATCH 4/7] feat: github actions. --- .github/workflows/deploy.yml | 39 ++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..756c575 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,39 @@ +name: Deploy to GitHub Pages + +on: + # Trigger the workflow every time you push to the `main` branch + # Using a different branch name? Replace `main` with your branch’s name + push: + branches: [ main ] + # Allows you to run this workflow manually from the Actions tab on GitHub. + workflow_dispatch: + +# Allow this job to clone the repo and create a page deployment +permissions: + contents: read + pages: write + id-token: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout your repository using git + uses: actions/checkout@v4 + - name: Install, build, and upload your site + uses: withastro/action@v2 + with: + path: pages # The root location of your Astro project inside the repository. (optional) + # node-version: 20 # The specific version of Node that should be used to build your site. Defaults to 20. (optional) + # package-manager: pnpm@latest # The Node package manager that should be used to install dependencies and build your site. Automatically detected based on your lockfile. (optional) + + deploy: + needs: build + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 From 6c22de5a47d7572bed61e6d0c856fad65ec2af65 Mon Sep 17 00:00:00 2001 From: Cheng Ziqiu Date: Mon, 4 Mar 2024 18:38:02 +0800 Subject: [PATCH 5/7] fix(pages): remove husky hook. --- pages/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/pages/package.json b/pages/package.json index 4867384..e23940c 100644 --- a/pages/package.json +++ b/pages/package.json @@ -11,7 +11,6 @@ "format:check": "prettier --check . --plugin=prettier-plugin-astro", "format": "prettier --write . --plugin=prettier-plugin-astro", "cz": "cz", - "prepare": "husky install", "lint": "eslint ." }, "dependencies": { From d71a599f12e063a010c5ce8157418f3763de7f59 Mon Sep 17 00:00:00 2001 From: Cheng Ziqiu Date: Mon, 4 Mar 2024 18:42:48 +0800 Subject: [PATCH 6/7] fix: --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 756c575..c8c089b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,7 +4,7 @@ on: # Trigger the workflow every time you push to the `main` branch # Using a different branch name? Replace `main` with your branch’s name push: - branches: [ main ] + branches: [ master ] # Allows you to run this workflow manually from the Actions tab on GitHub. workflow_dispatch: From 7aaf45727f354e890e6481d036816e905a80a69c Mon Sep 17 00:00:00 2001 From: Cheng Ziqiu Date: Mon, 4 Mar 2024 18:48:25 +0800 Subject: [PATCH 7/7] chore: update website url. --- pages/src/config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/src/config.ts b/pages/src/config.ts index b09b030..e95f069 100644 --- a/pages/src/config.ts +++ b/pages/src/config.ts @@ -1,7 +1,7 @@ import type { Site, SocialObjects } from "./types"; export const SITE: Site = { - website: "https://astro-paper.pages.dev/", // replace this with your deployed domain + website: "https://hctt.hust.college/", // replace this with your deployed domain author: "HCTT", desc: "A minimal, responsive and SEO-friendly Astro blog theme.", title: "HCTT",
  • bdGW9uFle0$38JwR0@>Q&+|PNO61F(@FG|D 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≪v9O9LzX=nrvY3*N{lj!Hb-10xe&#T%WofrqzW*1dD|zI$ zb`THDNmI)}u)vF=fL(>XxSBK1eS@v|{pQ)au7;l}J`B5E(#Wb*!1PEX7Ts`(V#0ao zh6o6E;hNXST`heNqjjiYyLGy$YnMwMv%$?7MYVZw?(pGJ7WZu%e;NIyI!vmYht^b? z0|_@8pm1!0WIe?DmuNgQ_L_iTxaK7bWgk=~3XuWgHKn+PVi=$B{s(6*mzSY@y({{a z!fr}Yo2R*{Q-Q-t-2WOzjYVz1(yL!%IvKxYe5rR#JHjX&4x^>p`-k~vjPxWtUPS@H zE;C)|A8rKjiL%jz&HWO;wC+t*Q(3H>*s)mLWI0@0KZu5 z0Y0o)8|3i);#6P^-_jKL0)>sd>=U9_J8nAU!?XxML4mud#VN#$f!V;IIBxbZX!0=V zYbQ#W5`w)~S~|;)HUVfu8049?>ZceH4DnI?a+vW({U;*abm5)}J`Z%t+TNsG$zl)~jPAG7KD) zFnatPf-Uxv!t(={taYqxvjN7%wh-w9+_GK8W|5V#bsXE|j(Zt9UZqpS^f)&5wT$@k zkZ+!lx&g?+Q*^9&-}6_c#1Us!GHTY3%6(4i191CfsSi7_``O{%!5dpsH}AN};mxhx zgT0;4K6w34pHMp+n}D04$<2}U+%Xo_|lOUOLU{Gp|7$R`efDI=c|u$ za3qdQNQ#R`_K&iPnC&KTlQdlyema^2zWUAHhD(H1h-)R>K{_Y!3a=)>7rl{WD7azO zO$|)46DC7|A;{<<+5)zy*g+f#N>-v;9|4bn#IdUMy1%0D4m}b4(5|8={LeP+mEr}u zgI&S=1d_jg2VVnlSsmTb3X(N`jMWYR^8*+MriT&il+!^(<;RD6Z%q9#YZO}Go9YDf z8wWcd1q$!R9vUk&yrLKzpMnK`o2L^K#tqvMCn-j#UEVT~n0>>I0A{4bOf-sQ>NqSo zfF7OWq}kP3L*lr8<*<%nV70KmMuP}myX?SOi(b)pX*&n5u;iTYrgXDbZB7N8Oyn&r zfh!ZS%T?mSZ+V^;(zc+KBvJpx6BFIZMe7(Y3PZCa#|~tUk+{6|@>KEWcVrEAR^^?k0${k-M!a zXYSe?g5DVTLJc#FaDlxP{Pwt4n**A`39n*!mD@cGPM^44chl}fVUK(IRq-zIn|&&8 z&MqszoUQV^x@>Lo{S|=Kpk!i~7Wd6y(luJE(-`A=9cpHTY--KoUl3?EN!R>5BGe{W zM(T-p=E1%^?g$(rTU+qnb8)^8gjvnFfe}M4b z$9nqSeJ~Xl6Th%Pa;NyI8$PI9C#{la#wz8oxF@S846`#%EH;M>R$wy}#Ea>pb9Q~}&3qEYG$ZoH>-M%v?pnN?ifs#3 zanV9k+Gzp1Sp*ECYy-XNG{%xTGdwi+aL^n9XiBDeateALm}&%2=Q0-uTmf5EyOFo! z5j9;{LMD$EixBH#X1^FIFrC-?gF;vvnUT`h6Q@fIf+(rk+y%0 z*xRRRESRJVq;6~dDT8A!3wXS0xct(Jl!+miZwVC`5K>}HI^3eGV%qA?N!2=nYBWcHs2h4r>2V1$#^rec&tQZ zI0bs^;}$1J*)(kq20)Y6RKYym_#Hl1SSV&$ zt@b4~SlH1S`U1L!-?nMJG%F|?v(5SP&6?<@->9-Qm#$|fuXZ$P+5%t6W?Z%FGiy2K zu+c7UnYZf7)n|P=CnasHxL!WmIe#}bLJEM@*q>yuFca#qNwDX7h#TI=nPMe?wjGJ! z((}=8@=Q~)mB@vh^REzC>Ms)h3Z1yQk{Pl%1XaBNAMAsmtuniav3F)S!bVIN2umr^LRM4J;d(;R5!A_5! zars*RTc0j{BOGt70)^L)23UQ^%tNd{H$L(Pa#@%=+MF_?Ho;4ar>y&UIq2qRUw-BJ z=U=(^Swz4SqSfISSLl*3v-j@nFTUYtdbiCzE<;+wwRS&xcaKyKstStToWQWChxcP@ zniNLWE)?bAS~$u(FERFojnY0#xROw0Z@z=JR|15!wgah9pOr4}ZkVomaR@SDSqtDw z_6}Uz3W2@ZYXW##)DCjicUWOBiZ;cmMOwIdrH8h@M%ZSG?-~9aV?=AHE^JjfVWI_&G4XuI8v*-4VyGl>vR}qJLK_omf zjK{l&qOW#Wgg-#~gpIN!rOV1|dTfLWAzIOf;JV;QE}iIxHx2$=%=r zz_^06aTuMVG{=vbB-EkEU!Gwb1UT?Yz?F+LNAAhE%L_)^5x7MbDz(Yb)($u7Hfgf; z%UnPG@)NXs6v$4^glV#VATli)*6r)QJ<>&@CcsFiZXkdoA$xGR|DE)+^!C1CbbTH7 z<4UKs;ets%Z`32!oD@NgCy_#x|ITPq5MF#>a#nP}{fYOaS2y*wWVZ_Zm`85j6~~m_ zd>&sfoqv>*qCi}YV8^F5U^lK8LN^)ZUL?X8G$w(EOW7mD#xSk)g%}f?i=%5Ilh6yd zeg?4{ASwh$2rDsdCzR@a9EMS1x&y_HYS`iMdf6@xBW{G#HZV&dHhwk%SXpcUoT=?b z@xR|Uv)76$X)P-Tz0DJhxI@1A5<4jf;TZGMO9xAR_zSb>Sk?UZf;g_q3yJ5z+_()O zH%A-3R26aSCONi}cde^gOAo>sBK6MVpl4B%z1O~$1Nh2hrbOvF)1B&ur9l}2KLOZt zA>v13H3FDGgatQ&N2~4&zc{F`AH^NXnj@yd$8!?XA~0^_P3Doxs0qxD;jR&1Py}#% z{c7X*=|9K(tn9ABWaQT{^v#^F>R2Wx8$i@)kDlH68O}Dz^LbgvU`L^n>8gN9T2T#RqV9d{sO-^e-?xH*G&W@eHyk%czSx|t=d&l ziz@Ws2*ATN(|5w_$&8v=5_=W`;3Ec)2;Vg;pV1R|Jw0Qe{k&rWxFvQcMrExkqC*tU zvfP(<Ba`3E*o8;dbVlf%*aLcdsZ)gWLwtmqYAeB&9(DeSL$m z)@@hRp~&5hy49NFxGM2CQkU3mWbdknF4tkEcfvGt23;-o*rc(Yu~puP%Rykg5An;$ z=`!M9M!>&qY3j_lMWYh~*pZNuF9ZU90&wIn3A}uH@>)Ub{_i(01HjChD-)2sSMsp6 zBbcUZJ_sz4zd`q?|5?S9zc}DA775w5N3@97+~fd${oS47Dj;qIgPS;aQWpEgwuXuE zaF~u5bOc`bWN~qH78$GyLK$GJ%wa*wLk1G7<8Y-#z^{t3w3KvrkMN*%q#4#)QR)NE z*SnP37j>5OlJGJs#qT4?+Ya9l@`Aaj;p|zq8COPLxgNTj&kL_loGxD{j(Ze%^%qtJ zVrIACE+OX4d&Qs@=EjMhvKlPK!VI&KAzCtb7Xh%c&nf$rTKfo{JV?LUkw1RN^&~_KmJ~)&SrzRH9p5!Em5m?^z&Y#;z|+4j5MyE1uU=0+(rm1tt<{l04srAMPL3W^uLoQac(c;{3>aH zbHjpGu(>o8-io6VO+oDDwW1)xw=|&$Wno-Z&qyn($XsQz{9q4Cf78v-Ri7>jl&L6V zHa77Zd+LtWCN^7Ts@X8!VRet}rC#JiH;usr2zPrM%eB902qh#)*#A` z%B^Kh6K{>Uy6D&=D2f2~(KW=uQvz_MM*Nf{gh##U|M`579BQa$!?(4P*E!8m9v|2y zMq7RG&8vH_zq`ebVw@=9wNev&{#8Tp;Xjso=BG0fS*5x|;dR4K0BWj3N${H;nkBUvEq!c>x1 z@QtDG$|AR+zW)yOarczC%abbdmzic3QCxqHA78D2SQg2vst%Z8%#}DOR0Ek|oB10N z%+5W#U{S)181LrqqYLk|Ulsy@KjAHkb?s9A)pf}#VceO57J!P-Y12OOi{hB>_2i_l zN_e!WQ7xHo(aVnbt<`$eUGEJ6uoBw&AnG@tzV-3D?tl8#<4Ndjd^RD=3XJP+UWCRY z_uG2qUDFp^RjYGN_vUMD?2*i?bi&B3MhL66VDa%$TPr+2yqqUX7VP30s!_Cjp|k2!>BReO#ZgXn2R4q z5Py6?FAHgdg*NI9Qies-(`$DKByD@R3q$OhQ>)dymiO=um&Pw^!+Nt;wg`mf>6Sx+ z3(8vEQP>HybNlqMi-4iCM**5%Erv>JUQYf=h&|IC?3&zw1P z&;Hi}@TG`Yl&~mhBT4m`tH&1B{8LQ%f<<07prjwA@7Z`g=+#yLOH=&p+*3TyQQ^{u~#YX{p8?sO%ntt5rD4Rs}bqqOHqC4*1X zar>XSoOI79EuP5VRgKXijC(g*@;e<`DQ#r$&-Hq64{gil(kVPuDpj3(Sd14mzoi|r5} zo$&=e%51ZhC@A?6zaat+3FrvmLS}npKg#Dd=$Z4f{PW&Z=u6hG5gj|M9JxHqk8U^p zFAiog>}9%o>&oQ?tIIvbTz&>#6xu4utOS>pja|gRaoBX}y50>Rs^$=D-GlNPT8x2l zbxc>17e;7F4a20v>RHJviIHS+*{pQ5YMz2_fG_`%h+f}qP2$$DS6dl1cKI>~kt>_s z-Py~lpF0${$(M(aS38G9sgpNnE{n)p&s}bmAf2uUu$R^K1wV(evkfDW1mFt-u(*&RIF3tVx^_ykIjXT{^y3*)(D&e; zbkj`=fzP_HG>hx_)39|!O0!@yEgkoC;4eHrsR3B*C4yPQ?0k|kWYkBv4guYcOz_vi&u%IO4U6HrHr`L_Ql0;x4Hf;M-B3!) zG$YG=V(NMT4^yPA(#fchxb@Oh*<>aqeZ&ZO_X;E650HQkdgH>UhZpC1@$-YT1eh3+ z0K9wYTL<7$fF|DHp_z{(LEy6&F1R}XTli1&u938UhyBMl!UJCQCl}6+)c1Mu+g`m*D(ruAOcz0k{Yw{rNVOjjeG-`$zWYJ? z`O=w@6aY+J_?fz}?&!P!*4JKd?T>Q3_2rS?n%AEBl6vR9TSk=l{K%8vJH7Cbe|S9s zI8N~~G@d#Crq%8?#J2M3f6K9;_e1ZzLP7$GS@t>K?_*g zrEF}0#5nB=A|E*{>!biyNAER#*kyoTEA{#|iQz6hsH4-MIL;YG7-~hY2EE)c!H%G? z8?X8B+O%p03_fAJ%Rg~Bs}1iJVlI3QSw6nSZMDGJbgHIh6+72tQgU?B1$;P}EINU& zAYgJjd+`Xqz%TUn*+uYc0RA