diff --git a/.editorconfig b/.editorconfig index 34e2c9cf..676450e2 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,6 +8,6 @@ charset = utf-8 trim_trailing_whitespace = true indent_style = tab -[*.{md,mdx,yml,yaml,json,toml,htm,html,js,ts,css,svg,sh,bash,fish}] +[*.{md,mdx,yml,yaml,json,toml,htm,html,js,ts,vue,css,svg,sh,bash,fish}] indent_style = space indent_size = 2 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 59969225..4270a5b3 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -40,35 +40,4 @@ jobs: run: python -m pip install 'check-jsonschema==0.27.3' - name: check-jsonschema (metaschema) - run: check-jsonschema --check-metaschema website/static/schema.json - check_doc: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Get changed files in the docs folder - id: changed-files-specific - uses: tj-actions/changed-files@v46 - with: - files: website/versioned_docs/** - - - uses: actions/github-script@v7 - if: steps.changed-files-specific.outputs.any_changed == 'true' - with: - script: | - core.setFailed('website/versioned_docs has changed. Instead you need to update the docs in the website/docs folder.') - check_schema: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Get changed files in the docs folder - id: changed-files-specific - uses: tj-actions/changed-files@v46 - with: - files: | - website/static/schema.json - website/static/schema-taskrc.json - - uses: actions/github-script@v7 - if: steps.changed-files-specific.outputs.any_changed == 'true' - with: - script: | - core.setFailed('schema.json or schema-taskrc.json has changed. Instead you need to update next-schema.json or next-schema-taskrc.json.') + run: check-jsonschema --check-metaschema website/src/public/schema.json diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4f280214..05bf5099 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,6 +19,18 @@ jobs: with: go-version: 1.24.x + - name: Install Task + uses: arduino/setup-task@v2 + + - name: Install pnpm + uses: pnpm/action-setup@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: '22.x' + cache: 'pnpm' + - name: Run GoReleaser uses: goreleaser/goreleaser-action@v6 with: @@ -28,3 +40,8 @@ jobs: env: GITHUB_TOKEN: ${{secrets.GH_PAT}} GORELEASER_KEY: ${{secrets.GORELEASER_KEY}} + + - name: Deploy Website + shell: bash + run: | + task website:deploy:prod diff --git a/cmd/release/main.go b/cmd/release/main.go index 4378598c..784a10b4 100644 --- a/cmd/release/main.go +++ b/cmd/release/main.go @@ -9,21 +9,14 @@ import ( "time" "github.com/Masterminds/semver/v3" - "github.com/otiai10/copy" "github.com/spf13/pflag" "github.com/go-task/task/v3/errors" ) const ( - changelogSource = "CHANGELOG.md" - changelogTarget = "website/docs/changelog.mdx" - docsSource = "website/docs" - docsTarget = "website/versioned_docs/version-latest" - schemaSource = "website/static/next-schema.json" - schemaTarget = "website/static/schema.json" - schemaTaskrcSource = "website/static/next-schema-taskrc.json" - schemaTaskrcTarget = "website/static/schema-taskrc.json" + changelogSource = "CHANGELOG.md" + changelogTarget = "website/docs/changelog.md" ) var ( @@ -83,14 +76,6 @@ func release() error { return err } - if err := docs(); err != nil { - return err - } - - if err := schema(); err != nil { - return err - } - return nil } @@ -173,23 +158,3 @@ func setJSONVersion(fileName string, version *semver.Version) error { // Write the JSON file return os.WriteFile(fileName, []byte(new), 0o644) } - -func docs() error { - if err := os.RemoveAll(docsTarget); err != nil { - return err - } - if err := copy.Copy(docsSource, docsTarget); err != nil { - return err - } - return nil -} - -func schema() error { - if err := copy.Copy(schemaSource, schemaTarget); err != nil { - return err - } - if err := copy.Copy(schemaTaskrcSource, schemaTaskrcTarget); err != nil { - return err - } - return nil -} diff --git a/website/.gitignore b/website/.gitignore index dc870cdb..b2d2e08d 100644 --- a/website/.gitignore +++ b/website/.gitignore @@ -1,21 +1,9 @@ # Dependencies /node_modules -# Production -/build - -# Generated files -.docusaurus -.cache-loader -i18n - -# Misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - npm-debug.log* yarn-debug.log* yarn-error.log* +.vitepress/cache +.vitepress/dist +.task/ diff --git a/website/.nojekyll b/website/.nojekyll deleted file mode 100644 index e69de29b..00000000 diff --git a/website/.prettierignore b/website/.prettierignore new file mode 100644 index 00000000..bd5535a6 --- /dev/null +++ b/website/.prettierignore @@ -0,0 +1 @@ +pnpm-lock.yaml diff --git a/website/.vitepress/components.d.ts b/website/.vitepress/components.d.ts new file mode 100644 index 00000000..64c3fd9e --- /dev/null +++ b/website/.vitepress/components.d.ts @@ -0,0 +1,5 @@ +declare module '*.vue' { + import type { DefineComponent } from 'vue'; + const component: DefineComponent<{}, {}, any>; + export default component; +} diff --git a/website/.vitepress/components/AuthorCard.vue b/website/.vitepress/components/AuthorCard.vue new file mode 100644 index 00000000..bd0255c1 --- /dev/null +++ b/website/.vitepress/components/AuthorCard.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/website/.vitepress/components/BlogPost.vue b/website/.vitepress/components/BlogPost.vue new file mode 100644 index 00000000..b7a50076 --- /dev/null +++ b/website/.vitepress/components/BlogPost.vue @@ -0,0 +1,182 @@ + + + + + diff --git a/website/.vitepress/components/HomePage.vue b/website/.vitepress/components/HomePage.vue new file mode 100644 index 00000000..c61123c1 --- /dev/null +++ b/website/.vitepress/components/HomePage.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/website/.vitepress/components/VPTeamMembersItem.vue b/website/.vitepress/components/VPTeamMembersItem.vue new file mode 100644 index 00000000..063ce070 --- /dev/null +++ b/website/.vitepress/components/VPTeamMembersItem.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/website/.vitepress/components/Version.vue b/website/.vitepress/components/Version.vue new file mode 100644 index 00000000..98386659 --- /dev/null +++ b/website/.vitepress/components/Version.vue @@ -0,0 +1,7 @@ + + + diff --git a/website/.vitepress/config.ts b/website/.vitepress/config.ts new file mode 100644 index 00000000..a66dafab --- /dev/null +++ b/website/.vitepress/config.ts @@ -0,0 +1,298 @@ +import { defineConfig } from 'vitepress'; +import githubLinksPlugin from './plugins/github-links'; +import { readFileSync } from 'fs'; +import { resolve } from 'path'; +import { tabsMarkdownPlugin } from 'vitepress-plugin-tabs'; +import { + groupIconMdPlugin, + groupIconVitePlugin +} from 'vitepress-plugin-group-icons'; +import { team } from './team.ts'; +import { ogUrl, taskDescription, taskName } from './meta.ts'; +import { fileURLToPath, URL } from 'node:url'; + +const version = readFileSync( + resolve(__dirname, '../../internal/version/version.txt'), + 'utf8' +).trim(); + +const urlVersion = + process.env.NODE_ENV === 'development' + ? { + current: 'https://taskfile.dev/', + next: 'http://localhost:3002/' + } + : { + current: 'https://taskfile.dev/', + next: 'https://next.taskfile.dev/' + }; + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: taskName, + description: taskDescription, + lang: 'en-US', + head: [ + [ + 'link', + { + rel: 'icon', + type: 'image/x-icon', + href: '/img/favicon.icon', + sizes: '48x48' + } + ], + [ + 'link', + { + rel: 'icon', + sizes: 'any', + type: 'image/svg+xml', + href: '/img/logo.svg' + } + ], + [ + 'link', + { + rel: 'canonical', + href: 'https://taskfile.dev/' + } + ], + [ + 'meta', + { name: 'author', content: `${team.map((c) => c.name).join(', ')}` } + ], + [ + 'meta', + { + name: 'keywords', + content: + 'task runner, build tool, taskfile, yaml build tool, go task runner, make alternative, cross-platform build tool, makefile alternative, automation tool, ci cd pipeline, developer productivity, build automation, command line tool, go binary, yaml configuration' + } + ], + ['meta', { property: 'og:title', content: taskName }], + ['meta', { property: 'og:description', content: taskDescription }], + ['meta', { property: 'og:type', content: 'website' }], + ['meta', { property: 'og:site_name', content: taskName }], + ['meta', { property: 'og:url', content: ogUrl }], + ['meta', { property: 'twitter:card', content: 'summary_large_image' }], + ['meta', { property: 'twitter:title', content: taskName }], + ['meta', { property: 'twitter:description', content: taskDescription }] + ], + srcDir: 'src', + cleanUrls: true, + markdown: { + config: (md) => { + md.use(githubLinksPlugin, { + baseUrl: 'https://github.com', + repo: 'go-task/task' + }); + md.use(tabsMarkdownPlugin); + md.use(groupIconMdPlugin); + } + }, + vite: { + plugins: [groupIconVitePlugin()], + resolve: { + alias: [ + { + find: /^.*\/VPTeamMembersItem\.vue$/, + replacement: fileURLToPath( + new URL('./components/VPTeamMembersItem.vue', import.meta.url) + ) + } + ] + } + }, + + themeConfig: { + logo: '/img/logo.svg', + carbonAds: { + code: 'CESI65QJ', + placement: 'taskfiledev' + }, + search: { + provider: 'local' + // options: { + // appId: '...', + // apiKey: '...', + // indexName: '...' + // } + }, + nav: [ + { text: 'Home', link: '/' }, + { + text: 'Docs', + link: '/docs/guide', + activeMatch: '^/docs' + }, + { text: 'Blog', link: '/blog', activeMatch: '^/blog' }, + { text: 'Donate', link: '/donate' }, + { text: 'Team', link: '/team' }, + { + text: process.env.NODE_ENV === 'development' ? 'Next' : `v${version}`, + items: [ + { + items: [ + { + text: `v${version}`, + link: urlVersion.current + }, + { + text: 'Next', + link: urlVersion.next + } + ] + } + ] + } + ], + + sidebar: { + '/blog/': [ + { + text: '2024', + collapsed: false, + items: [ + { + text: 'Any Variables', + link: '/blog/any-variables' + } + ] + }, + { + text: '2023', + collapsed: false, + items: [ + { + text: 'Introducing Experiments', + link: '/blog/task-in-2023' + } + ] + } + ], + '/': [ + { + text: 'Installation', + link: '/docs/installation' + }, + { + text: 'Getting Started', + link: '/docs/getting-started' + }, + { + text: 'Guide', + link: '/docs/guide' + }, + { + text: 'Reference', + collapsed: true, + items: [ + { + text: 'CLI', + link: '/docs/reference/cli' + }, + { + text: 'Schema', + link: '/docs/reference/schema' + }, + { + text: 'Templating', + link: '/docs/reference/templating' + }, + { + text: 'Package API', + link: '/docs/reference/package' + } + ] + }, + { + text: 'Experiments', + collapsed: true, + link: '/docs/experiments/', + items: [ + { + text: 'Env Precedence (#1038)', + link: '/docs/experiments/env-precedence' + }, + { + text: 'Gentle Force (#1200)', + link: '/docs/experiments/gentle-force' + }, + { + text: 'Remote Taskfiles (#1317)', + link: '/docs/experiments/remote-taskfiles' + } + ] + }, + { + text: 'Deprecations', + collapsed: true, + link: '/docs/deprecations/', + items: [ + { + text: 'Completion Scripts', + link: '/docs/deprecations/completion-scripts' + }, + { + text: 'Template Functions', + link: '/docs/deprecations/template-functions' + }, + { + text: 'Version 2 Schema (#1197)', + link: '/docs/deprecations/version-2-schema' + } + ] + }, + { + text: 'Taskfile Versions', + link: '/docs/taskfile-versions' + }, + { + text: 'Integrations', + link: '/docs/integrations' + }, + { + text: 'Community', + link: '/docs/community' + }, + { + text: 'Style Guide', + link: '/docs/styleguide' + }, + { + text: 'Contributing', + link: '/docs/contributing' + }, + { + text: 'Releasing', + link: '/docs/releasing' + }, + { + text: 'Changelog', + link: '/docs/changelog' + }, + { + text: 'FAQ', + link: '/docs/faq' + } + ], + // Hacky to disable sidebar for these pages + '/donate': [], + '/team': [] + }, + + socialLinks: [ + { icon: 'github', link: 'https://github.com/go-task/task' }, + { icon: 'discord', link: 'https://discord.gg/6TY36E39UK' }, + { icon: 'x', link: 'https://twitter.com/taskfiledev' }, + { icon: 'bluesky', link: 'https://bsky.app/profile/taskfile.dev' }, + { icon: 'mastodon', link: 'https://fosstodon.org/@task' } + ], + + footer: { + message: + 'Built with Netlify' + } + } +}); diff --git a/website/.vitepress/meta.ts b/website/.vitepress/meta.ts new file mode 100644 index 00000000..c6c1108a --- /dev/null +++ b/website/.vitepress/meta.ts @@ -0,0 +1,5 @@ +export const taskName = 'Task'; +export const taskDescription = + 'A fast, cross-platform build tool inspired by Make, designed for modern workflows.'; + +export const ogUrl = 'https://taskfile.dev/'; diff --git a/website/.vitepress/plugins/github-links.ts b/website/.vitepress/plugins/github-links.ts new file mode 100644 index 00000000..96bd44d4 --- /dev/null +++ b/website/.vitepress/plugins/github-links.ts @@ -0,0 +1,63 @@ +import type MarkdownIt from 'markdown-it'; + +interface PluginOptions { + repo: string; +} + +function githubLinksPlugin( + md: MarkdownIt, + options: PluginOptions = {} as PluginOptions +): void { + const baseUrl = 'https://github.com'; + const { repo } = options; + + md.core.ruler.after('inline', 'github-links', (state): void => { + const tokens = state.tokens; + + for (let i = 0; i < tokens.length; i++) { + if (tokens[i].type === 'inline' && tokens[i].children) { + const inlineTokens = tokens[i].children!; + + for (let j = 0; j < inlineTokens.length; j++) { + if (inlineTokens[j].type === 'text') { + let text: string = inlineTokens[j].content!; + + const protectedRefs: string[] = []; + let protectIndex: number = 0; + + text = text.replace( + /[\w.-]+\/[\w.-]+#(\d+)/g, + (match: string): string => { + const placeholder: string = `__PROTECTED_${protectIndex}__`; + protectedRefs[protectIndex] = match; + protectIndex++; + return placeholder; + } + ); + + text = text.replace( + /#(\d+)/g, + `#$1` + ); + + text = text.replace( + /@([a-zA-Z0-9_-]+)(?![\w@.])/g, + `@$1` + ); + + protectedRefs.forEach((ref: string, index: number): void => { + text = text.replace(`__PROTECTED_${index}__`, ref); + }); + + if (text !== inlineTokens[j].content) { + inlineTokens[j].content = text; + inlineTokens[j].type = 'html_inline'; + } + } + } + } + } + }); +} + +export default githubLinksPlugin; diff --git a/website/.vitepress/sponsors.ts b/website/.vitepress/sponsors.ts new file mode 100644 index 00000000..bcf70834 --- /dev/null +++ b/website/.vitepress/sponsors.ts @@ -0,0 +1,13 @@ +export const sponsors = [ + { + tier: 'Gold Sponsors', + size: 'big', + items: [ + { + name: 'devowl', + url: 'https://devowl.io/', + img: '/img/devowl.io.svg' + } + ] + } +]; diff --git a/website/.vitepress/team.ts b/website/.vitepress/team.ts new file mode 100644 index 00000000..8830bdb9 --- /dev/null +++ b/website/.vitepress/team.ts @@ -0,0 +1,45 @@ +export const team = [ + { + slug: 'andreynering', + avatar: 'https://www.github.com/andreynering.png', + name: 'Andrey Nering', + icon: '/img/flag-brazil.svg', + title: 'Creator & Maintainer', + sponsor: 'https://github.com/sponsors/andreynering', + links: [ + { icon: 'github', link: 'https://github.com/andreynering' }, + { icon: 'discord', link: 'https://discord.com/users/310141681926275082' }, + { icon: 'x', link: 'https://x.com/andreynering' }, + { + icon: 'bluesky', + link: 'https://bsky.app/profile/andreynering.bsky.social' + }, + { icon: 'mastodon', link: 'https://mastodon.social/@andreynering' } + ] + }, + { + slug: 'pd93', + avatar: 'https://www.github.com/pd93.png', + name: 'Pete Davison', + icon: '/img/flag-wales.svg', + title: 'Maintainer', + sponsor: 'https://github.com/sponsors/pd93', + links: [ + { icon: 'github', link: 'https://github.com/pd93' }, + { icon: 'bluesky', link: 'https://bsky.app/profile/pd93.uk' } + ] + }, + { + slug: 'vmaerten', + avatar: 'https://www.github.com/vmaerten.png', + name: 'Valentin Maerten', + icon: '/img/flag-france.svg', + title: 'Maintainer', + sponsor: 'https://github.com/sponsors/vmaerten', + links: [ + { icon: 'github', link: 'https://github.com/vmaerten' }, + { icon: 'x', link: 'https://x.com/v_maerten' }, + { icon: 'bluesky', link: 'https://bsky.app/profile/vmaerten.bsky.social' } + ] + } +]; diff --git a/website/.vitepress/theme/custom.css b/website/.vitepress/theme/custom.css new file mode 100644 index 00000000..903e43be --- /dev/null +++ b/website/.vitepress/theme/custom.css @@ -0,0 +1,142 @@ +:root { + --ifm-color-primary: #43aba2; + --vp-home-hero-name-color: var(--ifm-color-primary); + --vp-c-brand-1: var(--ifm-color-primary); + --vp-c-brand-2: var(--ifm-color-primary); + --vp-c-brand-3: var(--ifm-color-primary); + + --vp-icon-info: #3b82f6; + --vp-icon-tip: #10b981; + --vp-icon-warning: #f59e0b; + --vp-icon-danger: #ef4444; + --vp-icon-details: #6b7280; +} + +.dark { + --vp-icon-info: #93c5fd; + --vp-icon-tip: #34d399; + --vp-icon-warning: #fbbf24; + --vp-icon-danger: #f87171; + --vp-icon-details: #9ca3af; +} + +img[src*='shields.io'] { + display: inline; + vertical-align: text-bottom; +} +img[src*='custom-icon-badges.demolab.com'] { + display: inline; + height: 1em; + vertical-align: text-bottom; +} + +.github-user-mention { + font-weight: 700 !important; +} + +.vp-doc .blog-post:first-of-type { + margin-top: 2rem; +} + +.blog-post { + animation: fadeInUp 0.6s ease-out; +} + +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.blog-post:nth-of-type(1) { + animation-delay: 0.1s; +} +.blog-post:nth-of-type(2) { + animation-delay: 0.2s; +} +.blog-post:nth-of-type(3) { + animation-delay: 0.3s; +} + +.custom-block .custom-block-title::before { + content: ''; + display: inline-block; + width: 20px; + height: 20px; + margin-right: 8px; + vertical-align: middle; + flex-shrink: 0; + + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: center; + -webkit-mask-size: contain; + mask-repeat: no-repeat; + mask-position: center; + mask-size: contain; +} + +.custom-block.info .custom-block-title::before { + background-color: var(--vp-icon-info); + -webkit-mask-image: url('./icons/info.svg'); + mask-image: url('./icons/info.svg'); +} + +.custom-block.tip .custom-block-title::before { + background-color: var(--vp-icon-tip); + -webkit-mask-image: url('./icons/tip.svg'); + mask-image: url('./icons/tip.svg'); +} + +.custom-block.warning .custom-block-title::before { + background-color: var(--vp-icon-warning); + -webkit-mask-image: url('./icons/warning.svg'); + mask-image: url('./icons/warning.svg'); +} + +.custom-block.danger .custom-block-title::before { + background-color: var(--vp-icon-danger); + -webkit-mask-image: url('./icons/danger.svg'); + mask-image: url('./icons/danger.svg'); +} + +.custom-block.details[open] summary::before { + transform: rotate(90deg); +} + +.custom-block .custom-block-title { + display: flex; + align-items: center; +} + +@supports not (mask-image: none) { + .custom-block .custom-block-title::before, + .custom-block.details summary::before { + font-size: 18px; + width: auto; + height: auto; + background: none !important; + -webkit-mask: none !important; + mask: none !important; + } + + .custom-block.info .custom-block-title::before { + content: 'ℹ️'; + } + + .custom-block.tip .custom-block-title::before { + content: '💡'; + } + + .custom-block.warning .custom-block-title::before { + content: '⚠️'; + } + + .custom-block.danger .custom-block-title::before { + content: '🔥'; + } +} diff --git a/website/.vitepress/theme/icons/danger.svg b/website/.vitepress/theme/icons/danger.svg new file mode 100644 index 00000000..775ae027 --- /dev/null +++ b/website/.vitepress/theme/icons/danger.svg @@ -0,0 +1,3 @@ + + + diff --git a/website/.vitepress/theme/icons/info.svg b/website/.vitepress/theme/icons/info.svg new file mode 100644 index 00000000..c6a39407 --- /dev/null +++ b/website/.vitepress/theme/icons/info.svg @@ -0,0 +1,3 @@ + + + diff --git a/website/.vitepress/theme/icons/tip.svg b/website/.vitepress/theme/icons/tip.svg new file mode 100644 index 00000000..06f14760 --- /dev/null +++ b/website/.vitepress/theme/icons/tip.svg @@ -0,0 +1,3 @@ + + + diff --git a/website/.vitepress/theme/icons/warning.svg b/website/.vitepress/theme/icons/warning.svg new file mode 100644 index 00000000..b398d737 --- /dev/null +++ b/website/.vitepress/theme/icons/warning.svg @@ -0,0 +1,3 @@ + + + diff --git a/website/.vitepress/theme/index.ts b/website/.vitepress/theme/index.ts new file mode 100644 index 00000000..31bb1aa8 --- /dev/null +++ b/website/.vitepress/theme/index.ts @@ -0,0 +1,24 @@ +import DefaultTheme from 'vitepress/theme'; +import type { Theme } from 'vitepress'; +import './custom.css'; +import HomePage from '../components/HomePage.vue'; +import AuthorCard from '../components/AuthorCard.vue'; +import BlogPost from '../components/BlogPost.vue'; +import Version from '../components/Version.vue'; +import { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client'; +import { h } from 'vue'; +import 'virtual:group-icons.css'; +export default { + extends: DefaultTheme, + Layout() { + return h(DefaultTheme.Layout, null, { + 'home-features-after': () => h(HomePage) + }); + }, + enhanceApp({ app }) { + app.component('AuthorCard', AuthorCard); + app.component('BlogPost', BlogPost); + app.component('Version', Version); + enhanceAppWithTabs(app); + } +} satisfies Theme; diff --git a/website/Taskfile.yml b/website/Taskfile.yml index 60a43329..d32348fd 100644 --- a/website/Taskfile.yml +++ b/website/Taskfile.yml @@ -1,29 +1,35 @@ -version: "3" +version: '3' tasks: - yarn:install: - desc: Setup Docusaurus locally + install: + desc: Setup VitePress locally cmds: - - yarn install + - pnpm install sources: - package.json - - yarn.lock + - pnpm-lock.yaml default: desc: Start website - deps: [yarn:install] + deps: [install] aliases: [s, start] vars: HOST: '{{default "0.0.0.0" .HOST}}' PORT: '{{default "3001" .PORT}}' cmds: - - npx docusaurus start --no-open --host={{.HOST}} --port={{.PORT}} + - pnpm dev --host={{.HOST}} --port={{.PORT}} + + lint: + desc: Lint website + deps: [install] + cmds: + - pnpm lint build: desc: Build website - deps: [yarn:install] + deps: [install] cmds: - - npx docusaurus build + - pnpm build preview: desc: Preview Website @@ -33,20 +39,21 @@ tasks: HOST: '{{default "localhost" .HOST}}' PORT: '{{default "3001" .PORT}}' cmds: - - npx docusaurus serve --no-open --host={{.HOST}} --port={{.PORT}} + - pnpm preview --host={{.HOST}} --port={{.PORT}} clean: desc: Clean temp directories cmds: - - rm -rf ./build + - rm -rf ./vitepress/dist - deploy: - desc: Build and deploy Docusaurus - summary: Requires GIT_USER and GIT_PASS envs to be previous set + deploy:next: + deps: [build] + desc: Build and deploy next.taskfile.dev cmds: - - npx docusaurus deploy + - pnpm netlify deploy --prod --site=4e13dfcf-fc0d-4bec-ad60-b918a8dc3942 - upgrade: - desc: Upgrade Docusaurus + deploy:prod: + deps: [build] + desc: Build and deploy taskfile.dev cmds: - - yarn upgrade @docusaurus/core@latest @docusaurus/preset-classic@latest @docusaurus/module-type-aliases@latest @docusaurus/tsconfig@latest @docusaurus/types@latest + - pnpm netlify deploy --prod --site=e625bc6a-1cd3-465d-ad30-7bbddaeb4f31 diff --git a/website/babel.config.ts b/website/babel.config.ts deleted file mode 100644 index 69c36370..00000000 --- a/website/babel.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default { - presets: ['@docusaurus/core/lib/babel/preset'], -}; diff --git a/website/blog/authors.yml b/website/blog/authors.yml deleted file mode 100644 index b607ea56..00000000 --- a/website/blog/authors.yml +++ /dev/null @@ -1,10 +0,0 @@ -andreynering: - name: Andrey Nering - title: Maintainer of Task - url: https://github.com/andreynering - image_url: https://github.com/andreynering.png -pd93: - name: Pete Davison - title: Maintainer of Task - url: https://github.com/pd93 - image_url: https://github.com/pd93.png diff --git a/website/constants.ts b/website/constants.ts deleted file mode 100644 index cfb0ea71..00000000 --- a/website/constants.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const GITHUB_URL = 'https://github.com/go-task/task'; -export const TWITTER_URL = 'https://twitter.com/taskfiledev'; -export const BLUESKY_URL = 'https://bsky.app/profile/taskfile.dev'; -export const MASTODON_URL = 'https://fosstodon.org/@task'; -export const DISCORD_URL = 'https://discord.gg/6TY36E39UK'; -export const STACK_OVERFLOW = 'https://stackoverflow.com/questions/tagged/taskfile'; -export const ANSWER_OVERFLOW = 'https://www.answeroverflow.com/c/974121106208354339'; diff --git a/website/docs/deprecations/completion_scripts.mdx b/website/docs/deprecations/completion_scripts.mdx deleted file mode 100644 index fef7408b..00000000 --- a/website/docs/deprecations/completion_scripts.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -slug: /deprecations/completion-scripts/ ---- - -# Completion Scripts - -:::warning - -This deprecation breaks the following functionality: - -- Any direct references to the completion scripts in the Task git repository - -::: - -Direct use of the completion scripts in the `completion/*` directory of the -[github.com/go-task/task][task] Git repository is deprecated. Any shell -configuration that directly refers to these scripts will potentially break in -the future as the scripts may be moved or deleted entirely. Any configuration -should be updated to use the [new method for generating shell -completions][completions] instead. - -{/* prettier-ignore-start */} -[completions]: ../installation.mdx#setup-completions -[task]: https://github.com/go-task/task -{/* prettier-ignore-end */} diff --git a/website/docs/deprecations/deprecations.mdx b/website/docs/deprecations/deprecations.mdx deleted file mode 100644 index f09a95cb..00000000 --- a/website/docs/deprecations/deprecations.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -slug: /deprecations/ -sidebar_position: 8 ---- - -# Deprecations - -As Task evolves, it occasionally outgrows some of its functionality. This can be -because they are no longer useful, because another feature has replaced it or -because of a change in the way that Task works internally. - -When this happens, we mark the functionality as deprecated. This means that it -will be removed in a future version of Task. This functionality will continue to -work until that time, but we strongly recommend that you do not implement this -functionality in new Taskfiles and make a plan to migrate away from it as soon -as possible. - -You can view a full list of active deprecations in the "Deprecations" section of -the sidebar. diff --git a/website/docs/deprecations/template.mdx b/website/docs/deprecations/template.mdx deleted file mode 100644 index dee9802a..00000000 --- a/website/docs/deprecations/template.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -# This is a template for an experiments documentation -# Copy this page and fill in the details as necessary -title: '--- Template ---' -sidebar_position: -1 # Always push to the top -draft: true # Hide in production ---- - -# \{Name of Deprecated Feature\} (#\{Issue\}) - -:::warning - -This deprecation breaks the following functionality: - -- \{list any existing functionality that will be broken by this deprecation\} -- \{if there are no breaking changes, remove this admonition\} - -::: - -\{Short description of the feature/behavior and why it is being deprecated\} - -\{Short explanation of any replacement features/behaviors and how users should -migrate to it\} diff --git a/website/docs/deprecations/template_functions.mdx b/website/docs/deprecations/template_functions.mdx deleted file mode 100644 index 83f24198..00000000 --- a/website/docs/deprecations/template_functions.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -slug: /deprecations/template-functions/ ---- - -# Template Functions - -:::warning - -This deprecation breaks the following functionality: - -- A small set of templating functions - -::: - -The following templating functions are deprecated. Any replacement functions are -listed besides the function being removed. - -| Deprecated function | Replaced by | -| ------------------- | ----------- | -| `IsSH` | - | -| `FromSlash` | `fromSlash` | -| `ToSlash` | `toSlash` | -| `ExeExt` | `exeExt` | diff --git a/website/docs/deprecations/version_2_schema.mdx b/website/docs/deprecations/version_2_schema.mdx deleted file mode 100644 index 1011e5c9..00000000 --- a/website/docs/deprecations/version_2_schema.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -slug: /deprecations/version-2-schema/ ---- - -# Version 2 Schema (#1197) - -:::warning - -This deprecation breaks the following functionality: - -- Any Taskfiles that use the version 2 schema -- `Taskvar.yml` files - -::: - -The Taskfile version 2 schema was introduced in March 2018 and replaced by -version 3 in August 2019. In May 2023 [we published a deprecation -notice][deprecation-notice] for the version 2 schema on the basis that the vast -majority of users had already upgraded to version 3 and removing support for -version 2 would allow us to tidy up the codebase and focus on new functionality -instead. - -In December 2023, the final version of Task that supports the version 2 schema -([v3.33.0][v3.33.0]) was published and all legacy code was removed from Task's -main branch. To use a more recent version of Task, you will need to ensure that -your Taskfile uses the version 3 schema instead. A list of changes between -version 2 and version 3 are available in the [Task v3 Release Notes][v3.0.0]. - -{/* prettier-ignore-start */} -[v3.0.0]: https://github.com/go-task/task/releases/tag/v3.0.0 -[v3.33.0]: https://github.com/go-task/task/releases/tag/v3.33.0 -[deprecation-notice]: https://github.com/go-task/task/issues/1197 -{/* prettier-ignore-end */} diff --git a/website/docs/experiments/env_precedence.mdx b/website/docs/experiments/env_precedence.mdx deleted file mode 100644 index 535a676e..00000000 --- a/website/docs/experiments/env_precedence.mdx +++ /dev/null @@ -1,74 +0,0 @@ ---- -slug: '/experiments/env-precedence' ---- - -# Env Precedence (#1038) - -:::caution - -All experimental features are subject to breaking changes and/or removal _at any -time_. We strongly recommend that you do not use these features in a production -environment. They are intended for testing and feedback only. - -::: - -:::warning - -This experiment breaks the following functionality: - -- environment variable will take precedence over OS environment variables - -::: - -:::info - -To enable this experiment, set the environment variable: -`TASK_X_ENV_PRECEDENCE=1`. Check out [our guide to enabling -experiments][enabling-experiments] for more information. - -::: - -Before this experiment, the OS variable took precedence over the task -environment variable. This experiment changes the precedence to make the task -environment variable take precedence over the OS variable. - -Consider the following example: - -```yml -version: '3' - -tasks: - default: - env: - KEY: 'other' - cmds: - - echo "$KEY" -``` -Running `KEY=some task` before this experiment, the output would be `some`, but -after this experiment, the output would be `other`. - -If you still want to get the OS variable, you can use the template function env -like follow : `{{env "OS_VAR"}}`. - -```yml -version: '3' - -tasks: - default: - env: - KEY: 'other' - cmds: - - echo "$KEY" - - echo {{env "KEY"}} -``` -Running `KEY=some task`, the output would be `other` and `some`. - -Like other variables/envs, you can also fall back to a given value using the -default template function: -```yml -MY_ENV: '{{.MY_ENV | default "fallback"}}' -``` - -{/* prettier-ignore-start */} -[enabling-experiments]: ./experiments.mdx#enabling-experiments -{/* prettier-ignore-end */} diff --git a/website/docs/experiments/experiments.mdx b/website/docs/experiments/experiments.mdx deleted file mode 100644 index f303a870..00000000 --- a/website/docs/experiments/experiments.mdx +++ /dev/null @@ -1,151 +0,0 @@ ---- -slug: /experiments/ -sidebar_position: 7 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Experiments - -:::caution - -All experimental features are subject to breaking changes and/or removal _at any -time_. We strongly recommend that you do not use these features in a production -environment. They are intended for testing and feedback only. - -::: - -In order to allow Task to evolve quickly, we sometimes roll out breaking changes -to minor versions behind experimental flags. This allows us to gather feedback -on breaking changes before committing to a major release. This process can also -be used to gather feedback on important non-breaking features before their -design is completed. This document describes the -[experiment workflow](#workflow) and how you can get involved. - -You can view the full list of active experiments in the sidebar submenu to the -left of the page and click on each one to find out more about it. - -## Enabling Experiments - -Task uses environment variables to detect whether or not an experiment is -enabled. All of the experiment variables will begin with the same `TASK_X_` -prefix followed by the name of the experiment. You can find the exact name for -each experiment on their respective pages in the sidebar. If the variable is set -`=1` then it will be enabled. Some experiments may have multiple proposals, in -which case, you will need to set the variable equal to the number of the -proposal that you want to enable (`=2`, `=3` etc). - -There are three main ways to set the environment variables for an experiment. -Which method you use depends on how you intend to use the experiment: - -1. Prefixing your task commands with the relevant environment variable(s). For - example, `TASK_X_{FEATURE}=1 task {my-task}`. This is intended for one-off - invocations of Task to test out experimental features. -2. Adding the relevant environment variable(s) in your "dotfiles" (e.g. - `.bashrc`, `.zshrc` etc.). This will permanently enable experimental features - for your personal environment. - - ```shell title="~/.bashrc" - export TASK_X_FEATURE=1 - ``` - -3. Creating a `.env` or a `.taskrc.yml` file in the same directory as - your root Taskfile.\ - The `.env` file should contain the relevant environment - variable(s), while the `.taskrc.yml` file should use a YAML format - where each experiment is defined as a key with a corresponding value. - - This allows you to enable an experimental feature at a project level. If you - commit this file to source control, then other users of your project will - also have these experiments enabled. - - If both files are present, the values in the `.taskrc.yml` file - will take precedence. - - - - ```yaml title=".taskrc.yml" - experiments: - FEATURE: 1 - ``` - - - - ```shell title=".env" - TASK_X_FEATURE=1 - ``` - - - -## Workflow - -Experiments are a way for us to test out new features in Task before committing -to them in a major release. Because this concept is built around the idea of -feedback from our community, we have built a workflow for the process of -introducing these changes. This ensures that experiments are given the attention -and time that they need and that we are getting the best possible results out of -them. - -The sections below describe the various stages that an experiment must go -through from its proposal all the way to being released in a major version of -Task. - -### 1. Proposal - -All experimental features start with a proposal in the form of a GitHub issue. -If the maintainers decide that an issue has enough support and is a breaking -change or is complex/controversial enough to require user feedback, then the -issue will be marked with the `status: proposal` label. At this point, the issue -becomes a proposal and a period of consultation begins. During this period, we -request that users provide feedback on the proposal and how it might effect -their use of Task. It is up to the discretion of the maintainers to decide how -long this period lasts. - -### 2. Draft - -Once a proposal's consultation ends, a contributor may pick up the work and -begin the initial implementation. Once a PR is opened, the maintainers will -ensure that it meets the requirements for an experimental feature (i.e. flags -are in the right format etc) and merge the feature. Once this code is released, -the status will be updated via the `status: draft` label. This indicates that an -implementation is now available for use in a release and the experiment is open -for feedback. - -:::note - -During the draft period, major changes to the implementation may be made based -on the feedback received from users. There are _no stability guarantees_ and -experimental features may be abandoned _at any time_. - -::: - -### 3. Candidate - -Once an acceptable level of consensus has been reached by the community and -feedback/changes are less frequent/significant, the status may be updated via -the `status: candidate` label. This indicates that a proposal is _likely_ to -accepted and will enter a period for final comments and minor changes. - -### 4. Stable - -Once a suitable amount of time has passed with no changes or feedback, an -experiment will be given the `status: stable` label. At this point, the -functionality will be treated like any other feature in Task and any changes -_must_ be backward compatible. This allows users to migrate to the new -functionality without having to worry about anything breaking in future -releases. This provides the best experience for users migrating to a new major -version. - -### 5. Released - -When making a new major release of Task, all experiments marked as `status: -stable` will move to `status: released` and their behaviors will become the new -default in Task. Experiments in an earlier stage (i.e. not stable) cannot be -released and so will continue to be experiments in the new version. - -### Abandoned / Superseded - -If an experiment is unsuccessful at any point then it will be given the `status: -abandoned` or `status: superseded` labels depending on which is more suitable. -These experiments will be removed from Task. diff --git a/website/docs/experiments/remote_taskfiles.mdx b/website/docs/experiments/remote_taskfiles.mdx deleted file mode 100644 index b8154224..00000000 --- a/website/docs/experiments/remote_taskfiles.mdx +++ /dev/null @@ -1,290 +0,0 @@ ---- -slug: /experiments/remote-taskfiles/ ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Remote Taskfiles (#1317) - -:::caution - -All experimental features are subject to breaking changes and/or removal _at any -time_. We strongly recommend that you do not use these features in a production -environment. They are intended for testing and feedback only. - -::: - -:::info - -To enable this experiment, set the environment variable: -`TASK_X_REMOTE_TASKFILES=1`. Check out [our guide to enabling experiments -][enabling-experiments] for more information. - -::: - -:::danger -Never run remote Taskfiles from sources that you do not trust. -::: - -This experiment allows you to use Taskfiles which are stored in remote -locations. This applies to both the root Taskfile (aka. Entrypoint) and also -when including Taskfiles. - -Task uses "nodes" to reference remote Taskfiles. There are a few different types -of node which you can use: - - - - -`https://raw.githubusercontent.com/go-task/task/main/website/static/Taskfile.yml` - -This is the most basic type of remote node and works by downloading the file -from the specified URL. The file must be a valid Taskfile and can be of any -name. If a file is not found at the specified URL, Task will append each of the -[supported file names][supported-file-names] in turn until it finds a valid -file. If it still does not find a valid Taskfile, an error is returned. - - - - -`https://github.com/go-task/task.git//website/static/Taskfile.yml?ref=main` - -This type of node works by downloading the file from a Git repository over -HTTP/HTTPS. The first part of the URL is the base URL of the Git repository. -This is the same URL that you would use to clone the repo over HTTP. - -- You can optionally add the path to the Taskfile in the repository by appending -`//` to the URL. -- You can also optionally specify a branch or tag to use by appending -`?ref=` to the end of the URL. If you omit a reference, the default branch -will be used. - - - - -`git@github.com/go-task/task.git//website/static/Taskfile.yml?ref=main` - -This type of node works by downloading the file from a Git repository over SSH. -The first part of the URL is the user and base URL of the Git repository. This -is the same URL that you would use to clone the repo over SSH. - -To use Git over SSH, you need to make sure that your SSH agent has your private -SSH keys added so that they can be used during authentication. - -- You can optionally add the path to the Taskfile in the repository by appending -`//` to the URL. -- You can also optionally specify a branch or tag to use by appending -`?ref=` to the end of the URL. If you omit a reference, the default branch -will be used. - - - - -Task has an [example remote Taskfile][example-remote-taskfile] in our repository -that you can use for testing and that we will use throughout this document: - -```yaml -version: '3' - -tasks: - default: - cmds: - - task: hello - - hello: - cmds: - - echo "Hello Task!" -``` - -## Specifying a remote entrypoint - -By default, Task will look for one of the [supported file -names][supported-file-names] on your local filesystem. If you want to use a -remote file instead, you can pass its URI into the `--taskfile`/`-t` flag just -like you would to specify a different local file. For example: - - - -```shell -$ task --taskfile https://raw.githubusercontent.com/go-task/task/main/website/static/Taskfile.yml -task: [hello] echo "Hello Task!" -Hello Task! -``` - - -```shell -$ task --taskfile https://github.com/go-task/task.git//website/static/Taskfile.yml?ref=main -task: [hello] echo "Hello Task!" -Hello Task! -``` - - -```shell -$ task --taskfile git@github.com/go-task/task.git//website/static/Taskfile.yml?ref=main -task: [hello] echo "Hello Task!" -Hello Task! -``` - - - -## Including remote Taskfiles - -Including a remote file works exactly the same way that including a local file -does. You just need to replace the local path with a remote URI. Any tasks in -the remote Taskfile will be available to run from your main Taskfile. - - - -```yaml -version: '3' - -includes: - my-remote-namespace: https://raw.githubusercontent.com/go-task/task/main/website/static/Taskfile.yml -``` - - -```yaml -version: '3' - -includes: - my-remote-namespace: https://github.com/go-task/task.git//website/static/Taskfile.yml?ref=main -``` - - -```yaml -version: '3' - -includes: - my-remote-namespace: git@github.com/go-task/task.git//website/static/Taskfile.yml?ref=main -``` - - - -```shell -$ task my-remote-namespace:hello -task: [hello] echo "Hello Task!" -Hello Task! -``` - -### Authenticating using environment variables - -The Taskfile location is processed by the templating system, so you can -reference environment variables in your URL if you need to add authentication. -For example: - -```yaml -version: '3' - -includes: - my-remote-namespace: https://{{.TOKEN}}@raw.githubusercontent.com/my-org/my-repo/main/Taskfile.yml -``` - -## Security - -### Automatic checksums - -Running commands from sources that you do not control is always a potential -security risk. For this reason, we have added some automatic checks when using -remote Taskfiles: - -1. When running a task from a remote Taskfile for the first time, Task will - print a warning to the console asking you to check that you are sure that you - trust the source of the Taskfile. If you do not accept the prompt, then Task - will exit with code `104` (not trusted) and nothing will run. If you accept - the prompt, the remote Taskfile will run and further calls to the remote - Taskfile will not prompt you again. -2. Whenever you run a remote Taskfile, Task will create and store a checksum of - the file that you are running. If the checksum changes, then Task will print - another warning to the console to inform you that the contents of the remote - file has changed. If you do not accept the prompt, then Task will exit with - code `104` (not trusted) and nothing will run. If you accept the prompt, the - checksum will be updated and the remote Taskfile will run. - -Sometimes you need to run Task in an environment that does not have an -interactive terminal, so you are not able to accept a prompt. In these cases you -are able to tell task to accept these prompts automatically by using the `--yes` -flag. Before enabling this flag, you should: - -1. Be sure that you trust the source and contents of the remote Taskfile. -2. Consider using a pinned version of the remote Taskfile (e.g. A link - containing a commit hash) to prevent Task from automatically accepting a - prompt that says a remote Taskfile has changed. - -### Manual checksum pinning - -Alternatively, if you expect the contents of your remote files to be a constant -value, you can pin the checksum of the included file instead: - -```yaml -version: '3' - -includes: - included: - taskfile: https://taskfile.dev - checksum: c153e97e0b3a998a7ed2e61064c6ddaddd0de0c525feefd6bba8569827d8efe9 -``` - -This will disable the automatic checksum prompts discussed above. However, if -the checksums do not match, Task will exit immediately with an error. When -setting this up for the first time, you may not know the correct value of the -checksum. There are a couple of ways you can obtain this: - -1. Add the include normally without the `checksum` key. The first time you run - the included Taskfile, a `.task/remote` temporary directory is created. Find - the correct set of files for your included Taskfile and open the file that - ends with `.checksum`. You can copy the contents of this file and paste it - into the `checksum` key of your include. This method is safest as it allows - you to inspect the downloaded Taskfile before you pin it. -2. Alternatively, add the include with a temporary random value in the - `checksum` key. When you try to run the Taskfile, you will get an error that - will report the incorrect expected checksum and the actual checksum. You can - copy the actual checksum and replace your temporary random value. - -### TLS - -Task currently supports both `http` and `https` URLs. However, the `http` -requests will not execute by default unless you run the task with the -`--insecure` flag. This is to protect you from accidentally running a remote -Taskfile that is downloaded via an unencrypted connection. Sources that are not -protected by TLS are vulnerable to [man-in-the-middle -attacks][man-in-the-middle-attacks] and should be avoided unless you know what -you are doing. - -## Caching & Running Offline - -Whenever you run a remote Taskfile, the latest copy will be downloaded from the -internet and cached locally. This cached file will be used for all future -invocations of the Taskfile until the cache expires. Once it expires, Task will -download the latest copy of the file and update the cache. By default, the cache -is set to expire immediately. This means that Task will always fetch the latest -version. However, the cache expiry duration can be modified by setting the -`--expiry` flag. - -If for any reason you lose access to the internet or you are running Task in -offline mode (via the `--offline` flag or `TASK_OFFLINE` environment variable), -Task will run the any available cached files _even if they are expired_. This -means that you should never be stuck without the ability to run your tasks as -long as you have downloaded a remote Taskfile at least once. - -By default, Task will timeout requests to download remote files after 10 seconds -and look for a cached copy instead. This timeout can be configured by setting -the `--timeout` flag and specifying a duration. For example, `--timeout 5s` will -set the timeout to 5 seconds. - -By default, the cache is stored in the Task temp directory, represented by the -`TASK_TEMP_DIR` [environment variable](../reference/environment.mdx) You can -override the location of the cache by setting the `TASK_REMOTE_DIR` environment -variable. This way, you can share the cache between different projects. - -You can force Task to ignore the cache and download the latest version -by using the `--download` flag. - -You can use the `--clear-cache` flag to clear all cached remote files. - -{/* prettier-ignore-start */} -[enabling-experiments]: ./experiments.mdx#enabling-experiments -[man-in-the-middle-attacks]: https://en.wikipedia.org/wiki/Man-in-the-middle_attack -[supported-file-names]: https://taskfile.dev/usage/#supported-file-names -[example-remote-taskfile]: https://raw.githubusercontent.com/go-task/task/main/website/static/Taskfile.yml -{/* prettier-ignore-end */} diff --git a/website/docs/getting_started.mdx b/website/docs/getting_started.mdx deleted file mode 100644 index e79108d2..00000000 --- a/website/docs/getting_started.mdx +++ /dev/null @@ -1,143 +0,0 @@ ---- -slug: /getting-started/ -sidebar_position: 3 ---- - -# Getting Started - -The following guide will help introduce you to the basics of Task. We'll cover -how to create a Taskfile, how to write a basic task and how to call it. If you -haven't installed Task yet, head over to our [installation -guide][installation]. - -## Creating your first Taskfile - -Once Task is installed, you can create your first Taskfile by running: - -```shell -task --init -``` - -This will create a file called `Taskfile.yml` in the current directory. If you -want to create the file in another directory, you can pass an absolute or -relative path to the directory into the command: - -```shell -task --init ./subdirectory -``` - -Or if you want the Taskfile to have a specific name, you can pass in the name of -the file: - -```shell -task --init Custom.yml -``` - -This will create a Taskfile that looks something like this: - -```yaml -version: '3' - -vars: - GREETING: Hello, World! - -tasks: - default: - cmds: - - echo "{{.GREETING}}" - silent: true -``` - -As you can see, all Taskfiles are written in [YAML format][yaml]. The `version` -attribute specifies the minimum version of Task that can be used to run this -file. The `vars` attribute is used to define variables that can be used in -tasks. In this case, we are creating a string variable called `GREETING` with a -value of `Hello, World!`. - -Finally, the `tasks` attribute is used to define the tasks that can be run. In -this case, we have a task called `default` that echoes the value of the -`GREETING` variable. The `silent` attribute is set to `true`, which means that -the task metadata will not be printed when the task is run - only the output of -the commands. - -## Calling a task - -To call the task, invoke `task` followed by the name of the task you want to -run. In this case, the name of the task is `default`, so you should run: - -```shell -task default -``` - -Note that we don't have to specify the name of the Taskfile. Task will -automatically look for a file called `Taskfile.yml` (or any of Task's [supported -file names][supported-file-names]) in the current directory. Additionally, tasks -with the name `default` are special. They can also be run without specifying the -task name. - -If you created a Taskfile in a different directory, you can run it by passing -the absolute or relative path to the directory as an argument using the `--dir` -flag: - -```shell -task --dir ./subdirectory -``` - -Or if you created a Taskfile with a different name, you can run it by passing -the name of the Taskfile as an argument using the `--taskfile` flag: - -```shell -task --taskfile Custom.yml -``` - -## Adding a build task - -Let's create a task to build a program in Go. Start by adding a new task called -`build` below the existing `default` task. We can then add a `cmds` attribute -with a single command to build the program. - -Task uses [mvdan/sh][mvdan/sh], a native Go sh interpreter. So you can write -sh/bash-like commands - even in environments where `sh` or `bash` are usually -not available (like Windows). Just remember any executables called must be -available as a built-in or in the system's `PATH`. - -When you're done, it should look something like this: - -```yaml -version: '3' - -vars: - GREETING: Hello, World! - -tasks: - default: - cmds: - - echo "{{.GREETING}}" - silent: true - - build: - cmds: - - go build ./cmd/main.go -``` - -Call the task by running: - -```shell -task build -``` - -That's about it for the basics, but there's _so much_ more that you can do with -Task. Check out the rest of the documentation to learn more about all the -features Task has to offer! We recommend taking a look at the [usage -guide][usage] next. Alternatively, you can check out our reference docs for the -[Taskfile schema][schema] and [CLI][cli]. - -{/* prettier-ignore-start */} -[yaml]: https://yaml.org/ -[installation]: /installation/ -[supported-file-names]: /usage/#supported-file-names -[mvdan/sh]: https://github.com/mvdan/sh -[usage]: /usage/ -[schema]: /reference/schema/ -[cli]: /reference/cli/ -{/* prettier-ignore-end */} diff --git a/website/docs/installation.mdx b/website/docs/installation.mdx deleted file mode 100644 index 59c96ed6..00000000 --- a/website/docs/installation.mdx +++ /dev/null @@ -1,354 +0,0 @@ ---- -slug: /installation/ -sidebar_position: 2 -toc_max_heading_level: 4 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Installation - -Task offers many installation methods. Check out the available methods below. - -:::info - -Some of the methods below are marked as ![Community][community]. This means they -are not maintained by the Task team and may not be up-to-date. - -::: - -## Package Managers - -### [Homebrew][homebrew] ![][macos] ![][linux] \{#homebrew} - -Task is available via our official Homebrew tap [[source](https://github.com/go-task/homebrew-tap/blob/main/Formula/go-task.rb)]: - -```shell -brew install go-task/tap/go-task -``` - -Alternatively it can be installed from the official Homebrew -repository [[package](https://formulae.brew.sh/formula/go-task)] -[[source](https://github.com/Homebrew/homebrew-core/blob/master/Formula/g/go-task.rb)] by running: - -```shell -brew install go-task -``` - -### [Macports][macports] ![][macos] ![][community] \{#macports} - -Task repository is tracked by Macports [[package](https://ports.macports.org/port/go-task/details/)] [[source](https://github.com/macports/macports-ports/blob/master/devel/go-task/Portfile)]: - -```shell -port install go-task -``` - -### [Snap][snapcraft] ![][macos] ![][linux] \{#snap} - -Task is available on [Snapcraft][snapcraft] [[source](https://github.com/go-task/snap/blob/main/snap/snapcraft.yaml)], but keep in mind that your Linux -distribution should allow classic confinement for Snaps to Task work correctly: - -```shell -sudo snap install task --classic -``` - -### [npm][npm] ![][macos] ![][linux] ![][windows] \{#npm} - -Npm can be used as cross-platform way to install Task globally or as a -dependency of your project -[[package](https://www.npmjs.com/package/@go-task/cli)] [[source](https://github.com/go-task/task/blob/main/package.json)]: - -```shell -npm install -g @go-task/cli -``` - -### [pip][pip] ![][macos] ![][linux] ![][windows] ![][community] \{#pip} - -Like npm, pip can be used as a cross-platform way to install Task -[[package](https://pypi.org/project/go-task-bin)] [[source](https://github.com/Bing-su/pip-binary-factory/tree/main/task)]: - -```shell -pip install go-task-bin -``` - -### [WinGet][winget] ![][windows] \{#winget} - -Task is available via the [community repository](https://github.com/microsoft/winget-pkgs) [[source](https://github.com/microsoft/winget-pkgs/tree/master/manifests/t/Task/Task)]: - -```shell -winget install Task.Task -``` - -### [Chocolatey][choco] ![][windows] ![][community] \{#chocolatey} - -[[package](https://community.chocolatey.org/packages/go-task)] [[source](https://github.com/Starz0r/ChocolateyPackagingScripts/blob/master/src/go-task_gh_build.py)] - -```shell -choco install go-task -``` - -### [Scoop][scoop] ![][windows] ![][community] \{#scoop} - -[[source](https://github.com/ScoopInstaller/Main/blob/master/bucket/task.json)] - -```shell -scoop install task -``` - -### Arch ([pacman][pacman]) ![][arch] ![][community] \{#arch} - -[[package](https://archlinux.org/packages/extra/x86_64/go-task/)] [[source](https://gitlab.archlinux.org/archlinux/packaging/packages/go-task)] - -```shell -pacman -S go-task -``` - -### Fedora ([dnf][dnf]) ![][fedora] ![][community] \{#fedora} - -[[package](https://packages.fedoraproject.org/pkgs/golang-github-task/go-task/)] [[source](https://src.fedoraproject.org/rpms/golang-github-task)] - -```shell -dnf install go-task -``` - -### FreeBSD ([Ports][freebsdports]) ![][freebsd] ![][community] \{#freebsd} - -[[package](https://cgit.freebsd.org/ports/tree/devel/task)] [[source](https://cgit.freebsd.org/ports/tree/devel/task/Makefile)] - -```shell -pkg install task -``` - -### NixOS ([nix][nix]) ![][nixos] ![][linux] ![][community] \{#nix} - -[[source](https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/go/go-task/package.nix)] - -```shell -nix-env -iA nixpkgs.go-task -``` - -### [pacstall][pacstall] ![][debian] ![][ubuntu] ![][community] \{#pacstall} - -[[package](https://pacstall.dev/packages/go-task-deb)] [[source](https://github.com/pacstall/pacstall-programs/blob/master/packages/go-task-deb/go-task-deb.pacscript)] - -```shell -pacstall -I go-task-deb -``` - -### [pkgx][pkgx] ![][macos] ![][linux] ![][community] \{#pkgx} - -[[package](https://pkgx.dev/pkgs/taskfile.dev)] [[source](https://github.com/pkgxdev/pantry/blob/main/projects/taskfile.dev/package.yml)] - -```shell -pkgx task -``` - -or, if you have pkgx integration enabled: - -```shell -task -``` - -## Get The Binary - -### Binary - -You can download the binary from the [releases page on GitHub][releases] and add -to your `$PATH`. - -DEB and RPM packages are also available. - -The `task_checksums.txt` file contains the SHA-256 checksum for each file. - -### Install Script - -We also have an [install script][installscript] which is very useful in -scenarios like CI. Many thanks to [GoDownloader][godownloader] for enabling the -easy generation of this script. - -By default, it installs on the `./bin` directory relative to the working -directory: - -```shell -sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -``` - -It is possible to override the installation directory with the `-b` parameter. -On Linux, common choices are `~/.local/bin` and `~/bin` to install for the -current user or `/usr/local/bin` to install for all users: - -```shell -sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin -``` - -:::caution - -On macOS and Windows, `~/.local/bin` and `~/bin` are not added to `$PATH` by -default. - -::: - -By default, it installs the latest version available. -You can also specify a tag (available in [releases](https://github.com/go-task/task/releases)) -to install a specific version: - -```shell -sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d v3.36.0 -``` - -Parameters are order specific, to set both installation directory and version: -```shell -sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin v3.42.1 -``` - -### GitHub Actions - -If you want to install Task in GitHub Actions you can try using -[this action](https://github.com/arduino/setup-task) by the Arduino team: - -```yaml -- name: Install Task - uses: arduino/setup-task@v2 - with: - version: 3.x - repo-token: ${{ secrets.GITHUB_TOKEN }} -``` - -This installation method is community owned. - -## Build From Source - -### Go Modules - -Ensure that you have a supported version of [Go][go] properly installed and -setup. You can find the minimum required version of Go in the -[go.mod](https://github.com/go-task/task/blob/main/go.mod#L3) file. - -You can then install the latest release globally by running: - -```shell -go install github.com/go-task/task/v3/cmd/task@latest -``` - -Or you can install into another directory: - -```shell -env GOBIN=/bin go install github.com/go-task/task/v3/cmd/task@latest -``` - -:::tip - -For CI environments we recommend using the [install script](#install-script) -instead, which is faster and more stable, since it'll just download the latest -released binary. - -::: - -## Setup completions - -Some installation methods will automatically install completions too, but if -this isn't working for you or your chosen method doesn't include them, you can -run `task --completion ` to output a completion script for any supported -shell. There are a couple of ways these completions can be added to your shell -config: - -### Option 1. Load the completions in your shell's startup config (Recommended) - -This method loads the completion script from the currently installed version of -task every time you create a new shell. This ensures that your completions are -always up-to-date. - - - - -```shell title="~/.bashrc" -eval "$(task --completion bash)" -``` - - - -```shell title="~/.zshrc" -eval "$(task --completion zsh)" -``` - - - -```shell title="~/.config/fish/config.fish" -task --completion fish | source -``` - - - -```powershell title="$PROFILE\Microsoft.PowerShell_profile.ps1" -Invoke-Expression (&task --completion powershell | Out-String) -``` - - -### Option 2. Copy the script to your shell's completions directory - -This method requires you to manually update the completions whenever Task is -updated. However, it is useful if you want to modify the completions yourself. - - - - -```shell -task --completion bash > /etc/bash_completion.d/task -``` - - - -```shell -task --completion zsh > /usr/local/share/zsh/site-functions/_task -``` - - - -```shell -task --completion fish > ~/.config/fish/completions/task.fish -``` - - -{/* prettier-ignore-start */} -[homebrew]: https://brew.sh -[macports]: https://macports.org -[snapcraft]: https://snapcraft.io/task -[winget]: https://github.com/microsoft/winget-cli -[choco]: https://chocolatey.org -[scoop]: https://scoop.sh -[pacman]: https://wiki.archlinux.org/title/Pacman -[dnf]: https://docs.fedoraproject.org/en-US/quick-docs/dnf -[nix]: https://nixos.org -[npm]: https://www.npmjs.com -[pip]: https://pip.pypa.io -[mise]: https://mise.jdx.dev -[aqua]: https://aquaproj.github.io -[pacstall]: https://github.com/pacstall/pacstall -[pkgx]: https://pkgx.sh -[freebsdports]: https://ports.freebsd.org/cgi/ports.cgi - -[go]: https://golang.org -[godownloader]: https://github.com/goreleaser/godownloader -[releases]: https://github.com/go-task/task/releases -[installscript]: https://github.com/go-task/task/blob/main/install-task.sh - -[community]: https://img.shields.io/badge/Community%20Owned-orange -[windows]: https://custom-icon-badges.demolab.com/badge/Windows-0078D6?logo=windows11&logoColor=white -[macos]: https://img.shields.io/badge/MacOS-000000?logo=apple&logoColor=F0F0F0 -[linux]: https://img.shields.io/badge/Linux-FCC624?logo=linux&logoColor=black -[arch]: https://img.shields.io/badge/Arch%20Linux-1793D1?logo=arch-linux&logoColor=fff -[fedora]: https://img.shields.io/badge/Fedora-51A2DA?logo=fedora&logoColor=fff -[nixos]: https://img.shields.io/badge/NixOS-5277C3?logo=nixos&logoColor=fff -[debian]: https://img.shields.io/badge/Debian-A81D33?logo=debian&logoColor=fff -[ubuntu]: https://img.shields.io/badge/Ubuntu-E95420?logo=ubuntu&logoColor=fff -[freebsd]: https://img.shields.io/badge/FreeBSD-990000?logo=freebsd&logoColor=fff -{/* prettier-ignore-end */} diff --git a/website/docs/integrations.mdx b/website/docs/integrations.mdx deleted file mode 100644 index bf1f8e69..00000000 --- a/website/docs/integrations.mdx +++ /dev/null @@ -1,84 +0,0 @@ ---- -slug: /integrations/ -sidebar_position: 9 ---- - -# Integrations - -## Visual Studio Code Extension - -Task has an -[official extension for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=task.vscode-task). -The code for this project can be found -[here](https://github.com/go-task/vscode-task). To use this extension, you must -have Task v3.23.0+ installed on your system. - -This extension provides the following features (and more): - -- View tasks in the sidebar. -- Run tasks from the sidebar and command palette. -- Go to definition from the sidebar and command palette. -- Run last task command. -- Multi-root workspace support. -- Initialize a Taskfile in the current workspace. - -To get autocompletion and validation for your Taskfile, see the -[Schema](#schema) section below. - -![Task for Visual Studio Code](https://github.com/go-task/vscode-task/blob/main/res/preview.png?raw=true) - -## Schema - -This was initially created by @KROSF in -[this Gist](https://gist.github.com/KROSF/c5435acf590acd632f71bb720f685895) and -is now officially maintained in -[this file](https://github.com/go-task/task/blob/main/website/static/schema.json) -and made available at https://taskfile.dev/schema.json. This schema can be used -to validate Taskfiles and provide autocompletion in many code editors: - -### Visual Studio Code - -To integrate the schema into VS Code, you need to install the -[YAML extension](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) -by Red Hat. Any `Taskfile.yml` in your project should automatically be detected -and validation/autocompletion should work. If this doesn't work or you want to -manually configure it for files with a different name, you can add the following -to your `settings.json`: - -```json -// settings.json -{ - "yaml.schemas": { - "https://taskfile.dev/schema.json": [ - "**/Taskfile.yml", - "./path/to/any/other/taskfile.yml" - ] - } -} -``` - -You can also configure the schema directly inside of a Taskfile by adding the -following comment to the top of the file: - -```yaml -# yaml-language-server: $schema=https://taskfile.dev/schema.json -version: '3' -``` - -You can find more information on this in the -[YAML language server project](https://github.com/redhat-developer/yaml-language-server). - -## Community Integrations - -In addition to our official integrations, there is an amazing community of -developers who have created their own integrations for Task: - -- [Sublime Text Plugin](https://packagecontrol.io/packages/Taskfile) - [[source](https://github.com/biozz/sublime-taskfile)] by @biozz -- [IntelliJ Plugin](https://plugins.jetbrains.com/plugin/17058-taskfile) - [[source](https://github.com/lechuckroh/task-intellij-plugin)] by @lechuckroh -- [mk](https://github.com/pycontribs/mk) command line tool recognizes Taskfiles - natively. - -If you have made something that integrates with Task, please feel free to open a -PR to add it to this list. diff --git a/website/docs/intro.mdx b/website/docs/intro.mdx deleted file mode 100644 index 1791f670..00000000 --- a/website/docs/intro.mdx +++ /dev/null @@ -1,68 +0,0 @@ ---- -slug: / -sidebar_position: 1 -title: Home -hide_title: true ---- - -
- -
-
- -Task is a task runner / build tool that aims to be simpler and easier to use -than, for example, [GNU Make][make]. - -Since it's written in [Go][go], Task is just a single binary and has no other -dependencies, which means you don't need to mess with any complicated install -setups just to use a build tool. - -## Features - -- [Easy installation](/installation): just download a single binary, add to - `$PATH` and you're done! Or you can also install using [Homebrew][homebrew], - [Snapcraft][snapcraft], or [Scoop][scoop] if you want. -- Available on CIs: by adding - [this simple command](/installation#install-script) to install on your CI - script and you're ready to use Task as part of your CI pipeline; -- Truly cross-platform: while most build tools only work well on Linux or macOS, - Task also supports Windows thanks to [this shell interpreter for Go][sh]. -- Great for code generation: you can easily - [prevent a task from running](/usage#prevent-unnecessary-work) if a given set - of files haven't changed since last run (based either on its timestamp or - content). - -## Documentation - -- If you're new to Task, we recommend taking a look at our [getting started - guide][getting-started] for an quick introduction. -- You can also browse our [usage documentation][usage] for more details on how - all the features work. -- Or use our quick reference documentation for the [Taskfile schema][schema] or - [CLI][cli]. - -## Gold Sponsors - - - - - -
- - - -
- -{/* prettier-ignore-start */} -[make]: https://www.gnu.org/software/make/ -[go]: https://go.dev/ -[yaml]: http://yaml.org/ -[homebrew]: https://brew.sh/ -[snapcraft]: https://snapcraft.io/ -[scoop]: https://scoop.sh/ -[sh]: https://github.com/mvdan/sh -[getting-started]: /getting-started/ -[usage]: /usage/ -[schema]: /reference/schema/ -[cli]: /reference/cli/ -{/* prettier-ignore-end */} diff --git a/website/docs/reference/_category_.yml b/website/docs/reference/_category_.yml deleted file mode 100644 index 20a3c06b..00000000 --- a/website/docs/reference/_category_.yml +++ /dev/null @@ -1,2 +0,0 @@ -position: 5 -label: Reference diff --git a/website/docs/reference/cli.mdx b/website/docs/reference/cli.mdx deleted file mode 100644 index 55ab128f..00000000 --- a/website/docs/reference/cli.mdx +++ /dev/null @@ -1,121 +0,0 @@ ---- -slug: /reference/cli -sidebar_position: 1 ---- - -# CLI Reference - -Task CLI commands have the following syntax: - -```shell -task [--flags] [tasks...] [-- CLI_ARGS...] -``` - -:::tip - -If `--` is given, all remaining arguments will be assigned to a special -`CLI_ARGS` variable - -::: - -## Flags - -| Short | Flag | Type | Default | Description | -| ----- | --------------------------- | -------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `-c` | `--color` | `bool` | `true` | Colored output. Enabled by default. Set flag to `false` or use `NO_COLOR=1` to disable. | -| `-C` | `--concurrency` | `int` | `0` | Limit number tasks to run concurrently. Zero means unlimited. | -| `-d` | `--dir` | `string` | Working directory | Sets the directory in which Task will execute and look for a Taskfile. | -| `-n` | `--dry` | `bool` | `false` | Compiles and prints tasks in the order that they would be run, without executing them. | -| `-x` | `--exit-code` | `bool` | `false` | Pass-through the exit code of the task command. | -| `-f` | `--force` | `bool` | `false` | Forces execution even when the task is up-to-date. | -| `-g` | `--global` | `bool` | `false` | Runs global Taskfile, from `$HOME/Taskfile.{yml,yaml}`. | -| `-h` | `--help` | `bool` | `false` | Shows Task usage. | -| `-i` | `--init` | `bool` | `false` | Creates a new Taskfile.yml in the current folder. | -| `-I` | `--interval` | `string` | `5s` | Sets a different watch interval when using `--watch`, the default being 5 seconds. This string should be a valid [Go Duration](https://pkg.go.dev/time#ParseDuration). | -| `-l` | `--list` | `bool` | `false` | Lists tasks with description of current Taskfile. | -| `-a` | `--list-all` | `bool` | `false` | Lists tasks with or without a description. | -| | `--sort` | `string` | `default` | Changes the order of the tasks when listed.
`default` - Alphanumeric with root tasks first
`alphanumeric` - Alphanumeric
`none` - No sorting (As they appear in the Taskfile) | -| | `--json` | `bool` | `false` | See [JSON Output](#json-output) | -| `-o` | `--output` | `string` | Default set in the Taskfile or `interleaved` | Sets output style: [`interleaved`/`group`/`prefixed`]. | -| | `--output-group-begin` | `string` | | Message template to print before a task's grouped output. | -| | `--output-group-end` | `string` | | Message template to print after a task's grouped output. | -| | `--output-group-error-only` | `bool` | `false` | Swallow command output on zero exit code. | -| `-p` | `--parallel` | `bool` | `false` | Executes tasks provided on command line in parallel. | -| `-s` | `--silent` | `bool` | `false` | Disables echoing. | -| `-y` | `--yes` | `bool` | `false` | Assume "yes" as answer to all prompts. | -| | `--status` | `bool` | `false` | Exits with non-zero exit code if any of the given tasks is not up-to-date. | -| | `--summary` | `bool` | `false` | Show summary about a task. | -| `-t` | `--taskfile` | `string` | | Taskfile path to run.
Check the list of default filenames [here](../usage/#supported-file-names). | -| `-v` | `--verbose` | `bool` | `false` | Enables verbose mode. | -| | `--version` | `bool` | `false` | Show Task version. | -| `-w` | `--watch` | `bool` | `false` | Enables watch of the given task. - -## Exit Codes - -Task will sometimes exit with specific exit codes. These codes are split into -four groups with the following ranges: - -- Success (0) -- General errors (1-99) -- Taskfile errors (100-199) -- Task errors (200-255) - -A full list of the exit codes and their descriptions can be found below: - -| Code | Description | -|------|---------------------------------------------------------------------| -| 0 | Success | -| 1 | An unknown error occurred | -| 100 | No Taskfile was found | -| 101 | A Taskfile already exists when trying to initialize one | -| 102 | The Taskfile is invalid or cannot be parsed | -| 103 | A remote Taskfile could not be downloaded | -| 104 | A remote Taskfile was not trusted by the user | -| 105 | A remote Taskfile was could not be fetched securely | -| 106 | No cache was found for a remote Taskfile in offline mode | -| 107 | No schema version was defined in the Taskfile | -| 200 | The specified task could not be found | -| 201 | An error occurred while executing a command inside of a task | -| 202 | The user tried to invoke a task that is internal | -| 203 | There a multiple tasks with the same name or alias | -| 204 | A task was called too many times | -| 205 | A task was cancelled by the user | -| 206 | A task was not executed due to missing required variables | -| 207 | A task was not executed due to a variable having an incorrect value | - -These codes can also be found in the repository in -[`errors/errors.go`](https://github.com/go-task/task/blob/main/errors/errors.go). - -:::info - -When Task is run with the `-x`/`--exit-code` flag, the exit code of any failed -commands will be passed through to the user instead. - -::: - -## JSON Output - -When using the `--json` flag in combination with either the `--list` or -`--list-all` flags, the output will be a JSON object with the following -structure: - -```json -{ - "tasks": [ - { - "name": "", - "task": "", - "desc": "", - "summary": "", - "up_to_date": false, - "location": { - "line": 54, - "column": 3, - "taskfile": "/path/to/Taskfile.yml" - } - } - // ... - ], - "location": "/path/to/Taskfile.yml" -} -``` diff --git a/website/docs/reference/environment.mdx b/website/docs/reference/environment.mdx deleted file mode 100644 index d6772620..00000000 --- a/website/docs/reference/environment.mdx +++ /dev/null @@ -1,49 +0,0 @@ ---- -slug: /reference/environment -sidebar_position: 5 ---- - -# Environment Reference - -Task allows you to configure some behavior using environment variables. This -page lists all the environment variables that Task supports. - -| ENV | Default | Description | -|-------------------|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------| -| `TASK_TEMP_DIR` | `.task` | Location of the temp dir. Can relative to the project like `tmp/task` or absolute like `/tmp/.task` or `~/.task`. | -| `TASK_REMOTE_DIR` | `TASK_TEMP_DIR` | Location of the remote temp dir (used for caching). Can relative to the project like `tmp/task` or absolute like `/tmp/.task` or `~/.task`. | -| `TASK_OFFLINE` | `false` | Set the `--offline` flag through the environment variable. Only for remote experiment. CLI flag `--offline` takes precedence over the env variable | -| `FORCE_COLOR` | | Force color output usage. | - -## Custom Colors - -| ENV | Default | Description | -|-----------------------------|---------|-------------------------| -| `TASK_COLOR_RESET` | `0` | Color used for white. | -| `TASK_COLOR_RED` | `31` | Color used for red. | -| `TASK_COLOR_GREEN` | `32` | Color used for green. | -| `TASK_COLOR_YELLOW` | `33` | Color used for yellow. | -| `TASK_COLOR_BLUE` | `34` | Color used for blue. | -| `TASK_COLOR_MAGENTA` | `35` | Color used for magenta. | -| `TASK_COLOR_CYAN` | `36` | Color used for cyan. | -| `TASK_COLOR_BRIGHT_RED` | `91` | Color used for red. | -| `TASK_COLOR_BRIGHT_GREEN` | `92` | Color used for green. | -| `TASK_COLOR_BRIGHT_YELLOW` | `93` | Color used for yellow. | -| `TASK_COLOR_BRIGHT_BLUE` | `94` | Color used for blue. | -| `TASK_COLOR_BRIGHT_MAGENTA` | `95` | Color used for magenta. | -| `TASK_COLOR_BRIGHT_CYAN` | `96` | Color used for cyan. | - -All color variables are [ANSI color codes][ansi]. You can specify multiple codes -separated by a semicolon. For example: `31;1` will make the text bold and red. -Task also supports 8-bit color (256 colors). You can specify these colors by -using the sequence `38;2;R:G:B` for foreground colors and `48;2;R:G:B` for -background colors where `R`, `G` and `B` should be replaced with values between -0 and 255. - -For convenience, we allow foreground colors to be specified using shorthand, -comma-separated syntax: `R,G,B`. For example, `255,0,0` is equivalent to -`38;2;255:0:0`. - -{/* prettier-ignore-start */} -[ansi]: https://en.wikipedia.org/wiki/ANSI_escape_code -{/* prettier-ignore-end */} diff --git a/website/docs/reference/schema.mdx b/website/docs/reference/schema.mdx deleted file mode 100644 index 8339f510..00000000 --- a/website/docs/reference/schema.mdx +++ /dev/null @@ -1,242 +0,0 @@ ---- -slug: /reference/schema -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 5 ---- - -# Schema Reference - -| Attribute | Type | Default | Description | -|------------|------------------------------------|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `version` | `string` | | Version of the Taskfile. The current version is `3`. | -| `output` | `string` | `interleaved` | Output mode. Available options: `interleaved`, `group` and `prefixed`. | -| `method` | `string` | `checksum` | Default method in this Taskfile. Can be overridden in a task by task basis. Available options: `checksum`, `timestamp` and `none`. | -| `includes` | [`map[string]Include`](#include) | | Additional Taskfiles to be included. | -| `vars` | [`map[string]Variable`](#variable) | | A set of global variables. | -| `env` | [`map[string]Variable`](#variable) | | A set of global environment variables. | -| `tasks` | [`map[string]Task`](#task) | | A set of task definitions. | -| `silent` | `bool` | `false` | Default 'silent' options for this Taskfile. If `false`, can be overridden with `true` in a task by task basis. | -| `dotenv` | `[]string` | | A list of `.env` file paths to be parsed. | -| `run` | `string` | `always` | Default 'run' option for this Taskfile. Available options: `always`, `once` and `when_changed`. | -| `interval` | `string` | `5s` | Sets a different watch interval when using `--watch`, the default being 5 seconds. This string should be a valid [Go Duration](https://pkg.go.dev/time#ParseDuration). | -| `set` | `[]string` | | Specify options for the [`set` builtin](https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html). | -| `shopt` | `[]string` | | Specify option for the [`shopt` builtin](https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html). | - -## Include - -| Attribute | Type | Default | Description | -|------------|-----------------------|-------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `taskfile` | `string` | | The path for the Taskfile or directory to be included. If a directory, Task will look for files named `Taskfile.yml` or `Taskfile.yaml` inside that directory. If a relative path, resolved relative to the directory containing the including Taskfile. | -| `dir` | `string` | The parent Taskfile directory | The working directory of the included tasks when run. | -| `optional` | `bool` | `false` | If `true`, no errors will be thrown if the specified file does not exist. | -| `flatten` | `bool` | `false` | If `true`, the tasks from the included Taskfile will be available in the including Taskfile without a namespace. If a task with the same name already exists in the including Taskfile, an error will be thrown. | -| `internal` | `bool` | `false` | Stops any task in the included Taskfile from being callable on the command line. These commands will also be omitted from the output when used with `--list`. | -| `aliases` | `[]string` | | Alternative names for the namespace of the included Taskfile. | -| `vars` | `map[string]Variable` | | A set of variables to apply to the included Taskfile. | -| `checksum` | `string` | | The checksum of the file you expect to include. If the checksum does not match, the file will not be included. | - -:::info - -Informing only a string like below is equivalent to setting that value to the -`taskfile` attribute. - -```yaml -includes: - foo: ./path -``` - -::: - -## Variable - -| Attribute | Type | Default | Description | -| --------- | -------- | ------- | ------------------------------------------------------------------------ | -| _itself_ | `string` | | A static value that will be set to the variable. | -| `sh` | `string` | | A shell command. The output (`STDOUT`) will be assigned to the variable. | - -:::info - -Static and dynamic variables have different syntaxes, like below: - -```yaml -vars: - STATIC: static - DYNAMIC: - sh: echo "dynamic" -``` - -::: - -:::info - -In a variables map, variables defined later may reference variables defined -earlier (declaration order is respected): - -```yaml -vars: - FIRST_VAR: "hello" - SECOND_VAR: "{{.FIRST_VAR}} world" -``` - -::: - -## Task - -| Attribute | Type | Default | Description | -| --------------- | ---------------------------------- | ----------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `cmds` | [`[]Command`](#command) | | A list of shell commands to be executed. | -| `deps` | [`[]Dependency`](#dependency) | | A list of dependencies of this task. Tasks defined here will run in parallel before this task. | -| `label` | `string` | | Overrides the name of the task in the output when a task is run. Supports variables. | -| `desc` | `string` | | A short description of the task. This is displayed when calling `task --list`. | -| `prompt` | `[]string` | | One or more prompts that will be presented before a task is run. Declining will cancel running the current and any subsequent tasks. | -| `summary` | `string` | | A longer description of the task. This is displayed when calling `task --summary [task]`. | -| `aliases` | `[]string` | | A list of alternative names by which the task can be called. | -| `sources` | `[]string` | | A list of sources to check before running this task. Relevant for `checksum` and `timestamp` methods. Can be file paths or star globs. | -| `generates` | `[]string` | | A list of files meant to be generated by this task. Relevant for `timestamp` method. Can be file paths or star globs. | -| `status` | `[]string` | | A list of commands to check if this task should run. The task is skipped otherwise. This overrides `method`, `sources` and `generates`. | -| `preconditions` | [`[]Precondition`](#precondition) | | A list of commands to check if this task should run. If a condition is not met, the task will error. | -| `requires` | [`Requires`](#requires) | | A list of required variables which should be set if this task is to run, if any variables listed are unset the task will error and not run. | -| `dir` | `string` | | The directory in which this task should run. Defaults to the current working directory. | -| `vars` | [`map[string]Variable`](#variable) | | A set of variables that can be used in the task. | -| `env` | [`map[string]Variable`](#variable) | | A set of environment variables that will be made available to shell commands. | -| `dotenv` | `[]string` | | A list of `.env` file paths to be parsed. | -| `silent` | `bool` | `false` | Hides task name and command from output. The command's output will still be redirected to `STDOUT` and `STDERR`. When combined with the `--list` flag, task descriptions will be hidden. | -| `interactive` | `bool` | `false` | Tells task that the command is interactive. | -| `internal` | `bool` | `false` | Stops a task from being callable on the command line. It will also be omitted from the output when used with `--list`. | -| `method` | `string` | `checksum` | Defines which method is used to check the task is up-to-date. `timestamp` will compare the timestamp of the sources and generates files. `checksum` will check the checksum (You probably want to ignore the .task folder in your .gitignore file). `none` skips any validation and always run the task. | -| `prefix` | `string` | | Defines a string to prefix the output of tasks running in parallel. Only used when the output mode is `prefixed`. | -| `ignore_error` | `bool` | `false` | Continue execution if errors happen while executing commands. | -| `run` | `string` | The one declared globally in the Taskfile or `always` | Specifies whether the task should run again or not if called more than once. Available options: `always`, `once` and `when_changed`. | -| `platforms` | `[]string` | All platforms | Specifies which platforms the task should be run on. [Valid GOOS and GOARCH values allowed](https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go). Task will be skipped otherwise. | -| `set` | `[]string` | | Specify options for the [`set` builtin](https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html). | -| `shopt` | `[]string` | | Specify option for the [`shopt` builtin](https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html). | - -:::info - -These alternative syntaxes are available. They will set the given values to -`cmds` and everything else will be set to their default values: - -```yaml -tasks: - foo: echo "foo" - - foobar: - - echo "foo" - - echo "bar" - - baz: - cmd: echo "baz" -``` - -::: - -### Command - -| Attribute | Type | Default | Description | -| -------------- | ---------------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `cmd` | `string` | | The shell command to be executed. | -| `task` | `string` | | Set this to trigger execution of another task instead of running a command. This cannot be set together with `cmd`. | -| `for` | [`For`](#for) | | Runs the command once for each given value. | -| `silent` | `bool` | `false` | Skips some output for this command. Note that STDOUT and STDERR of the commands will still be redirected. | -| `vars` | [`map[string]Variable`](#variable) | | Optional additional variables to be passed to the referenced task. Only relevant when setting `task` instead of `cmd`. | -| `ignore_error` | `bool` | `false` | Continue execution if errors happen while executing the command. | -| `defer` | [`Defer`](#defer) | | Alternative to `cmd`, but schedules the command or a task to be executed at the end of this task instead of immediately. This cannot be used together with `cmd`. | -| `platforms` | `[]string` | All platforms | Specifies which platforms the command should be run on. [Valid GOOS and GOARCH values allowed](https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go). Command will be skipped otherwise. | -| `set` | `[]string` | | Specify options for the [`set` builtin](https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html). | -| `shopt` | `[]string` | | Specify option for the [`shopt` builtin](https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html). | - -:::info - -If given as a a string, the value will be assigned to `cmd`: - -```yaml -tasks: - foo: - cmds: - - echo "foo" - - echo "bar" -``` - -::: - -### Dependency - -| Attribute | Type | Default | Description | -| --------- | ---------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------- | -| `task` | `string` | | The task to be execute as a dependency. | -| `vars` | [`map[string]Variable`](#variable) | | Optional additional variables to be passed to this task. | -| `silent` | `bool` | `false` | Hides task name and command from output. The command's output will still be redirected to `STDOUT` and `STDERR`. | - -:::tip - -If you don't want to set additional variables, it's enough to declare the -dependency as a list of strings (they will be assigned to `task`): - -```yaml -tasks: - foo: - deps: [foo, bar] -``` - -::: - -### Defer - -The `defer` parameter defines a shell command to run, or a task to trigger, at the end of the current task instead of immediately. -If defined as a string this is a shell command, otherwise it is a map defining a task to call: - -| Attribute | Type | Default | Description | -| --------- | ---------------------------------- | ------- | ----------------------------------------------------------------- | -| `task` | `string` | | The deferred task to trigger. | -| `vars` | [`map[string]Variable`](#variable) | | Optional additional variables to be passed to the deferred task. | -| `silent` | `bool` | `false` | Hides task name and command from output. The command's output will still be redirected to `STDOUT` and `STDERR`. | - -### For - -The `for` parameter can be defined as a string, a list of strings or a map. If -it is defined as a string, you can give it any of the following values: - -- `sources` - Will run the command for each source file defined on the task. - (Glob patterns will be resolved, so `*.go` will run for every Go file that - matches). -- `generates` - Will run the command for each file defined in the task's generates - list. (Glob patterns will be resolved, so `*.txt` will run for every text file - that matches). - -If it is defined as a list of strings, the command will be run for each value. - -Finally, the `for` parameter can be defined as a map when you want to use a -variable to define the values to loop over: - -| Attribute | Type | Default | Description | -| --------- | -------- | ---------------- | -------------------------------------------- | -| `var` | `string` | | The name of the variable to use as an input. | -| `split` | `string` | (any whitespace) | What string the variable should be split on. | -| `as` | `string` | `ITEM` | The name of the iterator variable. | - -### Precondition - -| Attribute | Type | Default | Description | -| --------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------ | -| `sh` | `string` | | Command to be executed. If a non-zero exit code is returned, the task errors without executing its commands. | -| `msg` | `string` | | Optional message to print if the precondition isn't met. | - -:::tip - -If you don't want to set a different message, you can declare a precondition -like this and the value will be assigned to `sh`: - -```yaml -tasks: - foo: - precondition: test -f Taskfile.yml -``` - -::: - -### Requires - -| Attribute | Type | Default | Description | -| --------- | ---------- | ------- | -------------------------------------------------------------------------------------------------- | -| `vars` | `[]string` | | List of variable or environment variable names that must be set if this task is to execute and run | diff --git a/website/docs/reference/templating.mdx b/website/docs/reference/templating.mdx deleted file mode 100644 index 5cd75c4f..00000000 --- a/website/docs/reference/templating.mdx +++ /dev/null @@ -1,426 +0,0 @@ ---- -slug: /reference/templating/ -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 5 ---- - -# Templating Reference - -Task's templating engine uses Go's [text/template][text/template] package to -interpolate values. For detailed information about the usage of Go's templating -engine, we recommend reading [the official documentation][text/template]. -However, we will provide a basic overview of the main features here. - -## Basic Usage - -Most string values in Task (though, not all) can be templated. The templating -engine uses double curly braces `{{` and `}}` to denote a template. Anything -inside the curly braces will be executed as a Go template and the result will be -inserted into the resulting string. For example: - -```yaml -version: '3' - -tasks: - hello: - vars: - MESSAGE: 'Hello, World!' - cmds: - - 'echo {{.MESSAGE}}' -``` - -In this example, we have a task called `hello` with a single variable, `MESSAGE` -defined. When the command is run, the templating engine will evaluate the -variable and replace `{{.MESSAGE}}` with the variable's contents. This task will -output `Hello, World!` to the terminal. Note that when referring to a variable, -you must use dot notation. - -You are also able to do more complex things in templates, such as conditional -logic: - -```yaml -version: '3' - -tasks: - maybe-happy: - vars: - SMILE: ':\)' - FROWN: ':\(' - HAPPY: true - cmds: - - 'echo {{if .HAPPY}}{{.SMILE}}{{else}}{{.FROWN}}{{end}}' -``` - -```txt -:) -``` - -...calling functions and piping values: - -```yaml -version: '3' - -tasks: - uniq: - vars: - NUMBERS: '0,1,1,1,2,2,3' - cmds: - - 'echo {{splitList "," .NUMBERS | uniq | join ", " }}!' -``` - -```txt -0, 1, 2, 3 -``` - -...looping over values with control flow operators: - -```yaml -version: '3' - -tasks: - loop: - vars: - NUMBERS: [0, 1, 1, 1, 2, 2, 3] - cmds: - # Ranges over NUMBERS and prints the index and value of each number until it finds a number greater than 1 - - "{{range $index, $num := .NUMBERS}}{{if gt $num 1 }}{{break}}{{end}}echo {{$index}}: {{$num}}\n{{end}}" -``` - -```txt -0: 0 -1: 1 -2: 1 -3: 1 -``` - -## Special Variables - -Task defines some special variables that are always available to the templating -engine. If you define a variable with the same name as a special variable, the -special variable will be overridden. - -| Var | Description | -|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------| -| `CLI_ARGS` | Contain all extra arguments passed after `--` when calling Task through the CLI as a string. | -| `CLI_ARGS_LIST` | Contain all extra arguments passed after `--` when calling Task through the CLI as a shell parsed list. | -| `CLI_FORCE` | A boolean containing whether the `--force` or `--force-all` flags were set. | -| `CLI_SILENT` | A boolean containing whether the `--silent` flag was set. | -| `CLI_VERBOSE` | A boolean containing whether the `--verbose` flag was set. | -| `CLI_OFFLINE` | A boolean containing whether the `--offline` flag was set. | -| `TASK` | The name of the current task. | -| `ALIAS` | The alias used for the current task, otherwise matches `TASK`. | -| `TASK_EXE` | The Task executable name or path. | -| `ROOT_TASKFILE` | The absolute path of the root Taskfile. | -| `ROOT_DIR` | The absolute path of the root Taskfile directory. | -| `TASKFILE` | The absolute path of the included Taskfile. | -| `TASKFILE_DIR` | The absolute path of the included Taskfile directory. | -| `TASK_DIR` | The absolute path of the directory where the task is executed. | -| `USER_WORKING_DIR` | The absolute path of the directory `task` was called from. | -| `CHECKSUM` | The checksum of the files listed in `sources`. Only available within the `status` prop and if method is set to `checksum`. | -| `TIMESTAMP` | The date object of the greatest timestamp of the files listed in `sources`. Only available within the `status` prop and if method is set to `timestamp`. | -| `TASK_VERSION` | The current version of task. | -| `ITEM` | The value of the current iteration when using the `for` property. Can be changed to a different variable name using `as:`. | -| `EXIT_CODE` | Available exclusively inside the `defer:` command. Contains the failed command exit code. Only set when non-zero. | - -## Functions - -Functions are provided at a few different levels in Task. Below, we list all the -functions available for use in Task. - -:::note - -Functions marked with an asterisk (\*) also have `must` variants that will panic -rather than erroring. - -::: - -### Built-in Functions - -The first set of functions are [provided by Golang -itself][go-template-functions]: - -| Function | Description | -| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `and` | Returns the boolean AND of its arguments by returning the first empty argument or the last argument. That is, `and x y` behaves as `if x then y else x`. Evaluation proceeds through the arguments left to right and returns when the result is determined. | -| `call` | Returns the result of calling the first argument, which must be a function, with the remaining arguments as parameters. Thus `call .X.Y 1 2` is, in Go notation, `dot.X.Y(1, 2)` where `Y` is a func-valued field, map entry, or the like. The first argument must be the result of an evaluation that yields a value of function type (as distinct from a predefined function such as print). The function must return either one or two result values, the second of which is of type error. If the arguments don't match the function or the returned error value is non-nil, execution stops. | -| `html` | Returns the escaped HTML equivalent of the textual representation of its arguments. This function is unavailable in [html/template][html/template], with a few exceptions. | -| `index` | Returns the result of indexing its first argument by the following arguments. Thus `index x 1 2 3` is, in Go syntax, `x[1][2][3]`. Each indexed item must be a map, slice, or array. | -| `slice` | slice returns the result of slicing its first argument by the remaining arguments. Thus `slice x 1 2` is, in Go syntax, `x[1:2]`, while `slice x` is `x[:]`, `slice x 1` is `x[1:]`, and `slice x 1 2 3` is `x[1:2:3]`. The first argument must be a string, slice, or array. | -| `js` | Returns the escaped JavaScript equivalent of the textual representation of its arguments. | -| `len` | Returns the integer length of its argument. | -| `not` | Returns the boolean negation of its single argument. | -| `or` | Returns the boolean OR of its arguments by returning the first non-empty argument or the last argument, that is, `or x y` behaves as `if x then x else y`. Evaluation proceeds through the arguments left to right and returns when the result is determined. | -| `print` | An alias for `fmt.Sprint`. | -| `printf` | An alias for `fmt.Sprintf`. | -| `println` | An alias for `fmt.Sprintln`. | -| `urlquery` | Returns the escaped value of the textual representation of its arguments in a form suitable for embedding in a URL query. This function is unavailable in [html/template][html/template], with a few exceptions. | - -### Slim-Sprig Functions - -In addition to the built-in functions, Task also provides a set of functions -imported via the [slim-sprig][slim-sprig] package. We only provide a very basic -description here for completeness. For detailed usage, please refer to the -[slim-sprig documentation][slim-sprig]: - -#### [String Functions][string-functions] - -| Function | Description | -| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -| `trim` | Removes space from either side of a string. | -| `trimAll` | Removes given characters from the front or back of a string. | -| `trimSuffix` | Trims just the suffix from a string. | -| `trimPrefix` | Trims just the prefix from a string. | -| `upper` | Converts the entire string to uppercase. | -| `lower` | Converts the entire string to lowercase. | -| `title` | Converts to title case. | -| `repeat` | Repeats a string multiple times. | -| `substr` | Gets a substring from a string. | -| `trunc` | Truncates a string. | -| `contains` | Tests to see if one string is contained inside of another. | -| `hasPrefix` | Tests whether a string has a given prefix. | -| `hasSuffix` | Tests whether a string has a given suffix. | -| `quote` | Wraps a string in double quotes. | -| `squote` | Wraps a string in single quotes. | -| `cat` | Concatenates multiple strings together into one, separating them with spaces. | -| `indent` | Indents every line in a given string to the specified indent width. | -| `nindent` | Identical to `indent`, but prepends a new line to the beginning of the string. | -| `replace` | Replaces a string. | -| `plural` | Pluralizes a string. | -| `regexMatch`\* | Returns true if the input string contains any match of the regular expression. | -| `regexFindAll`\* | Returns a slice of all matches of the regular expression in the input string. | -| `regexFind`\* | Returns the first (left most) match of the regular expression in the input string. | -| `regexReplaceAll`\* | Returns a copy of the input string, replacing matches of the Regexp with the replacement string replacement. | -| `regexReplaceAllLiteral`\* | Returns a copy of the input string, replacing matches of the Regexp with the replacement string replacement without expanding `$`. | -| `regexSplit`\* | Slices the input string into substrings separated by the expression and returns a slice of the substrings between those expression matches. | -| `regexQuoteMeta`\* | Returns a string that escapes all regular expression metacharacters inside the argument text. | - -#### [String Slice Functions][string-list-functions] - -| Function | Description | -| ----------- | ----------------------------------------------------------------------- | -| `join` | Joins a list of strings into a single string, with the given separator. | -| `splitList` | Splits a string into a list of strings. | -| `split` | Splits a string into a map of strings where each key is an index. | -| `splitn` | Identical to `split`, but stops splitting after `n` values. | -| `sortAlpha` | Sorts a list of strings into alphabetical (lexicographical) order. | - -#### [Integer Functions][math-functions] - -| Function | Description | -| --------- | ------------------------------------------------------------------------------------------------------- | -| `add` | Sum a set of numbers. | -| `add1` | Increments a number by 1. | -| `sub` | Subtracts one number from another. | -| `div` | Performs integer division. | -| `mod` | Modulo. | -| `mul` | Multiplies a set of numbers. | -| `max` | Returns the largest of a set of integers. | -| `min` | Returns the smallest of a set of integers. | -| `floor` | Returns the greatest float value less than or equal to input value | -| `ceil` | Returns the greatest float value greater than or equal to input value | -| `round` | Returns a float value with the remainder rounded to the given number to digits after the decimal point. | -| `randInt` | Returns a random integer value from min (inclusive) to max (exclusive). | - -#### [Integer Slice Functions][integer-list-functions] - -| Function | Description | -| ----------- | --------------------------------------------------------------------------- | -| `until` | Builds a range of integers. | -| `untilStep` | Builds a range of integers, but allows you to define a start, stop and step | -| `seq` | Works like the bash `seq` command. | - -#### [Date Functions][date-functions] - -| Function | Description | -| ---------------- | ------------------------------------------------------------------------------ | -| `now` | Gets the current date/time. | -| `ago` | Returns the duration since the given date/time. | -| `date` | Formats a date. | -| `dateInZone` | Identical to `date`, but with the given timezone. | -| `duration` | Formats the number of seconds into a string. | -| `durationRound` | Identical to `duration`, but rounds the duration to the most significant unit. | -| `unixEpoch` | Returns the seconds since the unix epoch for the given date/time. | -| `dateModify`\* | Modifies a date using the given input string. | -| `htmlDate` | Formats a date for inserting into an HTML date picker input field. | -| `htmlDateInZone` | Identical to `htmlDate`, but with the given timezone. | -| `toDate`\* | Converts a string to a date/time. | - -#### [Default Functions][default-functions] - -| Function | Description | -| ---------- | ------------------------------------------------------------------------ | -| `default` | Uses a default value if the given value is considered "zero" or "empty". | -| `empty` | Returns true if a value is considered "zero" or "empty". | -| `coalesce` | Takes a list of values and returns the first non-empty one. | -| `all` | Returns true if all values are non-empty. | -| `any` | Returns true if any value is non-empty. | -| `ternary` | The ternary function takes two values, and a test value. If the test value is true, the first value will be returned. If the test value is empty, the second value will be returned. | - -#### [Encoding Functions][encoding-functions] - -| Function | Description | -| ---------------- | ------------------------------------------------------------------ | -| `fromJson`\* | Decodes a JSON string into an object. | -| `toJson`\* | Encodes an object as a JSON string. | -| `toPrettyJson`\* | Encodes an object as a JSON string with new lines and indentation. | -| `toRawJson`\* | Encodes an object as a JSON string with HTML characters unescaped. | -| `b64enc` | Encodes a string into base 64. | -| `b64dec` | Decodes a string from base 64. | -| `b32enc` | Encodes a string into base 32. | -| `b32dec` | Decodes a string from base 32. | - -:::note -YAML encoding functions are [provided directly by Task](#task-functions). -::: - -#### [List Functions][list-functions] - -| Function | Description | -| ----------- | ---------------------------------------------------------------- | -| `list` | Creates a list from a set of values. | -| `first`\* | Gets the first value in a list. | -| `rest`\* | Gets all values except the first value in the list. | -| `last`\* | Gets the last value in the list. | -| `initial`\* | Get all values except the last value in the list. | -| `append`\* | Adds a new value to the end of the list. | -| `prepend`\* | Adds a new value to the start of the list. | -| `concat` | Joins two or more lists together. | -| `reverse`\* | Reverses the order of a list. | -| `uniq`\* | Generate a list with all of the duplicates removed. | -| `without`\* | Filters matching items out of a list. | -| `has`\* | Tests to see if a list has a particular element. | -| `compact`\* | Removes entries with empty values. | -| `slice`\* | Returns a partial copy of a list given start and end parameters. | -| `chunk` | Splits a list into chunks of given size. | - -#### [Dictionary Functions][dictionary-functions] - -| Function | Description | -| ------------------ | ------------------------------------------------------------------------------------------ | -| `dict` | Creates a dictionary from a set of key/value pairs. | -| `get` | Gets the value from the dictionary with the given key. | -| `set` | Adds a new key/value pair to a dictionary. | -| `unset` | Deletes a key from a dictionary. | -| `hasKey` | Returns true if a dictionary contains the given key. | -| `pluck` | Gets a list of all of the matching values in a set of maps given a key. | -| `dig` | Returns the value in a nested map given a path of keys. | -| `merge`\* | Merges two or more dictionaries into one. | -| `mergeOverwrite`\* | Identical to `merge`, but giving precedence from right to left. | -| `keys` | Returns a list of all of the keys in a dictionary. | -| `pick` | Creates a new dictionary containing only the given keys of an existing map. | -| `omit` | Creates a new dictionary containing all the keys of an existing map except the ones given. | -| `values` | Returns a list of all the values in a dictionary. | - -#### [Type Conversion Functions][type-conversion-functions] - -| Function | Description | -| ----------- | ------------------------------------------------------ | -| `atoi` | Converts a string to an integer. | -| `float64` | Converts to a float64. | -| `int` | Converts to an int at the system's width. | -| `int64` | Converts to an int64. | -| `toDecimal` | Converts a unix octal to a int64. | -| `toString` | Converts to a string. | -| `toStrings` | Converts a list, slice, or array to a list of strings. | -| `toStrings` | Produces a slice of strings from any list. | -| `toDecimal` | Given a unix octal permission, produce a decimal. | - -#### [Path and Filepath Functions][path-functions] - -| Function | Description | -| --------- | ----------------------------------------- | -| `base` | Returns the last element of a path. | -| `dir` | Returns the directory of a path. | -| `clean` | Cleans up a path. | -| `ext` | Returns the file extension of a path. | -| `isAbs` | Checks if a path is absolute. | -| `osBase` | Returns the last element of a filepath. | -| `osDir` | Returns the directory of a filepath. | -| `osClean` | Cleans up a filepath. | -| `osExt` | Returns the file extension of a filepath. | -| `osIsAbs` | Checks if a filepath is absolute. | - -:::note -More filepath encoding functions are [provided directly by Task](#task-functions). -::: - -#### [Flow Control Functions][flow-control-functions] - -| Function | Description | -| -------- | ----------------------------------------------------------------------------- | -| `fail` | Unconditionally returns an empty string and an error with the specified text. | - -#### [OS Functions][os-functions] - -| Function | Description | -| ----------- | --------------------------------------------- | -| `env` | Reads an environment variable. | -| `expandenv` | Substitutes environment variables in a string | - -#### [Reflection Functions][reflection-functions] - -| Function | Description | -| ------------ | ------------------------------------------------------ | -| `kindOf` | Returns the kind of a value. | -| `kindIs` | Verifies that a value is a particular kind. | -| `typeOf` | Returns the underlying type of a value. | -| `typeIs` | Verifies that a value is of a particular type. | -| `typeIsLike` | Identical to `typeIs`, but also dereferences pointers. | -| `deepEqual` | Returns true if two values are "deeply equal". | - -#### [Cryptographic and Security Functions][crypto-functions] - -| Function | Description | -| ------------ | -------------------------------------- | -| `sha1sum` | Computes a string's SHA1 digest. | -| `sha256sum` | Computes a string's SHA256 digest. | -| `adler32sum` | Computes a string's Adler-32 checksum. | - -### Task Functions - -Lastly, Task itself provides a few functions: - -| Function | Description | -| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `OS` | Returns the operating system. Possible values are `windows`, `linux`, `darwin` (macOS) and `freebsd`. | -| `ARCH` | Returns the architecture Task was compiled to: `386`, `amd64`, `arm` or `s390x`. | -| `numCPU` | Returns the number of logical CPU's usable by the current process. | -| `splitLines` | Splits Unix (`\n`) and Windows (`\r\n`) styled newlines. | -| `catLines` | Replaces Unix (`\n`) and Windows (`\r\n`) styled newlines with a space. | -| `toSlash` | Does nothing on Unix, but on Windows converts a string from `\` path format to `/`. | -| `fromSlash` | Opposite of `toSlash`. Does nothing on Unix, but on Windows converts a string from `/` path format to `\`. | -| `exeExt` | Returns the right executable extension for the current OS (`".exe"` for Windows, `""` for others). | -| `shellQuote` | (aliased to `q`): Quotes a string to make it safe for use in shell scripts. Task uses [this Go function](https://pkg.go.dev/mvdan.cc/sh/v3@v3.4.0/syntax#Quote) for this. The Bash dialect is assumed. | -| `splitArgs` | Splits a string as if it were a command's arguments. Task uses [this Go function](https://pkg.go.dev/mvdan.cc/sh/v3@v3.4.0/shell#Fields). | -| `joinPath` | Joins any number of arguments into a path. The same as Go's [filepath.Join](https://pkg.go.dev/path/filepath#Join). | -| `relPath` | Converts an absolute path (second argument) into a relative path, based on a base path (first argument). The same as Go's [filepath.Rel](https://pkg.go.dev/path/filepath#Rel). | -| `merge` | Creates a new map that is a copy of the first map with the keys of each subsequent map merged into it. If there is a duplicate key, the value of the last map with that key is used. | -| `spew` | Returns the Go representation of a specific variable. Useful for debugging. Uses the [davecgh/go-spew](https://github.com/davecgh/go-spew) package. | -| `fromYaml`\* | Decodes a YAML string into an object. | -| `toYaml`\* | Encodes an object as a YAML string. | -| `uuid` | Generates a new pseudo-random UUIDv4 string. | -| `randIntN` | Generates a new pseudo-random, non-negative, 32bit integer in the half-open interval `[0,n)`. Generated numbers are not suitable for security-sensitive work. | - -{/* prettier-ignore-start */} -[text/template]: https://pkg.go.dev/text/template -[html/template]: https://pkg.go.dev/html/template -[go-template-functions]: https://pkg.go.dev/text/template#hdr-Functions -[slim-sprig]: https://go-task.github.io/slim-sprig/ -[os-functions]: https://go-task.github.io/slim-sprig/os.html -[string-functions]: https://go-task.github.io/slim-sprig/strings.html -[string-list-functions]: https://go-task.github.io/slim-sprig/string_slice.html -[math-functions]: https://go-task.github.io/slim-sprig/math.html -[integer-list-functions]: https://go-task.github.io/slim-sprig/integer_slice.html -[date-functions]: https://go-task.github.io/slim-sprig/date.html -[default-functions]: https://go-task.github.io/slim-sprig/defaults.html -[encoding-functions]: https://go-task.github.io/slim-sprig/encoding.html -[list-functions]: https://go-task.github.io/slim-sprig/lists.html -[dictionary-functions]: https://go-task.github.io/slim-sprig/dicts.html -[type-conversion-functions]: https://go-task.github.io/slim-sprig/conversion.html -[path-functions]: https://go-task.github.io/slim-sprig/paths.html -[flow-control-functions]: https://go-task.github.io/slim-sprig/flow_control.html -[os-functions]: https://go-task.github.io/slim-sprig/os.html -[reflection-functions]: https://go-task.github.io/slim-sprig/reflection.html -[crypto-functions]: https://go-task.github.io/slim-sprig/crypto.html -{/* prettier-ignore-end */} diff --git a/website/docs/releasing.mdx b/website/docs/releasing.mdx deleted file mode 100644 index d244dce5..00000000 --- a/website/docs/releasing.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -slug: /releasing/ -sidebar_position: 13 ---- - -# Releasing - -The release process of Task is done with the help of [GoReleaser][goreleaser]. -You can test the release process locally by calling the `test-release` task of -the Taskfile. - -[GitHub Actions](https://github.com/go-task/task/actions) should release -artifacts automatically when a new Git tag is pushed to `main` branch (raw -executables and DEB and RPM packages). - -Since v3.15.0, raw executables can also be reproduced and verified locally by -checking out a specific tag and calling `goreleaser build`, using the Go version -defined in the above GitHub Actions. - -# Homebrew - -Goreleaser will automatically push a new commit to the -[Formula/go-task.rb][gotaskrb] file in the [Homebrew tap][homebrewtap] -repository to release the new version. - -# npm - -To release to npm update the version in the [`package.json`][packagejson] file -and then run `task npm:publish` to push it. - -# Snapcraft - -The [snap package][snappackage] requires to manual steps to release a new -version: - -- Updating the current version on [snapcraft.yaml][snapcraftyaml]. -- Moving both `amd64`, `armhf` and `arm64` new artifacts to the stable channel - on the [Snapcraft dashboard][snapcraftdashboard]. - -# winget - -winget also requires manual steps to be completed. By running -`task goreleaser:test` locally, manifest files will be generated on -`dist/winget/manifests/t/Task/Task/v{version}`. -[Upload the manifest directory into this fork](https://github.com/go-task/winget-pkgs/tree/master/manifests/t/Task/Task) -and open a pull request into -[this repository](https://github.com/microsoft/winget-pkgs). - -# Scoop - -Scoop is a command-line package manager for the Windows operating system. Scoop -package manifests are maintained by the community. Scoop owners usually take -care of updating versions there by editing -[this file](https://github.com/ScoopInstaller/Main/blob/master/bucket/task.json). -If you think its Task version is outdated, open an issue to let us know. - -# Nix - -Nix is a community owned installation method. Nix package maintainers usually -take care of updating versions there by editing -[this file](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/go/go-task/package.nix). -If you think its Task version is outdated, open an issue to let us know. - -{/* prettier-ignore-start */} -[goreleaser]: https://goreleaser.com/ -[homebrewtap]: https://github.com/go-task/homebrew-tap -[gotaskrb]: https://github.com/go-task/homebrew-tap/blob/main/Formula/go-task.rb -[packagejson]: https://github.com/go-task/task/blob/main/package.json#L3 -[snappackage]: https://github.com/go-task/snap -[snapcraftyaml]: https://github.com/go-task/snap/blob/main/snap/snapcraft.yaml#L2 -[snapcraftdashboard]: https://snapcraft.io/task/releases -{/* prettier-ignore-end */} diff --git a/website/docs/taskfile_versions.mdx b/website/docs/taskfile_versions.mdx deleted file mode 100644 index 23c8ac02..00000000 --- a/website/docs/taskfile_versions.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -slug: /taskfile-versions/ -sidebar_position: 6 ---- - -# Taskfile Versions - -The Taskfile schema slowly changes as new features are added and old ones are -removed. This document explains how to use a Taskfile's schema version to ensure -that the users of your Taskfile are using the correct versions of Task. - -## What the Taskfile version means - -The schema version at the top of every Taskfile corresponds to a version of the -Task CLI, and by extension, the features that are provided by that version. When -creating a Taskfile, you should specify the _minimum_ version of Task that -supports the features you require. If you try to run a Taskfile with a version -of Task that does not meet this minimum required version, it will exit with an -error. For example, given a Taskfile that starts with: - -```yaml -version: '3.2.1' -``` - -When executed with Task `v3.2.0`, it will exit with an error. Running with -version `v3.2.1` or higher will work as expected. - -Task accepts any [SemVer][semver] compatible string including versions which -omit the minor or patch numbers. For example, `3`, `3.0`, and `3.0.0` all mean -the same thing and are all valid. Most Taskfiles only specify the major version -number. However it can be useful to be more specific when you intend to share a -Taskfile with others. - -For example, the Taskfile below makes use of aliases: - -```yaml -version: '3' - -tasks: - hello: - aliases: - - hi - - hey - cmds: - - echo "Hello, world!" -``` - -Aliases were introduced in Task `v3.17.0`, but the Taskfile only specifies `3` -as the version. This means that a user who has `v3.16.0` or lower installed will -get a potentially confusing error message when trying to run the Task as the -Taskfile specifies that any version greater or equal to `v3.0.0` is fine. - -Instead, we should start the file like this: - -```yaml -version: '3.17' -``` - -Now when someone tries to run the Taskfile with an older version of Task, they -will receive an error prompting them to upgrade their version of Task to -`v3.17.0` or greater. - -## Versions 1 & 2 - -Version 1 and 2 of Task are no longer officially supported and anyone still -using them is strongly encouraged to upgrade to the latest version of Task. - -While `version: 2` of Task did support schema versions, the behavior did not -work in quite the same way and cannot be relied upon for the purposes discussed -above. - -[semver]: https://semver.org/ diff --git a/website/docs/usage.mdx b/website/docs/usage.mdx deleted file mode 100644 index 9590cf4f..00000000 --- a/website/docs/usage.mdx +++ /dev/null @@ -1,2402 +0,0 @@ ---- -slug: /usage/ -sidebar_position: 4 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Usage - -## Running Taskfiles - -Specific Taskfiles can be called by specifying the `--taskfile` flag. If you -don't specify a Taskfile, Task will automatically look for a file with one of -the [supported file names](#supported-file-names) in the current directory. If -you want to search in a different directory, you can use the `--dir` flag. - -### Supported file names - -Task looks for files with the following names, in order of priority: - -- `Taskfile.yml` -- `taskfile.yml` -- `Taskfile.yaml` -- `taskfile.yaml` -- `Taskfile.dist.yml` -- `taskfile.dist.yml` -- `Taskfile.dist.yaml` -- `taskfile.dist.yaml` - -The `.dist` variants allow projects to have one committed file (`.dist`) while -still allowing individual users to override the Taskfile by adding an additional -`Taskfile.yml` (which would be in your `.gitignore`). - -### Running a Taskfile from a subdirectory - -If a Taskfile cannot be found in the current working directory, it will walk up -the file tree until it finds one (similar to how `git` works). When running Task -from a subdirectory like this, it will behave as if you ran it from the -directory containing the Taskfile. - -You can use this functionality along with the special `{{.USER_WORKING_DIR}}` -variable to create some very useful reusable tasks. For example, if you have a -monorepo with directories for each microservice, you can `cd` into a -microservice directory and run a task command to bring it up without having to -create multiple tasks or Taskfiles with identical content. For example: - -```yaml -version: '3' - -tasks: - up: - dir: '{{.USER_WORKING_DIR}}' - preconditions: - - test -f docker-compose.yml - cmds: - - docker-compose up -d -``` - -In this example, we can run `cd ` and `task up` and as long as the -`` directory contains a `docker-compose.yml`, the Docker composition -will be brought up. - -### Running a global Taskfile - -If you call Task with the `--global` (alias `-g`) flag, it will look for your -home directory instead of your working directory. In short, Task will look for a -Taskfile that matches `$HOME/{T,t}askfile.{yml,yaml}` . - -This is useful to have automation that you can run from anywhere in your system! - -:::info - -When running your global Taskfile with `-g`, tasks will run on `$HOME` by -default, and not on your working directory! - -As mentioned in the previous section, the `{{.USER_WORKING_DIR}}` special -variable can be very handy here to run stuff on the directory you're calling -`task -g` from. - -```yaml -version: '3' - -tasks: - from-home: - cmds: - - pwd - - from-working-directory: - dir: '{{.USER_WORKING_DIR}}' - cmds: - - pwd -``` - -::: - -### Reading a Taskfile from stdin - -Taskfile also supports reading from stdin. This is useful if you are generating -Taskfiles dynamically and don't want write them to disk. To tell task to read -from stdin, you must specify the `-t/--taskfile` flag with the special `-` -value. You may then pipe into Task as you would any other program: - -```shell -task -t - <(cat ./Taskfile.yml) -# OR -cat ./Taskfile.yml | task -t - -``` - -## Environment variables - -### Task - -You can use `env` to set custom environment variables for a specific task: - -```yaml -version: '3' - -tasks: - greet: - cmds: - - echo $GREETING - env: - GREETING: Hey, there! -``` - -Additionally, you can set global environment variables that will be available to -all tasks: - -```yaml -version: '3' - -env: - GREETING: Hey, there! - -tasks: - greet: - cmds: - - echo $GREETING -``` - -:::info - -`env` supports expansion and retrieving output from a shell command just like -variables, as you can see in the [Variables](#variables) section. - -::: - -### .env files - -You can also ask Task to include `.env` like files by using the `dotenv:` -setting: - -```shell title=".env" -KEYNAME=VALUE -``` - -```shell title="testing/.env" -ENDPOINT=testing.com -``` - -```yaml title="Taskfile.yml" -version: '3' - -env: - ENV: testing - -dotenv: ['.env', '{{.ENV}}/.env', '{{.HOME}}/.env'] - -tasks: - greet: - cmds: - - echo "Using $KEYNAME and endpoint $ENDPOINT" -``` - -Dotenv files can also be specified at the task level: - -```yaml -version: '3' - -env: - ENV: testing - -tasks: - greet: - dotenv: ['.env', '{{.ENV}}/.env', '{{.HOME}}/.env'] - cmds: - - echo "Using $KEYNAME and endpoint $ENDPOINT" -``` - -Environment variables specified explicitly at the task-level will override -variables defined in dotfiles: - -```yaml -version: '3' - -env: - ENV: testing - -tasks: - greet: - dotenv: ['.env', '{{.ENV}}/.env', '{{.HOME}}/.env'] - env: - KEYNAME: DIFFERENT_VALUE - cmds: - - echo "Using $KEYNAME and endpoint $ENDPOINT" -``` - -:::info - -Please note that you are not currently able to use the `dotenv` key inside -included Taskfiles. - -::: - -## Including other Taskfiles - -If you want to share tasks between different projects (Taskfiles), you can use -the importing mechanism to include other Taskfiles using the `includes` keyword: - -```yaml -version: '3' - -includes: - docs: ./documentation # will look for ./documentation/Taskfile.yml - docker: ./DockerTasks.yml -``` - -The tasks described in the given Taskfiles will be available with the informed -namespace. So, you'd call `task docs:serve` to run the `serve` task from -`documentation/Taskfile.yml` or `task docker:build` to run the `build` task from -the `DockerTasks.yml` file. - -Relative paths are resolved relative to the directory containing the including -Taskfile. - -### OS-specific Taskfiles - -You can include OS-specific Taskfiles by using a templating function: - -```yaml -version: '3' - -includes: - build: ./Taskfile_{{OS}}.yml -``` - -### Directory of included Taskfile - -By default, included Taskfile's tasks are run in the current directory, even if -the Taskfile is in another directory, but you can force its tasks to run in -another directory by using this alternative syntax: - -```yaml -version: '3' - -includes: - docs: - taskfile: ./docs/Taskfile.yml - dir: ./docs -``` - -:::info - -The included Taskfiles must be using the same schema version as the main -Taskfile uses. - -::: - -### Optional includes - -Includes marked as optional will allow Task to continue execution as normal if -the included file is missing. - -```yaml -version: '3' - -includes: - tests: - taskfile: ./tests/Taskfile.yml - optional: true - -tasks: - greet: - cmds: - - echo "This command can still be successfully executed if - ./tests/Taskfile.yml does not exist" -``` - -### Internal includes - -Includes marked as internal will set all the tasks of the included file to be -internal as well (see the [Internal tasks](#internal-tasks) section below). This -is useful when including utility tasks that are not intended to be used directly -by the user. - -```yaml -version: '3' - -includes: - tests: - taskfile: ./taskfiles/Utils.yml - internal: true -``` - -### Flatten includes - -You can flatten the included Taskfile tasks into the main Taskfile by using the `flatten` option. -It means that the included Taskfile tasks will be available without the namespace. - - - - - -```yaml -version: '3' - -includes: - lib: - taskfile: ./Included.yml - flatten: true - -tasks: - greet: - cmds: - - echo "Greet" - - task: foo -``` - - - - -```yaml -version: '3' - -tasks: - foo: - cmds: - - echo "Foo" -``` - - - - -If you run `task -a` it will print : - -```sh -task: Available tasks for this project: -* greet: -* foo -``` - -You can run `task foo` directly without the namespace. - -You can also reference the task in other tasks without the namespace. So if you run `task greet` it will run `greet` and `foo` tasks and the output will be : - -```text -Greet -Foo -``` - -If multiple tasks have the same name, an error will be thrown: - - - - -```yaml -version: '3' -includes: - lib: - taskfile: ./Included.yml - flatten: true - -tasks: - greet: - cmds: - - echo "Greet" - - task: foo -``` - - - - -```yaml -version: '3' - -tasks: - greet: - cmds: - - echo "Foo" -``` - - - - -If you run `task -a` it will print: -```text -task: Found multiple tasks (greet) included by "lib" -``` - -If the included Taskfile has a task with the same name as a task in the main Taskfile, -you may want to exclude it from the flattened tasks. - -You can do this by using the [`excludes` option](#exclude-tasks-from-being-included). - -### Exclude tasks from being included - -You can exclude tasks from being included by using the `excludes` option. This option takes the list of tasks to be excluded from this include. - - - - -```yaml -version: '3' - includes: - included: - taskfile: ./Included.yml - excludes: [foo] -``` - - - - -```yaml -version: '3' - -tasks: - foo: echo "Foo" - bar: echo "Bar" -``` - - - -`task included:foo` will throw an error because the `foo` task is excluded but `task included:bar` will work and display `Bar`. - -It's compatible with the `flatten` option. - -### Vars of included Taskfiles - -You can also specify variables when including a Taskfile. This may be useful for -having a reusable Taskfile that can be tweaked or even included more than once: - -```yaml -version: '3' - -includes: - backend: - taskfile: ./taskfiles/Docker.yml - vars: - DOCKER_IMAGE: backend_image - - frontend: - taskfile: ./taskfiles/Docker.yml - vars: - DOCKER_IMAGE: frontend_image -``` - -### Namespace aliases - -When including a Taskfile, you can give the namespace a list of `aliases`. This -works in the same way as [task aliases](#task-aliases) and can be used together -to create shorter and easier-to-type commands. - -```yaml -version: '3' - -includes: - generate: - taskfile: ./taskfiles/Generate.yml - aliases: [gen] -``` - -:::info - -Vars declared in the included Taskfile have preference over the variables in the -including Taskfile! If you want a variable in an included Taskfile to be -overridable, use the -[default function](https://go-task.github.io/slim-sprig/defaults.html): -`MY_VAR: '{{.MY_VAR | default "my-default-value"}}'`. - -::: - -## Internal tasks - -Internal tasks are tasks that cannot be called directly by the user. They will -not appear in the output when running `task --list|--list-all`. Other tasks may -call internal tasks in the usual way. This is useful for creating reusable, -function-like tasks that have no useful purpose on the command line. - -```yaml -version: '3' - -tasks: - build-image-1: - cmds: - - task: build-image - vars: - DOCKER_IMAGE: image-1 - - build-image: - internal: true - cmds: - - docker build -t {{.DOCKER_IMAGE}} . -``` - -## Task directory - -By default, tasks will be executed in the directory where the Taskfile is -located. But you can easily make the task run in another folder, informing -`dir`: - -```yaml -version: '3' - -tasks: - serve: - dir: public/www - cmds: - # run http server - - caddy -``` - -If the directory does not exist, `task` creates it. - -## Task dependencies - -> Dependencies run in parallel, so dependencies of a task should not depend one -> another. If you want to force tasks to run serially, take a look at the -> [Calling Another Task](#calling-another-task) section below. - -You may have tasks that depend on others. Just pointing them on `deps` will make -them run automatically before running the parent task: - -```yaml -version: '3' - -tasks: - build: - deps: [assets] - cmds: - - go build -v -i main.go - - assets: - cmds: - - esbuild --bundle --minify css/index.css > public/bundle.css -``` - -In the above example, `assets` will always run right before `build` if you run -`task build`. - -A task can have only dependencies and no commands to group tasks together: - -```yaml -version: '3' - -tasks: - assets: - deps: [js, css] - - js: - cmds: - - esbuild --bundle --minify js/index.js > public/bundle.js - - css: - cmds: - - esbuild --bundle --minify css/index.css > public/bundle.css -``` - -If there is more than one dependency, they always run in parallel for better -performance. - -:::tip - -You can also make the tasks given by the command line run in parallel by using -the `--parallel` flag (alias `-p`). Example: `task --parallel js css`. - -::: - -If you want to pass information to dependencies, you can do that the same manner -as you would to [call another task](#calling-another-task): - -```yaml -version: '3' - -tasks: - default: - deps: - - task: echo_sth - vars: { TEXT: 'before 1' } - - task: echo_sth - vars: { TEXT: 'before 2' } - silent: true - cmds: - - echo "after" - - echo_sth: - cmds: - - echo {{.TEXT}} -``` - -## Platform specific tasks and commands - -If you want to restrict the running of tasks to explicit platforms, this can be -achieved using the `platforms:` key. Tasks can be restricted to a specific OS, -architecture or a combination of both. On a mismatch, the task or command will -be skipped, and no error will be thrown. - -The values allowed as OS or Arch are valid `GOOS` and `GOARCH` values, as -defined by the Go language -[here](https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go). - -The `build-windows` task below will run only on Windows, and on any -architecture: - -```yaml -version: '3' - -tasks: - build-windows: - platforms: [windows] - cmds: - - echo 'Running command on Windows' -``` - -This can be restricted to a specific architecture as follows: - -```yaml -version: '3' - -tasks: - build-windows-amd64: - platforms: [windows/amd64] - cmds: - - echo 'Running command on Windows (amd64)' -``` - -It is also possible to restrict the task to specific architectures: - -```yaml -version: '3' - -tasks: - build-amd64: - platforms: [amd64] - cmds: - - echo 'Running command on amd64' -``` - -Multiple platforms can be specified as follows: - -```yaml -version: '3' - -tasks: - build: - platforms: [windows/amd64, darwin] - cmds: - - echo 'Running command on Windows (amd64) and macOS' -``` - -Individual commands can also be restricted to specific platforms: - -```yaml -version: '3' - -tasks: - build: - cmds: - - cmd: echo 'Running command on Windows (amd64) and macOS' - platforms: [windows/amd64, darwin] - - cmd: echo 'Running on all platforms' -``` - -## Calling another task - -When a task has many dependencies, they are executed concurrently. This will -often result in a faster build pipeline. However, in some situations, you may -need to call other tasks serially. In this case, use the following syntax: - -```yaml -version: '3' - -tasks: - main-task: - cmds: - - task: task-to-be-called - - task: another-task - - echo "Both done" - - task-to-be-called: - cmds: - - echo "Task to be called" - - another-task: - cmds: - - echo "Another task" -``` - -Using the `vars` and `silent` attributes you can choose to pass variables and -toggle [silent mode](#silent-mode) on a call-by-call basis: - -```yaml -version: '3' - -tasks: - greet: - vars: - RECIPIENT: '{{default "World" .RECIPIENT}}' - cmds: - - echo "Hello, {{.RECIPIENT}}!" - - greet-pessimistically: - cmds: - - task: greet - vars: { RECIPIENT: 'Cruel World' } - silent: true -``` - -The above syntax is also supported in `deps`. - -:::tip - -NOTE: If you want to call a task declared in the root Taskfile from within an -[included Taskfile](#including-other-taskfiles), add a leading `:` like this: -`task: :task-name`. - -::: - -## Prevent unnecessary work - -### By fingerprinting locally generated files and their sources - -If a task generates something, you can inform Task the source and generated -files, so Task will prevent running them if not necessary. - -```yaml -version: '3' - -tasks: - build: - deps: [js, css] - cmds: - - go build -v -i main.go - - js: - cmds: - - esbuild --bundle --minify js/index.js > public/bundle.js - sources: - - src/js/**/*.js - generates: - - public/bundle.js - - css: - cmds: - - esbuild --bundle --minify css/index.css > public/bundle.css - sources: - - src/css/**/*.css - generates: - - public/bundle.css -``` - -`sources` and `generates` can be files or glob patterns. When given, Task will -compare the checksum of the source files to determine if it's necessary to run -the task. If not, it will just print a message like `Task "js" is up to date`. - -`exclude:` can also be used to exclude files from fingerprinting. Sources are -evaluated in order, so `exclude:` must come after the positive glob it is -negating. - -```yaml -version: '3' - -tasks: - css: - sources: - - mysources/**/*.css - - exclude: mysources/ignoreme.css - generates: - - public/bundle.css -``` - -If you prefer these check to be made by the modification timestamp of the files, -instead of its checksum (content), just set the `method` property to -`timestamp`. This can be done at two levels: - -At the task level for a specific task: - - -```yaml -version: '3' - -tasks: - build: - cmds: - - go build . - sources: - - ./*.go - generates: - - app{{exeExt}} - method: timestamp -``` - -At the root level of the Taskfile to apply it globally to all tasks: - -```yaml -version: '3' - -method: timestamp # Will be the default for all tasks - -tasks: - build: - cmds: - - go build . - sources: - - ./*.go - generates: - - app{{exeExt}} -``` - - -In situations where you need more flexibility the `status` keyword can be used. -You can even combine the two. See the documentation for -[status](#using-programmatic-checks-to-indicate-a-task-is-up-to-date) for an -example. - -:::info - -By default, task stores checksums on a local `.task` directory in the project's -directory. Most of the time, you'll want to have this directory on `.gitignore` -(or equivalent) so it isn't committed. (If you have a task for code generation -that is committed it may make sense to commit the checksum of that task as well, -though). - -If you want these files to be stored in another directory, you can set a -`TASK_TEMP_DIR` environment variable in your machine. It can contain a relative -path like `tmp/task` that will be interpreted as relative to the project -directory, or an absolute or home path like `/tmp/.task` or `~/.task` -(subdirectories will be created for each project). - -```shell -export TASK_TEMP_DIR='~/.task' -``` - -::: - -:::info - -Each task has only one checksum stored for its `sources`. If you want to -distinguish a task by any of its input variables, you can add those variables as -part of the task's label, and it will be considered a different task. - -This is useful if you want to run a task once for each distinct set of inputs -until the sources actually change. For example, if the sources depend on the -value of a variable, or you if you want the task to rerun if some arguments -change even if the source has not. - -::: - -:::tip - -The method `none` skips any validation and always runs the task. - -::: - -:::info - -For the `checksum` (default) or `timestamp` method to work, it is only necessary -to inform the source files. When the `timestamp` method is used, the last time -of the running the task is considered as a generate. - -::: - -### Using programmatic checks to indicate a task is up to date - -Alternatively, you can inform a sequence of tests as `status`. If no error is -returned (exit status 0), the task is considered up-to-date: - -```yaml -version: '3' - -tasks: - generate-files: - cmds: - - mkdir directory - - touch directory/file1.txt - - touch directory/file2.txt - # test existence of files - status: - - test -d directory - - test -f directory/file1.txt - - test -f directory/file2.txt -``` - -Normally, you would use `sources` in combination with `generates` - but for -tasks that generate remote artifacts (Docker images, deploys, CD releases) the -checksum source and timestamps require either access to the artifact or for an -out-of-band refresh of the `.checksum` fingerprint file. - -Two special variables `{{.CHECKSUM}}` and `{{.TIMESTAMP}}` are available for -interpolation within `cmds` and `status` commands, depending on the method assigned to -fingerprint the sources. Only `source` globs are fingerprinted. - -Note that the `{{.TIMESTAMP}}` variable is a "live" Go `time.Time` struct, and -can be formatted using any of the methods that `time.Time` responds to. - -See [the Go Time documentation](https://golang.org/pkg/time/) for more -information. - -You can use `--force` or `-f` if you want to force a task to run even when -up-to-date. - -Also, `task --status [tasks]...` will exit with a non-zero [exit -code](/reference/cli#exit-codes) if any of the tasks are not up-to-date. - -`status` can be combined with the -[fingerprinting](#by-fingerprinting-locally-generated-files-and-their-sources) -to have a task run if either the the source/generated artifacts changes, or the -programmatic check fails: - -```yaml -version: '3' - -tasks: - build:prod: - desc: Build for production usage. - cmds: - - composer install - # Run this task if source files changes. - sources: - - composer.json - - composer.lock - generates: - - ./vendor/composer/installed.json - - ./vendor/autoload.php - # But also run the task if the last build was not a production build. - status: - - grep -q '"dev": false' ./vendor/composer/installed.json -``` - -### Using programmatic checks to cancel the execution of a task and its dependencies - -In addition to `status` checks, `preconditions` checks are the logical inverse -of `status` checks. That is, if you need a certain set of conditions to be -_true_ you can use the `preconditions` stanza. `preconditions` are similar to -`status` lines, except they support `sh` expansion, and they SHOULD all -return 0. - -```yaml -version: '3' - -tasks: - generate-files: - cmds: - - mkdir directory - - touch directory/file1.txt - - touch directory/file2.txt - # test existence of files - preconditions: - - test -f .env - - sh: '[ 1 = 0 ]' - msg: "One doesn't equal Zero, Halting" -``` - -Preconditions can set specific failure messages that can tell a user what steps -to take using the `msg` field. - -If a task has a dependency on a sub-task with a precondition, and that -precondition is not met - the calling task will fail. Note that a task executed -with a failing precondition will not run unless `--force` is given. - -Unlike `status`, which will skip a task if it is up to date and continue -executing tasks that depend on it, a `precondition` will fail a task, along with -any other tasks that depend on it. - -```yaml -version: '3' - -tasks: - task-will-fail: - preconditions: - - sh: 'exit 1' - - task-will-also-fail: - deps: - - task-will-fail - - task-will-still-fail: - cmds: - - task: task-will-fail - - echo "I will not run" -``` - -### Limiting when tasks run - -If a task executed by multiple `cmds` or multiple `deps` you can control when it -is executed using `run`. `run` can also be set at the root of the Taskfile to -change the behavior of all the tasks unless explicitly overridden. - -Supported values for `run`: - -- `always` (default) always attempt to invoke the task regardless of the number - of previous executions -- `once` only invoke this task once regardless of the number of references -- `when_changed` only invokes the task once for each unique set of variables - passed into the task - -```yaml -version: '3' - -tasks: - default: - cmds: - - task: generate-file - vars: { CONTENT: '1' } - - task: generate-file - vars: { CONTENT: '2' } - - task: generate-file - vars: { CONTENT: '2' } - - generate-file: - run: when_changed - deps: - - install-deps - cmds: - - echo {{.CONTENT}} - - install-deps: - run: once - cmds: - - sleep 5 # long operation like installing packages -``` - -### Ensuring required variables are set - -If you want to check that certain variables are set before running a task then -you can use `requires`. This is useful when might not be clear to users which -variables are needed, or if you want clear message about what is required. Also -some tasks could have dangerous side effects if run with un-set variables. - -Using `requires` you specify an array of strings in the `vars` sub-section under -`requires`, these strings are variable names which are checked prior to running -the task. If any variables are un-set then the task will error and not run. - -Environmental variables are also checked. - -Syntax: - -```yaml -requires: - vars: [] # Array of strings -``` - -:::note - -Variables set to empty zero length strings, will pass the `requires` check. - -::: - -Example of using `requires`: - -```yaml -version: '3' - -tasks: - docker-build: - cmds: - - 'docker build . -t {{.IMAGE_NAME}}:{{.IMAGE_TAG}}' - - # Make sure these variables are set before running - requires: - vars: [IMAGE_NAME, IMAGE_TAG] -``` - -### Ensuring required variables have allowed values - -If you want to ensure that a variable is set to one of a predefined set of valid values before executing a task, you can use requires. -This is particularly useful when there are strict requirements for what values a variable can take, and you want to provide clear feedback to the user when an invalid value is detected. - -To use `requires`, you specify an array of allowed values in the vars sub-section under requires. Task will check if the variable is set to one of the allowed values. -If the variable does not match any of these values, the task will raise an error and stop execution. - -This check applies both to user-defined variables and environment variables. - -Example of using `requires`: - -```yaml -version: '3' - -tasks: - deploy: - cmds: - - echo "deploying to {{.ENV}}" - - requires: - vars: - - name: ENV - enum: [dev, beta, prod] -``` - -If `ENV` is not one of 'dev', 'beta' or 'prod' an error will be raised. - -:::note - -This is supported only for string variables. - -::: - -## Variables - -Task allows you to set variables using the `vars` keyword. The following -variable types are supported: - -- `string` -- `bool` -- `int` -- `float` -- `array` -- `map` - -:::note - -Defining a map requires that you use a special `map` subkey (see example below). - -::: - -```yaml -version: 3 - -tasks: - foo: - vars: - STRING: 'Hello, World!' - BOOL: true - INT: 42 - FLOAT: 3.14 - ARRAY: [1, 2, 3] - MAP: - map: {A: 1, B: 2, C: 3} - cmds: - - 'echo {{.STRING}}' # Hello, World! - - 'echo {{.BOOL}}' # true - - 'echo {{.INT}}' # 42 - - 'echo {{.FLOAT}}' # 3.14 - - 'echo {{.ARRAY}}' # [1 2 3] - - 'echo {{index .ARRAY 0}}' # 1 - - 'echo {{.MAP}}' # map[A:1 B:2 C:3] - - 'echo {{.MAP.A}}' # 1 -``` - -Variables can be set in many places in a Taskfile. When executing -[templates][templating-reference], Task will look for variables in the order -listed below (most important first): - -- Variables declared in the task definition -- Variables given while calling a task from another (See - [Calling another task](#calling-another-task) above) -- Variables of the [included Taskfile](#including-other-taskfiles) (when the - task is included) -- Variables of the [inclusion of the Taskfile](#vars-of-included-taskfiles) - (when the task is included) -- Global variables (those declared in the `vars:` option in the Taskfile) -- Environment variables - -Example of sending parameters with environment variables: - -```shell -$ TASK_VARIABLE=a-value task do-something -``` - -:::tip - -A special variable `.TASK` is always available containing the task name. - -::: - -Since some shells do not support the above syntax to set environment variables -(Windows) tasks also accept a similar style when not at the beginning of the -command. - -```shell -$ task write-file FILE=file.txt "CONTENT=Hello, World!" print "MESSAGE=All done!" -``` - -Example of locally declared vars: - -```yaml -version: '3' - -tasks: - print-var: - cmds: - - echo "{{.VAR}}" - vars: - VAR: Hello! -``` - -Example of global vars in a `Taskfile.yml`: - -```yaml -version: '3' - -vars: - GREETING: Hello from Taskfile! - -tasks: - greet: - cmds: - - echo "{{.GREETING}}" -``` - -Example of a `default` value to be overridden from CLI: - -```yaml -version: '3' - - greet_user: - desc: "Greet the user with a name." - vars: - USER_NAME: '{{.USER_NAME| default "DefaultUser"}}' - cmds: - - echo "Hello, {{.USER_NAME}}!" -``` - -```shell -$ task greet_user -task: [greet_user] echo "Hello, DefaultUser!" -Hello, DefaultUser! -$ task greet_user USER_NAME="Bob" -task: [greet_user] echo "Hello, Bob!" -Hello, Bob! -``` - -### Dynamic variables - -The below syntax (`sh:` prop in a variable) is considered a dynamic variable. -The value will be treated as a command and the output assigned. If there are one -or more trailing newlines, the last newline will be trimmed. - -```yaml -version: '3' - -tasks: - build: - cmds: - - go build -ldflags="-X main.Version={{.GIT_COMMIT}}" main.go - vars: - GIT_COMMIT: - sh: git log -n 1 --format=%h -``` - -This works for all types of variables. - -### Referencing other variables - -Templating is great for referencing string values if you want to pass -a value from one task to another. However, the templating engine is only able to -output strings. If you want to pass something other than a string to another -task then you will need to use a reference (`ref`) instead. - - - - -```yaml -version: 3 - -tasks: - foo: - vars: - FOO: [A, B, C] # <-- FOO is defined as an array - cmds: - - task: bar - vars: - FOO: '{{.FOO}}' # <-- FOO gets converted to a string when passed to bar - bar: - cmds: - - 'echo {{index .FOO 0}}' # <-- FOO is a string so the task outputs '91' which is the ASCII code for '[' instead of the expected 'A' -``` - - - - -```yaml -version: 3 - -tasks: - foo: - vars: - FOO: [A, B, C] # <-- FOO is defined as an array - cmds: - - task: bar - vars: - FOO: - ref: .FOO # <-- FOO gets passed by reference to bar and maintains its type - bar: - cmds: - - 'echo {{index .FOO 0}}' # <-- FOO is still a map so the task outputs 'A' as expected -``` - - - - -This also works the same way when calling `deps` and when defining -a variable and can be used in any combination: - -```yaml -version: 3 - -tasks: - foo: - vars: - FOO: [A, B, C] # <-- FOO is defined as an array - BAR: - ref: .FOO # <-- BAR is defined as a reference to FOO - deps: - - task: bar - vars: - BAR: - ref: .BAR # <-- BAR gets passed by reference to bar and maintains its type - bar: - cmds: - - 'echo {{index .BAR 0}}' # <-- BAR still refers to FOO so the task outputs 'A' -``` - -All references use the same templating syntax as regular templates, so in -addition to calling `.FOO`, you can also pass subkeys (`.FOO.BAR`) or indexes -(`index .FOO 0`) and use functions (`len .FOO`) as described in the -[templating-reference][templating-reference]: - -```yaml -version: 3 - -tasks: - foo: - vars: - FOO: [A, B, C] # <-- FOO is defined as an array - cmds: - - task: bar - vars: - FOO: - ref: index .FOO 0 # <-- The element at index 0 is passed by reference to bar - bar: - cmds: - - 'echo {{.FOO}}' # <-- FOO is just the letter 'A' -``` - -### Parsing JSON/YAML into map variables - -If you have a raw JSON or YAML string that you want to process in Task, you can -use a combination of the `ref` keyword and the `fromJson` or `fromYaml` -templating functions to parse the string into a map variable. For example: - -```yaml -version: '3' - -tasks: - task-with-map: - vars: - JSON: '{"a": 1, "b": 2, "c": 3}' - FOO: - ref: "fromJson .JSON" - cmds: - - echo {{.FOO}} -``` - -```txt -map[a:1 b:2 c:3] -``` - -## Looping over values - -Task allows you to loop over certain values and execute a command for each. -There are a number of ways to do this depending on the type of value you want to -loop over. - -### Looping over a static list - -The simplest kind of loop is an explicit one. This is useful when you want to -loop over a set of values that are known ahead of time. - -```yaml -version: '3' - -tasks: - default: - cmds: - - for: ['foo.txt', 'bar.txt'] - cmd: cat {{ .ITEM }} -``` - -### Looping over a matrix - -If you need to loop over all permutations of multiple lists, you can use the -`matrix` property. This should be familiar to anyone who has used a matrix in a -CI/CD pipeline. - -```yaml -version: '3' - -tasks: - default: - silent: true - cmds: - - for: - matrix: - OS: ["windows", "linux", "darwin"] - ARCH: ["amd64", "arm64"] - cmd: echo "{{.ITEM.OS}}/{{.ITEM.ARCH}}" -``` - -This will output: - -```txt -windows/amd64 -windows/arm64 -linux/amd64 -linux/arm64 -darwin/amd64 -darwin/arm64 -``` - -You can also use references to other variables as long as they are also lists: - -```yaml -version: "3" - -vars: - OS_VAR: ["windows", "linux", "darwin"] - ARCH_VAR: ["amd64", "arm64"] - -tasks: - default: - cmds: - - for: - matrix: - OS: - ref: .OS_VAR - ARCH: - ref: .ARCH_VAR - cmd: echo "{{.ITEM.OS}}/{{.ITEM.ARCH}}" -``` - -### Looping over your task's sources or generated files - -You are also able to loop over the sources of your task or the files it -generates: - - - - -```yaml -version: '3' - -tasks: - default: - sources: - - foo.txt - - bar.txt - cmds: - - for: sources - cmd: cat {{ .ITEM }} -``` - - - - -```yaml -version: '3' - -tasks: - default: - generates: - - foo.txt - - bar.txt - cmds: - - for: generates - cmd: cat {{ .ITEM }} -``` - - - - -This will also work if you use globbing syntax in `sources` or `generates`. For -example, if you specify a source for `*.txt`, the loop will iterate over all -files that match that glob. - -Paths will always be returned as paths relative to the task directory. If you -need to convert this to an absolute path, you can use the built-in `joinPath` -function. There are some [special -variables](/reference/templating/#special-variables) that you may find useful -for this. - - - - -```yaml -version: '3' - -tasks: - default: - vars: - MY_DIR: /path/to/dir - dir: '{{.MY_DIR}}' - sources: - - foo.txt - - bar.txt - cmds: - - for: sources - cmd: cat {{joinPath .MY_DIR .ITEM}} -``` - - - - -```yaml -version: '3' - -tasks: - default: - vars: - MY_DIR: /path/to/dir - dir: '{{.MY_DIR}}' - generates: - - foo.txt - - bar.txt - cmds: - - for: generates - cmd: cat {{joinPath .MY_DIR .ITEM}} -``` - - - - -### Looping over variables - -To loop over the contents of a variable, use the `var` key followed by the name -of the variable you want to loop over. By default, string variables will be -split on any whitespace characters. - -```yaml -version: '3' - -tasks: - default: - vars: - MY_VAR: foo.txt bar.txt - cmds: - - for: { var: MY_VAR } - cmd: cat {{.ITEM}} -``` - -If you need to split a string on a different character, you can do this by -specifying the `split` property: - -```yaml -version: '3' - -tasks: - default: - vars: - MY_VAR: foo.txt,bar.txt - cmds: - - for: { var: MY_VAR, split: ',' } - cmd: cat {{.ITEM}} -``` - -You can also loop over arrays and maps directly: - -```yaml -version: 3 - -tasks: - foo: - vars: - LIST: [foo, bar, baz] - cmds: - - for: - var: LIST - cmd: echo {{.ITEM}} -``` - -When looping over a map we also make an additional `{{.KEY}}` variable available -that holds the string value of the map key. Remember that maps are unordered, so -the order in which the items are looped over is random. - -All of this also works with dynamic variables! - -```yaml -version: '3' - -tasks: - default: - vars: - MY_VAR: - sh: find -type f -name '*.txt' - cmds: - - for: { var: MY_VAR } - cmd: cat {{.ITEM}} -``` - -### Renaming variables - -If you want to rename the iterator variable to make it clearer what the value -contains, you can do so by specifying the `as` property: - -```yaml -version: '3' - -tasks: - default: - vars: - MY_VAR: foo.txt bar.txt - cmds: - - for: { var: MY_VAR, as: FILE } - cmd: cat {{.FILE}} -``` - -### Looping over tasks - -Because the `for` property is defined at the `cmds` level, you can also use it -alongside the `task` keyword to run tasks multiple times with different -variables. - -```yaml -version: '3' - -tasks: - default: - cmds: - - for: [foo, bar] - task: my-task - vars: - FILE: '{{.ITEM}}' - - my-task: - cmds: - - echo '{{.FILE}}' -``` - -Or if you want to run different tasks depending on the value of the loop: - -```yaml -version: '3' - -tasks: - default: - cmds: - - for: [foo, bar] - task: task-{{.ITEM}} - - task-foo: - cmds: - - echo 'foo' - - task-bar: - cmds: - - echo 'bar' -``` - -### Looping over dependencies - -All of the above looping techniques can also be applied to the `deps` property. -This allows you to combine loops with concurrency: - -```yaml -version: '3' - -tasks: - default: - deps: - - for: [foo, bar] - task: my-task - vars: - FILE: '{{.ITEM}}' - - my-task: - cmds: - - echo '{{.FILE}}' -``` - -It is important to note that as `deps` are run in parallel, the order in which -the iterations are run is not guaranteed and the output may vary. For example, -the output of the above example may be either: - -```shell -foo -bar -``` - -or - -```shell -bar -foo -``` - -## Forwarding CLI arguments to commands - -If `--` is given in the CLI, all following parameters are added to a special -`.CLI_ARGS` variable. This is useful to forward arguments to another command. - -The below example will run `yarn install`. - -```shell -$ task yarn -- install -``` - -```yaml -version: '3' - -tasks: - yarn: - cmds: - - yarn {{.CLI_ARGS}} -``` - -## Wildcard arguments - -Another way to parse arguments into a task is to use a wildcard in your task's -name. Wildcards are denoted by an asterisk (`*`) and can be used multiple times -in a task's name to pass in multiple arguments. - -Matching arguments will be captured and stored in the `.MATCH` variable and can -then be used in your task's commands like any other variable. This variable is -an array of strings and so will need to be indexed to access the individual -arguments. We suggest creating a named variable for each argument to make it -clear what they contain: - -```yaml -version: '3' - -tasks: - start:*:*: - vars: - SERVICE: "{{index .MATCH 0}}" - REPLICAS: "{{index .MATCH 1}}" - cmds: - - echo "Starting {{.SERVICE}} with {{.REPLICAS}} replicas" - - start:*: - vars: - SERVICE: "{{index .MATCH 0}}" - cmds: - - echo "Starting {{.SERVICE}}" -``` - -This call matches the `start:*` task and the string "foo" is captured by the -wildcard and stored in the `.MATCH` variable. We then index the `.MATCH` array -and store the result in the `.SERVICE` variable which is then echoed out in the -cmds: - -```shell -$ task start:foo -Starting foo -``` - -You can use whitespace in your arguments as long as you quote the task name: - -```shell -$ task "start:foo bar" -Starting foo bar -``` - -If multiple matching tasks are found, the first one listed in the Taskfile will -be used. If you are using included Taskfiles, tasks in parent files will be -considered first. - -```shell -$ task start:foo:3 -Starting foo with 3 replicas -``` - -## Doing task cleanup with `defer` - -With the `defer` keyword, it's possible to schedule cleanup to be run once the -task finishes. The difference with just putting it as the last command is that -this command will run even when the task fails. - -In the example below, `rm -rf tmpdir/` will run even if the third command fails: - -```yaml -version: '3' - -tasks: - default: - cmds: - - mkdir -p tmpdir/ - - defer: rm -rf tmpdir/ - - echo 'Do work on tmpdir/' -``` - -If you want to move the cleanup command into another task, that is possible as -well: - -```yaml -version: '3' - -tasks: - default: - cmds: - - mkdir -p tmpdir/ - - defer: { task: cleanup } - - echo 'Do work on tmpdir/' - - cleanup: rm -rf tmpdir/ -``` - -:::info - -Due to the nature of how the -[Go's own `defer` work](https://go.dev/tour/flowcontrol/13), the deferred -commands are executed in the reverse order if you schedule multiple of them. - -::: - -A special variable `.EXIT_CODE` is exposed when a command exited with a non-zero -[exit code](/reference/cli#exit-codes). You can check its presence to know if -the task completed successfully or not: - -```yaml -version: '3' - -tasks: - default: - cmds: - - defer: echo '{{if .EXIT_CODE}}Failed with {{.EXIT_CODE}}!{{else}}Success!{{end}}' - - exit 1 -``` - -## Help - -Running `task --list` (or `task -l`) lists all tasks with a description. The -following Taskfile: - -```yaml -version: '3' - -tasks: - build: - desc: Build the go binary. - cmds: - - go build -v -i main.go - - test: - desc: Run all the go tests. - cmds: - - go test -race ./... - - js: - cmds: - - esbuild --bundle --minify js/index.js > public/bundle.js - - css: - cmds: - - esbuild --bundle --minify css/index.css > public/bundle.css -``` - -would print the following output: - -```shell -* build: Build the go binary. -* test: Run all the go tests. -``` - -If you want to see all tasks, there's a `--list-all` (alias `-a`) flag as well. - -## Display summary of task - -Running `task --summary task-name` will show a summary of a task. The following -Taskfile: - -```yaml -version: '3' - -tasks: - release: - deps: [build] - summary: | - Release your project to github - - It will build your project before starting the release. - Please make sure that you have set GITHUB_TOKEN before starting. - cmds: - - your-release-tool - - build: - cmds: - - your-build-tool -``` - -with running `task --summary release` would print the following output: - -``` -task: release - -Release your project to github - -It will build your project before starting the release. -Please make sure that you have set GITHUB_TOKEN before starting. - -dependencies: - - build - -commands: - - your-release-tool -``` - -If a summary is missing, the description will be printed. If the task does not -have a summary or a description, a warning is printed. - -Please note: _showing the summary will not execute the command_. - -## Task aliases - -Aliases are alternative names for tasks. They can be used to make it easier and -quicker to run tasks with long or hard-to-type names. You can use them on the -command line, when [calling sub-tasks](#calling-another-task) in your Taskfile -and when [including tasks](#including-other-taskfiles) with aliases from another -Taskfile. They can also be used together with -[namespace aliases](#namespace-aliases). - -```yaml -version: '3' - -tasks: - generate: - aliases: [gen] - cmds: - - task: gen-mocks - - generate-mocks: - aliases: [gen-mocks] - cmds: - - echo "generating..." -``` - -## Overriding task name - -Sometimes you may want to override the task name printed on the summary, -up-to-date messages to STDOUT, etc. In this case, you can just set `label:`, -which can also be interpolated with variables: - -```yaml -version: '3' - -tasks: - default: - - task: print - vars: - MESSAGE: hello - - task: print - vars: - MESSAGE: world - - print: - label: 'print-{{.MESSAGE}}' - cmds: - - echo "{{.MESSAGE}}" -``` - -## Warning Prompts - -Warning Prompts are used to prompt a user for confirmation before a task is -executed. - -Below is an example using `prompt` with a dangerous command, that is called -between two safe commands: - -```yaml -version: '3' - -tasks: - example: - cmds: - - task: not-dangerous - - task: dangerous - - task: another-not-dangerous - - not-dangerous: - cmds: - - echo 'not dangerous command' - - another-not-dangerous: - cmds: - - echo 'another not dangerous command' - - dangerous: - prompt: This is a dangerous command... Do you want to continue? - cmds: - - echo 'dangerous command' -``` - -```shell -❯ task dangerous -task: "This is a dangerous command... Do you want to continue?" [y/N] -``` - -Prompts can be a single value or a list of prompts, like below: - -```yaml -version: '3' - -tasks: - example: - cmds: - - task: dangerous - - dangerous: - prompt: - - This is a dangerous command... Do you want to continue? - - Are you sure? - cmds: - - echo 'dangerous command' -``` - -Warning prompts are called before executing a task. If a prompt is denied Task -will exit with [exit code](/reference/cli#exit-codes) 205. If approved, Task -will continue as normal. - -```shell -❯ task example -not dangerous command -task: "This is a dangerous command. Do you want to continue?" [y/N] -y -dangerous command -another not dangerous command -``` - -To skip warning prompts automatically, you can use the `--yes` (alias `-y`) -option when calling the task. By including this option, all warnings, will be -automatically confirmed, and no prompts will be shown. - -:::caution - -Tasks with prompts always fail by default on non-terminal environments, like a -CI, where an `stdin` won't be available for the user to answer. In those cases, -use `--yes` (`-y`) to force all tasks with a prompt to run. - -::: - -## Silent mode - -Silent mode disables the echoing of commands before Task runs it. For the -following Taskfile: - -```yaml -version: '3' - -tasks: - echo: - cmds: - - echo "Print something" -``` - -Normally this will be printed: - -```shell -echo "Print something" -Print something -``` - -With silent mode on, the below will be printed instead: - -```shell -Print something -``` - -There are four ways to enable silent mode: - -- At command level: - -```yaml -version: '3' - -tasks: - echo: - cmds: - - cmd: echo "Print something" - silent: true -``` - -- At task level: - -```yaml -version: '3' - -tasks: - echo: - cmds: - - echo "Print something" - silent: true -``` - -- Globally at Taskfile level: - -```yaml -version: '3' - -silent: true - -tasks: - echo: - cmds: - - echo "Print something" -``` - -- Or globally with `--silent` or `-s` flag - -If you want to suppress STDOUT instead, just redirect a command to `/dev/null`: - -```yaml -version: '3' - -tasks: - echo: - cmds: - - echo "This will print nothing" > /dev/null -``` - -## Dry run mode - -Dry run mode (`--dry`) compiles and steps through each task, printing the -commands that would be run without executing them. This is useful for debugging -your Taskfiles. - -## Ignore errors - -You have the option to ignore errors during command execution. Given the -following Taskfile: - -```yaml -version: '3' - -tasks: - echo: - cmds: - - exit 1 - - echo "Hello World" -``` - -Task will abort the execution after running `exit 1` because the status code `1` -stands for `EXIT_FAILURE`. However, it is possible to continue with execution -using `ignore_error`: - -```yaml -version: '3' - -tasks: - echo: - cmds: - - cmd: exit 1 - ignore_error: true - - echo "Hello World" -``` - -`ignore_error` can also be set for a task, which means errors will be suppressed -for all commands. Nevertheless, keep in mind that this option will not propagate -to other tasks called either by `deps` or `cmds`! - -## Output syntax - -By default, Task just redirects the STDOUT and STDERR of the running commands to -the shell in real-time. This is good for having live feedback for logging -printed by commands, but the output can become messy if you have multiple -commands running simultaneously and printing lots of stuff. - -To make this more customizable, there are currently three different output -options you can choose: - -- `interleaved` (default) -- `group` -- `prefixed` - -To choose another one, just set it to root in the Taskfile: - -```yaml -version: '3' - -output: 'group' - -tasks: - # ... -``` - -The `group` output will print the entire output of a command once after it -finishes, so you will not have live feedback for commands that take a long time -to run. - -When using the `group` output, you can optionally provide a templated message to -print at the start and end of the group. This can be useful for instructing CI -systems to group all of the output for a given task, such as with -[GitHub Actions' `::group::` command](https://docs.github.com/en/actions/learn-github-actions/workflow-commands-for-github-actions#grouping-log-lines) -or -[Azure Pipelines](https://docs.microsoft.com/en-us/azure/devops/pipelines/scripts/logging-commands?expand=1&view=azure-devops&tabs=bash#formatting-commands). - -```yaml -version: '3' - -output: - group: - begin: '::group::{{.TASK}}' - end: '::endgroup::' - -tasks: - default: - cmds: - - echo 'Hello, World!' - silent: true -``` - -```shell -$ task default -::group::default -Hello, World! -::endgroup:: -``` - -When using the `group` output, you may swallow the output of the executed -command on standard output and standard error if it does not fail (zero exit -code). - -```yaml -version: '3' - -silent: true - -output: - group: - error_only: true - -tasks: - passes: echo 'output-of-passes' - errors: echo 'output-of-errors' && exit 1 -``` - -```shell -$ task passes -$ task errors -output-of-errors -task: Failed to run task "errors": exit status 1 -``` - -The `prefix` output will prefix every line printed by a command with -`[task-name] ` as the prefix, but you can customize the prefix for a command -with the `prefix:` attribute: - -```yaml -version: '3' - -output: prefixed - -tasks: - default: - deps: - - task: print - vars: { TEXT: foo } - - task: print - vars: { TEXT: bar } - - task: print - vars: { TEXT: baz } - - print: - cmds: - - echo "{{.TEXT}}" - prefix: 'print-{{.TEXT}}' - silent: true -``` - -```shell -$ task default -[print-foo] foo -[print-bar] bar -[print-baz] baz -``` - -:::tip - -The `output` option can also be specified by the `--output` or `-o` flags. - -::: - -## Interactive CLI application - -When running interactive CLI applications inside Task they can sometimes behave -weirdly, especially when the [output mode](#output-syntax) is set to something -other than `interleaved` (the default), or when interactive apps are run in -parallel with other tasks. - -The `interactive: true` tells Task this is an interactive application and Task -will try to optimize for it: - -```yaml -version: '3' - -tasks: - default: - cmds: - - vim my-file.txt - interactive: true -``` - -If you still have problems running an interactive app through Task, please open -an issue about it. - -## Short task syntax - -Starting on Task v3, you can now write tasks with a shorter syntax if they have -the default settings (e.g. no custom `env:`, `vars:`, `desc:`, `silent:` , etc): - -```yaml -version: '3' - -tasks: - build: go build -v -o ./app{{exeExt}} . - - run: - - task: build - - ./app{{exeExt}} -h localhost -p 8080 -``` - -## `set` and `shopt` - -It's possible to specify options to the -[`set`](https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html) -and -[`shopt`](https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html) -builtins. This can be added at global, task or command level. - -```yaml -version: '3' - -set: [pipefail] -shopt: [globstar] - -tasks: - # `globstar` required for double star globs to work - default: echo **/*.go -``` - -:::info - -Keep in mind that not all options are available in the -[shell interpreter library](https://github.com/mvdan/sh) that Task uses. - -::: - -## Watch tasks - -With the flags `--watch` or `-w` task will watch for file changes and run the -task again. This requires the `sources` attribute to be given, so task knows -which files to watch. - -The default watch interval is 100 milliseconds, but it's possible to change it -by either setting `interval: '500ms'` in the root of the Taskfile or by passing -it as an argument like `--interval=500ms`. -This interval is the time Task will wait for duplicated events. It will only run -the task again once, even if multiple changes happen within the interval. - -Also, it's possible to set `watch: true` in a given task and it'll automatically -run in watch mode: - -```yaml -version: '3' - -interval: 500ms - -tasks: - build: - desc: Builds the Go application - watch: true - sources: - - '**/*.go' - cmds: - - go build # ... -``` - -:::info - -Note that when setting `watch: true` to a task, it'll only run in watch mode -when running from the CLI via `task my-watch-task`, but won't run in watch mode -if called by another task, either directly or as a dependency. - -::: - -:::caution - -The watcher can misbehave in certain scenarios, in particular for long-running -servers. -There is a known bug where child processes of the running might not be killed -appropriately. It's adviced to avoid running commands as `go run` and prefer -`go build [...] && ./binary` instead. - -If you are having issues, you might want to try tools specifically designed for -live-reloading, like [Air](https://github.com/air-verse/air/). Also, be sure to -[report any issues](https://github.com/go-task/task/issues/new?template=bug_report.yml) -to us. - -::: - -{/* prettier-ignore-start */} -[gotemplate]: https://golang.org/pkg/text/template/ -[templating-reference]: ./reference/templating.mdx -{/* prettier-ignore-end */} diff --git a/website/docusaurus.config.ts b/website/docusaurus.config.ts deleted file mode 100644 index b89535a1..00000000 --- a/website/docusaurus.config.ts +++ /dev/null @@ -1,249 +0,0 @@ -import type {Config} from '@docusaurus/types'; -import type * as Preset from '@docusaurus/preset-classic'; -import { EnumChangefreq } from 'sitemap'; - -import remarkGithub from 'remark-github'; -import remarkGfm from 'remark-gfm'; - -import { DISCORD_URL } from './constants'; -import { GITHUB_URL } from './constants'; -import { BLUESKY_URL } from './constants'; -import { MASTODON_URL } from './constants'; -import { TWITTER_URL } from './constants'; -import { STACK_OVERFLOW } from './constants'; -import { ANSWER_OVERFLOW } from './constants'; - -import lightCodeTheme from './src/themes/prismLight'; -import darkCodeTheme from './src/themes/prismDark'; - -const config: Config = { - title: 'Task', - tagline: 'A task runner / simpler Make alternative written in Go ', - url: 'https://taskfile.dev', - baseUrl: '/', - onBrokenLinks: 'warn', - onBrokenMarkdownLinks: 'warn', - favicon: 'img/favicon.ico', - - organizationName: 'go-task', - projectName: 'task', - deploymentBranch: 'gh-pages', - - i18n: { - defaultLocale: 'en', - locales: ['en'], - localeConfigs: { - en: { - label: 'English', - direction: 'ltr', - htmlLang: 'en-US' - } - } - }, - - presets: [ - [ - 'classic', - { - docs: { - routeBasePath: '/', - sidebarPath: './sidebars.ts', - remarkPlugins: [remarkGithub, remarkGfm], - includeCurrentVersion: true, - versions: { - current: { - label: `Next 🚧`, - path: 'next', - badge: false - }, - latest: { - label: 'Latest', - badge: false - } - } - }, - blog: { - blogSidebarTitle: 'All posts', - blogSidebarCount: 'ALL' - }, - theme: { - customCss: [ - './src/css/custom.css', - './src/css/carbon.css', - ] - }, - gtag: { - trackingID: 'G-4RT25NXQ7N', - anonymizeIP: true - }, - sitemap: { - changefreq: EnumChangefreq.WEEKLY, - priority: 0.5, - ignorePatterns: ['/tags/**'] - } - } satisfies Preset.Options, - ] - ], - - scripts: [ - { - src: '/js/carbon.js', - async: true - } - ], - - themeConfig:{ - metadata: [ - { - name: 'og:image', - content: 'https://taskfile.dev/img/og-image.png' - } - ], - navbar: { - title: 'Task', - logo: { - alt: 'Task Logo', - src: 'img/logo.svg' - }, - items: [ - { - type: 'doc', - docId: 'intro', - position: 'left', - label: 'Docs' - }, - { - to: 'blog', - label: 'Blog', - position: 'left' - }, - { - to: '/donate', - position: 'left', - label: 'Donate' - }, - { - type: 'docsVersionDropdown', - position: 'right', - dropdownActiveClassDisabled: true, - }, - { - href: GITHUB_URL, - title: 'GitHub', - position: 'right', - className: "header-icon-link icon-github", - }, - { - href: DISCORD_URL, - title: 'Discord', - position: 'right', - className: "header-icon-link icon-discord", - }, - { - href: TWITTER_URL, - title: 'X (Twitter)', - position: 'right', - className: "header-icon-link icon-twitter", - }, - { - href: BLUESKY_URL, - title: 'Bluesky', - position: 'right', - className: "header-icon-link icon-bluesky", - }, - { - href: MASTODON_URL, - title: 'Mastodon', - rel: 'me', - position: 'right', - className: "header-icon-link icon-mastodon", - } - ] - }, - footer: { - style: 'dark', - links: [ - { - title: 'Pages', - items: [ - { - label: 'Installation', - to: '/installation/' - }, - { - label: 'Usage', - to: '/usage/' - }, - { - label: 'Donate', - to: '/donate/' - } - ] - }, - { - title: 'Community', - items: [ - { - label: 'GitHub', - href: GITHUB_URL - }, - { - label: 'Discord', - href: DISCORD_URL - }, - { - label: 'Twitter', - href: TWITTER_URL - }, - { - label: 'Bluesky', - href: BLUESKY_URL, - rel: 'me' - }, - { - label: 'Mastodon', - href: MASTODON_URL, - rel: 'me' - }, - { - label: 'Stack Overflow', - href: STACK_OVERFLOW - }, - { - label: 'Answer Overflow', - href: ANSWER_OVERFLOW - }, - { - label: 'OpenCollective', - href: 'https://opencollective.com/task' - } - ] - }, - { - items: [ - { - html: 'Deploys by Netlify' - } - ] - } - ] - }, - prism: { - theme: lightCodeTheme, - darkTheme: darkCodeTheme, - additionalLanguages: [ - "bash", // aka. shell - "json", - "powershell" - ] - }, - // NOTE(@andreynering): Don't worry, these keys are meant to be public =) - algolia: { - appId: '7IZIJ13AI7', - apiKey: '34b64ae4fc8d9da43d9a13d9710aaddc', - indexName: 'taskfile' - } - } satisfies Preset.ThemeConfig, -}; - -export default config; diff --git a/website/netlify.toml b/website/netlify.toml new file mode 100644 index 00000000..c19ad159 --- /dev/null +++ b/website/netlify.toml @@ -0,0 +1,3 @@ +[build] + publish = ".vitepress/dist" + command = "pnpm run build" diff --git a/website/package.json b/website/package.json index c15c3fc3..39aaa346 100644 --- a/website/package.json +++ b/website/package.json @@ -1,54 +1,25 @@ { - "name": "taskfile-dev", - "version": "0.0.0", - "private": true, - "repository": { - "type": "git", - "url": "https://github.com/go-task/task" - }, + "name": "website2", + "version": "1.0.0", + "description": "", + "type": "module", "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids" - }, - "dependencies": { - "@docusaurus/core": "^3.5.2", - "@docusaurus/preset-classic": "^3.5.2", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "prism-react-renderer": "^2.1.0", - "raw-loader": "^4.0.2", - "react": "^19.0.0", - "react-dom": "^19.0.0", - "remark-gfm": "^4.0.0", - "remark-github": "^12.0.0" + "dev": "vitepress dev", + "build": "vitepress build", + "preview": "vitepress preview", + "lint": "prettier --write ." }, + "keywords": [], + "author": "", + "license": "ISC", "devDependencies": { - "@docusaurus/module-type-aliases": "^3.5.2", - "@docusaurus/tsconfig": "^3.5.2", - "@docusaurus/types": "^3.5.2", - "@types/react": "^19.0.0", - "typescript": "^5.3.3" - }, - "engines": { - "node": ">=18.0" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] + "@types/markdown-it": "^14.1.2", + "@types/node": "^24.1.0", + "netlify-cli": "^23.1.1", + "prettier": "^3.6.2", + "vitepress": "^1.6.3", + "vitepress-plugin-group-icons": "^1.6.1", + "vitepress-plugin-tabs": "^0.7.1", + "vue": "^3.5.18" } } diff --git a/website/pnpm-lock.yaml b/website/pnpm-lock.yaml new file mode 100644 index 00000000..84e4937e --- /dev/null +++ b/website/pnpm-lock.yaml @@ -0,0 +1,9330 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@types/markdown-it': + specifier: ^14.1.2 + version: 14.1.2 + '@types/node': + specifier: ^24.1.0 + version: 24.1.0 + netlify-cli: + specifier: ^23.1.1 + version: 23.1.1(@types/node@24.1.0)(picomatch@4.0.3)(rollup@4.45.1) + prettier: + specifier: ^3.6.2 + version: 3.6.2 + vitepress: + specifier: ^1.6.3 + version: 1.6.3(@algolia/client-search@5.34.1)(@types/node@24.1.0)(jwt-decode@4.0.0)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.2) + vitepress-plugin-group-icons: + specifier: ^1.6.1 + version: 1.6.1(markdown-it@14.1.0)(vite@5.4.19(@types/node@24.1.0)) + vitepress-plugin-tabs: + specifier: ^0.7.1 + version: 0.7.1(vitepress@1.6.3(@algolia/client-search@5.34.1)(@types/node@24.1.0)(jwt-decode@4.0.0)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.2))(vue@3.5.18(typescript@5.9.2)) + vue: + specifier: ^3.5.18 + version: 3.5.18(typescript@5.9.2) + +packages: + + '@algolia/autocomplete-core@1.17.7': + resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} + + '@algolia/autocomplete-plugin-algolia-insights@1.17.7': + resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} + peerDependencies: + search-insights: '>= 1 < 3' + + '@algolia/autocomplete-preset-algolia@1.17.7': + resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/autocomplete-shared@1.17.7': + resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/client-abtesting@5.34.1': + resolution: {integrity: sha512-M4zb6J7q+pg9V9Xk0k1WDgvupfCtXcxjKGTrNVYemiredLVGOmvVIPAUjg2rx4QmK7DWNApWLsieYwk7PAaOXw==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-analytics@5.34.1': + resolution: {integrity: sha512-h18zlL+bVUlbNE92olo1d/r6HQPkxhmP7yCpA1osERwpgC6F058kWm0O0aYdrHJIHtWBcs9aRqq7IkQSkpjPJg==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-common@5.34.1': + resolution: {integrity: sha512-otPWALs72KvmVuP0CN0DI6sqVx1jQWKi+/DgAiP8DysVMgiNlva3GDKTtAK6XVGlT08f4h32FNuL0yQODuCfKA==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-insights@5.34.1': + resolution: {integrity: sha512-SNDb5wuEpQFM6S5Shk2iytLMusvGycm9uTuYh7cGa1h3U7O65OjjjIgQ0lLY5HPybHNtmXr4Zh/EZ23pZvAJHg==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-personalization@5.34.1': + resolution: {integrity: sha512-T8z9KqYJOup83Hw0mgICYWfJoLh//FNWbf4roFd95ZJzZ4v1cN/hvr7Eqml1qWMoCkJb4y/XQjrXsJ6Y9XnMLw==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-query-suggestions@5.34.1': + resolution: {integrity: sha512-YA0kC4CwO1mc1dliNgbFgToweRa7Uihjz3izEaV4cXninF1v4SaOrPkQUsiFPprAffjMzOUoT7vahQZ/HZyiKQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-search@5.34.1': + resolution: {integrity: sha512-bt5hC9vvjaKvdvsgzfXJ42Sl3qjQqoi/FD8V7HOQgtNFhwSauZOlgLwFoUiw67sM+r7ehF7QDk5WRDgY7fAkIg==} + engines: {node: '>= 14.0.0'} + + '@algolia/ingestion@1.34.1': + resolution: {integrity: sha512-QLxiBskQxFGzPqKZvBNEvNN95kgDCbBd2X29ZGfh6Sr2QOSU34US6Z9x2duiF4o9FwsB0i6eQ2c9vHfuH0lAQg==} + engines: {node: '>= 14.0.0'} + + '@algolia/monitoring@1.34.1': + resolution: {integrity: sha512-NteCvWcWXXdnPGyZH8rXHslcf2pM1WGDNMGNZFXLFtOt1Gf1Tjy2t0NZLp+Mxap3JMV4mbYmactbXrvpQf/lLA==} + engines: {node: '>= 14.0.0'} + + '@algolia/recommend@5.34.1': + resolution: {integrity: sha512-UdgDSrunLIBAAAxQlYLXYLnYFN4wkzkrAYx+wMLEk/pzASWyza3BkecbUFVqoYOBIgwo7Mt4iymzVtFkzL2uCQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-browser-xhr@5.34.1': + resolution: {integrity: sha512-567LfFTc9VOiPtuySQohoqaWMeohYWbXK71aMSin+SLMgeKX7hz5LrVmkmMQj9udwWK6/mtHEYZGPYHSuXpLQg==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-fetch@5.34.1': + resolution: {integrity: sha512-YRbygPgGBEik5U593JvyjgxFjcsyZMR25eIQxNHvSQumdAzt5A4E4Idw3yXnwhrmMdjML54ZXT7EAjnTjWy8Xw==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-node-http@5.34.1': + resolution: {integrity: sha512-o0mqRYbS82Rt4DE02Od7RL6pNtV7oSxScPuIw8LW4aqO2V5eCF05Pry/SnUgcI/Vb2QCYC66hytBCqzyC/toZA==} + engines: {node: '>= 14.0.0'} + + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + + '@antfu/utils@8.1.1': + resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==} + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.0': + resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.28.1': + resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + engines: {node: '>=6.9.0'} + + '@bugsnag/browser@8.4.0': + resolution: {integrity: sha512-5ZzGZtCwvhQbrMCAPAH9ruQGjVmSzjiE6qNNP2mD/8q0Yi45TWBtG/0MdlUYpDwx2lxVVHaGHqI3GBeD7B4Hqg==} + + '@bugsnag/core@8.4.0': + resolution: {integrity: sha512-vmGNO5gQ2qP5CE6/RzIzO2X/5oJCQGrhdUc6OwpEf4CytPidpk9LNCkscvOx9iT9Ym3USKSo7DeZhtnhFP0KKQ==} + + '@bugsnag/cuid@3.2.1': + resolution: {integrity: sha512-zpvN8xQ5rdRWakMd/BcVkdn2F8HKlDSbM3l7duueK590WmI1T0ObTLc1V/1e55r14WNjPd5AJTYX4yPEAFVi+Q==} + + '@bugsnag/js@8.4.0': + resolution: {integrity: sha512-r8M+kgNts3ebR7g9Kct2wuaipcxDEvrBwnBugJfHFRwelyysz5ZBkFAvpatSm71LyLTv/9FyvWKEVgXwV7dTBQ==} + + '@bugsnag/node@8.4.0': + resolution: {integrity: sha512-yqlFTvJNRwnp8jQczfgBztAhSKFc5vr9CHTUDbB72gBgCzQVQ7q16MX0tIHZVeL1Mo1Zywr9rvcPG/HBAPTuOw==} + + '@bugsnag/safe-json-stringify@6.0.0': + resolution: {integrity: sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==} + + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@dabh/diagnostics@2.0.3': + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + + '@dependents/detective-less@5.0.1': + resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==} + engines: {node: '>=18'} + + '@docsearch/css@3.8.2': + resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==} + + '@docsearch/js@3.8.2': + resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==} + + '@docsearch/react@3.8.2': + resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + + '@emnapi/runtime@1.4.5': + resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + + '@envelop/instrumentation@1.0.0': + resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==} + engines: {node: '>=18.0.0'} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.25.6': + resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.25.6': + resolution: {integrity: sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.25.6': + resolution: {integrity: sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.25.6': + resolution: {integrity: sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.25.6': + resolution: {integrity: sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.6': + resolution: {integrity: sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.25.6': + resolution: {integrity: sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.6': + resolution: {integrity: sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.25.6': + resolution: {integrity: sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.25.6': + resolution: {integrity: sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.25.6': + resolution: {integrity: sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.25.6': + resolution: {integrity: sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.25.6': + resolution: {integrity: sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.25.6': + resolution: {integrity: sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.6': + resolution: {integrity: sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.25.6': + resolution: {integrity: sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.25.6': + resolution: {integrity: sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.6': + resolution: {integrity: sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.6': + resolution: {integrity: sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.6': + resolution: {integrity: sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.6': + resolution: {integrity: sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.6': + resolution: {integrity: sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.25.6': + resolution: {integrity: sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.25.6': + resolution: {integrity: sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.25.6': + resolution: {integrity: sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.25.6': + resolution: {integrity: sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@fastify/accept-negotiator@1.1.0': + resolution: {integrity: sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==} + engines: {node: '>=14'} + + '@fastify/accept-negotiator@2.0.1': + resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==} + + '@fastify/ajv-compiler@3.6.0': + resolution: {integrity: sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==} + + '@fastify/busboy@3.1.1': + resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} + + '@fastify/error@3.4.1': + resolution: {integrity: sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==} + + '@fastify/fast-json-stringify-compiler@4.3.0': + resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} + + '@fastify/merge-json-schemas@0.1.1': + resolution: {integrity: sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==} + + '@fastify/send@2.1.0': + resolution: {integrity: sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA==} + + '@fastify/static@7.0.4': + resolution: {integrity: sha512-p2uKtaf8BMOZWLs6wu+Ihg7bWNBdjNgCwDza4MJtTqg+5ovKmcbgbR9Xs5/smZ1YISfzKOCNYmZV8LaCj+eJ1Q==} + + '@humanwhocodes/momoa@2.0.4': + resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} + engines: {node: '>=10.10.0'} + + '@iarna/toml@2.2.5': + resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + + '@iconify-json/logos@1.2.5': + resolution: {integrity: sha512-WR8+9kFwx1tIR+hWpKYC+rpVkAuzHyaVxZRfhGGIjqCfgbodK7rS4+OZhktdKtZKKcdmhpLZKvlmRm4IA4dKRg==} + + '@iconify-json/simple-icons@1.2.44': + resolution: {integrity: sha512-CdWgSPygwDlDbKtDWjvi3NtUefnkoepXv90n3dQxJerqzD9kI+nEJOiWUBM+eOyMYQKtxBpLWFBrgeotF0IZKw==} + + '@iconify-json/vscode-icons@1.2.23': + resolution: {integrity: sha512-gFTcKecKra2/b5SbGDgHGI/l8CuikHyBPmqGlK+YCmS8AK72dtDQbUekdoACsju/3TYS37QvdPoOQwnyx2LdYg==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@2.3.0': + resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} + + '@img/sharp-darwin-arm64@0.34.3': + resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.3': + resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.0': + resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.0': + resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.0': + resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.2.0': + resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.0': + resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.0': + resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.2.0': + resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.0': + resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.2.0': + resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.3': + resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.3': + resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.3': + resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.3': + resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.3': + resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.3': + resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.3': + resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.3': + resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.3': + resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.3': + resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.3': + resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@import-maps/resolve@2.0.0': + resolution: {integrity: sha512-RwzRTpmrrS6Q1ZhQExwuxJGK1Wqhv4stt+OF2JzS+uawewpwNyU7EJL1WpBex7aDiiGLs4FsXGkfUBdYuX7xiQ==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@lukeed/ms@2.0.2': + resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} + engines: {node: '>=8'} + + '@mapbox/node-pre-gyp@2.0.0': + resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==} + engines: {node: '>=18'} + hasBin: true + + '@netlify/api@14.0.3': + resolution: {integrity: sha512-iFYqSYBnn34Fx3eVOH7sG52f/xcyB9or2yjn486d3ZqLk6OJGFZstxjY4LfTv8chCT1HeSVybIvnCqsHsvrzJQ==} + engines: {node: '>=18.14.0'} + + '@netlify/binary-info@1.0.0': + resolution: {integrity: sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==} + + '@netlify/blobs@10.0.8': + resolution: {integrity: sha512-zvMCtMfek7f+ky8jB3mR5zQE4ai94/SisOvQZJ+7kOfKn7poY027WnG4ngcogCQmOMQLSScvzGheojN5HjenCQ==} + engines: {node: ^14.16.0 || >=16.0.0} + + '@netlify/build-info@10.0.7': + resolution: {integrity: sha512-RZmSg0wekEUtPklRR8z6rsG5TPXRfT2EnamDBp94ZTUixDxDk07UCMBiz2hMKMg3qA6KTW6csuFNruvD3jw5Kw==} + engines: {node: '>=18.14.0'} + hasBin: true + + '@netlify/build@35.0.3': + resolution: {integrity: sha512-MCQ897N3tPgoKnK7e8a8/vZMDFKzq2mPLJYzGncU6TLhHkz9/ysizHmgBh83Sf819e38RkzP3Gz0s1oABQ9kpA==} + engines: {node: '>=18.14.0'} + hasBin: true + peerDependencies: + '@netlify/opentelemetry-sdk-setup': ^2.0.0 + '@opentelemetry/api': ~1.8.0 + peerDependenciesMeta: + '@netlify/opentelemetry-sdk-setup': + optional: true + + '@netlify/cache-utils@6.0.3': + resolution: {integrity: sha512-NGkTvsVWs8gbd/wKOQnGjjxtaeTS+2UbqF/eZ5A/hFCXMNWf6xMQ7BcBM+pWLojHJWg/o8P1VgCZ1FDa8Zni4w==} + engines: {node: '>=18.14.0'} + + '@netlify/config@24.0.1': + resolution: {integrity: sha512-jSKqniewPWOhLxoMdpJmjqdbe0zHvWyOXlX1pWFtJRaZB6qui/rLWx96/YNpMtH0JW3CC+a1PyYAkuAla3xuYw==} + engines: {node: '>=18.14.0'} + hasBin: true + + '@netlify/dev-utils@4.1.1': + resolution: {integrity: sha512-Y3kVGxynxi/Lz42bi20A+PQ0vh25zVjbGnQWZQUTwLzQozEIeokCgUWskPvlhs6btheLZyzUjqGuhUCymOoD1g==} + engines: {node: ^18.14.0 || >=20} + + '@netlify/edge-bundler@14.4.1': + resolution: {integrity: sha512-C89Tkj5PGkA2CpqwqiZ91nBkufZjB6ZUdOTVcq3D+jf38LA3KQi8NceCsgwCeuzOzo3Dn0Te9GYhJRjqeN//jQ==} + engines: {node: '>=18.14.0'} + + '@netlify/edge-functions-bootstrap@2.14.0': + resolution: {integrity: sha512-Fs1cQ+XKfKr2OxrAvmX+S46CJmrysxBdCUCTk/wwcCZikrDvsYUFG7FTquUl4JfAf9taYYyW/tPv35gKOKS8BQ==} + + '@netlify/functions-utils@6.2.1': + resolution: {integrity: sha512-d+wlr1uMiOoJWZFVQ6ixD+Zd9BpUomKwerU/Bcs1kBIffhLhGsjtwVnpOIcYCRQrPcByo40CnapVzFjNv7GqrA==} + engines: {node: '>=18.14.0'} + + '@netlify/git-utils@6.0.2': + resolution: {integrity: sha512-ASp8T6ZAxL5OE0xvTTn5+tIBua5F8ruLH7oYtI/m2W/8rYb9V3qvNeenf9SnKlGj1xv6mPv8l7Tc93kmBLLofw==} + engines: {node: '>=18.14.0'} + + '@netlify/headers-parser@9.0.1': + resolution: {integrity: sha512-KHKNVNtzWUkUQhttHsLA217xIjUQxBOY5RCMRkR77G5pH1Sca9gqGhnMvk3KfRol/OZK2/1k83ZpYuvMswsK/w==} + engines: {node: '>=18.14.0'} + + '@netlify/local-functions-proxy-darwin-arm64@1.1.1': + resolution: {integrity: sha512-lphJ9qqZ3glnKWEqlemU1LMqXxtJ/tKf7VzakqqyjigwLscXSZSb6fupSjQfd4tR1xqxA76ylws/2HDhc/gs+Q==} + cpu: [arm64] + os: [darwin] + hasBin: true + + '@netlify/local-functions-proxy-darwin-x64@1.1.1': + resolution: {integrity: sha512-4CRB0H+dXZzoEklq5Jpmg+chizXlVwCko94d8+UHWCgy/bA3M/rU/BJ8OLZisnJaAktHoeLABKtcLOhtRHpxZQ==} + cpu: [x64] + os: [darwin] + hasBin: true + + '@netlify/local-functions-proxy-freebsd-arm64@1.1.1': + resolution: {integrity: sha512-u13lWTVMJDF0A6jX7V4N3HYGTIHLe5d1Z2wT43fSIHwXkTs6UXi72cGSraisajG+5JFIwHfPr7asw5vxFC0P9w==} + cpu: [arm64] + os: [freebsd] + hasBin: true + + '@netlify/local-functions-proxy-freebsd-x64@1.1.1': + resolution: {integrity: sha512-g5xw4xATK5YDzvXtzJ8S1qSkWBiyF8VVRehXPMOAMzpGjCX86twYhWp8rbAk7yA1zBWmmWrWNA2Odq/MgpKJJg==} + cpu: [x64] + os: [freebsd] + hasBin: true + + '@netlify/local-functions-proxy-linux-arm64@1.1.1': + resolution: {integrity: sha512-dPGu1H5n8na7mBKxiXQ+FNmthDAiA57wqgpm5JMAHtcdcmRvcXwJkwWVGvwfj8ShhYJHQaSaS9oPgO+mpKkgmA==} + cpu: [arm64] + os: [linux] + hasBin: true + + '@netlify/local-functions-proxy-linux-arm@1.1.1': + resolution: {integrity: sha512-YsTpL+AbHwQrfHWXmKnwUrJBjoUON363nr6jUG1ueYnpbbv6wTUA7gI5snMi/gkGpqFusBthAA7C30e6bixfiA==} + cpu: [arm] + os: [linux] + hasBin: true + + '@netlify/local-functions-proxy-linux-ia32@1.1.1': + resolution: {integrity: sha512-Ra0FlXDrmPRaq+rYH3/ttkXSrwk1D5Zx/Na7UPfJZxMY7Qo5iY4bgi/FuzjzWzlp0uuKZOhYOYzYzsIIyrSvmw==} + cpu: [ia32] + os: [linux] + hasBin: true + + '@netlify/local-functions-proxy-linux-ppc64@1.1.1': + resolution: {integrity: sha512-oXf1satwqwUUxz7LHS1BxbRqc4FFEKIDFTls04eXiLReFR3sqv9H/QuYNTCCDMuRcCOd92qKyDfATdnxT4HR8w==} + cpu: [ppc64] + os: [linux] + hasBin: true + + '@netlify/local-functions-proxy-linux-x64@1.1.1': + resolution: {integrity: sha512-bS3u4JuDg/eC0y4Na3i/29JBOxrdUvsK5JSjHfzUeZEbOcuXYf4KavTpHS5uikdvTgyczoSrvbmQJ5m0FLXfLA==} + cpu: [x64] + os: [linux] + hasBin: true + + '@netlify/local-functions-proxy-openbsd-x64@1.1.1': + resolution: {integrity: sha512-1xLef/kLRNkBTXJ+ZGoRFcwsFxd/B2H3oeJZyXaZ3CN5umd9Mv9wZuAD74NuMt/535yRva8jtAJqvEgl9xMSdA==} + cpu: [x64] + os: [openbsd] + hasBin: true + + '@netlify/local-functions-proxy-win32-ia32@1.1.1': + resolution: {integrity: sha512-4IOMDBxp2f8VbIkhZ85zGNDrZR4ey8d68fCMSOIwitjsnKav35YrCf8UmAh3UR6CNIRJdJL4MW1GYePJ7iJ8uA==} + cpu: [ia32] + os: [win32] + hasBin: true + + '@netlify/local-functions-proxy-win32-x64@1.1.1': + resolution: {integrity: sha512-VCBXBJWBujVxyo5f+3r8ovLc9I7wJqpmgDn3ixs1fvdrER5Ac+SzYwYH4mUug9HI08mzTSAKZErzKeuadSez3w==} + cpu: [x64] + os: [win32] + hasBin: true + + '@netlify/local-functions-proxy@2.0.3': + resolution: {integrity: sha512-siVwmrp7Ow+7jLALi6jXOja4Y4uHMMgOLLQMgd+OZ1TESOstrJvkUisJEDAc9hx7u0v/B0mh5g1g1huiH3uS3A==} + engines: {node: '>=18.14.0'} + + '@netlify/open-api@2.37.0': + resolution: {integrity: sha512-zXnRFkxgNsalSgU8/vwTWnav3R+8KG8SsqHxqaoJdjjJtnZR7wo3f+qqu4z+WtZ/4V7fly91HFUwZ6Uz2OdW7w==} + engines: {node: '>=14.8.0'} + + '@netlify/opentelemetry-utils@2.0.1': + resolution: {integrity: sha512-SE9dZZR620yTYky8By/8h+UaTMugxue8oL51aRUrvtDg7y8Ed6fYKC8VY5JExCkLWQ1k3874qktwfc5gdMVx+w==} + engines: {node: '>=18.14.0'} + peerDependencies: + '@opentelemetry/api': ~1.8.0 + + '@netlify/plugins-list@6.80.0': + resolution: {integrity: sha512-bCKLI51UZ70ziIWsf2nvgPd4XuG6m8AMCoHiYtl/BSsiaSBfmryZnTTqdRXerH09tBRpbPPwzaEgUJwyU9o8Qw==} + engines: {node: ^14.14.0 || >=16.0.0} + + '@netlify/redirect-parser@15.0.3': + resolution: {integrity: sha512-/HB3fcRRNgf6O/pbLn4EYNDHrU2kiadMMnazg8/OjvQK2S9i4y61vQcrICvDxYKUKQdgeEaABUuaCNAJFnfD9w==} + engines: {node: '>=18.14.0'} + + '@netlify/run-utils@6.0.2': + resolution: {integrity: sha512-62K++LDoPqcR1hTnOL2JhuAfY0LMgQ6MgW89DehPplKLbKaEXQH1K1+hUDvgKsn68ofTpE1CTq30PGZQo8fVxw==} + engines: {node: '>=18.14.0'} + + '@netlify/runtime-utils@2.1.0': + resolution: {integrity: sha512-z1h+wjB7IVYUsFZsuIYyNxiw5WWuylseY+eXaUDHBxNeLTlqziy+lz03QkR67CUR4Y790xGIhaHV00aOR2KAtw==} + engines: {node: ^18.14.0 || >=20} + + '@netlify/serverless-functions-api@2.1.3': + resolution: {integrity: sha512-bNlN/hpND8xFQzpjyKxm6vJayD+bPBlOvs4lWihE7WULrphuH1UuFsoVE5386bNNGH8Rs1IH01AFsl7ALQgOlQ==} + engines: {node: '>=18.0.0'} + + '@netlify/zip-it-and-ship-it@14.1.1': + resolution: {integrity: sha512-oI9N4qV6hEPXGnkhlZqJtaFo+UFcqUSliBXIDapdn30D4GwS7kbken4Hk0zgH7kNCmoD9He+WNOPzbrs7lIahQ==} + engines: {node: '>=18.14.0'} + hasBin: true + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@octokit/auth-token@5.1.2': + resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==} + engines: {node: '>= 18'} + + '@octokit/core@6.1.6': + resolution: {integrity: sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==} + engines: {node: '>= 18'} + + '@octokit/endpoint@10.1.4': + resolution: {integrity: sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==} + engines: {node: '>= 18'} + + '@octokit/graphql@8.2.2': + resolution: {integrity: sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==} + engines: {node: '>= 18'} + + '@octokit/openapi-types@24.2.0': + resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==} + + '@octokit/openapi-types@25.1.0': + resolution: {integrity: sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==} + + '@octokit/plugin-paginate-rest@11.6.0': + resolution: {integrity: sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-request-log@5.3.1': + resolution: {integrity: sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-rest-endpoint-methods@13.5.0': + resolution: {integrity: sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/request-error@6.1.8': + resolution: {integrity: sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==} + engines: {node: '>= 18'} + + '@octokit/request@9.2.4': + resolution: {integrity: sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==} + engines: {node: '>= 18'} + + '@octokit/rest@21.1.1': + resolution: {integrity: sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==} + engines: {node: '>= 18'} + + '@octokit/types@13.10.0': + resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} + + '@octokit/types@14.1.0': + resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} + + '@opentelemetry/api@1.8.0': + resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} + engines: {node: '>=8.0.0'} + + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-wasm@2.5.1': + resolution: {integrity: sha512-RJxlQQLkaMMIuWRozy+z2vEqbaQlCuaCgVZIUCzQLYggY22LZbP5Y1+ia+FD724Ids9e+XIyOLXLrLgQSHIthw==} + engines: {node: '>= 10.0.0'} + bundledDependencies: + - napi-wasm + + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@2.3.1': + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + engines: {node: '>=12'} + + '@pnpm/tabtab@0.5.4': + resolution: {integrity: sha512-bWLDlHsBlgKY/05wDN/V3ETcn5G2SV/SiA2ZmNvKGGlmVX4G5li7GRDhHcgYvHJHyJ8TUStqg2xtHmCs0UbAbg==} + engines: {node: '>=18'} + + '@rollup/pluginutils@5.2.0': + resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.45.1': + resolution: {integrity: sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.45.1': + resolution: {integrity: sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.45.1': + resolution: {integrity: sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.45.1': + resolution: {integrity: sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.45.1': + resolution: {integrity: sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.45.1': + resolution: {integrity: sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.45.1': + resolution: {integrity: sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.45.1': + resolution: {integrity: sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.45.1': + resolution: {integrity: sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.45.1': + resolution: {integrity: sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.45.1': + resolution: {integrity: sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': + resolution: {integrity: sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.45.1': + resolution: {integrity: sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.45.1': + resolution: {integrity: sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.45.1': + resolution: {integrity: sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.45.1': + resolution: {integrity: sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.45.1': + resolution: {integrity: sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.45.1': + resolution: {integrity: sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.45.1': + resolution: {integrity: sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.45.1': + resolution: {integrity: sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==} + cpu: [x64] + os: [win32] + + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@shikijs/core@2.5.0': + resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} + + '@shikijs/engine-javascript@2.5.0': + resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==} + + '@shikijs/engine-oniguruma@2.5.0': + resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==} + + '@shikijs/langs@2.5.0': + resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==} + + '@shikijs/themes@2.5.0': + resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==} + + '@shikijs/transformers@2.5.0': + resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==} + + '@shikijs/types@2.5.0': + resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@sindresorhus/is@5.6.0': + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@sindresorhus/slugify@2.2.1': + resolution: {integrity: sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==} + engines: {node: '>=12'} + + '@sindresorhus/transliterate@1.6.0': + resolution: {integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==} + engines: {node: '>=12'} + + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/http-proxy@1.17.16': + resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} + + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + + '@types/node@24.1.0': + resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/retry@0.12.2': + resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} + + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@typescript-eslint/project-service@8.39.0': + resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/tsconfig-utils@8.39.0': + resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.39.0': + resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.39.0': + resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.39.0': + resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@vercel/nft@0.30.0': + resolution: {integrity: sha512-xVye7Z0riD9czsMuEJYpFqm2FR33r3euYaFzuEPCoUtYuDwmus3rJfKtcFU7Df+pgj8p4zs78x5lOWYoLNr+7Q==} + engines: {node: '>=18'} + hasBin: true + + '@vitejs/plugin-vue@5.2.4': + resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + + '@vue/compiler-core@3.5.18': + resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==} + + '@vue/compiler-dom@3.5.18': + resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==} + + '@vue/compiler-sfc@3.5.18': + resolution: {integrity: sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==} + + '@vue/compiler-ssr@3.5.18': + resolution: {integrity: sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==} + + '@vue/devtools-api@7.7.7': + resolution: {integrity: sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==} + + '@vue/devtools-kit@7.7.7': + resolution: {integrity: sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==} + + '@vue/devtools-shared@7.7.7': + resolution: {integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==} + + '@vue/reactivity@3.5.18': + resolution: {integrity: sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==} + + '@vue/runtime-core@3.5.18': + resolution: {integrity: sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==} + + '@vue/runtime-dom@3.5.18': + resolution: {integrity: sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==} + + '@vue/server-renderer@3.5.18': + resolution: {integrity: sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==} + peerDependencies: + vue: 3.5.18 + + '@vue/shared@3.5.18': + resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==} + + '@vueuse/core@12.8.2': + resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} + + '@vueuse/integrations@12.8.2': + resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + + '@vueuse/metadata@12.8.2': + resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} + + '@vueuse/shared@12.8.2': + resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} + + '@whatwg-node/disposablestack@0.0.6': + resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/fetch@0.10.10': + resolution: {integrity: sha512-watz4i/Vv4HpoJ+GranJ7HH75Pf+OkPQ63NoVmru6Srgc8VezTArB00i/oQlnn0KWh14gM42F22Qcc9SU9mo/w==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/node-fetch@0.7.25': + resolution: {integrity: sha512-szCTESNJV+Xd56zU6ShOi/JWROxE9IwCic8o5D9z5QECZloas6Ez5tUuKqXTAdu6fHFx1t6C+5gwj8smzOLjtg==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/promise-helpers@1.3.2': + resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} + engines: {node: '>=16.0.0'} + + '@whatwg-node/server@0.10.12': + resolution: {integrity: sha512-MQIvvQyPvKGna586MzXhgwnEbGtbm7QtOgJ/KPd/tC70M/jbhd1xHdIQQbh3okBw+MrDF/EvaC2vB5oRC7QdlQ==} + engines: {node: '>=18.0.0'} + + '@xhmikosr/archive-type@6.0.1': + resolution: {integrity: sha512-PB3NeJL8xARZt52yDBupK0dNPn8uIVQDe15qNehUpoeeLWCZyAOam4vGXnoZGz2N9D1VXtjievJuCsXam2TmbQ==} + engines: {node: ^14.14.0 || >=16.0.0} + + '@xhmikosr/decompress-tar@7.0.0': + resolution: {integrity: sha512-kyWf2hybtQVbWtB+FdRyOT+jyR5jxCNZPLqvQGB7djZj75lrpLUPEmRbyo86AtJ5OEtivpYaNWjCkqSJ8xtRWw==} + engines: {node: ^14.14.0 || >=16.0.0} + + '@xhmikosr/decompress-tarbz2@7.0.0': + resolution: {integrity: sha512-3QnjipYkRgh3Dee1MWDgKmANWxOQBVN4e1IwiGNe2fHYfMYTeSkVvWREt87UIoSucKUh3E95v8uGFttgTknZcA==} + engines: {node: ^14.14.0 || >=16.0.0} + + '@xhmikosr/decompress-targz@7.0.0': + resolution: {integrity: sha512-7BNHJl92g9OLhw89zqcFS67V1LAtm4Ex02j6OiQzuE8P7Yy9lQcyBuEL3x6v436grLdL+BcFjgbmhWxnem4GHw==} + engines: {node: ^14.14.0 || >=16.0.0} + + '@xhmikosr/decompress-unzip@6.0.0': + resolution: {integrity: sha512-R1HAkjXLS7RAL74YFLxYY9zYflCcYGssld9KKFDu87PnJ4h4btdhzXfSC8J5i5A2njH3oYIoCzx03RIGTH07Sg==} + engines: {node: ^14.14.0 || >=16.0.0} + + '@xhmikosr/decompress@9.0.1': + resolution: {integrity: sha512-9Lvlt6Qdpo9SaRQyRIXCo3lgU++eMZ68lzgjcTwtuKDrlwT635+5zsHZ1yrSx/Blc5IDuVLlPkBPj5CZkx+2+Q==} + engines: {node: ^14.14.0 || >=16.0.0} + + '@xhmikosr/downloader@13.0.1': + resolution: {integrity: sha512-mBvWew1kZJHfNQVVfVllMjUDwCGN9apPa0t4/z1zaUJ9MzpXjRL3w8fsfJKB8gHN/h4rik9HneKfDbh2fErN+w==} + engines: {node: ^14.14.0 || >=16.0.0} + + abbrev@3.0.1: + resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} + engines: {node: ^18.17.0 || >=20.5.0} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + abstract-logging@2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + ajv-errors@3.0.0: + resolution: {integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==} + peerDependencies: + ajv: ^8.0.1 + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + algoliasearch@5.34.1: + resolution: {integrity: sha512-s70HlfBgswgEdmCYkUJG8i/ULYhbkk8N9+N8JsWUwszcp7eauPEr5tIX4BY0qDGeKWQ/qZvmt4mxwTusYY23sg==} + engines: {node: '>= 14.0.0'} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + ansi-to-html@0.7.2: + resolution: {integrity: sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g==} + engines: {node: '>=8.0.0'} + hasBin: true + + ansis@4.1.0: + resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} + engines: {node: '>=14'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + archiver-utils@5.0.2: + resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} + engines: {node: '>= 14'} + + archiver@7.0.1: + resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} + engines: {node: '>= 14'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + + ascii-table@0.0.9: + resolution: {integrity: sha512-xpkr6sCDIYTPqzvjG8M3ncw1YOTaloWZOyrUmicoEifBEKzQzt+ooUpRpQ/AbOoJfO/p2ZKiyp79qHThzJDulQ==} + + ast-module-types@6.0.1: + resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==} + engines: {node: '>=18'} + + async-sema@3.1.1: + resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + atomically@2.0.3: + resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} + + avvio@8.4.0: + resolution: {integrity: sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==} + + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + + backoff@2.5.0: + resolution: {integrity: sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==} + engines: {node: '>= 0.6'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + bare-events@2.6.0: + resolution: {integrity: sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + before-after-hook@3.0.2: + resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} + + better-ajv-errors@1.2.0: + resolution: {integrity: sha512-UW+IsFycygIo7bclP9h5ugkNH8EjCSgqyFB/yQ4Hqqa1OEYDtb0uFIkYE0b6+CjkgJYVM5UKI/pJPxjYe9EZlA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + ajv: 4.11.8 - 8 + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + birpc@2.5.0: + resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-crc32@1.0.0: + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} + engines: {node: '>=8.0.0'} + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + byline@5.0.0: + resolution: {integrity: sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==} + engines: {node: '>=0.10.0'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsite@1.0.0: + resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==} + + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + ci-info@4.3.0: + resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} + engines: {node: '>=8'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + clean-deep@3.4.0: + resolution: {integrity: sha512-Lo78NV5ItJL/jl+B5w0BycAisaieJGXK1qYi/9m4SjR8zbqmrUtO7Yhro40wEShGmmxs/aJLI/A+jNhdkXK8mw==} + engines: {node: '>=4'} + + clean-stack@5.2.0: + resolution: {integrity: sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==} + engines: {node: '>=14.16'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + clipboardy@4.0.0: + resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} + engines: {node: '>=18'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + comment-json@4.2.5: + resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} + engines: {node: '>= 6'} + + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + + compress-commons@6.0.2: + resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} + engines: {node: '>= 14'} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + configstore@7.0.0: + resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==} + engines: {node: '>=18'} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + cookie-es@1.2.2: + resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + + copy-file@11.0.0: + resolution: {integrity: sha512-mFsNh/DIANLqFt5VHZoGirdg7bK5+oTWlhnGu6tgRhzBlnEKWaPX2xrFaLltii/6rmhqFMJqffUgknuRdpYlHw==} + engines: {node: '>=18'} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cpy@11.1.0: + resolution: {integrity: sha512-QGHetPSSuprVs+lJmMDcivvrBwTKASzXQ5qxFvRC2RFESjjod71bDvFvhxTjDgkNjrrb72AI6JPjfYwxrIy33A==} + engines: {node: '>=18'} + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + crc32-stream@6.0.0: + resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} + engines: {node: '>= 14'} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cron-parser@4.9.0: + resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} + engines: {node: '>=12.0.0'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + cssfilter@0.0.10: + resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + cyclist@1.0.2: + resolution: {integrity: sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==} + + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decache@4.6.2: + resolution: {integrity: sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} + + detective-amd@6.0.1: + resolution: {integrity: sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==} + engines: {node: '>=18'} + hasBin: true + + detective-cjs@6.0.1: + resolution: {integrity: sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==} + engines: {node: '>=18'} + + detective-es6@5.0.1: + resolution: {integrity: sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==} + engines: {node: '>=18'} + + detective-postcss@7.0.1: + resolution: {integrity: sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==} + engines: {node: ^14.0.0 || >=16.0.0} + peerDependencies: + postcss: ^8.4.47 + + detective-sass@6.0.1: + resolution: {integrity: sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==} + engines: {node: '>=18'} + + detective-scss@5.0.1: + resolution: {integrity: sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==} + engines: {node: '>=18'} + + detective-stylus@5.0.1: + resolution: {integrity: sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==} + engines: {node: '>=18'} + + detective-typescript@14.0.0: + resolution: {integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==} + engines: {node: '>=18'} + peerDependencies: + typescript: ^5.4.4 + + detective-vue2@2.2.0: + resolution: {integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==} + engines: {node: '>=18'} + peerDependencies: + typescript: ^5.4.4 + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dot-prop@9.0.0: + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} + engines: {node: '>=18'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + empathic@2.0.0: + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + engines: {node: '>=14'} + + enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + envinfo@7.14.0: + resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} + engines: {node: '>=4'} + hasBin: true + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.25.6: + resolution: {integrity: sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-goat@4.0.0: + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} + engines: {node: '>=12'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + express-logging@1.1.1: + resolution: {integrity: sha512-1KboYwxxCG5kwkJHR5LjFDTD1Mgl8n4PIMcCuhhd/1OqaxlC68P3QKbvvAbZVUtVgtlxEdTgSUwf6yxwzRCuuA==} + engines: {node: '>= 0.10.26'} + + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + + ext-list@2.2.2: + resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} + engines: {node: '>=0.10.0'} + + ext-name@5.0.0: + resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} + engines: {node: '>=4'} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + fast-content-type-parse@1.1.0: + resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} + + fast-content-type-parse@2.0.1: + resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} + + fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-equals@3.0.3: + resolution: {integrity: sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==} + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stringify@5.16.1: + resolution: {integrity: sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==} + + fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-uri@2.4.0: + resolution: {integrity: sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastify-plugin@4.5.1: + resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==} + + fastify@4.29.1: + resolution: {integrity: sha512-m2kMNHIG92tSNWv+Z3UeTR9AWLLuo7KctC7mlFPtMEVrfjIhmQhkQnT9v15qA/BfVq3vvj134Y0jl9SBje3jXQ==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + file-type@18.7.0: + resolution: {integrity: sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==} + engines: {node: '>=14.16'} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + filename-reserved-regex@3.0.0: + resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + filenamify@5.1.1: + resolution: {integrity: sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==} + engines: {node: '>=12.20'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + filter-obj@6.1.0: + resolution: {integrity: sha512-xdMtCAODmPloU9qtmPcdBV9Kd27NtMse+4ayThxqIHUES5Z2S6bGpap5PpdmNM56ub7y3i1eyr+vJJIIgWGKmA==} + engines: {node: '>=18'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + find-my-way@8.2.2: + resolution: {integrity: sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==} + engines: {node: '>=14'} + + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + + focus-trap@7.6.5: + resolution: {integrity: sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==} + + folder-walker@3.2.0: + resolution: {integrity: sha512-VjAQdSLsl6AkpZNyrQJfO7BXLo4chnStqb055bumZMbRUPpVuPN3a4ktsnRCmrFZjtMlYLkyXiR5rAs4WOpC4Q==} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + from2@2.3.0: + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + fuzzy@0.1.3: + resolution: {integrity: sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==} + engines: {node: '>= 0.6.0'} + + get-amd-module-type@6.0.1: + resolution: {integrity: sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==} + engines: {node: '>=18'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-port-please@3.2.0: + resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} + + get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + + get-port@7.1.0: + resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} + engines: {node: '>=16'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + + gh-release-fetch@4.0.3: + resolution: {integrity: sha512-TOiP1nwLsH5shG85Yt6v6Kjq5JU/44jXyEpbcfPgmj3C829yeXIlx9nAEwQRaxtRF3SJinn2lz7XUkfG9W/U4g==} + engines: {node: ^14.18.0 || ^16.13.0 || >=18.0.0} + + git-repo-info@2.1.1: + resolution: {integrity: sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==} + engines: {node: '>= 4.0'} + + gitconfiglocal@2.1.0: + resolution: {integrity: sha512-qoerOEliJn3z+Zyn1HW2F6eoYJqKwS6MgC9cztTLUB/xLWX8gD/6T60pKn4+t/d6tP7JlybI7Z3z+I572CR/Vg==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + + gonzales-pe@4.3.0: + resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} + engines: {node: '>=0.6.0'} + hasBin: true + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + h3@1.15.4: + resolution: {integrity: sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + + hosted-git-info@8.1.0: + resolution: {integrity: sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==} + engines: {node: ^18.17.0 || >=20.5.0} + + hot-shots@11.1.0: + resolution: {integrity: sha512-D4iAs/145g7EJ/wIzBLVANEpysTPthUy/K+4EUIw02YJQTqvzD1vUpYiM3vwR0qPAQj4FhQpQz8wBpY8KDcM0g==} + engines: {node: '>=10.0.0'} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-middleware@2.0.9: + resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + http-shutdown@1.2.2: + resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + image-meta@0.2.1: + resolution: {integrity: sha512-K6acvFaelNxx8wc2VjbIzXKDVB0Khs0QT35U6NkGfTdCmjLNcO2945m7RFNR9/RPVFm48hq7QPzK8uGH18HCGw==} + + image-size@2.0.2: + resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==} + engines: {node: '>=16.x'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + index-to-position@1.1.0: + resolution: {integrity: sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==} + engines: {node: '>=18'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + inquirer-autocomplete-prompt@1.4.0: + resolution: {integrity: sha512-qHgHyJmbULt4hI+kCmwX92MnSxDs/Yhdt4wPA30qnoa01OF6uTXV8yvH4hKXgdaTNmkZ9D01MHjqKYEuJN+ONw==} + engines: {node: '>=10'} + peerDependencies: + inquirer: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + + inspect-with-kind@1.0.5: + resolution: {integrity: sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + ipx@3.1.1: + resolution: {integrity: sha512-7Xnt54Dco7uYkfdAw0r2vCly3z0rSaVhEXMzPvl3FndsTVm5p26j+PO+gyinkYmcsEUvX2Rh7OGK7KzYWRu6BA==} + hasBin: true + + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-error-instance@2.0.0: + resolution: {integrity: sha512-5RuM+oFY0P5MRa1nXJo6IcTx9m2VyXYhRtb4h0olsi2GHci4bqZ6akHk+GmCYvDrAR9yInbiYdr2pnoqiOMw/Q==} + engines: {node: '>=16.17.0'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-in-ci@1.0.0: + resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} + engines: {node: '>=18'} + hasBin: true + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-installed-globally@1.0.0: + resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} + engines: {node: '>=18'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-network-error@1.1.0: + resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} + engines: {node: '>=16'} + + is-npm@6.0.0: + resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-url-superb@4.0.0: + resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} + engines: {node: '>=10'} + + is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + is64bit@2.0.0: + resolution: {integrity: sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==} + engines: {node: '>=18'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + iserror@0.0.2: + resolution: {integrity: sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@2.5.1: + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} + hasBin: true + + jpeg-js@0.4.4: + resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} + + js-image-generator@1.0.4: + resolution: {integrity: sha512-ckb7kyVojGAnArouVR+5lBIuwU1fcrn7E/YYSd0FK7oIngAkMmRvHASLro9Zt5SQdWToaI66NybG+OGxPw/HlQ==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-ref-resolver@1.0.1: + resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + junk@4.0.1: + resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} + engines: {node: '>=12.20'} + + jwa@1.4.2: + resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + jwt-decode@4.0.0: + resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} + engines: {node: '>=18'} + + keep-func-props@6.0.0: + resolution: {integrity: sha512-XDYA44ccm6W2MXZeQcDZykS5srkTpPf6Z59AEuOFbfuqdQ5TVxhAjxgzAEFBpr8XpsCEgr/XeCBFAmc9x6wRmQ==} + engines: {node: '>=16.17.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + + ky@1.8.2: + resolution: {integrity: sha512-XybQJ3d4Ea1kI27DoelE5ZCT3bSJlibYTtQuMsyzKox3TMyayw1asgQdl54WroAm+fIA3ZCr8zXW2RpR7qWVpA==} + engines: {node: '>=18'} + + lambda-local@2.2.0: + resolution: {integrity: sha512-bPcgpIXbHnVGfI/omZIlgucDqlf4LrsunwoKue5JdZeGybt8L6KyJz2Zu19ffuZwIwLj2NAI2ZyaqNT6/cetcg==} + engines: {node: '>=8'} + hasBin: true + + latest-version@9.0.0: + resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==} + engines: {node: '>=18'} + + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + light-my-request@5.14.0: + resolution: {integrity: sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==} + + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + listhen@1.9.0: + resolution: {integrity: sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==} + hasBin: true + + local-pkg@1.1.1: + resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} + engines: {node: '>=14'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isempty@4.4.0: + resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash.transform@4.6.0: + resolution: {integrity: sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-process-errors@11.0.1: + resolution: {integrity: sha512-HXYU83z3kH0VHfJgGyv9ZP9z7uNEayssgvpeQwSzh60mvpNqUBCPyXLSzCDSMxfGvAUUa0Kw06wJjVR46Ohd3A==} + engines: {node: '>=16.17.0'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + logform@2.7.0: + resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} + engines: {node: '>= 12.0.0'} + + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + luxon@3.7.1: + resolution: {integrity: sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg==} + engines: {node: '>=12'} + + macos-release@3.4.0: + resolution: {integrity: sha512-wpGPwyg/xrSp4H4Db4xYSeAr6+cFQGHfspHzDUdYxswDnUW0L5Ov63UuJiSr8NMSpyaChO4u1n0MXUvVPtrN6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + map-obj@5.0.2: + resolution: {integrity: sha512-K6K2NgKnTXimT3779/4KxSvobxOtMmx1LBZ3NwRxT/MDIR3Br/fQ4Q+WCX5QxjyUR8zg5+RV9Tbf2c5pAWTD2A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + maxstache-stream@1.0.4: + resolution: {integrity: sha512-v8qlfPN0pSp7bdSoLo1NTjG43GXGqk5W2NWFnOCq2GlmFFqebGzPCjLKSbShuqIOVorOtZSAy7O/S1OCCRONUw==} + + maxstache@1.0.7: + resolution: {integrity: sha512-53ZBxHrZM+W//5AcRVewiLpDunHnucfdzZUGz54Fnvo4tE+J3p8EL66kBrs2UhBXvYKTWckWYYWBqJqoTcenqg==} + + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-options@3.0.4: + resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} + engines: {node: '>=10'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micro-api-client@3.3.0: + resolution: {integrity: sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==} + + micro-memoize@4.1.3: + resolution: {integrity: sha512-DzRMi8smUZXT7rCGikRwldEh6eO6qzKiPPopcr1+2EY3AYKpy5fu159PKWwIS9A6IWnrvPKDMcuFtyrroZa8Bw==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minisearch@7.1.2: + resolution: {integrity: sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==} + + minizlib@3.0.2: + resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} + engines: {node: '>= 18'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + + module-definition@6.0.1: + resolution: {integrity: sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==} + engines: {node: '>=18'} + hasBin: true + + moize@6.1.6: + resolution: {integrity: sha512-vSKdIUO61iCmTqhdoIDrqyrtp87nWZUmBPniNjO0fX49wEYmyDO4lvlnFXiGcaH1JLE/s/9HbiK4LSHsbiUY6Q==} + + move-file@3.1.0: + resolution: {integrity: sha512-4aE3U7CCBWgrQlQDMq8da4woBWDGHioJFiOZ8Ie6Yq2uwYQ9V2kGhTz4x3u6Wc+OU17nw0yc3rJ/lQ4jIiPe3A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multiparty@4.2.3: + resolution: {integrity: sha512-Ak6EUJZuhGS8hJ3c2fY6UW5MbkGUPMBEGd13djUzoY/BHqV/gTuFWtC6IuVA7A2+v3yjBS6c4or50xhzTQZImQ==} + engines: {node: '>= 0.10'} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + nan@2.23.0: + resolution: {integrity: sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanospinner@1.2.2: + resolution: {integrity: sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + netlify-cli@23.1.1: + resolution: {integrity: sha512-m+ZX/LxPpfq/zI4st1eW+Av0hY7ePjtvLQxicPrxy4Y3KWWORk5kLRga6q+7UZk/9lziAH/LO85YcGIDmG/tIg==} + engines: {node: '>=20.12.2'} + hasBin: true + + netlify-redirector@0.5.0: + resolution: {integrity: sha512-4zdzIP+6muqPCuE8avnrgDJ6KW/2+UpHTRcTbMXCIRxiRmyrX+IZ4WSJGZdHPWF3WmQpXpy603XxecZ9iygN7w==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + node-mock-http@1.0.2: + resolution: {integrity: sha512-zWaamgDUdo9SSLw47we78+zYw/bDr5gH8pH7oRRs8V3KmBtu8GLgGIbV2p/gRPd3LWpEOpjQj7X1FOU3VFMJ8g==} + + node-source-walk@7.0.1: + resolution: {integrity: sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==} + engines: {node: '>=18'} + + node-stream-zip@1.15.0: + resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} + engines: {node: '>=0.12.0'} + + nopt@8.1.0: + resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + normalize-exception@3.0.0: + resolution: {integrity: sha512-SMZtWSLjls45KBgwvS2jWyXLtOI9j90JyQ6tJstl91Gti4W7QwZyF/nWwlFRz/Cx4Gy70DAtLT0EzXYXcPJJUw==} + engines: {node: '>=16.17.0'} + + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + + normalize-package-data@7.0.1: + resolution: {integrity: sha512-linxNAT6M0ebEYZOx2tO6vBEFsVgnPpv+AVjk0wJHfaUIbq31Jm3T6vvZaarnOeWDh8ShnwXuaAyM7WT3RzErA==} + engines: {node: ^18.17.0 || >=20.5.0} + + normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-url@8.0.2: + resolution: {integrity: sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==} + engines: {node: '>=14.16'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + ofetch@1.4.1: + resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} + + omit.js@2.0.2: + resolution: {integrity: sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + oniguruma-to-es@3.1.1: + resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} + + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-name@6.1.0: + resolution: {integrity: sha512-zBd1G8HkewNd2A8oQ8c6BN/f/c9EId7rSUueOLGu28govmUctXmM+3765GwsByv9nYUdrLqHphXlYIc86saYsg==} + engines: {node: '>=18'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + + p-event@5.0.1: + resolution: {integrity: sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-event@6.0.1: + resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} + engines: {node: '>=16.17'} + + p-filter@4.1.0: + resolution: {integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==} + engines: {node: '>=18'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + engines: {node: '>=18'} + + p-reduce@3.0.0: + resolution: {integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==} + engines: {node: '>=12'} + + p-retry@6.2.1: + resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} + engines: {node: '>=16.17'} + + p-timeout@5.1.0: + resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} + engines: {node: '>=12'} + + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + + p-wait-for@5.0.2: + resolution: {integrity: sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==} + engines: {node: '>=12'} + + package-directory@8.1.0: + resolution: {integrity: sha512-qHKRW0pw3lYdZMQVkjDBqh8HlamH/LCww2PH7OWEp4Qrt3SFeYMNpnJrQzlSnGrDD5zGR51XqBh7FnNCdVNEHA==} + engines: {node: '>=18'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-json@10.0.1: + resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} + engines: {node: '>=18'} + + package-manager-detector@1.3.0: + resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} + + parallel-transform@1.2.0: + resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==} + + parse-github-url@1.0.3: + resolution: {integrity: sha512-tfalY5/4SqGaV/GIGzWyHnFjlpTPTNpENR9Ea2lLldSJ8EWXMsvacWucqY3m3I4YPtas15IxTLQVQ5NSYXPrww==} + engines: {node: '>= 0.10'} + hasBin: true + + parse-gitignore@2.0.0: + resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} + engines: {node: '>=14'} + + parse-imports@2.2.1: + resolution: {integrity: sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==} + engines: {node: '>= 18'} + + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + peek-readable@5.4.2: + resolution: {integrity: sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==} + engines: {node: '>=14.16'} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@9.7.0: + resolution: {integrity: sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==} + hasBin: true + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.2.0: + resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} + + postcss-values-parser@6.0.2: + resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} + engines: {node: '>=10'} + peerDependencies: + postcss: ^8.2.9 + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + preact@10.26.9: + resolution: {integrity: sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==} + + precinct@12.2.0: + resolution: {integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==} + engines: {node: '>=18'} + hasBin: true + + precond@0.2.3: + resolution: {integrity: sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==} + engines: {node: '>= 0.6'} + + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + engines: {node: '>=18'} + + prettyjson@1.2.5: + resolution: {integrity: sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==} + hasBin: true + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process-warning@3.0.0: + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + ps-list@8.1.1: + resolution: {integrity: sha512-OPS9kEJYVmiO48u/B9qneqhkMvgCxT+Tm28VCEJpheTpl8cJ0ffZRRNgS5mrQRTrX5yRTpaJ+hRDeefXYmmorQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + pump@1.0.3: + resolution: {integrity: sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==} + + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + + pupa@3.1.0: + resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} + engines: {node: '>=12.20'} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + quote-unquote@1.0.0: + resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} + + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + + random-bytes@1.0.0: + resolution: {integrity: sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==} + engines: {node: '>= 0.8'} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + read-package-up@11.0.0: + resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} + engines: {node: '>=18'} + + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readable-web-to-node-stream@3.0.4: + resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==} + engines: {node: '>=8'} + + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + + registry-auth-token@5.1.0: + resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==} + engines: {node: '>=14'} + + registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + + remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + require-package-name@2.0.1: + resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + ret@0.4.3: + resolution: {integrity: sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==} + engines: {node: '>=10'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rollup@4.45.1: + resolution: {integrity: sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-json-stringify@1.2.0: + resolution: {integrity: sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==} + + safe-regex2@3.1.0: + resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + search-insights@2.17.3: + resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} + + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + + seek-bzip@1.0.6: + resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==} + hasBin: true + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + + set-error-message@2.0.1: + resolution: {integrity: sha512-s/eeP0f4ed1S3fl0KbxZoy5Pbeg5D6Nbple9nut4VPwHTvEIk5r7vKq0FwjNjszdUPdlTrs4GJCOkWUqWeTeWg==} + engines: {node: '>=16.17.0'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sharp@0.34.3: + resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shiki@2.5.0: + resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slashes@3.0.12: + resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + + sort-keys-length@1.0.1: + resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} + engines: {node: '>=0.10.0'} + + sort-keys@1.1.2: + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} + engines: {node: '>=0.10.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.22: + resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + split2@1.1.1: + resolution: {integrity: sha512-cfurE2q8LamExY+lJ9Ex3ZfBwqAPduzOKVscPDXNCLLMvyaeD3DTz1yk7fVIs6Chco+12XeD0BB6HEoYzPYbXA==} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + stack-generator@2.0.10: + resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + std-env@3.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + + streamx@2.22.1: + resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-dirs@3.0.0: + resolution: {integrity: sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ==} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-outer@2.0.0: + resolution: {integrity: sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + strtok3@7.1.1: + resolution: {integrity: sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg==} + engines: {node: '>=16'} + + stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + + superjson@2.2.2: + resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} + engines: {node: '>=16'} + + supports-color@10.1.0: + resolution: {integrity: sha512-GBuewsPrhJPftT+fqDa9oI/zc5HNsG9nREqwzoSFDOIqf0NggOZbHQj2TE1P1CDJK8ZogFnlZY9hWoUiur7I/A==} + engines: {node: '>=18'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-hyperlinks@3.2.0: + resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} + engines: {node: '>=14.18'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svgo@4.0.0: + resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==} + engines: {node: '>=16'} + hasBin: true + + system-architecture@0.1.0: + resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} + engines: {node: '>=18'} + + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + + terminal-link@4.0.0: + resolution: {integrity: sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==} + engines: {node: '>=18'} + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmp@0.2.4: + resolution: {integrity: sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==} + engines: {node: '>=14.14'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toad-cache@3.7.0: + resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} + engines: {node: '>=12'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + token-types@5.0.1: + resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} + engines: {node: '>=14.16'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tomlify-j0.4@3.0.0: + resolution: {integrity: sha512-2Ulkc8T7mXJ2l0W476YC/A209PR38Nw8PuaCNtk9uI3t1zzFdGQeWYGQvmj2PZkVvRC/Yoi4xQKMRnWc/N29tQ==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trim-repeated@2.0.0: + resolution: {integrity: sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==} + engines: {node: '>=12'} + + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + 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 + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + engines: {node: '>=14.17'} + hasBin: true + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + uid-safe@2.1.5: + resolution: {integrity: sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==} + engines: {node: '>= 0.8'} + + ulid@3.0.1: + resolution: {integrity: sha512-dPJyqPzx8preQhqq24bBG1YNkvigm87K8kVEHCD+ruZg24t6IFEFv00xMWfxcC4djmFtiTLdFuADn4+DOz6R7Q==} + hasBin: true + + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + universal-user-agent@7.0.3: + resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} + + unix-dgram@2.0.6: + resolution: {integrity: sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg==} + engines: {node: '>=0.10.48'} + + unixify@1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + unstorage@1.16.1: + resolution: {integrity: sha512-gdpZ3guLDhz+zWIlYP1UwQ259tG5T5vYRzDaHMkQ1bBY1SQPutvZnrRjTFaWUUpseErJIgAZS51h6NOcZVZiqQ==} + peerDependencies: + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.6.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6.0.3 || ^7.0.0 + '@deno/kv': '>=0.9.0' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.1' + '@vercel/kv': ^1.0.1 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' + idb-keyval: ^6.2.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.4 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@deno/kv': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + '@vercel/kv': + optional: true + aws4fetch: + optional: true + db0: + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + uploadthing: + optional: true + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + untun@0.1.3: + resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==} + hasBin: true + + update-notifier@7.3.1: + resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} + engines: {node: '>=18'} + + uqr@0.1.2: + resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} + + urlpattern-polyfill@10.1.0: + resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} + + urlpattern-polyfill@8.0.2: + resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@5.4.19: + resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitepress-plugin-group-icons@1.6.1: + resolution: {integrity: sha512-eoFlFAhAy/yTZDbaIgA/nMbjVYXkf8pz8rr75MN2VCw7yH60I3cw6bW5EuwddAeafZtBqbo8OsEGU7TIWFiAjg==} + peerDependencies: + markdown-it: '>=14' + vite: '>=3' + + vitepress-plugin-tabs@0.7.1: + resolution: {integrity: sha512-jxJvsicxnMSIYX9b8mAFLD2nwyKUcMO10dEt4nDSbinZhM8cGvAmMFOHPdf6TBX6gYZRl+/++/iYHtoM14fERQ==} + peerDependencies: + vitepress: ^1.0.0 + vue: ^3.5.0 + + vitepress@1.6.3: + resolution: {integrity: sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + + vue@3.5.18: + resolution: {integrity: sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + wait-port@1.1.0: + resolution: {integrity: sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==} + engines: {node: '>=10'} + hasBin: true + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + when-exit@2.1.4: + resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + + windows-release@6.1.0: + resolution: {integrity: sha512-1lOb3qdzw6OFmOzoY0nauhLG72TpWtb5qgYPiSh/62rjc1XidBSDio2qw0pwHh17VINF217ebIkZJdFLZFn9SA==} + engines: {node: '>=18'} + + winston-transport@4.9.0: + resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} + engines: {node: '>= 12.0.0'} + + winston@3.17.0: + resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} + engines: {node: '>= 12.0.0'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + + xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + + xss@1.0.15: + resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==} + engines: {node: '>= 0.10.0'} + hasBin: true + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@1.2.1: + resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} + engines: {node: '>=12.20'} + + zip-stream@6.0.1: + resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} + engines: {node: '>= 14'} + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + + zod@4.0.15: + resolution: {integrity: sha512-2IVHb9h4Mt6+UXkyMs0XbfICUh1eUrlJJAOupBHUhLRnKkruawyDddYRCs0Eizt900ntIMk9/4RksYl+FgSpcQ==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.34.1)(algoliasearch@5.34.1)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.34.1)(algoliasearch@5.34.1)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.34.1)(algoliasearch@5.34.1) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + + '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.34.1)(algoliasearch@5.34.1)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.34.1)(algoliasearch@5.34.1) + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + + '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.34.1)(algoliasearch@5.34.1)': + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.34.1)(algoliasearch@5.34.1) + '@algolia/client-search': 5.34.1 + algoliasearch: 5.34.1 + + '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.34.1)(algoliasearch@5.34.1)': + dependencies: + '@algolia/client-search': 5.34.1 + algoliasearch: 5.34.1 + + '@algolia/client-abtesting@5.34.1': + dependencies: + '@algolia/client-common': 5.34.1 + '@algolia/requester-browser-xhr': 5.34.1 + '@algolia/requester-fetch': 5.34.1 + '@algolia/requester-node-http': 5.34.1 + + '@algolia/client-analytics@5.34.1': + dependencies: + '@algolia/client-common': 5.34.1 + '@algolia/requester-browser-xhr': 5.34.1 + '@algolia/requester-fetch': 5.34.1 + '@algolia/requester-node-http': 5.34.1 + + '@algolia/client-common@5.34.1': {} + + '@algolia/client-insights@5.34.1': + dependencies: + '@algolia/client-common': 5.34.1 + '@algolia/requester-browser-xhr': 5.34.1 + '@algolia/requester-fetch': 5.34.1 + '@algolia/requester-node-http': 5.34.1 + + '@algolia/client-personalization@5.34.1': + dependencies: + '@algolia/client-common': 5.34.1 + '@algolia/requester-browser-xhr': 5.34.1 + '@algolia/requester-fetch': 5.34.1 + '@algolia/requester-node-http': 5.34.1 + + '@algolia/client-query-suggestions@5.34.1': + dependencies: + '@algolia/client-common': 5.34.1 + '@algolia/requester-browser-xhr': 5.34.1 + '@algolia/requester-fetch': 5.34.1 + '@algolia/requester-node-http': 5.34.1 + + '@algolia/client-search@5.34.1': + dependencies: + '@algolia/client-common': 5.34.1 + '@algolia/requester-browser-xhr': 5.34.1 + '@algolia/requester-fetch': 5.34.1 + '@algolia/requester-node-http': 5.34.1 + + '@algolia/ingestion@1.34.1': + dependencies: + '@algolia/client-common': 5.34.1 + '@algolia/requester-browser-xhr': 5.34.1 + '@algolia/requester-fetch': 5.34.1 + '@algolia/requester-node-http': 5.34.1 + + '@algolia/monitoring@1.34.1': + dependencies: + '@algolia/client-common': 5.34.1 + '@algolia/requester-browser-xhr': 5.34.1 + '@algolia/requester-fetch': 5.34.1 + '@algolia/requester-node-http': 5.34.1 + + '@algolia/recommend@5.34.1': + dependencies: + '@algolia/client-common': 5.34.1 + '@algolia/requester-browser-xhr': 5.34.1 + '@algolia/requester-fetch': 5.34.1 + '@algolia/requester-node-http': 5.34.1 + + '@algolia/requester-browser-xhr@5.34.1': + dependencies: + '@algolia/client-common': 5.34.1 + + '@algolia/requester-fetch@5.34.1': + dependencies: + '@algolia/client-common': 5.34.1 + + '@algolia/requester-node-http@5.34.1': + dependencies: + '@algolia/client-common': 5.34.1 + + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.3.0 + tinyexec: 1.0.1 + + '@antfu/utils@8.1.1': {} + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/parser@7.28.0': + dependencies: + '@babel/types': 7.28.2 + + '@babel/types@7.28.1': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@babel/types@7.28.2': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@bugsnag/browser@8.4.0': + dependencies: + '@bugsnag/core': 8.4.0 + + '@bugsnag/core@8.4.0': + dependencies: + '@bugsnag/cuid': 3.2.1 + '@bugsnag/safe-json-stringify': 6.0.0 + error-stack-parser: 2.1.4 + iserror: 0.0.2 + stack-generator: 2.0.10 + + '@bugsnag/cuid@3.2.1': {} + + '@bugsnag/js@8.4.0': + dependencies: + '@bugsnag/browser': 8.4.0 + '@bugsnag/node': 8.4.0 + + '@bugsnag/node@8.4.0': + dependencies: + '@bugsnag/core': 8.4.0 + byline: 5.0.0 + error-stack-parser: 2.1.4 + iserror: 0.0.2 + pump: 3.0.3 + stack-generator: 2.0.10 + + '@bugsnag/safe-json-stringify@6.0.0': {} + + '@colors/colors@1.6.0': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + + '@dependents/detective-less@5.0.1': + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + + '@docsearch/css@3.8.2': {} + + '@docsearch/js@3.8.2(@algolia/client-search@5.34.1)(search-insights@2.17.3)': + dependencies: + '@docsearch/react': 3.8.2(@algolia/client-search@5.34.1)(search-insights@2.17.3) + preact: 10.26.9 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + + '@docsearch/react@3.8.2(@algolia/client-search@5.34.1)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.34.1)(algoliasearch@5.34.1)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.34.1)(algoliasearch@5.34.1) + '@docsearch/css': 3.8.2 + algoliasearch: 5.34.1 + optionalDependencies: + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + + '@emnapi/runtime@1.4.5': + dependencies: + tslib: 2.8.1 + optional: true + + '@envelop/instrumentation@1.0.0': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/aix-ppc64@0.25.6': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.25.6': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-arm@0.25.6': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/android-x64@0.25.6': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.25.6': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.25.6': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.25.6': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.25.6': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.25.6': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-arm@0.25.6': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.25.6': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.25.6': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.25.6': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.25.6': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.25.6': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.25.6': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/linux-x64@0.25.6': + optional: true + + '@esbuild/netbsd-arm64@0.25.6': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.25.6': + optional: true + + '@esbuild/openbsd-arm64@0.25.6': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.25.6': + optional: true + + '@esbuild/openharmony-arm64@0.25.6': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.25.6': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.25.6': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.25.6': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@esbuild/win32-x64@0.25.6': + optional: true + + '@fastify/accept-negotiator@1.1.0': {} + + '@fastify/accept-negotiator@2.0.1': {} + + '@fastify/ajv-compiler@3.6.0': + dependencies: + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + fast-uri: 2.4.0 + + '@fastify/busboy@3.1.1': {} + + '@fastify/error@3.4.1': {} + + '@fastify/fast-json-stringify-compiler@4.3.0': + dependencies: + fast-json-stringify: 5.16.1 + + '@fastify/merge-json-schemas@0.1.1': + dependencies: + fast-deep-equal: 3.1.3 + + '@fastify/send@2.1.0': + dependencies: + '@lukeed/ms': 2.0.2 + escape-html: 1.0.3 + fast-decode-uri-component: 1.0.1 + http-errors: 2.0.0 + mime: 3.0.0 + + '@fastify/static@7.0.4': + dependencies: + '@fastify/accept-negotiator': 1.1.0 + '@fastify/send': 2.1.0 + content-disposition: 0.5.4 + fastify-plugin: 4.5.1 + fastq: 1.19.1 + glob: 10.4.5 + + '@humanwhocodes/momoa@2.0.4': {} + + '@iarna/toml@2.2.5': {} + + '@iconify-json/logos@1.2.5': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/simple-icons@1.2.44': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/vscode-icons@1.2.23': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/types@2.0.0': {} + + '@iconify/utils@2.3.0': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@antfu/utils': 8.1.1 + '@iconify/types': 2.0.0 + debug: 4.4.1(supports-color@10.1.0) + globals: 15.15.0 + kolorist: 1.8.0 + local-pkg: 1.1.1 + mlly: 1.7.4 + transitivePeerDependencies: + - supports-color + + '@img/sharp-darwin-arm64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.0 + optional: true + + '@img/sharp-darwin-x64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.0 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.0': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.0': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.0': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.0': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.0': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.0': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.0': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.0': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.0': + optional: true + + '@img/sharp-linux-arm64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.0 + optional: true + + '@img/sharp-linux-arm@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.0 + optional: true + + '@img/sharp-linux-ppc64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.0 + optional: true + + '@img/sharp-linux-s390x@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.0 + optional: true + + '@img/sharp-linux-x64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.0 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.0 + optional: true + + '@img/sharp-wasm32@0.34.3': + dependencies: + '@emnapi/runtime': 1.4.5 + optional: true + + '@img/sharp-win32-arm64@0.34.3': + optional: true + + '@img/sharp-win32-ia32@0.34.3': + optional: true + + '@img/sharp-win32-x64@0.34.3': + optional: true + + '@import-maps/resolve@2.0.0': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.4': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.4 + + '@lukeed/ms@2.0.2': {} + + '@mapbox/node-pre-gyp@2.0.0(supports-color@10.1.0)': + dependencies: + consola: 3.4.2 + detect-libc: 2.0.4 + https-proxy-agent: 7.0.6(supports-color@10.1.0) + node-fetch: 2.7.0 + nopt: 8.1.0 + semver: 7.7.2 + tar: 7.4.3 + transitivePeerDependencies: + - encoding + - supports-color + + '@netlify/api@14.0.3': + dependencies: + '@netlify/open-api': 2.37.0 + lodash-es: 4.17.21 + micro-api-client: 3.3.0 + node-fetch: 3.3.2 + p-wait-for: 5.0.2 + qs: 6.14.0 + + '@netlify/binary-info@1.0.0': {} + + '@netlify/blobs@10.0.8': + dependencies: + '@netlify/dev-utils': 4.1.1 + '@netlify/runtime-utils': 2.1.0 + + '@netlify/build-info@10.0.7': + dependencies: + '@bugsnag/js': 8.4.0 + '@iarna/toml': 2.2.5 + dot-prop: 9.0.0 + find-up: 7.0.0 + minimatch: 9.0.5 + read-pkg: 9.0.1 + semver: 7.7.2 + yaml: 2.8.1 + yargs: 17.7.2 + + '@netlify/build@35.0.3(@opentelemetry/api@1.8.0)(@types/node@24.1.0)(picomatch@4.0.3)(rollup@4.45.1)': + dependencies: + '@bugsnag/js': 8.4.0 + '@netlify/blobs': 10.0.8 + '@netlify/cache-utils': 6.0.3 + '@netlify/config': 24.0.1 + '@netlify/edge-bundler': 14.4.1 + '@netlify/functions-utils': 6.2.1(rollup@4.45.1)(supports-color@10.1.0) + '@netlify/git-utils': 6.0.2 + '@netlify/opentelemetry-utils': 2.0.1(@opentelemetry/api@1.8.0) + '@netlify/plugins-list': 6.80.0 + '@netlify/run-utils': 6.0.2 + '@netlify/zip-it-and-ship-it': 14.1.1(rollup@4.45.1)(supports-color@10.1.0) + '@opentelemetry/api': 1.8.0 + '@sindresorhus/slugify': 2.2.1 + ansi-escapes: 7.0.0 + ansis: 4.1.0 + clean-stack: 5.2.0 + execa: 8.0.1 + fdir: 6.4.6(picomatch@4.0.3) + figures: 6.1.0 + filter-obj: 6.1.0 + hot-shots: 11.1.0 + indent-string: 5.0.0 + is-plain-obj: 4.1.0 + keep-func-props: 6.0.0 + log-process-errors: 11.0.1 + memoize-one: 6.0.0 + minimatch: 9.0.5 + os-name: 6.1.0 + p-event: 6.0.1 + p-filter: 4.1.0 + p-locate: 6.0.0 + p-map: 7.0.3 + p-reduce: 3.0.0 + package-directory: 8.1.0 + path-exists: 5.0.0 + pretty-ms: 9.2.0 + ps-list: 8.1.1 + read-package-up: 11.0.0 + readdirp: 4.1.2 + resolve: 2.0.0-next.5 + rfdc: 1.4.1 + safe-json-stringify: 1.2.0 + semver: 7.7.2 + string-width: 7.2.0 + supports-color: 10.1.0 + terminal-link: 4.0.0 + ts-node: 10.9.2(@types/node@24.1.0)(typescript@5.9.2) + typescript: 5.9.2 + uuid: 11.1.0 + yaml: 2.8.1 + yargs: 17.7.2 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - encoding + - picomatch + - rollup + + '@netlify/cache-utils@6.0.3': + dependencies: + cpy: 11.1.0 + get-stream: 9.0.1 + globby: 14.1.0 + junk: 4.0.1 + locate-path: 7.2.0 + move-file: 3.1.0 + path-exists: 5.0.0 + readdirp: 4.1.2 + + '@netlify/config@24.0.1': + dependencies: + '@iarna/toml': 2.2.5 + '@netlify/api': 14.0.3 + '@netlify/headers-parser': 9.0.1 + '@netlify/redirect-parser': 15.0.3 + chalk: 5.4.1 + cron-parser: 4.9.0 + deepmerge: 4.3.1 + dot-prop: 9.0.0 + execa: 8.0.1 + fast-safe-stringify: 2.1.1 + figures: 6.1.0 + filter-obj: 6.1.0 + find-up: 7.0.0 + indent-string: 5.0.0 + is-plain-obj: 4.1.0 + map-obj: 5.0.2 + omit.js: 2.0.2 + p-locate: 6.0.0 + path-type: 6.0.0 + read-package-up: 11.0.0 + tomlify-j0.4: 3.0.0 + validate-npm-package-name: 5.0.1 + yaml: 2.8.1 + yargs: 17.7.2 + zod: 4.0.15 + + '@netlify/dev-utils@4.1.1': + dependencies: + '@whatwg-node/server': 0.10.12 + ansis: 4.1.0 + chokidar: 4.0.3 + decache: 4.6.2 + dot-prop: 9.0.0 + empathic: 2.0.0 + env-paths: 3.0.0 + image-size: 2.0.2 + js-image-generator: 1.0.4 + lodash.debounce: 4.0.8 + parse-gitignore: 2.0.0 + semver: 7.7.2 + tmp-promise: 3.0.3 + uuid: 11.1.0 + write-file-atomic: 5.0.1 + + '@netlify/edge-bundler@14.4.1': + dependencies: + '@import-maps/resolve': 2.0.0 + ajv: 8.17.1 + ajv-errors: 3.0.0(ajv@8.17.1) + better-ajv-errors: 1.2.0(ajv@8.17.1) + common-path-prefix: 3.0.0 + env-paths: 3.0.0 + esbuild: 0.25.6 + execa: 8.0.1 + find-up: 7.0.0 + get-port: 7.1.0 + node-stream-zip: 1.15.0 + p-retry: 6.2.1 + p-wait-for: 5.0.2 + parse-imports: 2.2.1 + path-key: 4.0.0 + semver: 7.7.2 + tar: 7.4.3 + tmp-promise: 3.0.3 + urlpattern-polyfill: 8.0.2 + uuid: 11.1.0 + + '@netlify/edge-functions-bootstrap@2.14.0': {} + + '@netlify/functions-utils@6.2.1(rollup@4.45.1)(supports-color@10.1.0)': + dependencies: + '@netlify/zip-it-and-ship-it': 14.1.1(rollup@4.45.1)(supports-color@10.1.0) + cpy: 11.1.0 + path-exists: 5.0.0 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + + '@netlify/git-utils@6.0.2': + dependencies: + execa: 8.0.1 + map-obj: 5.0.2 + micromatch: 4.0.8 + moize: 6.1.6 + path-exists: 5.0.0 + + '@netlify/headers-parser@9.0.1': + dependencies: + '@iarna/toml': 2.2.5 + escape-string-regexp: 5.0.0 + fast-safe-stringify: 2.1.1 + is-plain-obj: 4.1.0 + map-obj: 5.0.2 + path-exists: 5.0.0 + + '@netlify/local-functions-proxy-darwin-arm64@1.1.1': + optional: true + + '@netlify/local-functions-proxy-darwin-x64@1.1.1': + optional: true + + '@netlify/local-functions-proxy-freebsd-arm64@1.1.1': + optional: true + + '@netlify/local-functions-proxy-freebsd-x64@1.1.1': + optional: true + + '@netlify/local-functions-proxy-linux-arm64@1.1.1': + optional: true + + '@netlify/local-functions-proxy-linux-arm@1.1.1': + optional: true + + '@netlify/local-functions-proxy-linux-ia32@1.1.1': + optional: true + + '@netlify/local-functions-proxy-linux-ppc64@1.1.1': + optional: true + + '@netlify/local-functions-proxy-linux-x64@1.1.1': + optional: true + + '@netlify/local-functions-proxy-openbsd-x64@1.1.1': + optional: true + + '@netlify/local-functions-proxy-win32-ia32@1.1.1': + optional: true + + '@netlify/local-functions-proxy-win32-x64@1.1.1': + optional: true + + '@netlify/local-functions-proxy@2.0.3': + optionalDependencies: + '@netlify/local-functions-proxy-darwin-arm64': 1.1.1 + '@netlify/local-functions-proxy-darwin-x64': 1.1.1 + '@netlify/local-functions-proxy-freebsd-arm64': 1.1.1 + '@netlify/local-functions-proxy-freebsd-x64': 1.1.1 + '@netlify/local-functions-proxy-linux-arm': 1.1.1 + '@netlify/local-functions-proxy-linux-arm64': 1.1.1 + '@netlify/local-functions-proxy-linux-ia32': 1.1.1 + '@netlify/local-functions-proxy-linux-ppc64': 1.1.1 + '@netlify/local-functions-proxy-linux-x64': 1.1.1 + '@netlify/local-functions-proxy-openbsd-x64': 1.1.1 + '@netlify/local-functions-proxy-win32-ia32': 1.1.1 + '@netlify/local-functions-proxy-win32-x64': 1.1.1 + + '@netlify/open-api@2.37.0': {} + + '@netlify/opentelemetry-utils@2.0.1(@opentelemetry/api@1.8.0)': + dependencies: + '@opentelemetry/api': 1.8.0 + + '@netlify/plugins-list@6.80.0': {} + + '@netlify/redirect-parser@15.0.3': + dependencies: + '@iarna/toml': 2.2.5 + fast-safe-stringify: 2.1.1 + is-plain-obj: 4.1.0 + path-exists: 5.0.0 + + '@netlify/run-utils@6.0.2': + dependencies: + execa: 8.0.1 + + '@netlify/runtime-utils@2.1.0': {} + + '@netlify/serverless-functions-api@2.1.3': {} + + '@netlify/zip-it-and-ship-it@14.1.1(rollup@4.45.1)(supports-color@10.1.0)': + dependencies: + '@babel/parser': 7.28.0 + '@babel/types': 7.28.1 + '@netlify/binary-info': 1.0.0 + '@netlify/serverless-functions-api': 2.1.3 + '@vercel/nft': 0.30.0(rollup@4.45.1)(supports-color@10.1.0) + archiver: 7.0.1 + common-path-prefix: 3.0.0 + copy-file: 11.0.0 + es-module-lexer: 1.7.0 + esbuild: 0.25.6 + execa: 8.0.1 + fast-glob: 3.3.3 + filter-obj: 6.1.0 + find-up: 7.0.0 + is-path-inside: 4.0.0 + junk: 4.0.1 + locate-path: 7.2.0 + merge-options: 3.0.4 + minimatch: 9.0.5 + normalize-path: 3.0.0 + p-map: 7.0.3 + path-exists: 5.0.0 + precinct: 12.2.0(supports-color@10.1.0) + require-package-name: 2.0.1 + resolve: 2.0.0-next.5 + semver: 7.7.2 + tmp-promise: 3.0.3 + toml: 3.0.0 + unixify: 1.0.0 + urlpattern-polyfill: 8.0.2 + yargs: 17.7.2 + zod: 3.25.76 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@octokit/auth-token@5.1.2': {} + + '@octokit/core@6.1.6': + dependencies: + '@octokit/auth-token': 5.1.2 + '@octokit/graphql': 8.2.2 + '@octokit/request': 9.2.4 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.1.0 + before-after-hook: 3.0.2 + universal-user-agent: 7.0.3 + + '@octokit/endpoint@10.1.4': + dependencies: + '@octokit/types': 14.1.0 + universal-user-agent: 7.0.3 + + '@octokit/graphql@8.2.2': + dependencies: + '@octokit/request': 9.2.4 + '@octokit/types': 14.1.0 + universal-user-agent: 7.0.3 + + '@octokit/openapi-types@24.2.0': {} + + '@octokit/openapi-types@25.1.0': {} + + '@octokit/plugin-paginate-rest@11.6.0(@octokit/core@6.1.6)': + dependencies: + '@octokit/core': 6.1.6 + '@octokit/types': 13.10.0 + + '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.6)': + dependencies: + '@octokit/core': 6.1.6 + + '@octokit/plugin-rest-endpoint-methods@13.5.0(@octokit/core@6.1.6)': + dependencies: + '@octokit/core': 6.1.6 + '@octokit/types': 13.10.0 + + '@octokit/request-error@6.1.8': + dependencies: + '@octokit/types': 14.1.0 + + '@octokit/request@9.2.4': + dependencies: + '@octokit/endpoint': 10.1.4 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.1.0 + fast-content-type-parse: 2.0.1 + universal-user-agent: 7.0.3 + + '@octokit/rest@21.1.1': + dependencies: + '@octokit/core': 6.1.6 + '@octokit/plugin-paginate-rest': 11.6.0(@octokit/core@6.1.6) + '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.6) + '@octokit/plugin-rest-endpoint-methods': 13.5.0(@octokit/core@6.1.6) + + '@octokit/types@13.10.0': + dependencies: + '@octokit/openapi-types': 24.2.0 + + '@octokit/types@14.1.0': + dependencies: + '@octokit/openapi-types': 25.1.0 + + '@opentelemetry/api@1.8.0': {} + + '@parcel/watcher-android-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-x64@2.5.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true + + '@parcel/watcher-wasm@2.5.1': + dependencies: + is-glob: 4.0.3 + micromatch: 4.0.8 + + '@parcel/watcher-win32-arm64@2.5.1': + optional: true + + '@parcel/watcher-win32-ia32@2.5.1': + optional: true + + '@parcel/watcher-win32-x64@2.5.1': + optional: true + + '@parcel/watcher@2.5.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pnpm/config.env-replace@1.1.0': {} + + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 + + '@pnpm/npm-conf@2.3.1': + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + + '@pnpm/tabtab@0.5.4': + dependencies: + debug: 4.4.1(supports-color@10.1.0) + enquirer: 2.4.1 + minimist: 1.2.8 + untildify: 4.0.0 + transitivePeerDependencies: + - supports-color + + '@rollup/pluginutils@5.2.0(rollup@4.45.1)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.45.1 + + '@rollup/rollup-android-arm-eabi@4.45.1': + optional: true + + '@rollup/rollup-android-arm64@4.45.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.45.1': + optional: true + + '@rollup/rollup-darwin-x64@4.45.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.45.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.45.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.45.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.45.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.45.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.45.1': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.45.1': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.45.1': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.45.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.45.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.45.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.45.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.45.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.45.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.45.1': + optional: true + + '@sec-ant/readable-stream@0.4.1': {} + + '@shikijs/core@2.5.0': + dependencies: + '@shikijs/engine-javascript': 2.5.0 + '@shikijs/engine-oniguruma': 2.5.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 3.1.1 + + '@shikijs/engine-oniguruma@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + + '@shikijs/themes@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + + '@shikijs/transformers@2.5.0': + dependencies: + '@shikijs/core': 2.5.0 + '@shikijs/types': 2.5.0 + + '@shikijs/types@2.5.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@sindresorhus/is@5.6.0': {} + + '@sindresorhus/merge-streams@2.3.0': {} + + '@sindresorhus/slugify@2.2.1': + dependencies: + '@sindresorhus/transliterate': 1.6.0 + escape-string-regexp: 5.0.0 + + '@sindresorhus/transliterate@1.6.0': + dependencies: + escape-string-regexp: 5.0.0 + + '@szmarczak/http-timer@5.0.1': + dependencies: + defer-to-connect: 2.0.1 + + '@tokenizer/token@0.3.0': {} + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/estree@1.0.8': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/http-cache-semantics@4.0.4': {} + + '@types/http-proxy@1.17.16': + dependencies: + '@types/node': 24.1.0 + + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdurl@2.0.0': {} + + '@types/node@24.1.0': + dependencies: + undici-types: 7.8.0 + + '@types/normalize-package-data@2.4.4': {} + + '@types/retry@0.12.2': {} + + '@types/triple-beam@1.3.5': {} + + '@types/unist@3.0.3': {} + + '@types/web-bluetooth@0.0.21': {} + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 24.1.0 + optional: true + + '@typescript-eslint/project-service@8.39.0(supports-color@10.1.0)(typescript@5.9.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + debug: 4.4.1(supports-color@10.1.0) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/tsconfig-utils@8.39.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + + '@typescript-eslint/types@8.39.0': {} + + '@typescript-eslint/typescript-estree@8.39.0(supports-color@10.1.0)(typescript@5.9.2)': + dependencies: + '@typescript-eslint/project-service': 8.39.0(supports-color@10.1.0)(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/visitor-keys': 8.39.0 + debug: 4.4.1(supports-color@10.1.0) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.39.0': + dependencies: + '@typescript-eslint/types': 8.39.0 + eslint-visitor-keys: 4.2.1 + + '@ungap/structured-clone@1.3.0': {} + + '@vercel/nft@0.30.0(rollup@4.45.1)(supports-color@10.1.0)': + dependencies: + '@mapbox/node-pre-gyp': 2.0.0(supports-color@10.1.0) + '@rollup/pluginutils': 5.2.0(rollup@4.45.1) + acorn: 8.15.0 + acorn-import-attributes: 1.9.5(acorn@8.15.0) + async-sema: 3.1.1 + bindings: 1.5.0 + estree-walker: 2.0.2 + glob: 10.4.5 + graceful-fs: 4.2.11 + node-gyp-build: 4.8.4 + picomatch: 4.0.3 + resolve-from: 5.0.0 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + + '@vitejs/plugin-vue@5.2.4(vite@5.4.19(@types/node@24.1.0))(vue@3.5.18(typescript@5.9.2))': + dependencies: + vite: 5.4.19(@types/node@24.1.0) + vue: 3.5.18(typescript@5.9.2) + + '@vue/compiler-core@3.5.18': + dependencies: + '@babel/parser': 7.28.0 + '@vue/shared': 3.5.18 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.18': + dependencies: + '@vue/compiler-core': 3.5.18 + '@vue/shared': 3.5.18 + + '@vue/compiler-sfc@3.5.18': + dependencies: + '@babel/parser': 7.28.0 + '@vue/compiler-core': 3.5.18 + '@vue/compiler-dom': 3.5.18 + '@vue/compiler-ssr': 3.5.18 + '@vue/shared': 3.5.18 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.6 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.18': + dependencies: + '@vue/compiler-dom': 3.5.18 + '@vue/shared': 3.5.18 + + '@vue/devtools-api@7.7.7': + dependencies: + '@vue/devtools-kit': 7.7.7 + + '@vue/devtools-kit@7.7.7': + dependencies: + '@vue/devtools-shared': 7.7.7 + birpc: 2.5.0 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.2 + + '@vue/devtools-shared@7.7.7': + dependencies: + rfdc: 1.4.1 + + '@vue/reactivity@3.5.18': + dependencies: + '@vue/shared': 3.5.18 + + '@vue/runtime-core@3.5.18': + dependencies: + '@vue/reactivity': 3.5.18 + '@vue/shared': 3.5.18 + + '@vue/runtime-dom@3.5.18': + dependencies: + '@vue/reactivity': 3.5.18 + '@vue/runtime-core': 3.5.18 + '@vue/shared': 3.5.18 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.18(vue@3.5.18(typescript@5.9.2))': + dependencies: + '@vue/compiler-ssr': 3.5.18 + '@vue/shared': 3.5.18 + vue: 3.5.18(typescript@5.9.2) + + '@vue/shared@3.5.18': {} + + '@vueuse/core@12.8.2(typescript@5.9.2)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 12.8.2 + '@vueuse/shared': 12.8.2(typescript@5.9.2) + vue: 3.5.18(typescript@5.9.2) + transitivePeerDependencies: + - typescript + + '@vueuse/integrations@12.8.2(focus-trap@7.6.5)(jwt-decode@4.0.0)(typescript@5.9.2)': + dependencies: + '@vueuse/core': 12.8.2(typescript@5.9.2) + '@vueuse/shared': 12.8.2(typescript@5.9.2) + vue: 3.5.18(typescript@5.9.2) + optionalDependencies: + focus-trap: 7.6.5 + jwt-decode: 4.0.0 + transitivePeerDependencies: + - typescript + + '@vueuse/metadata@12.8.2': {} + + '@vueuse/shared@12.8.2(typescript@5.9.2)': + dependencies: + vue: 3.5.18(typescript@5.9.2) + transitivePeerDependencies: + - typescript + + '@whatwg-node/disposablestack@0.0.6': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@whatwg-node/fetch@0.10.10': + dependencies: + '@whatwg-node/node-fetch': 0.7.25 + urlpattern-polyfill: 10.1.0 + + '@whatwg-node/node-fetch@0.7.25': + dependencies: + '@fastify/busboy': 3.1.1 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@whatwg-node/promise-helpers@1.3.2': + dependencies: + tslib: 2.8.1 + + '@whatwg-node/server@0.10.12': + dependencies: + '@envelop/instrumentation': 1.0.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/fetch': 0.10.10 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@xhmikosr/archive-type@6.0.1': + dependencies: + file-type: 18.7.0 + + '@xhmikosr/decompress-tar@7.0.0': + dependencies: + file-type: 18.7.0 + is-stream: 3.0.0 + tar-stream: 3.1.7 + + '@xhmikosr/decompress-tarbz2@7.0.0': + dependencies: + '@xhmikosr/decompress-tar': 7.0.0 + file-type: 18.7.0 + is-stream: 3.0.0 + seek-bzip: 1.0.6 + unbzip2-stream: 1.4.3 + + '@xhmikosr/decompress-targz@7.0.0': + dependencies: + '@xhmikosr/decompress-tar': 7.0.0 + file-type: 18.7.0 + is-stream: 3.0.0 + + '@xhmikosr/decompress-unzip@6.0.0': + dependencies: + file-type: 18.7.0 + get-stream: 6.0.1 + yauzl: 2.10.0 + + '@xhmikosr/decompress@9.0.1': + dependencies: + '@xhmikosr/decompress-tar': 7.0.0 + '@xhmikosr/decompress-tarbz2': 7.0.0 + '@xhmikosr/decompress-targz': 7.0.0 + '@xhmikosr/decompress-unzip': 6.0.0 + graceful-fs: 4.2.11 + make-dir: 4.0.0 + strip-dirs: 3.0.0 + + '@xhmikosr/downloader@13.0.1': + dependencies: + '@xhmikosr/archive-type': 6.0.1 + '@xhmikosr/decompress': 9.0.1 + content-disposition: 0.5.4 + ext-name: 5.0.0 + file-type: 18.7.0 + filenamify: 5.1.1 + get-stream: 6.0.1 + got: 12.6.1 + merge-options: 3.0.4 + p-event: 5.0.1 + + abbrev@3.0.1: {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + abstract-logging@2.0.1: {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-import-attributes@1.9.5(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + agent-base@7.1.4: {} + + ajv-errors@3.0.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + algoliasearch@5.34.1: + dependencies: + '@algolia/client-abtesting': 5.34.1 + '@algolia/client-analytics': 5.34.1 + '@algolia/client-common': 5.34.1 + '@algolia/client-insights': 5.34.1 + '@algolia/client-personalization': 5.34.1 + '@algolia/client-query-suggestions': 5.34.1 + '@algolia/client-search': 5.34.1 + '@algolia/ingestion': 1.34.1 + '@algolia/monitoring': 1.34.1 + '@algolia/recommend': 5.34.1 + '@algolia/requester-browser-xhr': 5.34.1 + '@algolia/requester-fetch': 5.34.1 + '@algolia/requester-node-http': 5.34.1 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + ansi-to-html@0.7.2: + dependencies: + entities: 2.2.0 + + ansis@4.1.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + archiver-utils@5.0.2: + dependencies: + glob: 10.4.5 + graceful-fs: 4.2.11 + is-stream: 2.0.1 + lazystream: 1.0.1 + lodash: 4.17.21 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + + archiver@7.0.1: + dependencies: + archiver-utils: 5.0.2 + async: 3.2.6 + buffer-crc32: 1.0.0 + readable-stream: 4.7.0 + readdir-glob: 1.1.3 + tar-stream: 3.1.7 + zip-stream: 6.0.1 + + arg@4.1.3: {} + + argparse@2.0.1: {} + + array-flatten@1.1.1: {} + + array-timsort@1.0.3: {} + + ascii-table@0.0.9: {} + + ast-module-types@6.0.1: {} + + async-sema@3.1.1: {} + + async@3.2.6: {} + + atomic-sleep@1.0.0: {} + + atomically@2.0.3: + dependencies: + stubborn-fs: 1.2.5 + when-exit: 2.1.4 + + avvio@8.4.0: + dependencies: + '@fastify/error': 3.4.1 + fastq: 1.19.1 + + b4a@1.6.7: {} + + backoff@2.5.0: + dependencies: + precond: 0.2.3 + + balanced-match@1.0.2: {} + + bare-events@2.6.0: + optional: true + + base64-js@1.5.1: {} + + before-after-hook@3.0.2: {} + + better-ajv-errors@1.2.0(ajv@8.17.1): + dependencies: + '@babel/code-frame': 7.27.1 + '@humanwhocodes/momoa': 2.0.4 + ajv: 8.17.1 + chalk: 4.1.2 + jsonpointer: 5.0.1 + leven: 3.1.0 + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + birpc@2.5.0: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + boolbase@1.0.0: {} + + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.4.1 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.0 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + buffer-crc32@0.2.13: {} + + buffer-crc32@1.0.0: {} + + buffer-equal-constant-time@1.0.1: {} + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + + byline@5.0.0: {} + + bytes@3.1.2: {} + + cacheable-lookup@7.0.0: {} + + cacheable-request@10.2.14: + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.2.0 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.2 + responselike: 3.0.0 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsite@1.0.0: {} + + camelcase@8.0.0: {} + + ccount@2.0.1: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.4.1: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + chardet@0.7.0: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chownr@3.0.0: {} + + ci-info@4.3.0: {} + + citty@0.1.6: + dependencies: + consola: 3.4.2 + + clean-deep@3.4.0: + dependencies: + lodash.isempty: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.transform: 4.6.0 + + clean-stack@5.2.0: + dependencies: + escape-string-regexp: 5.0.0 + + cli-boxes@3.0.0: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + cli-width@3.0.0: {} + + clipboardy@4.0.0: + dependencies: + execa: 8.0.1 + is-wsl: 3.1.0 + is64bit: 2.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@1.0.4: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + + colors@1.4.0: {} + + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + + comma-separated-tokens@2.0.3: {} + + commander@10.0.1: {} + + commander@11.1.0: {} + + commander@12.1.0: {} + + commander@2.20.3: {} + + commander@9.5.0: {} + + comment-json@4.2.5: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + + common-path-prefix@3.0.0: {} + + compress-commons@6.0.2: + dependencies: + crc-32: 1.2.2 + crc32-stream: 6.0.0 + is-stream: 2.0.1 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + + confbox@0.1.8: {} + + confbox@0.2.2: {} + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + configstore@7.0.0: + dependencies: + atomically: 2.0.3 + dot-prop: 9.0.0 + graceful-fs: 4.2.11 + xdg-basedir: 5.1.0 + + consola@3.4.2: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + cookie-es@1.2.2: {} + + cookie-signature@1.0.6: {} + + cookie@0.7.1: {} + + cookie@0.7.2: {} + + cookie@1.0.2: {} + + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + + copy-file@11.0.0: + dependencies: + graceful-fs: 4.2.11 + p-event: 6.0.1 + + core-util-is@1.0.3: {} + + cpy@11.1.0: + dependencies: + copy-file: 11.0.0 + globby: 14.1.0 + junk: 4.0.1 + micromatch: 4.0.8 + p-filter: 4.1.0 + p-map: 7.0.3 + + crc-32@1.2.2: {} + + crc32-stream@6.0.0: + dependencies: + crc-32: 1.2.2 + readable-stream: 4.7.0 + + create-require@1.1.1: {} + + cron-parser@4.9.0: + dependencies: + luxon: 3.7.1 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crossws@0.3.5: + dependencies: + uncrypto: 0.1.3 + + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + + css-what@6.2.2: {} + + cssfilter@0.0.10: {} + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + csstype@3.1.3: {} + + cyclist@1.0.2: {} + + data-uri-to-buffer@4.0.1: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.1(supports-color@10.1.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 10.1.0 + + decache@4.6.2: + dependencies: + callsite: 1.0.0 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + deep-extend@0.6.0: {} + + deepmerge@4.3.1: {} + + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + defer-to-connect@2.0.1: {} + + define-lazy-prop@3.0.0: {} + + defu@6.1.4: {} + + depd@1.1.2: {} + + depd@2.0.0: {} + + dequal@2.0.3: {} + + destr@2.0.5: {} + + destroy@1.2.0: {} + + detect-libc@1.0.3: {} + + detect-libc@2.0.4: {} + + detective-amd@6.0.1: + dependencies: + ast-module-types: 6.0.1 + escodegen: 2.1.0 + get-amd-module-type: 6.0.1 + node-source-walk: 7.0.1 + + detective-cjs@6.0.1: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + + detective-es6@5.0.1: + dependencies: + node-source-walk: 7.0.1 + + detective-postcss@7.0.1(postcss@8.5.6): + dependencies: + is-url: 1.2.4 + postcss: 8.5.6 + postcss-values-parser: 6.0.2(postcss@8.5.6) + + detective-sass@6.0.1: + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + + detective-scss@5.0.1: + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + + detective-stylus@5.0.1: {} + + detective-typescript@14.0.0(supports-color@10.1.0)(typescript@5.9.2): + dependencies: + '@typescript-eslint/typescript-estree': 8.39.0(supports-color@10.1.0)(typescript@5.9.2) + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + detective-vue2@2.2.0(supports-color@10.1.0)(typescript@5.9.2): + dependencies: + '@dependents/detective-less': 5.0.1 + '@vue/compiler-sfc': 3.5.18 + detective-es6: 5.0.1 + detective-sass: 6.0.1 + detective-scss: 5.0.1 + detective-stylus: 5.0.1 + detective-typescript: 14.0.0(supports-color@10.1.0)(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + diff@4.0.2: {} + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dot-prop@9.0.0: + dependencies: + type-fest: 4.41.0 + + dotenv@16.6.1: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + + ee-first@1.1.1: {} + + emoji-regex-xs@1.0.0: {} + + emoji-regex@10.4.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + empathic@2.0.0: {} + + enabled@2.0.0: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + entities@2.2.0: {} + + entities@4.5.0: {} + + env-paths@3.0.0: {} + + envinfo@7.14.0: {} + + environment@1.1.0: {} + + error-stack-parser@2.1.4: + dependencies: + stackframe: 1.3.4 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.7.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + esbuild@0.25.6: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.6 + '@esbuild/android-arm': 0.25.6 + '@esbuild/android-arm64': 0.25.6 + '@esbuild/android-x64': 0.25.6 + '@esbuild/darwin-arm64': 0.25.6 + '@esbuild/darwin-x64': 0.25.6 + '@esbuild/freebsd-arm64': 0.25.6 + '@esbuild/freebsd-x64': 0.25.6 + '@esbuild/linux-arm': 0.25.6 + '@esbuild/linux-arm64': 0.25.6 + '@esbuild/linux-ia32': 0.25.6 + '@esbuild/linux-loong64': 0.25.6 + '@esbuild/linux-mips64el': 0.25.6 + '@esbuild/linux-ppc64': 0.25.6 + '@esbuild/linux-riscv64': 0.25.6 + '@esbuild/linux-s390x': 0.25.6 + '@esbuild/linux-x64': 0.25.6 + '@esbuild/netbsd-arm64': 0.25.6 + '@esbuild/netbsd-x64': 0.25.6 + '@esbuild/openbsd-arm64': 0.25.6 + '@esbuild/openbsd-x64': 0.25.6 + '@esbuild/openharmony-arm64': 0.25.6 + '@esbuild/sunos-x64': 0.25.6 + '@esbuild/win32-arm64': 0.25.6 + '@esbuild/win32-ia32': 0.25.6 + '@esbuild/win32-x64': 0.25.6 + + escalade@3.2.0: {} + + escape-goat@4.0.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@5.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-visitor-keys@4.2.1: {} + + esprima@4.0.1: {} + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + event-target-shim@5.0.1: {} + + eventemitter3@4.0.7: {} + + events@3.3.0: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + express-logging@1.1.1: + dependencies: + on-headers: 1.1.0 + + express@4.21.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + exsolve@1.0.7: {} + + ext-list@2.2.2: + dependencies: + mime-db: 1.54.0 + + ext-name@5.0.0: + dependencies: + ext-list: 2.2.2 + sort-keys-length: 1.0.1 + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + extract-zip@2.0.1: + dependencies: + debug: 4.4.1(supports-color@10.1.0) + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + + fast-content-type-parse@1.1.0: {} + + fast-content-type-parse@2.0.1: {} + + fast-decode-uri-component@1.0.1: {} + + fast-deep-equal@3.1.3: {} + + fast-equals@3.0.3: {} + + fast-fifo@1.3.2: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stringify@5.16.1: + dependencies: + '@fastify/merge-json-schemas': 0.1.1 + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + fast-deep-equal: 3.1.3 + fast-uri: 2.4.0 + json-schema-ref-resolver: 1.0.1 + rfdc: 1.4.1 + + fast-querystring@1.1.2: + dependencies: + fast-decode-uri-component: 1.0.1 + + fast-redact@3.5.0: {} + + fast-safe-stringify@2.1.1: {} + + fast-uri@2.4.0: {} + + fast-uri@3.0.6: {} + + fastest-levenshtein@1.0.16: {} + + fastify-plugin@4.5.1: {} + + fastify@4.29.1: + dependencies: + '@fastify/ajv-compiler': 3.6.0 + '@fastify/error': 3.4.1 + '@fastify/fast-json-stringify-compiler': 4.3.0 + abstract-logging: 2.0.1 + avvio: 8.4.0 + fast-content-type-parse: 1.1.0 + fast-json-stringify: 5.16.1 + find-my-way: 8.2.2 + light-my-request: 5.14.0 + pino: 9.7.0 + process-warning: 3.0.0 + proxy-addr: 2.0.7 + rfdc: 1.4.1 + secure-json-parse: 2.7.0 + semver: 7.7.2 + toad-cache: 3.7.0 + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fdir@6.4.6(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + fecha@4.2.3: {} + + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + + file-type@18.7.0: + dependencies: + readable-web-to-node-stream: 3.0.4 + strtok3: 7.1.1 + token-types: 5.0.1 + + file-uri-to-path@1.0.0: {} + + filename-reserved-regex@3.0.0: {} + + filenamify@5.1.1: + dependencies: + filename-reserved-regex: 3.0.0 + strip-outer: 2.0.0 + trim-repeated: 2.0.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + filter-obj@6.1.0: {} + + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-my-way@8.2.2: + dependencies: + fast-deep-equal: 3.1.3 + fast-querystring: 1.1.2 + safe-regex2: 3.1.0 + + find-up-simple@1.0.1: {} + + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + + fn.name@1.1.0: {} + + focus-trap@7.6.5: + dependencies: + tabbable: 6.2.0 + + folder-walker@3.2.0: + dependencies: + from2: 2.3.0 + + follow-redirects@1.15.11(debug@4.4.1): + optionalDependencies: + debug: 4.4.1(supports-color@10.1.0) + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data-encoder@2.1.4: {} + + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + from2@2.3.0: + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + fuzzy@0.1.3: {} + + get-amd-module-type@6.0.1: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.3.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-port-please@3.2.0: {} + + get-port@5.1.1: {} + + get-port@7.1.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@5.2.0: + dependencies: + pump: 3.0.3 + + get-stream@6.0.1: {} + + get-stream@8.0.1: {} + + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + + gh-release-fetch@4.0.3: + dependencies: + '@xhmikosr/downloader': 13.0.1 + node-fetch: 3.3.2 + semver: 7.7.2 + + git-repo-info@2.1.1: {} + + gitconfiglocal@2.1.0: + dependencies: + ini: 1.3.8 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + + globals@15.15.0: {} + + globby@14.1.0: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 + + gonzales-pe@4.3.0: + dependencies: + minimist: 1.2.8 + + gopd@1.2.0: {} + + got@12.6.1: + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + graceful-fs@4.2.10: {} + + graceful-fs@4.2.11: {} + + h3@1.15.4: + dependencies: + cookie-es: 1.2.2 + crossws: 0.3.5 + defu: 6.1.4 + destr: 2.0.5 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.2 + radix3: 1.1.2 + ufo: 1.6.1 + uncrypto: 0.1.3 + + has-flag@4.0.0: {} + + has-own-prop@2.0.0: {} + + has-symbols@1.1.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hookable@5.5.3: {} + + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + + hosted-git-info@8.1.0: + dependencies: + lru-cache: 10.4.3 + + hot-shots@11.1.0: + optionalDependencies: + unix-dgram: 2.0.6 + + html-void-elements@3.0.0: {} + + http-cache-semantics@4.2.0: {} + + http-errors@1.8.1: + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-proxy-middleware@2.0.9(debug@4.4.1): + dependencies: + '@types/http-proxy': 1.17.16 + http-proxy: 1.18.1(debug@4.4.1) + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.8 + transitivePeerDependencies: + - debug + + http-proxy@1.18.1(debug@4.4.1): + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.11(debug@4.4.1) + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + + http-shutdown@1.2.2: {} + + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + https-proxy-agent@7.0.6(supports-color@10.1.0): + dependencies: + agent-base: 7.1.4 + debug: 4.4.1(supports-color@10.1.0) + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + human-signals@5.0.0: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@7.0.5: {} + + image-meta@0.2.1: {} + + image-size@2.0.2: {} + + imurmurhash@0.1.4: {} + + indent-string@5.0.0: {} + + index-to-position@1.1.0: {} + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@4.1.1: {} + + inquirer-autocomplete-prompt@1.4.0(inquirer@8.2.6): + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + figures: 3.2.0 + inquirer: 8.2.6 + run-async: 2.4.1 + rxjs: 6.6.7 + + inquirer@8.2.6: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + + inspect-with-kind@1.0.5: + dependencies: + kind-of: 6.0.3 + + ipaddr.js@1.9.1: {} + + ipx@3.1.1(@netlify/blobs@10.0.8): + dependencies: + '@fastify/accept-negotiator': 2.0.1 + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.4 + destr: 2.0.5 + etag: 1.8.1 + h3: 1.15.4 + image-meta: 0.2.1 + listhen: 1.9.0 + ofetch: 1.4.1 + pathe: 2.0.3 + sharp: 0.34.3 + svgo: 4.0.0 + ufo: 1.6.1 + unstorage: 1.16.1(@netlify/blobs@10.0.8) + xss: 1.0.15 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - db0 + - idb-keyval + - ioredis + - uploadthing + + iron-webcrypto@1.2.1: {} + + is-arrayish@0.3.2: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-docker@3.0.0: {} + + is-error-instance@2.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.3.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-in-ci@1.0.0: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-installed-globally@1.0.0: + dependencies: + global-directory: 4.0.1 + is-path-inside: 4.0.0 + + is-interactive@1.0.0: {} + + is-network-error@1.1.0: {} + + is-npm@6.0.0: {} + + is-number@7.0.0: {} + + is-path-inside@4.0.0: {} + + is-plain-obj@1.1.0: {} + + is-plain-obj@2.1.0: {} + + is-plain-obj@3.0.0: {} + + is-plain-obj@4.1.0: {} + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-stream@4.0.1: {} + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@2.1.0: {} + + is-url-superb@4.0.0: {} + + is-url@1.2.4: {} + + is-what@4.1.16: {} + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + is64bit@2.0.0: + dependencies: + system-architecture: 0.1.0 + + isarray@1.0.0: {} + + iserror@0.0.2: {} + + isexe@2.0.0: {} + + isexe@3.1.1: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@2.5.1: {} + + jpeg-js@0.4.4: {} + + js-image-generator@1.0.4: + dependencies: + jpeg-js: 0.4.4 + + js-tokens@4.0.0: {} + + json-buffer@3.0.1: {} + + json-schema-ref-resolver@1.0.1: + dependencies: + fast-deep-equal: 3.1.3 + + json-schema-traverse@1.0.0: {} + + jsonpointer@5.0.1: {} + + jsonwebtoken@9.0.2: + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.7.2 + + junk@4.0.1: {} + + jwa@1.4.2: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.2: + dependencies: + jwa: 1.4.2 + safe-buffer: 5.2.1 + + jwt-decode@4.0.0: {} + + keep-func-props@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kind-of@6.0.3: {} + + kolorist@1.8.0: {} + + kuler@2.0.0: {} + + ky@1.8.2: {} + + lambda-local@2.2.0: + dependencies: + commander: 10.0.1 + dotenv: 16.6.1 + winston: 3.17.0 + + latest-version@9.0.0: + dependencies: + package-json: 10.0.1 + + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + + leven@3.1.0: {} + + light-my-request@5.14.0: + dependencies: + cookie: 0.7.2 + process-warning: 3.0.0 + set-cookie-parser: 2.7.1 + + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + listhen@1.9.0: + dependencies: + '@parcel/watcher': 2.5.1 + '@parcel/watcher-wasm': 2.5.1 + citty: 0.1.6 + clipboardy: 4.0.0 + consola: 3.4.2 + crossws: 0.3.5 + defu: 6.1.4 + get-port-please: 3.2.0 + h3: 1.15.4 + http-shutdown: 1.2.2 + jiti: 2.5.1 + mlly: 1.7.4 + node-forge: 1.3.1 + pathe: 1.1.2 + std-env: 3.9.0 + ufo: 1.6.1 + untun: 0.1.3 + uqr: 0.1.2 + + local-pkg@1.1.1: + dependencies: + mlly: 1.7.4 + pkg-types: 2.2.0 + quansync: 0.2.10 + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash-es@4.17.21: {} + + lodash.debounce@4.0.8: {} + + lodash.includes@4.3.0: {} + + lodash.isboolean@3.0.3: {} + + lodash.isempty@4.4.0: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.once@4.1.1: {} + + lodash.transform@4.6.0: {} + + lodash@4.17.21: {} + + log-process-errors@11.0.1: + dependencies: + is-error-instance: 2.0.0 + is-plain-obj: 4.1.0 + normalize-exception: 3.0.0 + set-error-message: 2.0.1 + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + logform@2.7.0: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.5.0 + triple-beam: 1.4.1 + + lowercase-keys@3.0.0: {} + + lru-cache@10.4.3: {} + + luxon@3.7.1: {} + + macos-release@3.4.0: {} + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 + + make-dir@4.0.0: + dependencies: + semver: 7.7.2 + + make-error@1.3.6: {} + + map-obj@5.0.2: {} + + mark.js@8.11.1: {} + + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + + math-intrinsics@1.1.0: {} + + maxstache-stream@1.0.4: + dependencies: + maxstache: 1.0.7 + pump: 1.0.3 + split2: 1.1.1 + through2: 2.0.5 + + maxstache@1.0.7: {} + + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + mdn-data@2.0.28: {} + + mdn-data@2.12.2: {} + + mdurl@2.0.0: {} + + media-typer@0.3.0: {} + + memoize-one@6.0.0: {} + + merge-descriptors@1.0.3: {} + + merge-options@3.0.4: + dependencies: + is-plain-obj: 2.1.0 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micro-api-client@3.3.0: {} + + micro-memoize@4.1.3: {} + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-encode@2.0.1: {} + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mime@3.0.0: {} + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + mimic-response@3.1.0: {} + + mimic-response@4.0.0: {} + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + minisearch@7.1.2: {} + + minizlib@3.0.2: + dependencies: + minipass: 7.1.2 + + mitt@3.0.1: {} + + mkdirp@3.0.1: {} + + mlly@1.7.4: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + + module-definition@6.0.1: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + + moize@6.1.6: + dependencies: + fast-equals: 3.0.3 + micro-memoize: 4.1.3 + + move-file@3.1.0: + dependencies: + path-exists: 5.0.0 + + ms@2.0.0: {} + + ms@2.1.3: {} + + multiparty@4.2.3: + dependencies: + http-errors: 1.8.1 + safe-buffer: 5.2.1 + uid-safe: 2.1.5 + + mute-stream@0.0.8: {} + + nan@2.23.0: + optional: true + + nanoid@3.3.11: {} + + nanospinner@1.2.2: + dependencies: + picocolors: 1.1.1 + + negotiator@0.6.3: {} + + netlify-cli@23.1.1(@types/node@24.1.0)(picomatch@4.0.3)(rollup@4.45.1): + dependencies: + '@fastify/static': 7.0.4 + '@netlify/api': 14.0.3 + '@netlify/blobs': 10.0.8 + '@netlify/build': 35.0.3(@opentelemetry/api@1.8.0)(@types/node@24.1.0)(picomatch@4.0.3)(rollup@4.45.1) + '@netlify/build-info': 10.0.7 + '@netlify/config': 24.0.1 + '@netlify/dev-utils': 4.1.1 + '@netlify/edge-bundler': 14.4.1 + '@netlify/edge-functions-bootstrap': 2.14.0 + '@netlify/headers-parser': 9.0.1 + '@netlify/local-functions-proxy': 2.0.3 + '@netlify/redirect-parser': 15.0.3 + '@netlify/zip-it-and-ship-it': 14.1.1(rollup@4.45.1)(supports-color@10.1.0) + '@octokit/rest': 21.1.1 + '@opentelemetry/api': 1.8.0 + '@pnpm/tabtab': 0.5.4 + ansi-escapes: 7.0.0 + ansi-to-html: 0.7.2 + ascii-table: 0.0.9 + backoff: 2.5.0 + boxen: 8.0.1 + chalk: 5.4.1 + chokidar: 4.0.3 + ci-info: 4.3.0 + clean-deep: 3.4.0 + commander: 12.1.0 + comment-json: 4.2.5 + content-type: 1.0.5 + cookie: 1.0.2 + cron-parser: 4.9.0 + debug: 4.4.1(supports-color@10.1.0) + decache: 4.6.2 + dot-prop: 9.0.0 + dotenv: 16.6.1 + env-paths: 3.0.0 + envinfo: 7.14.0 + etag: 1.8.1 + execa: 5.1.1 + express: 4.21.2 + express-logging: 1.1.1 + extract-zip: 2.0.1 + fastest-levenshtein: 1.0.16 + fastify: 4.29.1 + find-up: 7.0.0 + folder-walker: 3.2.0 + fuzzy: 0.1.3 + get-port: 5.1.1 + gh-release-fetch: 4.0.3 + git-repo-info: 2.1.1 + gitconfiglocal: 2.1.0 + http-proxy: 1.18.1(debug@4.4.1) + http-proxy-middleware: 2.0.9(debug@4.4.1) + https-proxy-agent: 7.0.6(supports-color@10.1.0) + inquirer: 8.2.6 + inquirer-autocomplete-prompt: 1.4.0(inquirer@8.2.6) + ipx: 3.1.1(@netlify/blobs@10.0.8) + is-docker: 3.0.0 + is-stream: 4.0.1 + is-wsl: 3.1.0 + isexe: 3.1.1 + jsonwebtoken: 9.0.2 + jwt-decode: 4.0.0 + lambda-local: 2.2.0 + locate-path: 7.2.0 + lodash: 4.17.21 + log-update: 6.1.0 + maxstache: 1.0.7 + maxstache-stream: 1.0.4 + multiparty: 4.2.3 + nanospinner: 1.2.2 + netlify-redirector: 0.5.0 + node-fetch: 3.3.2 + normalize-package-data: 7.0.1 + open: 10.2.0 + p-filter: 4.1.0 + p-map: 7.0.3 + p-wait-for: 5.0.2 + parallel-transform: 1.2.0 + parse-github-url: 1.0.3 + prettyjson: 1.2.5 + raw-body: 3.0.0 + read-package-up: 11.0.0 + readdirp: 4.1.2 + semver: 7.7.2 + source-map-support: 0.5.21 + terminal-link: 4.0.0 + toml: 3.0.0 + tomlify-j0.4: 3.0.0 + ulid: 3.0.1 + update-notifier: 7.3.1 + uuid: 11.1.0 + wait-port: 1.1.0 + write-file-atomic: 5.0.1 + ws: 8.18.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/opentelemetry-sdk-setup' + - '@planetscale/database' + - '@swc/core' + - '@swc/wasm' + - '@types/express' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - idb-keyval + - ioredis + - picomatch + - rollup + - supports-color + - uploadthing + - utf-8-validate + + netlify-redirector@0.5.0: {} + + node-addon-api@7.1.1: {} + + node-domexception@1.0.0: {} + + node-fetch-native@1.6.7: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + + node-forge@1.3.1: {} + + node-gyp-build@4.8.4: {} + + node-mock-http@1.0.2: {} + + node-source-walk@7.0.1: + dependencies: + '@babel/parser': 7.28.0 + + node-stream-zip@1.15.0: {} + + nopt@8.1.0: + dependencies: + abbrev: 3.0.1 + + normalize-exception@3.0.0: + dependencies: + is-error-instance: 2.0.0 + is-plain-obj: 4.1.0 + + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.7.2 + validate-npm-package-license: 3.0.4 + + normalize-package-data@7.0.1: + dependencies: + hosted-git-info: 8.1.0 + semver: 7.7.2 + validate-npm-package-license: 3.0.4 + + normalize-path@2.1.1: + dependencies: + remove-trailing-separator: 1.1.0 + + normalize-path@3.0.0: {} + + normalize-url@8.0.2: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + object-inspect@1.13.4: {} + + ofetch@1.4.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.1 + + omit.js@2.0.2: {} + + on-exit-leak-free@2.1.2: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + on-headers@1.1.0: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + oniguruma-to-es@3.1.1: + dependencies: + emoji-regex-xs: 1.0.0 + regex: 6.0.1 + regex-recursion: 6.0.2 + + open@10.2.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + os-name@6.1.0: + dependencies: + macos-release: 3.4.0 + windows-release: 6.1.0 + + os-tmpdir@1.0.2: {} + + p-cancelable@3.0.0: {} + + p-event@5.0.1: + dependencies: + p-timeout: 5.1.0 + + p-event@6.0.1: + dependencies: + p-timeout: 6.1.4 + + p-filter@4.1.0: + dependencies: + p-map: 7.0.3 + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.2.1 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + p-map@7.0.3: {} + + p-reduce@3.0.0: {} + + p-retry@6.2.1: + dependencies: + '@types/retry': 0.12.2 + is-network-error: 1.1.0 + retry: 0.13.1 + + p-timeout@5.1.0: {} + + p-timeout@6.1.4: {} + + p-wait-for@5.0.2: + dependencies: + p-timeout: 6.1.4 + + package-directory@8.1.0: + dependencies: + find-up-simple: 1.0.1 + + package-json-from-dist@1.0.1: {} + + package-json@10.0.1: + dependencies: + ky: 1.8.2 + registry-auth-token: 5.1.0 + registry-url: 6.0.1 + semver: 7.7.2 + + package-manager-detector@1.3.0: {} + + parallel-transform@1.2.0: + dependencies: + cyclist: 1.0.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + + parse-github-url@1.0.3: {} + + parse-gitignore@2.0.0: {} + + parse-imports@2.2.1: + dependencies: + es-module-lexer: 1.7.0 + slashes: 3.0.12 + + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.27.1 + index-to-position: 1.1.0 + type-fest: 4.41.0 + + parse-ms@4.0.0: {} + + parseurl@1.3.3: {} + + path-exists@5.0.0: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@0.1.12: {} + + path-type@6.0.0: {} + + pathe@1.1.2: {} + + pathe@2.0.3: {} + + peek-readable@5.4.2: {} + + pend@1.2.0: {} + + perfect-debounce@1.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + + pino-std-serializers@7.0.0: {} + + pino@9.7.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.0.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.0 + thread-stream: 3.1.0 + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + + pkg-types@2.2.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.7 + pathe: 2.0.3 + + postcss-values-parser@6.0.2(postcss@8.5.6): + dependencies: + color-name: 1.1.4 + is-url-superb: 4.0.0 + postcss: 8.5.6 + quote-unquote: 1.0.0 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + preact@10.26.9: {} + + precinct@12.2.0(supports-color@10.1.0): + dependencies: + '@dependents/detective-less': 5.0.1 + commander: 12.1.0 + detective-amd: 6.0.1 + detective-cjs: 6.0.1 + detective-es6: 5.0.1 + detective-postcss: 7.0.1(postcss@8.5.6) + detective-sass: 6.0.1 + detective-scss: 5.0.1 + detective-stylus: 5.0.1 + detective-typescript: 14.0.0(supports-color@10.1.0)(typescript@5.9.2) + detective-vue2: 2.2.0(supports-color@10.1.0)(typescript@5.9.2) + module-definition: 6.0.1 + node-source-walk: 7.0.1 + postcss: 8.5.6 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + precond@0.2.3: {} + + prettier@3.6.2: {} + + pretty-ms@9.2.0: + dependencies: + parse-ms: 4.0.0 + + prettyjson@1.2.5: + dependencies: + colors: 1.4.0 + minimist: 1.2.8 + + process-nextick-args@2.0.1: {} + + process-warning@3.0.0: {} + + process-warning@5.0.0: {} + + process@0.11.10: {} + + property-information@7.1.0: {} + + proto-list@1.2.4: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + ps-list@8.1.1: {} + + pump@1.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + + pump@3.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + + punycode.js@2.3.1: {} + + pupa@3.1.0: + dependencies: + escape-goat: 4.0.0 + + qs@6.13.0: + dependencies: + side-channel: 1.1.0 + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + quansync@0.2.10: {} + + queue-microtask@1.2.3: {} + + quick-format-unescaped@4.0.4: {} + + quick-lru@5.1.1: {} + + quote-unquote@1.0.0: {} + + radix3@1.1.2: {} + + random-bytes@1.0.0: {} + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + raw-body@3.0.0: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + unpipe: 1.0.0 + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + read-package-up@11.0.0: + dependencies: + find-up-simple: 1.0.1 + read-pkg: 9.0.1 + type-fest: 4.41.0 + + read-pkg@9.0.1: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.3.0 + type-fest: 4.41.0 + unicorn-magic: 0.1.0 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readable-web-to-node-stream@3.0.4: + dependencies: + readable-stream: 4.7.0 + + readdir-glob@1.1.3: + dependencies: + minimatch: 5.1.6 + + readdirp@4.1.2: {} + + real-require@0.2.0: {} + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.0.1: + dependencies: + regex-utilities: 2.3.0 + + registry-auth-token@5.1.0: + dependencies: + '@pnpm/npm-conf': 2.3.1 + + registry-url@6.0.1: + dependencies: + rc: 1.2.8 + + remove-trailing-separator@1.1.0: {} + + repeat-string@1.6.1: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + require-package-name@2.0.1: {} + + requires-port@1.0.0: {} + + resolve-alpn@1.2.1: {} + + resolve-from@5.0.0: {} + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responselike@3.0.0: + dependencies: + lowercase-keys: 3.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + ret@0.4.3: {} + + retry@0.13.1: {} + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + rollup@4.45.1: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.45.1 + '@rollup/rollup-android-arm64': 4.45.1 + '@rollup/rollup-darwin-arm64': 4.45.1 + '@rollup/rollup-darwin-x64': 4.45.1 + '@rollup/rollup-freebsd-arm64': 4.45.1 + '@rollup/rollup-freebsd-x64': 4.45.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.45.1 + '@rollup/rollup-linux-arm-musleabihf': 4.45.1 + '@rollup/rollup-linux-arm64-gnu': 4.45.1 + '@rollup/rollup-linux-arm64-musl': 4.45.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.45.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.45.1 + '@rollup/rollup-linux-riscv64-gnu': 4.45.1 + '@rollup/rollup-linux-riscv64-musl': 4.45.1 + '@rollup/rollup-linux-s390x-gnu': 4.45.1 + '@rollup/rollup-linux-x64-gnu': 4.45.1 + '@rollup/rollup-linux-x64-musl': 4.45.1 + '@rollup/rollup-win32-arm64-msvc': 4.45.1 + '@rollup/rollup-win32-ia32-msvc': 4.45.1 + '@rollup/rollup-win32-x64-msvc': 4.45.1 + fsevents: 2.3.3 + + run-applescript@7.0.0: {} + + run-async@2.4.1: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@6.6.7: + dependencies: + tslib: 1.14.1 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-json-stringify@1.2.0: {} + + safe-regex2@3.1.0: + dependencies: + ret: 0.4.3 + + safe-stable-stringify@2.5.0: {} + + safer-buffer@2.1.2: {} + + sax@1.4.1: {} + + search-insights@2.17.3: {} + + secure-json-parse@2.7.0: {} + + seek-bzip@1.0.6: + dependencies: + commander: 2.20.3 + + semver@7.7.2: {} + + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + + set-cookie-parser@2.7.1: {} + + set-error-message@2.0.1: + dependencies: + normalize-exception: 3.0.0 + + setprototypeof@1.2.0: {} + + sharp@0.34.3: + dependencies: + color: 4.2.3 + detect-libc: 2.0.4 + semver: 7.7.2 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.3 + '@img/sharp-darwin-x64': 0.34.3 + '@img/sharp-libvips-darwin-arm64': 1.2.0 + '@img/sharp-libvips-darwin-x64': 1.2.0 + '@img/sharp-libvips-linux-arm': 1.2.0 + '@img/sharp-libvips-linux-arm64': 1.2.0 + '@img/sharp-libvips-linux-ppc64': 1.2.0 + '@img/sharp-libvips-linux-s390x': 1.2.0 + '@img/sharp-libvips-linux-x64': 1.2.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 + '@img/sharp-libvips-linuxmusl-x64': 1.2.0 + '@img/sharp-linux-arm': 0.34.3 + '@img/sharp-linux-arm64': 0.34.3 + '@img/sharp-linux-ppc64': 0.34.3 + '@img/sharp-linux-s390x': 0.34.3 + '@img/sharp-linux-x64': 0.34.3 + '@img/sharp-linuxmusl-arm64': 0.34.3 + '@img/sharp-linuxmusl-x64': 0.34.3 + '@img/sharp-wasm32': 0.34.3 + '@img/sharp-win32-arm64': 0.34.3 + '@img/sharp-win32-ia32': 0.34.3 + '@img/sharp-win32-x64': 0.34.3 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shiki@2.5.0: + dependencies: + '@shikijs/core': 2.5.0 + '@shikijs/engine-javascript': 2.5.0 + '@shikijs/engine-oniguruma': 2.5.0 + '@shikijs/langs': 2.5.0 + '@shikijs/themes': 2.5.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + slash@5.1.0: {} + + slashes@3.0.12: {} + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + + sonic-boom@4.2.0: + dependencies: + atomic-sleep: 1.0.0 + + sort-keys-length@1.0.1: + dependencies: + sort-keys: 1.1.2 + + sort-keys@1.1.2: + dependencies: + is-plain-obj: 1.1.0 + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + space-separated-tokens@2.0.2: {} + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.22 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.22 + + spdx-license-ids@3.0.22: {} + + speakingurl@14.0.1: {} + + split2@1.1.1: + dependencies: + through2: 2.0.5 + + split2@4.2.0: {} + + stack-generator@2.0.10: + dependencies: + stackframe: 1.3.4 + + stack-trace@0.0.10: {} + + stackframe@1.3.4: {} + + statuses@1.5.0: {} + + statuses@2.0.1: {} + + std-env@3.9.0: {} + + streamx@2.22.1: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.6.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-dirs@3.0.0: + dependencies: + inspect-with-kind: 1.0.5 + is-plain-obj: 1.1.0 + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-json-comments@2.0.1: {} + + strip-outer@2.0.0: {} + + strtok3@7.1.1: + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 5.4.2 + + stubborn-fs@1.2.5: {} + + superjson@2.2.2: + dependencies: + copy-anything: 3.0.5 + + supports-color@10.1.0: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@3.2.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svgo@4.0.0: + dependencies: + commander: 11.1.0 + css-select: 5.2.2 + css-tree: 3.1.0 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.4.1 + + system-architecture@0.1.0: {} + + tabbable@6.2.0: {} + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.1 + + tar@7.4.3: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.2 + mkdirp: 3.0.1 + yallist: 5.0.0 + + terminal-link@4.0.0: + dependencies: + ansi-escapes: 7.0.0 + supports-hyperlinks: 3.2.0 + + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + + text-hex@1.0.0: {} + + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 + + through2@2.0.5: + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + + through@2.3.8: {} + + tinyexec@1.0.1: {} + + tmp-promise@3.0.3: + dependencies: + tmp: 0.2.4 + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + tmp@0.2.4: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toad-cache@3.7.0: {} + + toidentifier@1.0.1: {} + + token-types@5.0.1: + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + + toml@3.0.0: {} + + tomlify-j0.4@3.0.0: {} + + tr46@0.0.3: {} + + trim-lines@3.0.1: {} + + trim-repeated@2.0.0: + dependencies: + escape-string-regexp: 5.0.0 + + triple-beam@1.4.1: {} + + ts-api-utils@2.1.0(typescript@5.9.2): + dependencies: + typescript: 5.9.2 + + ts-node@10.9.2(@types/node@24.1.0)(typescript@5.9.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 24.1.0 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.9.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tslib@1.14.1: {} + + tslib@2.8.1: {} + + type-fest@0.21.3: {} + + type-fest@4.41.0: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typescript@5.9.2: {} + + uc.micro@2.1.0: {} + + ufo@1.6.1: {} + + uid-safe@2.1.5: + dependencies: + random-bytes: 1.0.0 + + ulid@3.0.1: {} + + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + + uncrypto@0.1.3: {} + + undici-types@7.8.0: {} + + unicorn-magic@0.1.0: {} + + unicorn-magic@0.3.0: {} + + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + universal-user-agent@7.0.3: {} + + unix-dgram@2.0.6: + dependencies: + bindings: 1.5.0 + nan: 2.23.0 + optional: true + + unixify@1.0.0: + dependencies: + normalize-path: 2.1.1 + + unpipe@1.0.0: {} + + unstorage@1.16.1(@netlify/blobs@10.0.8): + dependencies: + anymatch: 3.1.3 + chokidar: 4.0.3 + destr: 2.0.5 + h3: 1.15.4 + lru-cache: 10.4.3 + node-fetch-native: 1.6.7 + ofetch: 1.4.1 + ufo: 1.6.1 + optionalDependencies: + '@netlify/blobs': 10.0.8 + + untildify@4.0.0: {} + + untun@0.1.3: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 1.1.2 + + update-notifier@7.3.1: + dependencies: + boxen: 8.0.1 + chalk: 5.4.1 + configstore: 7.0.0 + is-in-ci: 1.0.0 + is-installed-globally: 1.0.0 + is-npm: 6.0.0 + latest-version: 9.0.0 + pupa: 3.1.0 + semver: 7.7.2 + xdg-basedir: 5.1.0 + + uqr@0.1.2: {} + + urlpattern-polyfill@10.1.0: {} + + urlpattern-polyfill@8.0.2: {} + + util-deprecate@1.0.2: {} + + utils-merge@1.0.1: {} + + uuid@11.1.0: {} + + v8-compile-cache-lib@3.0.1: {} + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validate-npm-package-name@5.0.1: {} + + vary@1.1.2: {} + + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + + vite@5.4.19(@types/node@24.1.0): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.6 + rollup: 4.45.1 + optionalDependencies: + '@types/node': 24.1.0 + fsevents: 2.3.3 + + vitepress-plugin-group-icons@1.6.1(markdown-it@14.1.0)(vite@5.4.19(@types/node@24.1.0)): + dependencies: + '@iconify-json/logos': 1.2.5 + '@iconify-json/vscode-icons': 1.2.23 + '@iconify/utils': 2.3.0 + markdown-it: 14.1.0 + vite: 5.4.19(@types/node@24.1.0) + transitivePeerDependencies: + - supports-color + + vitepress-plugin-tabs@0.7.1(vitepress@1.6.3(@algolia/client-search@5.34.1)(@types/node@24.1.0)(jwt-decode@4.0.0)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.2))(vue@3.5.18(typescript@5.9.2)): + dependencies: + vitepress: 1.6.3(@algolia/client-search@5.34.1)(@types/node@24.1.0)(jwt-decode@4.0.0)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.2) + vue: 3.5.18(typescript@5.9.2) + + vitepress@1.6.3(@algolia/client-search@5.34.1)(@types/node@24.1.0)(jwt-decode@4.0.0)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.2): + dependencies: + '@docsearch/css': 3.8.2 + '@docsearch/js': 3.8.2(@algolia/client-search@5.34.1)(search-insights@2.17.3) + '@iconify-json/simple-icons': 1.2.44 + '@shikijs/core': 2.5.0 + '@shikijs/transformers': 2.5.0 + '@shikijs/types': 2.5.0 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 5.2.4(vite@5.4.19(@types/node@24.1.0))(vue@3.5.18(typescript@5.9.2)) + '@vue/devtools-api': 7.7.7 + '@vue/shared': 3.5.18 + '@vueuse/core': 12.8.2(typescript@5.9.2) + '@vueuse/integrations': 12.8.2(focus-trap@7.6.5)(jwt-decode@4.0.0)(typescript@5.9.2) + focus-trap: 7.6.5 + mark.js: 8.11.1 + minisearch: 7.1.2 + shiki: 2.5.0 + vite: 5.4.19(@types/node@24.1.0) + vue: 3.5.18(typescript@5.9.2) + optionalDependencies: + postcss: 8.5.6 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - sass-embedded + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + + vue@3.5.18(typescript@5.9.2): + dependencies: + '@vue/compiler-dom': 3.5.18 + '@vue/compiler-sfc': 3.5.18 + '@vue/runtime-dom': 3.5.18 + '@vue/server-renderer': 3.5.18(vue@3.5.18(typescript@5.9.2)) + '@vue/shared': 3.5.18 + optionalDependencies: + typescript: 5.9.2 + + wait-port@1.1.0: + dependencies: + chalk: 4.1.2 + commander: 9.5.0 + debug: 4.4.1(supports-color@10.1.0) + transitivePeerDependencies: + - supports-color + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + web-streams-polyfill@3.3.3: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + when-exit@2.1.4: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + + windows-release@6.1.0: + dependencies: + execa: 8.0.1 + + winston-transport@4.9.0: + dependencies: + logform: 2.7.0 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + + winston@3.17.0: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.6 + is-stream: 2.0.1 + logform: 2.7.0 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.5.0 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.9.0 + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + ws@8.18.3: {} + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.0 + + xdg-basedir@5.1.0: {} + + xss@1.0.15: + dependencies: + commander: 2.20.3 + cssfilter: 0.0.10 + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@5.0.0: {} + + yaml@2.8.1: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yn@3.1.1: {} + + yocto-queue@1.2.1: {} + + zip-stream@6.0.1: + dependencies: + archiver-utils: 5.0.2 + compress-commons: 6.0.2 + readable-stream: 4.7.0 + + zod@3.25.76: {} + + zod@4.0.15: {} + + zwitch@2.0.4: {} diff --git a/website/prettier.config.js b/website/prettier.config.js index a1a3f12f..ac45842c 100644 --- a/website/prettier.config.js +++ b/website/prettier.config.js @@ -1,9 +1,13 @@ -module.exports = { +/** + * @see https://prettier.io/docs/configuration + * @type {import("prettier").Config} + */ +const config = { trailingComma: 'none', singleQuote: true, overrides: [ { - files: ['*.md', '*.mdx'], + files: ['*.md'], options: { printWidth: 80, proseWrap: 'always' @@ -11,3 +15,5 @@ module.exports = { } ] }; + +export default config; diff --git a/website/sidebars.ts b/website/sidebars.ts deleted file mode 100644 index ed60b58e..00000000 --- a/website/sidebars.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { SidebarsConfig } from '@docusaurus/plugin-content-docs'; - -export default { - taskSidebar: [ - { - type: 'autogenerated', - dirName: '.' - }, - { - type: 'html', - value: '' - } - ], -} satisfies SidebarsConfig; diff --git a/website/blog/2024-05-09-any-variables.mdx b/website/src/blog/any-variables.md similarity index 80% rename from website/blog/2024-05-09-any-variables.mdx rename to website/src/blog/any-variables.md index 755cac9e..cb10bc73 100644 --- a/website/blog/2024-05-09-any-variables.mdx +++ b/website/src/blog/any-variables.md @@ -1,15 +1,13 @@ --- title: Any Variables -description: Task variables are no longer limited to strings! -slug: any-variables -authors: [pd93] -tags: [experiments, variables] -image: https://i.imgur.com/mErPwqL.png -hide_table_of_contents: false +author: pd93 +date: 2024-05-09 +outline: deep --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +# Any Variables + + Task has always had variables, but even though you were able to define them using different YAML types, they would always be converted to strings by Task. @@ -18,8 +16,6 @@ simple problems. Starting from [v3.37.0][v3.37.0], this is no longer the case! Task now supports most variable types, including **booleans**, **integers**, **floats** and **arrays**! -{/* truncate */} - ## What's the big deal? These changes allow you to use variables in a much more natural way and opens up @@ -31,10 +27,9 @@ some of the examples below for some inspiration. No more comparing strings to "true" or "false". Now you can use actual boolean values in your templates: - - +::: code-group -```yaml +```yaml [Before] version: 3 tasks: @@ -45,10 +40,7 @@ tasks: - '{{if eq .BOOL "true"}}echo foo{{end}}' ``` - - - -```yaml +```yaml [After] version: 3 tasks: @@ -59,8 +51,7 @@ tasks: - '{{if .BOOL}}echo foo{{end}}' # <-- No need to compare to "true" ``` - - +::: ### Arithmetic @@ -110,10 +101,9 @@ to specify the delimiter. However, we have now added support for looping over "collection-type" variables using the `for` keyword, so now you are able to loop over list variables directly: - - +::: code-group -```yaml +```yaml [Before] version: 3 tasks: @@ -127,10 +117,7 @@ tasks: cmd: echo {{.ITEM}} ``` - - - -```yaml +```yaml [After] version: 3 tasks: @@ -143,8 +130,7 @@ tasks: cmd: echo {{.ITEM}} ``` - - +::: ## What about maps? @@ -154,20 +140,9 @@ at once, we have released support for all other variable types and we will continue working on map support in the new "[Map Variables][map-variables]" experiment. -:::note - -If you were previously using maps with the Any Variables experiment and wish to -continue using them, you will need to enable the new [Map Variables -experiment][map-variables] instead. - -::: - We're looking for feedback on a couple of different proposals, so please give them a go and let us know what you think. :pray: -{/* prettier-ignore-start */} [v3.37.0]: https://github.com/go-task/task/releases/tag/v3.37.0 [slim-sprig-math]: https://go-task.github.io/slim-sprig/math.html [slim-sprig-list]: https://go-task.github.io/slim-sprig/lists.html -[map-variables]: /experiments/map-variables -{/* prettier-ignore-end */} diff --git a/website/src/blog/index.md b/website/src/blog/index.md new file mode 100644 index 00000000..0e84b85c --- /dev/null +++ b/website/src/blog/index.md @@ -0,0 +1,22 @@ +--- +title: Blog +description: Latest news and updates from the Task team +--- + + + + diff --git a/website/blog/2023-09-02-introducing-experiments.mdx b/website/src/blog/task-in-2023.md similarity index 87% rename from website/blog/2023-09-02-introducing-experiments.mdx rename to website/src/blog/task-in-2023.md index bcd7279e..78797d08 100644 --- a/website/blog/2023-09-02-introducing-experiments.mdx +++ b/website/src/blog/task-in-2023.md @@ -2,13 +2,15 @@ title: Introducing Experiments description: A look at where task is, where it's going and how we're going to get there. -slug: task-in-2023 -authors: [pd93] -tags: [experiments, breaking-changes, roadmap, v4] -image: https://i.imgur.com/mErPwqL.png -hide_table_of_contents: false +author: pd93 +date: 2024-05-09 +outline: deep --- +# Introducing Experiments + + + Lately, Task has been growing extremely quickly and I've found myself thinking a lot about the future of the project and how we continue to evolve and grow. I'm not much of a writer, but I think one of the things we could do better is to @@ -16,19 +18,17 @@ communicate these kinds of thoughts to the community. So, with that in mind, this is the first (hopefully of many) blog posts talking about Task and what we're up to. -{/* truncate */} - ## :calendar: So, what have we been up to? -Over the past 12 months or so, [@andreynering] (Author and maintainer of the -project) and I ([@pd93]) have been working in our spare time to maintain and +Over the past 12 months or so, @andreynering (Author and maintainer of the +project) and I (@pd93) have been working in our spare time to maintain and improve v3 of Task and we've made some amazing progress. Here are just some of the things we've released in that time: - An official [extension for VS Code][vscode-task]. -- Internal Tasks ([#818](https://github.com/go-task/task/pull/818)). -- Task aliases ([#879](https://github.com/go-task/task/pull/879)). -- Looping over tasks ([#1220](https://github.com/go-task/task/pull/1200)). +- Internal Tasks (#818). +- Task aliases (#879). +- Looping over tasks (#1220). - A series of refactors to the core codebase to make it more maintainable and extensible. - Loads of bug fixes and improvements. @@ -38,14 +38,13 @@ the things we've released in that time: - And much, much more! :sparkles: We're also working on adding some really exciting and highly requested features -to Task such as having the ability to run remote Taskfiles -([#1317](https://github.com/go-task/task/issues/1317)). +to Task such as having the ability to run remote Taskfiles (#1317). None of this would have been possible without the [150 or so (and growing) contributors][contributors] to the project, numerous sponsors and a passionate community of users. Together we have more than doubled the number of GitHub stars to over 8400 :star: since the beginning of 2022 and this continues to -accelerate. We can't thank you all enough for your help and support! :rocket: +accelerate. We can't thank you all enough for your help and support! 🚀 [![Star History Chart](https://api.star-history.com/svg?repos=go-task/task&type=Date)](https://star-history.com/#go-task/task&Date) @@ -71,7 +70,7 @@ commitment to make. Smaller, more frequent major releases are also a significant inconvenience for users as they have to constantly keep up-to-date with our breaking changes. Fortunately, there is a better way. -## What's going to change? :monocle: +## What's going to change? :monocle_face: Going forwards, breaking changes will be allowed into _minor_ versions of Task as "experimental features". To access these features users will need opt-in by @@ -122,14 +121,11 @@ I plan to write more of these blog posts in the future on a variety of Task-related topics, so make sure to check in occasionally and see what we're up to! -{/* prettier-ignore-start */} [vscode-task]: https://github.com/go-task/vscode-task [crowdin]: https://crowdin.com [contributors]: https://github.com/go-task/task/graphs/contributors [semver]: https://semver.org [breaking-change-proposal]: https://github.com/go-task/task/discussions/1191 -[@andreynering]: https://github.com/andreynering -[@pd93]: https://github.com/pd93 [experiments]: https://taskfile.dev/experiments [deprecations]: https://taskfile.dev/deprecations [deprecate-version-2-schema]: https://github.com/go-task/task/issues/1197 @@ -139,4 +135,3 @@ to! [experiments-project]: https://github.com/orgs/go-task/projects/1 [gentle-force-experiment]: https://github.com/go-task/task/issues/1200 [remote-taskfiles-experiment]: https://github.com/go-task/task/issues/1317 -{/* prettier-ignore-end */} diff --git a/website/src/components/.keep b/website/src/components/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/website/src/css/carbon.css b/website/src/css/carbon.css deleted file mode 100644 index 312343e9..00000000 --- a/website/src/css/carbon.css +++ /dev/null @@ -1,65 +0,0 @@ -#carbonads * { - margin: initial; - padding: initial; -} -#carbonads { - display: flex; - max-width: 330px; - background-color: hsl(0, 0%, 98%); - box-shadow: 0 1px 4px 1px hsla(0, 0%, 0%, 0.1); - z-index: 100; -} -#carbonads a { - color: inherit; - text-decoration: none; -} -#carbonads a:hover { - color: inherit; -} -#carbonads span { - position: relative; - display: block; - overflow: hidden; -} -#carbonads .carbon-wrap { - display: flex; -} -#carbonads .carbon-img { - display: block; - margin: 0; - line-height: 1; -} -#carbonads .carbon-img img { - display: block; -} -#carbonads .carbon-text { - font-size: 13px; - padding: 10px; - margin-bottom: 16px; - line-height: 1.5; - text-align: left; -} -#carbonads .carbon-poweredby { - display: block; - padding: 6px 8px; - background: #f1f1f2; - text-align: center; - text-transform: uppercase; - letter-spacing: 0.5px; - font-weight: 600; - font-size: 8px; - line-height: 1; - border-top-left-radius: 3px; - position: absolute; - bottom: 0; - right: 0; -} - -[data-theme='dark'] #carbonads { - background-color: hsl(0, 0%, 35%); - box-shadow: 0 1px 4px 1px hsl(0, 0%, 55%); -} - -[data-theme='dark'] #carbonads .carbon-poweredby { - background-color: hsl(0, 0%, 55%); -} diff --git a/website/src/css/custom.css b/website/src/css/custom.css deleted file mode 100644 index 293a8379..00000000 --- a/website/src/css/custom.css +++ /dev/null @@ -1,123 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,400;0,700;1,400;1,700&family=Roboto:ital,wght@0,400;0,700;1,400;1,700&display=swap'); - -:root { - --ifm-font-family-base: Roboto, system-ui, -apple-system, Segoe UI, Ubuntu, Cantarell, Noto Sans, sans-serif, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif; - --ifm-font-family-monospace: 'Roboto Mono', SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; - - --ifm-color-primary: #43ABA2 ; - --ifm-color-primary-dark: #3AB2A6; - --ifm-color-primary-darker: #32B8AB; - --ifm-color-primary-darkest: #29BEB0; - --ifm-color-primary-light: #4CA59D; - --ifm-color-primary-lighter: #559F98; - --ifm-color-primary-lightest: #5D9993; - --ifm-code-font-size: 95%; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); - - --ifm-navbar-link-color: #fffdf9; - --ifm-navbar-link-hover-color: #43aba2; -} -.menu__link--sublist.menu__link--active, -.menu__link--sublist.menu__link--active:hover { - background-color: #43aba2 !important; -} - -[data-theme='light'] { - --ifm-background-color: #fffdf9; - --ifm-background-surface-color: #2b2d31; - --ifm-color-primary: #43aba2; - --ifm-dropdown-link-color: #fffdf9; - --ifm-link-color: #43aba2; - --ifm-breadcrumb-color-active: #2b2d31; -} - -.menu, .navbar, .navbar-sidebar { - --ifm-menu-color-background-active: #43aba2; - --ifm-menu-color-active: #fffdf9; -} -.navbar, .navbar-sidebar { - --ifm-menu-color: #fffdf9; -} -.navbar-sidebar__back { - color: #fffdf9; -} - -[data-theme='light'] svg[class*="lightToggleIcon"], -[data-theme='light'] .navbar__toggle { - color: #fffdf9 !important; -} - -[data-theme='light'] div[class*="codeBlockTitle"], -[data-theme='light'] code[class*="codeBlockLines"] { - background-color: #f7f5f1 !important; -} - -[data-theme='dark'], .footer--dark { - --ifm-background-color: #242526 !important; - --ifm-background-surface-color: #2b2d31 !important; - --ifm-footer-background-color: #2b2d31 !important; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); -} - -.code-block--max-width { - width: 100%; -} - -#carbonads { - margin-top: 30px; - margin-right: 10px; -} - -.gold-sponsors { - display: flex; - justify-content: center; -} - -.gold-sponsors table img { - width: 200px; -} - -.menu__list-item:has(.header-icon-link) { - float: left; -} - -.menu__list-item:has(.header-icon-link) .header-icon-link { - margin-top: 10px; -} - -.header-icon-link::before { - content: ''; - width: 24px; - height: 24px; - display: flex; - background-color: var(--ifm-navbar-link-color); - transition: background-color var(--ifm-transition-fast) - var(--ifm-transition-timing-default); - mask-size: contain; - mask-repeat: no-repeat; - mask-position: center; -} - -.header-icon-link:hover::before { - background-color: var(--ifm-navbar-link-hover-color); -} - -.icon-github::before { - mask-image: url('/img/icon-github.svg'); -} - -.icon-discord::before { - mask-image: url('/img/icon-discord.svg'); -} - -.icon-mastodon::before { - mask-image: url('/img/icon-mastodon.svg'); -} - -.icon-twitter::before { - mask-image: url('/img/icon-twitter.svg'); -} - -.icon-bluesky::before { - mask-image: url('/img/icon-bluesky.svg'); -} diff --git a/website/docs/changelog.mdx b/website/src/docs/changelog.md similarity index 70% rename from website/docs/changelog.mdx rename to website/src/docs/changelog.md index 3762f9b6..6bbd2137 100644 --- a/website/docs/changelog.mdx +++ b/website/src/docs/changelog.md @@ -1,6 +1,6 @@ --- -slug: /changelog/ -sidebar_position: 14 +title: Changelog +outline: deep --- # Changelog @@ -92,8 +92,8 @@ Reverted the changes made in #2113 and #2186 that affected the - The default taskfile (output when using the `--init` flag) is now an embedded file in the binary instead of being stored in the code (#2112 by @pd93). - Improved the way we report the Task version when using the `--version` flag or - `{{.TASK_VERSION}}` variable. This should now be more consistent and easier - for package maintainers to use (#2131 by @pd93). + `{{.TASK_VERSION}}` variable. This should now be more + consistent and easier for package maintainers to use (#2131 by @pd93). - Fixed a bug where globstar (`**`) matching in `sources` only resolved the first result (#2073, #2075 by @pd93). - Fixed a bug where sorting tasks by "none" would use the default sorting @@ -107,7 +107,7 @@ Reverted the changes made in #2113 and #2186 that affected the - Fix Fish completions when `--global` (`-g`) is given (#2134 by @atusy). - Fixed variables not available when using `defer:` (#1909, #2173 by @vmaerten). -#### Package API +### Package API - The [`Executor`](https://pkg.go.dev/github.com/go-task/task/v3#Executor) now uses the functional options pattern (#2085, #2147, #2148 by @pd93). @@ -164,7 +164,7 @@ Reverted the changes made in #2113 and #2186 that affected the used, all other variables become unavailable in the templating system within the include (#2092 by @vmaerten). -#### Package API +### Package API Unlike our CLI tool, [Task's package API is not currently stable](https://taskfile.dev/reference/package). @@ -500,360 +500,7 @@ stabilize the API in the future. #121 now tracks this piece of work. - The [Remote Taskfiles experiment](https://taskfile.dev/experiments/remote-taskfiles) now prefers remote files over cached ones by default (#1317, #1345 by @pd93). -- Added `--timeout` flag to the - [Remote Taskfiles experiment](https://taskfile.dev/experiments/remote-taskfiles) - (#1317, #1345 by @pd93). -- Fix bug where dynamic `vars:` and `env:` were being executed when they should - actually be skipped by `platforms:` (#1273, #1377 by @andreynering). -- Fix `schema.json` to make `silent` valid in `cmds` that use `for` (#1385, - #1386 by @iainvm). -- Add new `--no-status` flag to skip expensive status checks when running - `task --list --json` (#1348, #1368 by @amancevice). - -## v3.31.0 - 2023-10-07 - -- Enabled the `--yes` flag for the - [Remote Taskfiles experiment](https://taskfile.dev/experiments/remote-taskfiles) - (#1317, #1344 by @pd93). -- Add ability to set `watch: true` in a task to automatically run it in watch - mode (#231, #1361 by @andreynering). -- Fixed a bug on the watch mode where paths that contained `.git` (like - `.github`), for example, were also being ignored (#1356 by @butuzov). -- Fixed a nil pointer error when running a Taskfile with no contents (#1341, - #1342 by @pd93). -- Added a new [exit code](https://taskfile.dev/api/#exit-codes) (107) for when a - Taskfile does not contain a schema version (#1342 by @pd93). -- Increased limit of maximum task calls from 100 to 1000 for now, as some people - have been reaching this limit organically now that we have loops. This check - exists to detect recursive calls, but will be removed in favor of a better - algorithm soon (#1321, #1332). -- Fixed templating on descriptions on `task --list` (#1343 by @blackjid). -- Fixed a bug where precondition errors were incorrectly being printed when task - execution was aborted (#1337, #1338 by @sylv-io). - -## v3.30.1 - 2023-09-14 - -- Fixed a regression where some special variables weren't being set correctly - (#1331, #1334 by @pd93). - -## v3.30.0 - 2023-09-13 - -- Prep work for Remote Taskfiles (#1316 by @pd93). -- Added the - [Remote Taskfiles experiment](https://taskfile.dev/experiments/remote-taskfiles) - as a draft (#1152, #1317 by @pd93). -- Improve performance of content checksumming on `sources:` by replacing md5 - with [XXH3](https://xxhash.com/) which is much faster. This is a soft breaking - change because checksums will be invalidated when upgrading to this release - (#1325 by @ReillyBrogan). - -## v3.29.1 - 2023-08-26 - -- Update to Go 1.21 (bump minimum version to 1.20) (#1302 by @pd93) -- Fix a missing a line break on log when using `--watch` mode (#1285, #1297 by - @FilipSolich). -- Fix `defer` on JSON Schema (#1288 by @calvinmclean and @andreynering). -- Fix bug in usage of special variables like `{{.USER_WORKING_DIR}}` in - combination with `includes` (#1046, #1205, #1250, #1293, #1312, #1274 by - @andarto, #1309 by @andreynering). -- Fix bug on `--status` flag. Running this flag should not have side-effects: it - should not update the checksum on `.task`, only report its status (#1305, - #1307 by @visciang, #1313 by @andreynering). - -## v3.28.0 - 2023-07-24 - -- Added the ability to - [loop over commands and tasks](https://taskfile.dev/usage/#looping-over-values) - using `for` (#82, #1220 by @pd93). -- Fixed variable propagation in multi-level includes (#778, #996, #1256 by - @hudclark). -- Fixed a bug where the `--exit-code` code flag was not returning the correct - exit code when calling commands indirectly (#1266, #1270 by @pd93). -- Fixed a `nil` panic when a dependency was commented out or left empty (#1263 - by @neomantra). - -## v3.27.1 - 2023-06-30 - -- Fix panic when a `.env` directory (not file) is present on current directory - (#1244, #1245 by @pd93). - -## v3.27.0 - 2023-06-29 - -- Allow Taskfiles starting with lowercase characters (#947, #1221 by @pd93). - - e.g. `taskfile.yml`, `taskfile.yaml`, `taskfile.dist.yml` & - `taskfile.dist.yaml` -- Bug fixes were made to the - [npm installation method](https://taskfile.dev/installation/#npm). (#1190, by - @sounisi5011). -- Added the - [gentle force experiment](https://taskfile.dev/experiments/gentle-force) as a - draft (#1200, #1216 by @pd93). -- Added an `--experiments` flag to allow you to see which experiments are - enabled (#1242 by @pd93). -- Added ability to specify which variables are required in a task (#1203, #1204 - by @benc-uk). - -## v3.26.0 - 2023-06-10 - -- Only rewrite checksum files in `.task` if the checksum has changed (#1185, - #1194 by @deviantintegral). -- Added [experiments documentation](https://taskfile.dev/experiments) to the - website (#1198 by @pd93). -- Deprecated `version: 2` schema. This will be removed in the next major release - (#1197, #1198, #1199 by @pd93). -- Added a new `prompt:` prop to set a warning prompt to be shown before running - a potential dangerous task (#100, #1163 by @MaxCheetham, - [Documentation](https://taskfile.dev/usage/#warning-prompts)). -- Added support for single command task syntax. With this change, it's now - possible to declare just `cmd:` in a task, avoiding the more complex - `cmds: []` when you have only a single command for that task (#1130, #1131 by - @timdp). - -## v3.25.0 - 2023-05-22 - -- Support `silent:` when calling another tasks (#680, #1142 by @danquah). -- Improve PowerShell completion script (#1168 by @trim21). -- Add more languages to the website menu and show translation progress - percentage (#1173 by @misitebao). -- Starting on this release, official binaries for FreeBSD will be available to - download (#1068 by @andreynering). -- Fix some errors being unintendedly suppressed (#1134 by @clintmod). -- Fix a nil pointer error when `version` is omitted from a Taskfile (#1148, - #1149 by @pd93). -- Fix duplicate error message when a task does not exists (#1141, #1144 by - @pd93). - -## v3.24.0 - 2023-04-15 - -- Fix Fish shell completion for tasks with aliases (#1113 by @patricksjackson). -- The default branch was renamed from `master` to `main` (#1049, #1048 by - @pd93). -- Fix bug where "up-to-date" logs were not being omitted for silent tasks (#546, - #1107 by @danquah). -- Add `.hg` (Mercurial) to the list of ignored directories when using `--watch` - (#1098 by @misery). -- More improvements to the release tool (#1096 by @pd93). -- Enforce [gofumpt](https://github.com/mvdan/gofumpt) linter (#1099 by @pd93) -- Add `--sort` flag for use with `--list` and `--list-all` (#946, #1105 by - @pd93). -- Task now has [custom exit codes](https://taskfile.dev/api/#exit-codes) - depending on the error (#1114 by @pd93). - -## v3.23.0 - 2023-03-26 - -Task now has an -[official extension for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=task.vscode-task) -contributed by @pd93! :tada: The extension is maintained in a -[new repository](https://github.com/go-task/vscode-task) under the `go-task` -organization. We're looking to gather feedback from the community so please give -it a go and let us know what you think via a -[discussion](https://github.com/go-task/vscode-task/discussions), -[issue](https://github.com/go-task/vscode-task/issues) or on our -[Discord](https://discord.gg/6TY36E39UK)! - -> **NOTE:** The extension _requires_ v3.23.0 to be installed in order to work. - -- The website was integrated with - [Crowdin](https://crowdin.com/project/taskfile) to allow the community to - contribute with translations! [Chinese](https://taskfile.dev/zh-Hans/) is the - first language available (#1057, #1058 by @misitebao). -- Added task location data to the `--json` flag output (#1056 by @pd93) -- Change the name of the file generated by `task --init` from `Taskfile.yaml` to - `Taskfile.yml` (#1062 by @misitebao). -- Added new `splitArgs` template function - (`{{splitArgs "foo bar 'foo bar baz'"}}`) to ensure string is split as - arguments (#1040, #1059 by @dhanusaputra). -- Fix the value of `{{.CHECKSUM}}` variable in status (#1076, #1080 by @pd93). -- Fixed deep copy implementation (#1072 by @pd93) -- Created a tool to assist with releases (#1086 by @pd93). - -## v3.22.0 - 2023-03-10 - -- Add a brand new `--global` (`-g`) flag that will run a Taskfile from your - `$HOME` directory. This is useful to have automation that you can run from - anywhere in your system! - ([Documentation](https://taskfile.dev/usage/#running-a-global-taskfile), #1029 - by @andreynering). -- Add ability to set `error_only: true` on the `group` output mode. This will - instruct Task to only print a command output if it returned with a non-zero - exit code (#664, #1022 by @jaedle). -- Fixed bug where `.task/checksum` file was sometimes not being created when - task also declares a `status:` (#840, #1035 by @harelwa, #1037 by @pd93). -- Refactored and decoupled fingerprinting from the main Task executor (#1039 by - @pd93). -- Fixed deadlock issue when using `run: once` (#715, #1025 by - @theunrepentantgeek). - -## v3.21.0 - 2023-02-22 - -- Added new `TASK_VERSION` special variable (#990, #1014 by @ja1code). -- Fixed a bug where tasks were sometimes incorrectly marked as internal (#1007 - by @pd93). -- Update to Go 1.20 (bump minimum version to 1.19) (#1010 by @pd93) -- Added environment variable `FORCE_COLOR` support to force color output. Useful - for environments without TTY (#1003 by @automation-stack) - -## v3.20.0 - 2023-01-14 - -- Improve behavior and performance of status checking when using the `timestamp` - mode (#976, #977 by @aminya). -- Performance optimizations were made for large Taskfiles (#982 by @pd93). -- Add ability to configure options for the - [`set`](https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html) - and - [`shopt`](https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html) - builtins (#908, #929 by @pd93, - [Documentation](http://taskfile.dev/usage/#set-and-shopt)). -- Add new `platforms:` attribute to `task` and `cmd`, so it's now possible to - choose in which platforms that given task or command will be run on. Possible - values are operating system (GOOS), architecture (GOARCH) or a combination of - the two. Example: `platforms: [linux]`, `platforms: [amd64]` or - `platforms: [linux/amd64]`. Other platforms will be skipped (#978, #980 by - @leaanthony). - -## v3.19.1 - 2022-12-31 - -- Small bug fix: closing `Taskfile.yml` once we're done reading it (#963, #964 - by @HeCorr). -- Fixes a bug in v2 that caused a panic when using a `Taskfile_{{OS}}.yml` file - (#961, #971 by @pd93). -- Fixed a bug where watch intervals set in the Taskfile were not being respected - (#969, #970 by @pd93) -- Add `--json` flag (alias `-j`) with the intent to improve support for code - editors and add room to other possible integrations. This is basic for now, - but we plan to add more info in the near future (#936 by @davidalpert, #764). - -## v3.19.0 - 2022-12-05 - -- Installation via npm now supports [pnpm](https://pnpm.io/) as well - ([go-task/go-npm#2](https://github.com/go-task/go-npm/issues/2), - [go-task/go-npm#3](https://github.com/go-task/go-npm/pull/3)). -- It's now possible to run Taskfiles from subdirectories! A new - `USER_WORKING_DIR` special variable was added to add even more flexibility for - monorepos (#289, #920). -- Add task-level `dotenv` support (#389, #904). -- It's now possible to use global level variables on `includes` (#942, #943). -- The website got a brand new - [translation to Chinese](https://task-zh.readthedocs.io/zh_CN/latest/) by - [@DeronW](https://github.com/DeronW). Thanks! - -## v3.18.0 - 2022-11-12 - -- Show aliases on `task --list --silent` (`task --ls`). This means that aliases - will be completed by the completion scripts (#919). -- Tasks in the root Taskfile will now be displayed first in - `--list`/`--list-all` output (#806, #890). -- It's now possible to call a `default` task in an included Taskfile by using - just the namespace. For example: `docs:default` is now automatically aliased - to `docs` (#661, #815). - -## v3.17.0 - 2022-10-14 - -- Add a "Did you mean ...?" suggestion when a task does not exits another one - with a similar name is found (#867, #880). -- Now YAML parse errors will print which Taskfile failed to parse (#885, #887). -- Add ability to set `aliases` for tasks and namespaces (#268, #340, #879). -- Improvements to Fish shell completion (#897). -- Added ability to set a different watch interval by setting `interval: '500ms'` - or using the `--interval=500ms` flag (#813, #865). -- Add colored output to `--list`, `--list-all` and `--summary` flags (#845, - #874). -- Fix unexpected behavior where `label:` was being shown instead of the task - name on `--list` (#603, #877). - -## v3.16.0 - 2022-09-29 - -- Add `npm` as new installation method: `npm i -g @go-task/cli` (#870, #871, - [npm package](https://www.npmjs.com/package/@go-task/cli)). -- Add support to marking tasks and includes as internal, which will hide them - from `--list` and `--list-all` (#818). - -## v3.15.2 - 2022-09-08 - -- Fix error when using variable in `env:` introduced in the previous release - (#858, #866). -- Fix handling of `CLI_ARGS` (`--`) in Bash completion (#863). -- On zsh completion, add ability to replace `--list-all` with `--list` as - already possible on the Bash completion (#861). - -## v3.15.0 - 2022-09-03 - -- Add new special variables `ROOT_DIR` and `TASKFILE_DIR`. This was a highly - requested feature (#215, #857, - [Documentation](https://taskfile.dev/api/#special-variables)). -- Follow symlinks on `sources` (#826, #831). -- Improvements and fixes to Bash completion (#835, #844). - -## v3.14.1 - 2022-08-03 - -- Always resolve relative include paths relative to the including Taskfile - (#822, #823). -- Fix ZSH and PowerShell completions to consider all tasks instead of just the - public ones (those with descriptions) (#803). - -## v3.14.0 - 2022-07-08 - -- Add ability to override the `.task` directory location with the - `TASK_TEMP_DIR` environment variable. -- Allow to override Task colors using environment variables: `TASK_COLOR_RESET`, - `TASK_COLOR_BLUE`, `TASK_COLOR_GREEN`, `TASK_COLOR_CYAN`, `TASK_COLOR_YELLOW`, - `TASK_COLOR_MAGENTA` and `TASK_COLOR_RED` (#568, #792). -- Fixed bug when using the `output: group` mode where STDOUT and STDERR were - being print in separated blocks instead of in the right order (#779). -- Starting on this release, ARM architecture binaries are been released to Snap - as well (#795). -- i386 binaries won't be available anymore on Snap because Ubuntu removed the - support for this architecture. -- Upgrade mvdan.cc/sh, which fixes a bug with associative arrays (#785, - [mvdan/sh#884](https://github.com/mvdan/sh/issues/884), - [mvdan/sh#893](https://github.com/mvdan/sh/pull/893)). - -## v3.13.0 - 2022-06-13 - -- Added `-n` as an alias to `--dry` (#776, #777). -- Fix behavior of interrupt (SIGINT, SIGTERM) signals. Task will now give time - for the processes running to do cleanup work (#458, #479, #728, #769). -- Add new `--exit-code` (`-x`) flag that will pass-through the exit form the - command being ran (#755). - -## v3.12.1 - 2022-05-10 - -- Fixed bug where, on Windows, variables were ending with `\r` because we were - only removing the final `\n` but not `\r\n` (#717). - -## v3.12.0 - 2022-03-31 - -- The `--list` and `--list-all` flags can now be combined with the `--silent` - flag to print the task names only, without their description (#691). -- Added support for multi-level inclusion of Taskfiles. This means that included - Taskfiles can also include other Taskfiles. Before this was limited to one - level (#390, #623, #656). -- Add ability to specify vars when including a Taskfile. - [Check out the documentation](https://taskfile.dev/#/usage?id=vars-of-included-taskfiles) - for more information (#677). - -## v3.11.0 - 2022-02-19 - -- Task now supports printing begin and end messages when using the `group` - output mode, useful for grouping tasks in CI systems. - [Check out the documentation](http://taskfile.dev/#/usage?id=output-syntax) - for more information (#647, #651). -- Add `Taskfile.dist.yml` and `Taskfile.dist.yaml` to the supported file name - list. - [Check out the documentation](https://taskfile.dev/#/usage?id=supported-file-names) - for more information (#498, #666). - -## v3.10.0 - 2022-01-04 - -- A new `--list-all` (alias `-a`) flag is now available. It's similar to the - exiting `--list` (`-l`) but prints all tasks, even those without a description - (#383, #401). -- It's now possible to schedule cleanup commands to run once a task finishes - with the `defer:` keyword - ([Documentation](https://taskfile.dev/#/usage?id=doing-task-cleanup-with-defer), - #475, #626). -- Remove long deprecated and undocumented `$` variable prefix and `^` command - prefix (#642, #644, #645). + variable prefix and `^` command prefix (#642, #644, #645). - Add support for `.yaml` extension (as an alternative to `.yml`). This was requested multiple times throughout the years. Enjoy! (#183, #184, #369, #584, #621). @@ -871,8 +518,8 @@ it a go and let us know what you think via a - Add logging in verbose mode for when a task starts and finishes (#533, #588). - Fix an issue with preconditions and context errors (#597, #598). -- Quote each `{{.CLI_ARGS}}` argument to prevent one with spaces to become many - (#613). +- Quote each `{{.CLI_ARGS}}` argument to prevent one with + spaces to become many (#613). - Fix nil pointer when `cmd:` was left empty (#612, #614). - Upgrade [mvdan/sh](https://github.com/mvdan/sh) which contains two relevant fixes: @@ -888,8 +535,8 @@ it a go and let us know what you think via a ## v3.9.0 - 2021-10-02 - A new `shellQuote` function was added to the template system - (`{{shellQuote "a string"}}`) to ensure a string is safe for use in shell - ([mvdan/sh#727](https://github.com/mvdan/sh/pull/727), + (`{{shellQuote "a string"}}`) to ensure a string is safe + for use in shell ([mvdan/sh#727](https://github.com/mvdan/sh/pull/727), [mvdan/sh#737](https://github.com/mvdan/sh/pull/737), [Documentation](https://pkg.go.dev/mvdan.cc/sh/v3@v3.4.0/syntax#Quote)) - In this version [mvdan.cc/sh](https://github.com/mvdan/sh) was upgraded with diff --git a/website/docs/community.mdx b/website/src/docs/community.md similarity index 87% rename from website/docs/community.mdx rename to website/src/docs/community.md index a0d49b7c..4b91bc70 100644 --- a/website/docs/community.mdx +++ b/website/src/docs/community.md @@ -1,6 +1,9 @@ --- -slug: /community/ -sidebar_position: 10 +title: Community +description: + Task community contributions, installation methods, and integrations + maintained by third parties +outline: deep --- # Community @@ -13,7 +16,7 @@ thankful for everyone that helps me to improve the overall experience. Many of our integrations are contributed and maintained by the community. You can view the full list of community integrations -[here](/integrations#community-integrations). +[here](./integrations.md#community-integrations). ## Installation methods diff --git a/website/docs/contributing.mdx b/website/src/docs/contributing.md similarity index 80% rename from website/docs/contributing.mdx rename to website/src/docs/contributing.md index 62f5f659..95555225 100644 --- a/website/docs/contributing.mdx +++ b/website/src/docs/contributing.md @@ -1,6 +1,9 @@ --- -slug: /contributing/ -sidebar_position: 12 +title: Contributing +description: + Comprehensive guide for contributing to the Task project, including setup, + development, testing, and submitting PRs +outline: deep --- # Contributing @@ -8,7 +11,7 @@ sidebar_position: 12 Contributions to Task are very welcome, but we ask that you read this document before submitting a PR. -:::note +::: info This document applies to the core [Task][task] repository _and_ [Task for Visual Studio Code][vscode-task]. @@ -27,9 +30,10 @@ Studio Code][vscode-task]. you invest your time into a PR. - **Experiments** - If there is no way to make your change backward compatible then there is a procedure to introduce breaking changes into minor versions. - We call these "[experiments][experiments]". If you're intending to work on an - experiment, then please read the [experiments workflow][experiments-workflow] - document carefully and submit a proposal first. + We call these "[experiments](./experiments/index.md)". If you're intending to work on + an experiment, then please read the + [experiments workflow](./experiments/index.md#workflow) document carefully and submit a + proposal first. ## 1. Setup @@ -38,7 +42,7 @@ Studio Code][vscode-task]. - **Node.js** - [Node.js][nodejs] is used to host Task's documentation server and is required if you want to run this server locally. It is also required if you want to contribute to the Visual Studio Code extension. -- **Yarn** - [Yarn][yarn] is the Node.js package manager used by Task. +- **Pnpm** - [Pnpm][pnpm] is the Node.js package manager used by Task. ## 2. Making changes @@ -49,10 +53,11 @@ Studio Code][vscode-task]. docs][golangci-lint-docs] for a guide on how to setup your editor to auto-format your code. Any Markdown or TypeScript files should be formatted and linted by [Prettier][prettier]. This style is enforced by our CI to ensure - that we have a consistent style across the project. You can use the `task - lint` command to lint the code locally and the `task lint:fix` command to try - to automatically fix any issues that are found. You can also use the `task - fmt` command to auto-format the files if your editor doesn't do it for you. + that we have a consistent style across the project. You can use the + `task lint` command to lint the code locally and the `task lint:fix` command + to try to automatically fix any issues that are found. You can also use the + `task fmt` command to auto-format the files if your editor doesn't do it for + you. - **Documentation** - Ensure that you add/update any relevant documentation. See the [updating documentation](#updating-documentation) section below. - **Tests** - Ensure that you add/update any relevant tests and that all tests @@ -74,24 +79,23 @@ install the extension. ### Updating documentation -Task uses [Docusaurus][docusaurus] to host a documentation server. The code for +Task uses [Vitepress][vitepress] to host a documentation server. The code for this is located in the core Task repository. This can be setup and run locally -by using `task website` (requires `nodejs` & `yarn`). All content is written in -[MDX][mdx] (an extension of Markdown) and is located in the `website/docs` -directory. All Markdown documents should have an 80 character line wrap limit -(enforced by Prettier). +by using `task website` (requires `nodejs` & `pnpm`). All content is written in +Markdown and is located in the `website/src` directory. All Markdown documents +should have an 80 character line wrap limit (enforced by Prettier). -When making a change, consider whether a change to the [Usage Guide](/usage) is +When making a change, consider whether a change to the [Usage Guide](/docs/guide) is necessary. This document contains descriptions and examples of how to use Task features. If you're adding a new feature, try to find an appropriate place to add a new section. If you're updating an existing feature, ensure that the documentation and any examples are up-to-date. Ensure that any examples follow -the [Taskfile Styleguide](/styleguide). +the [Taskfile Styleguide](./styleguide.md). -If you added a new command or flag, ensure that you add it to the [CLI -Reference](/reference/cli). New fields also need to be added to the [Schema -Reference](/reference/schema) and [JSON Schema][json-schema]. The descriptions -for fields in the docs and the schema should match. +If you added a new command or flag, ensure that you add it to the +[CLI Reference](./reference/cli.md). New fields also need to be added to the +[Schema Reference](./reference/schema.md) and [JSON Schema][json-schema]. The +descriptions for fields in the docs and the schema should match. ### Writing tests @@ -143,7 +147,7 @@ contributions. All kinds of contributions are welcome, whether its a typo fix or a shiny new feature. You can also contribute by upvoting/commenting on issues, helping to -answer questions or contributing to other [community projects](/community). +answer questions or contributing to other [community projects](./community.md). > I'm stuck, where can I get help? @@ -152,9 +156,6 @@ If you have questions, feel free to ask them in the `#help` forum channel on our --- -{/* prettier-ignore-start */} -[experiments]: /experiments -[experiments-workflow]: /experiments#workflow [task]: https://github.com/go-task/task [vscode-task]: https://github.com/go-task/vscode-task [go]: https://go.dev @@ -164,14 +165,15 @@ If you have questions, feel free to ask them in the `#help` forum channel on our [golangci-lint-docs]: https://golangci-lint.run/welcome/integrations/ [prettier]: https://prettier.io [nodejs]: https://nodejs.org/en/ -[yarn]: https://yarnpkg.com/ -[docusaurus]: https://docusaurus.io -[json-schema]: https://github.com/go-task/task/blob/main/website/static/schema.json +[pnpm]: https://pnpm.io/ +[vitepress]: https://vitepress.dev +[json-schema]: + https://github.com/go-task/task/blob/main/website/static/schema.json [task-open-issues]: https://github.com/go-task/task/issues [vscode-task-open-issues]: https://github.com/go-task/vscode-task/issues -[good-first-issue]: https://github.com/go-task/task/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[good-first-issue]: + https://github.com/go-task/task/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 [discord-server]: https://discord.gg/6TY36E39UK [discussion]: https://github.com/go-task/task/discussions [conventional-commits]: https://www.conventionalcommits.org [mdx]: https://mdxjs.com/ -{/* prettier-ignore-end */} diff --git a/website/versioned_docs/version-latest/deprecations/completion_scripts.mdx b/website/src/docs/deprecations/completion-scripts.md similarity index 76% rename from website/versioned_docs/version-latest/deprecations/completion_scripts.mdx rename to website/src/docs/deprecations/completion-scripts.md index fef7408b..d1cfbbc8 100644 --- a/website/versioned_docs/version-latest/deprecations/completion_scripts.mdx +++ b/website/src/docs/deprecations/completion-scripts.md @@ -1,10 +1,12 @@ --- -slug: /deprecations/completion-scripts/ +title: 'Completion Scripts' +description: Deprecation of direct completion scripts in Task’s Git directory +outline: deep --- # Completion Scripts -:::warning +::: danger This deprecation breaks the following functionality: @@ -19,7 +21,5 @@ the future as the scripts may be moved or deleted entirely. Any configuration should be updated to use the [new method for generating shell completions][completions] instead. -{/* prettier-ignore-start */} -[completions]: ../installation.mdx#setup-completions +[completions]: /docs/installation#setup-completions [task]: https://github.com/go-task/task -{/* prettier-ignore-end */} diff --git a/website/versioned_docs/version-latest/deprecations/deprecations.mdx b/website/src/docs/deprecations/index.md similarity index 83% rename from website/versioned_docs/version-latest/deprecations/deprecations.mdx rename to website/src/docs/deprecations/index.md index f09a95cb..d58ee2d3 100644 --- a/website/versioned_docs/version-latest/deprecations/deprecations.mdx +++ b/website/src/docs/deprecations/index.md @@ -1,6 +1,9 @@ --- -slug: /deprecations/ -sidebar_position: 8 +title: Deprecations +description: + Guide to deprecated features in Task and how to migrate to the new + alternatives +outline: deep --- # Deprecations diff --git a/website/versioned_docs/version-latest/deprecations/template_functions.mdx b/website/src/docs/deprecations/template-functions.md similarity index 75% rename from website/versioned_docs/version-latest/deprecations/template_functions.mdx rename to website/src/docs/deprecations/template-functions.md index 83f24198..64374188 100644 --- a/website/versioned_docs/version-latest/deprecations/template_functions.mdx +++ b/website/src/docs/deprecations/template-functions.md @@ -1,10 +1,14 @@ --- -slug: /deprecations/template-functions/ +title: 'Template Functions' +description: + Deprecation of some templating functions in Task, with guidance on their + replacements. +outline: deep --- # Template Functions -:::warning +::: danger This deprecation breaks the following functionality: diff --git a/website/src/docs/deprecations/template.md b/website/src/docs/deprecations/template.md new file mode 100644 index 00000000..b02f6676 --- /dev/null +++ b/website/src/docs/deprecations/template.md @@ -0,0 +1,24 @@ +--- +# This is a template for deprecation documentation +# Copy this page and fill in the details as necessary +title: '--- Template ---' +description: Template for documenting deprecated features in Task +draft: true # Hide in production +outline: deep +--- + +# {Name of Deprecated Feature} (#{Issue}) + +::: danger + +This deprecation breaks the following functionality: + +- {list any existing functionality that will be broken by this deprecation} +- {if there are no breaking changes, remove this admonition} + +::: + +{Short description of the feature/behavior and why it is being deprecated} + +{Short explanation of any replacement features/behaviors and how users should +migrate to it} diff --git a/website/versioned_docs/version-latest/deprecations/version_2_schema.mdx b/website/src/docs/deprecations/version-2-schema.md similarity index 89% rename from website/versioned_docs/version-latest/deprecations/version_2_schema.mdx rename to website/src/docs/deprecations/version-2-schema.md index 1011e5c9..15be1dfc 100644 --- a/website/versioned_docs/version-latest/deprecations/version_2_schema.mdx +++ b/website/src/docs/deprecations/version-2-schema.md @@ -1,10 +1,12 @@ --- -slug: /deprecations/version-2-schema/ +title: 'Version 2 Schema (#1197)' +description: Deprecation of Taskfile schema version 2 and migration to version 3 +outline: deep --- # Version 2 Schema (#1197) -:::warning +::: danger This deprecation breaks the following functionality: @@ -26,8 +28,6 @@ main branch. To use a more recent version of Task, you will need to ensure that your Taskfile uses the version 3 schema instead. A list of changes between version 2 and version 3 are available in the [Task v3 Release Notes][v3.0.0]. -{/* prettier-ignore-start */} [v3.0.0]: https://github.com/go-task/task/releases/tag/v3.0.0 [v3.33.0]: https://github.com/go-task/task/releases/tag/v3.33.0 [deprecation-notice]: https://github.com/go-task/task/issues/1197 -{/* prettier-ignore-end */} diff --git a/website/versioned_docs/version-latest/experiments/env_precedence.mdx b/website/src/docs/experiments/env-precedence.md similarity index 79% rename from website/versioned_docs/version-latest/experiments/env_precedence.mdx rename to website/src/docs/experiments/env-precedence.md index 535a676e..5df9f3ca 100644 --- a/website/versioned_docs/version-latest/experiments/env_precedence.mdx +++ b/website/src/docs/experiments/env-precedence.md @@ -1,10 +1,13 @@ --- -slug: '/experiments/env-precedence' +title: 'Env Precedence (#1038)' +description: + Experiment to change the precedence of environment variables in Task +outline: deep --- # Env Precedence (#1038) -:::caution +::: warning All experimental features are subject to breaking changes and/or removal _at any time_. We strongly recommend that you do not use these features in a production @@ -12,7 +15,7 @@ environment. They are intended for testing and feedback only. ::: -:::warning +::: danger This experiment breaks the following functionality: @@ -20,11 +23,12 @@ This experiment breaks the following functionality: ::: -:::info +::: info To enable this experiment, set the environment variable: -`TASK_X_ENV_PRECEDENCE=1`. Check out [our guide to enabling -experiments][enabling-experiments] for more information. +`TASK_X_ENV_PRECEDENCE=1`. Check out +[our guide to enabling experiments](./index.md#enabling-experiments) for more +information. ::: @@ -44,11 +48,12 @@ tasks: cmds: - echo "$KEY" ``` + Running `KEY=some task` before this experiment, the output would be `some`, but after this experiment, the output would be `other`. If you still want to get the OS variable, you can use the template function env -like follow : `{{env "OS_VAR"}}`. +like follow : `{{env "OS_VAR"}}`. ```yml version: '3' @@ -61,14 +66,12 @@ tasks: - echo "$KEY" - echo {{env "KEY"}} ``` + Running `KEY=some task`, the output would be `other` and `some`. Like other variables/envs, you can also fall back to a given value using the default template function: + ```yml MY_ENV: '{{.MY_ENV | default "fallback"}}' ``` - -{/* prettier-ignore-start */} -[enabling-experiments]: ./experiments.mdx#enabling-experiments -{/* prettier-ignore-end */} diff --git a/website/docs/experiments/gentle_force.mdx b/website/src/docs/experiments/gentle-force.md similarity index 80% rename from website/docs/experiments/gentle_force.mdx rename to website/src/docs/experiments/gentle-force.md index 5521303b..023781a0 100644 --- a/website/docs/experiments/gentle_force.mdx +++ b/website/src/docs/experiments/gentle-force.md @@ -1,10 +1,12 @@ --- -slug: /experiments/gentle-force/ +title: 'Gentle Force (#1200)' +description: Experiment to modify the behavior of the --force flag in Task +outline: deep --- # Gentle Force (#1200) -:::caution +::: warning All experimental features are subject to breaking changes and/or removal _at any time_. We strongly recommend that you do not use these features in a production @@ -12,7 +14,7 @@ environment. They are intended for testing and feedback only. ::: -:::warning +::: danger This experiment breaks the following functionality: @@ -20,11 +22,12 @@ This experiment breaks the following functionality: ::: -:::info +::: info To enable this experiment, set the environment variable: -`TASK_X_GENTLE_FORCE=1`. Check out [our guide to enabling experiments -][enabling-experiments] for more information. +`TASK_X_GENTLE_FORCE=1`. Check out +[our guide to enabling experiments](./index.md#enabling-experiments) for more +information. ::: @@ -43,7 +46,3 @@ If you want to migrate, but continue to force all dependant tasks to run, you should replace all uses of the `--force` flag with `--force-all`. Alternatively, if you want to adopt the new behavior, you can continue to use the `--force` flag as you do now! - -{/* prettier-ignore-start */} -[enabling-experiments]: ./experiments.mdx#enabling-experiments -{/* prettier-ignore-end */} diff --git a/website/versioned_docs/version-latest/experiments/experiments.mdx b/website/src/docs/experiments/index.md similarity index 82% rename from website/versioned_docs/version-latest/experiments/experiments.mdx rename to website/src/docs/experiments/index.md index f303a870..19da7a44 100644 --- a/website/versioned_docs/version-latest/experiments/experiments.mdx +++ b/website/src/docs/experiments/index.md @@ -1,14 +1,12 @@ --- -slug: /experiments/ -sidebar_position: 7 +title: Experiments +description: Guide to Task’s experimental features and how to use them +outline: deep --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - # Experiments -:::caution +::: warning All experimental features are subject to breaking changes and/or removal _at any time_. We strongly recommend that you do not use these features in a production @@ -46,37 +44,36 @@ Which method you use depends on how you intend to use the experiment: `.bashrc`, `.zshrc` etc.). This will permanently enable experimental features for your personal environment. - ```shell title="~/.bashrc" + ```shell + # ~/.bashrc export TASK_X_FEATURE=1 ``` -3. Creating a `.env` or a `.taskrc.yml` file in the same directory as - your root Taskfile.\ - The `.env` file should contain the relevant environment - variable(s), while the `.taskrc.yml` file should use a YAML format - where each experiment is defined as a key with a corresponding value. +3. Creating a `.env` or a `.taskrc.yml` file in the same directory as your root + Taskfile.\ + The `.env` file should contain the relevant environment variable(s), while + the `.taskrc.yml` file should use a YAML format where each experiment is + defined as a key with a corresponding value. This allows you to enable an experimental feature at a project level. If you commit this file to source control, then other users of your project will also have these experiments enabled. - If both files are present, the values in the `.taskrc.yml` file - will take precedence. + If both files are present, the values in the `.taskrc.yml` file will take + precedence. - - - ```yaml title=".taskrc.yml" - experiments: - FEATURE: 1 - ``` - +::: code-group - - ```shell title=".env" - TASK_X_FEATURE=1 - ``` - - +```yaml [.taskrc.yml] +experiments: + FEATURE: 1 +``` + +```shell [.env] +TASK_X_FEATURE=1 +``` + +::: ## Workflow @@ -112,7 +109,7 @@ the status will be updated via the `status: draft` label. This indicates that an implementation is now available for use in a release and the experiment is open for feedback. -:::note +::: info During the draft period, major changes to the implementation may be made based on the feedback received from users. There are _no stability guarantees_ and @@ -139,13 +136,13 @@ version. ### 5. Released -When making a new major release of Task, all experiments marked as `status: -stable` will move to `status: released` and their behaviors will become the new -default in Task. Experiments in an earlier stage (i.e. not stable) cannot be -released and so will continue to be experiments in the new version. +When making a new major release of Task, all experiments marked as +`status: stable` will move to `status: released` and their behaviors will become +the new default in Task. Experiments in an earlier stage (i.e. not stable) +cannot be released and so will continue to be experiments in the new version. ### Abandoned / Superseded -If an experiment is unsuccessful at any point then it will be given the `status: -abandoned` or `status: superseded` labels depending on which is more suitable. -These experiments will be removed from Task. +If an experiment is unsuccessful at any point then it will be given the +`status: abandoned` or `status: superseded` labels depending on which is more +suitable. These experiments will be removed from Task. diff --git a/website/versioned_docs/version-latest/experiments/remote_taskfiles.mdx b/website/src/docs/experiments/remote-taskfiles.md similarity index 76% rename from website/versioned_docs/version-latest/experiments/remote_taskfiles.mdx rename to website/src/docs/experiments/remote-taskfiles.md index b8154224..afb3f36a 100644 --- a/website/versioned_docs/version-latest/experiments/remote_taskfiles.mdx +++ b/website/src/docs/experiments/remote-taskfiles.md @@ -1,13 +1,12 @@ --- -slug: /experiments/remote-taskfiles/ +title: 'Remote Taskfiles (#1317)' +description: Experimentation for using Taskfiles stored in remote locations +outline: deep --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - # Remote Taskfiles (#1317) -:::caution +::: warning All experimental features are subject to breaking changes and/or removal _at any time_. We strongly recommend that you do not use these features in a production @@ -15,16 +14,19 @@ environment. They are intended for testing and feedback only. ::: -:::info +::: info To enable this experiment, set the environment variable: -`TASK_X_REMOTE_TASKFILES=1`. Check out [our guide to enabling experiments -][enabling-experiments] for more information. +`TASK_X_REMOTE_TASKFILES=1`. Check out +[our guide to enabling experiments](./index.md#enabling-experiments) for more +information. ::: -:::danger +::: danger + Never run remote Taskfiles from sources that you do not trust. + ::: This experiment allows you to use Taskfiles which are stored in remote @@ -34,19 +36,35 @@ when including Taskfiles. Task uses "nodes" to reference remote Taskfiles. There are a few different types of node which you can use: - - +::: code-group + +```text [HTTP/HTTPS] +https://raw.githubusercontent.com/go-task/task/main/website/static/Taskfile.yml +``` + +```text [Git over HTTP] +https://github.com/go-task/task.git//website/static/Taskfile.yml?ref=main +``` + +```text [Git over SSH] +git@github.com/go-task/task.git//website/static/Taskfile.yml?ref=main +``` + +::: + +## Node Types + +### HTTP/HTTPS `https://raw.githubusercontent.com/go-task/task/main/website/static/Taskfile.yml` This is the most basic type of remote node and works by downloading the file from the specified URL. The file must be a valid Taskfile and can be of any name. If a file is not found at the specified URL, Task will append each of the -[supported file names][supported-file-names] in turn until it finds a valid -file. If it still does not find a valid Taskfile, an error is returned. +supported file names in turn until it finds a valid file. If it still does not +find a valid Taskfile, an error is returned. - - +### Git over HTTP `https://github.com/go-task/task.git//website/static/Taskfile.yml?ref=main` @@ -55,13 +73,12 @@ HTTP/HTTPS. The first part of the URL is the base URL of the Git repository. This is the same URL that you would use to clone the repo over HTTP. - You can optionally add the path to the Taskfile in the repository by appending -`//` to the URL. + `//` to the URL. - You can also optionally specify a branch or tag to use by appending -`?ref=` to the end of the URL. If you omit a reference, the default branch -will be used. + `?ref=` to the end of the URL. If you omit a reference, the default + branch will be used. - - +### Git over SSH `git@github.com/go-task/task.git//website/static/Taskfile.yml?ref=main` @@ -73,16 +90,13 @@ To use Git over SSH, you need to make sure that your SSH agent has your private SSH keys added so that they can be used during authentication. - You can optionally add the path to the Taskfile in the repository by appending -`//` to the URL. + `//` to the URL. - You can also optionally specify a branch or tag to use by appending -`?ref=` to the end of the URL. If you omit a reference, the default branch -will be used. + `?ref=` to the end of the URL. If you omit a reference, the default + branch will be used. - - - -Task has an [example remote Taskfile][example-remote-taskfile] in our repository -that you can use for testing and that we will use throughout this document: +Task has an example remote Taskfile in our repository that you can use for +testing and that we will use throughout this document: ```yaml version: '3' @@ -99,34 +113,32 @@ tasks: ## Specifying a remote entrypoint -By default, Task will look for one of the [supported file -names][supported-file-names] on your local filesystem. If you want to use a -remote file instead, you can pass its URI into the `--taskfile`/`-t` flag just -like you would to specify a different local file. For example: +By default, Task will look for one of the supported file names on your local +filesystem. If you want to use a remote file instead, you can pass its URI into +the `--taskfile`/`-t` flag just like you would to specify a different local +file. For example: - - -```shell +::: code-group + +```shell [HTTP/HTTPS] $ task --taskfile https://raw.githubusercontent.com/go-task/task/main/website/static/Taskfile.yml task: [hello] echo "Hello Task!" Hello Task! ``` - - -```shell + +```shell [Git over HTTP] $ task --taskfile https://github.com/go-task/task.git//website/static/Taskfile.yml?ref=main task: [hello] echo "Hello Task!" Hello Task! ``` - - -```shell + +```shell [Git over SSH] $ task --taskfile git@github.com/go-task/task.git//website/static/Taskfile.yml?ref=main task: [hello] echo "Hello Task!" Hello Task! ``` - - + +::: ## Including remote Taskfiles @@ -134,32 +146,30 @@ Including a remote file works exactly the same way that including a local file does. You just need to replace the local path with a remote URI. Any tasks in the remote Taskfile will be available to run from your main Taskfile. - - -```yaml +::: code-group + +```yaml [HTTP/HTTPS] version: '3' includes: my-remote-namespace: https://raw.githubusercontent.com/go-task/task/main/website/static/Taskfile.yml ``` - - -```yaml + +```yaml [Git over HTTP] version: '3' includes: my-remote-namespace: https://github.com/go-task/task.git//website/static/Taskfile.yml?ref=main ``` - - -```yaml + +```yaml [Git over SSH] version: '3' includes: my-remote-namespace: git@github.com/go-task/task.git//website/static/Taskfile.yml?ref=main ``` - - + +::: ```shell $ task my-remote-namespace:hello @@ -247,9 +257,8 @@ Task currently supports both `http` and `https` URLs. However, the `http` requests will not execute by default unless you run the task with the `--insecure` flag. This is to protect you from accidentally running a remote Taskfile that is downloaded via an unencrypted connection. Sources that are not -protected by TLS are vulnerable to [man-in-the-middle -attacks][man-in-the-middle-attacks] and should be avoided unless you know what -you are doing. +protected by TLS are vulnerable to man-in-the-middle attacks and should be +avoided unless you know what you are doing. ## Caching & Running Offline @@ -273,18 +282,11 @@ the `--timeout` flag and specifying a duration. For example, `--timeout 5s` will set the timeout to 5 seconds. By default, the cache is stored in the Task temp directory, represented by the -`TASK_TEMP_DIR` [environment variable](../reference/environment.mdx) You can -override the location of the cache by setting the `TASK_REMOTE_DIR` environment -variable. This way, you can share the cache between different projects. +`TASK_TEMP_DIR` environment variable. You can override the location of the cache +by setting the `TASK_REMOTE_DIR` environment variable. This way, you can share +the cache between different projects. -You can force Task to ignore the cache and download the latest version -by using the `--download` flag. +You can force Task to ignore the cache and download the latest version by using +the `--download` flag. You can use the `--clear-cache` flag to clear all cached remote files. - -{/* prettier-ignore-start */} -[enabling-experiments]: ./experiments.mdx#enabling-experiments -[man-in-the-middle-attacks]: https://en.wikipedia.org/wiki/Man-in-the-middle_attack -[supported-file-names]: https://taskfile.dev/usage/#supported-file-names -[example-remote-taskfile]: https://raw.githubusercontent.com/go-task/task/main/website/static/Taskfile.yml -{/* prettier-ignore-end */} diff --git a/website/docs/experiments/template.mdx b/website/src/docs/experiments/template.md similarity index 70% rename from website/docs/experiments/template.mdx rename to website/src/docs/experiments/template.md index f1bb9887..9df41586 100644 --- a/website/docs/experiments/template.mdx +++ b/website/src/docs/experiments/template.md @@ -1,14 +1,10 @@ --- -# This is a template for an experiments documentation -# Copy this page and fill in the details as necessary title: '--- Template ---' -sidebar_position: -1 # Always push to the top -draft: true # Hide in production --- # \{Name of Experiment\} (#\{Issue\}) -:::caution +::: warning All experimental features are subject to breaking changes and/or removal _at any time_. We strongly recommend that you do not use these features in a production @@ -16,7 +12,7 @@ environment. They are intended for testing and feedback only. ::: -:::warning +::: warning This experiment breaks the following functionality: @@ -37,6 +33,4 @@ information. \{Short explanation of how users should migrate to the new behavior\} -{/* prettier-ignore-start */} -[enabling-experiments]: ./experiments.mdx#enabling-experiments -{/* prettier-ignore-end */} +[enabling-experiments]: /docs/experiments/#enabling-experiments diff --git a/website/docs/faq.mdx b/website/src/docs/faq.md similarity index 90% rename from website/docs/faq.mdx rename to website/src/docs/faq.md index bf8e7648..d957a8b3 100644 --- a/website/docs/faq.mdx +++ b/website/src/docs/faq.md @@ -1,6 +1,9 @@ --- -slug: /faq/ -sidebar_position: 15 +title: FAQ +description: + Frequently asked questions about Task, including ETAs, shell limitations, and + Windows compatibility +outline: deep --- # FAQ @@ -24,7 +27,7 @@ be patient and avoid asking for ETAs. The best way to speed things up is to contribute to the project yourself. We always appreciate new contributors. If you are interested in contributing, check -out the [contributing guide](./contributing.mdx). +out the [contributing guide](./contributing.md). ## Why won't my task update my shell environment? @@ -101,8 +104,9 @@ The default shell on Windows (`cmd` and `powershell`) do not have commands like If you want to make your Taskfile fully cross-platform, you'll need to work around this limitation using one of the following methods: -- Use the `{{OS}}` function to run an OS-specific script. -- Use something like `{{if eq OS "windows"}}powershell {{end}}` to +- Use the `{{OS}}` function to run an OS-specific script. +- Use something like + `{{if eq OS "windows"}}powershell {{end}}` to detect windows and run the command in Powershell directly. - Use a shell on Windows that supports these commands as builtins, such as [Git Bash][git-bash] or [WSL][wsl]. @@ -114,7 +118,5 @@ this work. Constructive comments and contributions are very welcome! - [mvdan/sh#93](https://github.com/mvdan/sh/issues/93) - [mvdan/sh#97](https://github.com/mvdan/sh/issues/97) -{/* prettier-ignore-start */} [git-bash]: https://gitforwindows.org/ [wsl]: https://learn.microsoft.com/en-us/windows/wsl/install -{/* prettier-ignore-end */} diff --git a/website/versioned_docs/version-latest/getting_started.mdx b/website/src/docs/getting-started.md similarity index 64% rename from website/versioned_docs/version-latest/getting_started.mdx rename to website/src/docs/getting-started.md index e79108d2..b19dd9d8 100644 --- a/website/versioned_docs/version-latest/getting_started.mdx +++ b/website/src/docs/getting-started.md @@ -1,14 +1,14 @@ --- -slug: /getting-started/ -sidebar_position: 3 +title: Getting Started +description: Guide for getting started with Task +outline: deep --- # Getting Started The following guide will help introduce you to the basics of Task. We'll cover how to create a Taskfile, how to write a basic task and how to call it. If you -haven't installed Task yet, head over to our [installation -guide][installation]. +haven't installed Task yet, head over to our [installation guide](installation). ## Creating your first Taskfile @@ -35,7 +35,7 @@ task --init Custom.yml This will create a Taskfile that looks something like this: -```yaml +```yaml [Taskfile.yml] version: '3' vars: @@ -48,11 +48,11 @@ tasks: silent: true ``` -As you can see, all Taskfiles are written in [YAML format][yaml]. The `version` -attribute specifies the minimum version of Task that can be used to run this -file. The `vars` attribute is used to define variables that can be used in -tasks. In this case, we are creating a string variable called `GREETING` with a -value of `Hello, World!`. +As you can see, all Taskfiles are written in [YAML format](https://yaml.org/). +The `version` attribute specifies the minimum version of Task that can be used +to run this file. The `vars` attribute is used to define variables that can be +used in tasks. In this case, we are creating a string variable called `GREETING` +with a value of `Hello, World!`. Finally, the `tasks` attribute is used to define the tasks that can be run. In this case, we have a task called `default` that echoes the value of the @@ -70,10 +70,10 @@ task default ``` Note that we don't have to specify the name of the Taskfile. Task will -automatically look for a file called `Taskfile.yml` (or any of Task's [supported -file names][supported-file-names]) in the current directory. Additionally, tasks -with the name `default` are special. They can also be run without specifying the -task name. +automatically look for a file called `Taskfile.yml` (or any of Task's +[supported file names](/docs/guide#supported-file-names)) in the current directory. +Additionally, tasks with the name `default` are special. They can also be run +without specifying the task name. If you created a Taskfile in a different directory, you can run it by passing the absolute or relative path to the directory as an argument using the `--dir` @@ -96,10 +96,10 @@ Let's create a task to build a program in Go. Start by adding a new task called `build` below the existing `default` task. We can then add a `cmds` attribute with a single command to build the program. -Task uses [mvdan/sh][mvdan/sh], a native Go sh interpreter. So you can write -sh/bash-like commands - even in environments where `sh` or `bash` are usually -not available (like Windows). Just remember any executables called must be -available as a built-in or in the system's `PATH`. +Task uses [mvdan/sh](https://github.com/mvdan/sh), a native Go sh interpreter. +So you can write sh/bash-like commands - even in environments where `sh` or +`bash` are usually not available (like Windows). Just remember any executables +called must be available as a built-in or in the system's `PATH`. When you're done, it should look something like this: @@ -128,16 +128,6 @@ task build That's about it for the basics, but there's _so much_ more that you can do with Task. Check out the rest of the documentation to learn more about all the -features Task has to offer! We recommend taking a look at the [usage -guide][usage] next. Alternatively, you can check out our reference docs for the -[Taskfile schema][schema] and [CLI][cli]. - -{/* prettier-ignore-start */} -[yaml]: https://yaml.org/ -[installation]: /installation/ -[supported-file-names]: /usage/#supported-file-names -[mvdan/sh]: https://github.com/mvdan/sh -[usage]: /usage/ -[schema]: /reference/schema/ -[cli]: /reference/cli/ -{/* prettier-ignore-end */} +features Task has to offer! We recommend taking a look at the +[usage guide](/docs/guide) next. Alternatively, you can check out our reference docs +for the [Taskfile schema](reference/schema) and [CLI](reference/cli). diff --git a/website/versioned_docs/version-latest/usage.mdx b/website/src/docs/guide.md similarity index 87% rename from website/versioned_docs/version-latest/usage.mdx rename to website/src/docs/guide.md index 9590cf4f..08a18095 100644 --- a/website/versioned_docs/version-latest/usage.mdx +++ b/website/src/docs/guide.md @@ -1,12 +1,8 @@ --- -slug: /usage/ -sidebar_position: 4 +outline: deep --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Usage +# Guide ## Running Taskfiles @@ -39,11 +35,12 @@ the file tree until it finds one (similar to how `git` works). When running Task from a subdirectory like this, it will behave as if you ran it from the directory containing the Taskfile. -You can use this functionality along with the special `{{.USER_WORKING_DIR}}` -variable to create some very useful reusable tasks. For example, if you have a -monorepo with directories for each microservice, you can `cd` into a -microservice directory and run a task command to bring it up without having to -create multiple tasks or Taskfiles with identical content. For example: +You can use this functionality along with the special +`{{.USER_WORKING_DIR}}` variable to create some very useful +reusable tasks. For example, if you have a monorepo with directories for each +microservice, you can `cd` into a microservice directory and run a task command +to bring it up without having to create multiple tasks or Taskfiles with +identical content. For example: ```yaml version: '3' @@ -69,14 +66,14 @@ Taskfile that matches `$HOME/{T,t}askfile.{yml,yaml}` . This is useful to have automation that you can run from anywhere in your system! -:::info +::: info When running your global Taskfile with `-g`, tasks will run on `$HOME` by default, and not on your working directory! -As mentioned in the previous section, the `{{.USER_WORKING_DIR}}` special -variable can be very handy here to run stuff on the directory you're calling -`task -g` from. +As mentioned in the previous section, the +`{{.USER_WORKING_DIR}}` special variable can be very handy +here to run stuff on the directory you're calling `task -g` from. ```yaml version: '3' @@ -139,7 +136,7 @@ tasks: - echo $GREETING ``` -:::info +::: info `env` supports expansion and retrieving output from a shell command just like variables, as you can see in the [Variables](#variables) section. @@ -151,15 +148,19 @@ variables, as you can see in the [Variables](#variables) section. You can also ask Task to include `.env` like files by using the `dotenv:` setting: -```shell title=".env" +::: code-group + +```shell [.env] KEYNAME=VALUE ``` -```shell title="testing/.env" +```shell [testing/.env] ENDPOINT=testing.com ``` -```yaml title="Taskfile.yml" +::: + +```yaml version: '3' env: @@ -206,7 +207,7 @@ tasks: - echo "Using $KEYNAME and endpoint $ENDPOINT" ``` -:::info +::: info Please note that you are not currently able to use the `dotenv` key inside included Taskfiles. @@ -260,7 +261,7 @@ includes: dir: ./docs ``` -:::info +::: info The included Taskfiles must be using the same schema version as the main Taskfile uses. @@ -305,14 +306,13 @@ includes: ### Flatten includes -You can flatten the included Taskfile tasks into the main Taskfile by using the `flatten` option. -It means that the included Taskfile tasks will be available without the namespace. +You can flatten the included Taskfile tasks into the main Taskfile by using the +`flatten` option. It means that the included Taskfile tasks will be available +without the namespace. +::: code-group - - - -```yaml +```yaml [Taskfile.yml] version: '3' includes: @@ -327,10 +327,7 @@ tasks: - task: foo ``` - - - -```yaml +```yaml [Included.yml] version: '3' tasks: @@ -339,8 +336,7 @@ tasks: - echo "Foo" ``` - - +::: If you run `task -a` it will print : @@ -352,7 +348,8 @@ task: Available tasks for this project: You can run `task foo` directly without the namespace. -You can also reference the task in other tasks without the namespace. So if you run `task greet` it will run `greet` and `foo` tasks and the output will be : +You can also reference the task in other tasks without the namespace. So if you +run `task greet` it will run `greet` and `foo` tasks and the output will be : ```text Greet @@ -361,10 +358,9 @@ Foo If multiple tasks have the same name, an error will be thrown: - - +::: code-group -```yaml +```yaml [Taskfile.yml] version: '3' includes: lib: @@ -378,10 +374,7 @@ tasks: - task: foo ``` - - - -```yaml +```yaml [Included.yml] version: '3' tasks: @@ -390,27 +383,28 @@ tasks: - echo "Foo" ``` - - +::: If you run `task -a` it will print: + ```text task: Found multiple tasks (greet) included by "lib" ``` -If the included Taskfile has a task with the same name as a task in the main Taskfile, -you may want to exclude it from the flattened tasks. +If the included Taskfile has a task with the same name as a task in the main +Taskfile, you may want to exclude it from the flattened tasks. -You can do this by using the [`excludes` option](#exclude-tasks-from-being-included). +You can do this by using the +[`excludes` option](#exclude-tasks-from-being-included). ### Exclude tasks from being included -You can exclude tasks from being included by using the `excludes` option. This option takes the list of tasks to be excluded from this include. +You can exclude tasks from being included by using the `excludes` option. This +option takes the list of tasks to be excluded from this include. - - +::: code-group -```yaml +```yaml [Taskfile.yml] version: '3' includes: included: @@ -418,10 +412,7 @@ version: '3' excludes: [foo] ``` - - - -```yaml +```yaml [Included.yml] version: '3' tasks: @@ -429,9 +420,10 @@ tasks: bar: echo "Bar" ``` - +::: -`task included:foo` will throw an error because the `foo` task is excluded but `task included:bar` will work and display `Bar`. +`task included:foo` will throw an error because the `foo` task is excluded but +`task included:bar` will work and display `Bar`. It's compatible with the `flatten` option. @@ -470,13 +462,13 @@ includes: aliases: [gen] ``` -:::info +::: info Vars declared in the included Taskfile have preference over the variables in the including Taskfile! If you want a variable in an included Taskfile to be overridable, use the [default function](https://go-task.github.io/slim-sprig/defaults.html): -`MY_VAR: '{{.MY_VAR | default "my-default-value"}}'`. +`MY_VAR: '{{.MY_VAR | default "my-default-value"}}'`. ::: @@ -569,7 +561,7 @@ tasks: If there is more than one dependency, they always run in parallel for better performance. -:::tip +::: tip You can also make the tasks given by the command line run in parallel by using the `--parallel` flag (alias `-p`). Example: `task --parallel js css`. @@ -718,7 +710,7 @@ tasks: The above syntax is also supported in `deps`. -:::tip +::: tip NOTE: If you want to call a task declared in the root Taskfile from within an [included Taskfile](#including-other-taskfiles), add a leading `:` like this: @@ -785,7 +777,6 @@ instead of its checksum (content), just set the `method` property to At the task level for a specific task: - ```yaml version: '3' @@ -805,7 +796,7 @@ At the root level of the Taskfile to apply it globally to all tasks: ```yaml version: '3' -method: timestamp # Will be the default for all tasks +method: timestamp # Will be the default for all tasks tasks: build: @@ -817,13 +808,12 @@ tasks: - app{{exeExt}} ``` - In situations where you need more flexibility the `status` keyword can be used. You can even combine the two. See the documentation for [status](#using-programmatic-checks-to-indicate-a-task-is-up-to-date) for an example. -:::info +::: info By default, task stores checksums on a local `.task` directory in the project's directory. Most of the time, you'll want to have this directory on `.gitignore` @@ -843,7 +833,7 @@ export TASK_TEMP_DIR='~/.task' ::: -:::info +::: info Each task has only one checksum stored for its `sources`. If you want to distinguish a task by any of its input variables, you can add those variables as @@ -856,13 +846,13 @@ change even if the source has not. ::: -:::tip +::: tip The method `none` skips any validation and always runs the task. ::: -:::info +::: info For the `checksum` (default) or `timestamp` method to work, it is only necessary to inform the source files. When the `timestamp` method is used, the last time @@ -896,12 +886,14 @@ tasks that generate remote artifacts (Docker images, deploys, CD releases) the checksum source and timestamps require either access to the artifact or for an out-of-band refresh of the `.checksum` fingerprint file. -Two special variables `{{.CHECKSUM}}` and `{{.TIMESTAMP}}` are available for -interpolation within `cmds` and `status` commands, depending on the method assigned to -fingerprint the sources. Only `source` globs are fingerprinted. +Two special variables `{{.CHECKSUM}}` and +`{{.TIMESTAMP}}` are available for interpolation within +`cmds` and `status` commands, depending on the method assigned to fingerprint +the sources. Only `source` globs are fingerprinted. -Note that the `{{.TIMESTAMP}}` variable is a "live" Go `time.Time` struct, and -can be formatted using any of the methods that `time.Time` responds to. +Note that the `{{.TIMESTAMP}}` variable is a "live" Go +`time.Time` struct, and can be formatted using any of the methods that +`time.Time` responds to. See [the Go Time documentation](https://golang.org/pkg/time/) for more information. @@ -909,8 +901,8 @@ information. You can use `--force` or `-f` if you want to force a task to run even when up-to-date. -Also, `task --status [tasks]...` will exit with a non-zero [exit -code](/reference/cli#exit-codes) if any of the tasks are not up-to-date. +Also, `task --status [tasks]...` will exit with a non-zero +[exit code](/docs/reference/cli#exit-codes) if any of the tasks are not up-to-date. `status` can be combined with the [fingerprinting](#by-fingerprinting-locally-generated-files-and-their-sources) @@ -1050,7 +1042,7 @@ requires: vars: [] # Array of strings ``` -:::note +::: info Variables set to empty zero length strings, will pass the `requires` check. @@ -1073,11 +1065,16 @@ tasks: ### Ensuring required variables have allowed values -If you want to ensure that a variable is set to one of a predefined set of valid values before executing a task, you can use requires. -This is particularly useful when there are strict requirements for what values a variable can take, and you want to provide clear feedback to the user when an invalid value is detected. +If you want to ensure that a variable is set to one of a predefined set of valid +values before executing a task, you can use requires. This is particularly +useful when there are strict requirements for what values a variable can take, +and you want to provide clear feedback to the user when an invalid value is +detected. -To use `requires`, you specify an array of allowed values in the vars sub-section under requires. Task will check if the variable is set to one of the allowed values. -If the variable does not match any of these values, the task will raise an error and stop execution. +To use `requires`, you specify an array of allowed values in the vars +sub-section under requires. Task will check if the variable is set to one of the +allowed values. If the variable does not match any of these values, the task +will raise an error and stop execution. This check applies both to user-defined variables and environment variables. @@ -1099,7 +1096,7 @@ tasks: If `ENV` is not one of 'dev', 'beta' or 'prod' an error will be raised. -:::note +::: info This is supported only for string variables. @@ -1117,7 +1114,7 @@ variable types are supported: - `array` - `map` -:::note +::: info Defining a map requires that you use a special `map` subkey (see example below). @@ -1135,16 +1132,16 @@ tasks: FLOAT: 3.14 ARRAY: [1, 2, 3] MAP: - map: {A: 1, B: 2, C: 3} + map: { A: 1, B: 2, C: 3 } cmds: - - 'echo {{.STRING}}' # Hello, World! - - 'echo {{.BOOL}}' # true - - 'echo {{.INT}}' # 42 - - 'echo {{.FLOAT}}' # 3.14 - - 'echo {{.ARRAY}}' # [1 2 3] + - 'echo {{.STRING}}' # Hello, World! + - 'echo {{.BOOL}}' # true + - 'echo {{.INT}}' # 42 + - 'echo {{.FLOAT}}' # 3.14 + - 'echo {{.ARRAY}}' # [1 2 3] - 'echo {{index .ARRAY 0}}' # 1 - - 'echo {{.MAP}}' # map[A:1 B:2 C:3] - - 'echo {{.MAP.A}}' # 1 + - 'echo {{.MAP}}' # map[A:1 B:2 C:3] + - 'echo {{.MAP.A}}' # 1 ``` Variables can be set in many places in a Taskfile. When executing @@ -1167,7 +1164,7 @@ Example of sending parameters with environment variables: $ TASK_VARIABLE=a-value task do-something ``` -:::tip +::: tip A special variable `.TASK` is always available containing the task name. @@ -1213,8 +1210,9 @@ Example of a `default` value to be overridden from CLI: ```yaml version: '3' +tasks: greet_user: - desc: "Greet the user with a name." + desc: 'Greet the user with a name.' vars: USER_NAME: '{{.USER_NAME| default "DefaultUser"}}' cmds: @@ -1252,15 +1250,14 @@ This works for all types of variables. ### Referencing other variables -Templating is great for referencing string values if you want to pass -a value from one task to another. However, the templating engine is only able to -output strings. If you want to pass something other than a string to another -task then you will need to use a reference (`ref`) instead. +Templating is great for referencing string values if you want to pass a value +from one task to another. However, the templating engine is only able to output +strings. If you want to pass something other than a string to another task then +you will need to use a reference (`ref`) instead. - - +::: code-group -```yaml +```yaml [Templating Engine] version: 3 tasks: @@ -1276,10 +1273,7 @@ tasks: - 'echo {{index .FOO 0}}' # <-- FOO is a string so the task outputs '91' which is the ASCII code for '[' instead of the expected 'A' ``` - - - -```yaml +```yaml [Reference] version: 3 tasks: @@ -1296,11 +1290,10 @@ tasks: - 'echo {{index .FOO 0}}' # <-- FOO is still a map so the task outputs 'A' as expected ``` - - +::: -This also works the same way when calling `deps` and when defining -a variable and can be used in any combination: +This also works the same way when calling `deps` and when defining a variable +and can be used in any combination: ```yaml version: 3 @@ -1357,7 +1350,7 @@ tasks: vars: JSON: '{"a": 1, "b": 2, "c": 3}' FOO: - ref: "fromJson .JSON" + ref: 'fromJson .JSON' cmds: - echo {{.FOO}} ``` @@ -1402,9 +1395,11 @@ tasks: cmds: - for: matrix: - OS: ["windows", "linux", "darwin"] - ARCH: ["amd64", "arm64"] - cmd: echo "{{.ITEM.OS}}/{{.ITEM.ARCH}}" + OS: ['windows', 'linux', 'darwin'] + ARCH: ['amd64', 'arm64'] + cmd: + echo "{{.ITEM.OS}}/{{.ITEM.ARCH}}" ``` This will output: @@ -1421,11 +1416,11 @@ darwin/arm64 You can also use references to other variables as long as they are also lists: ```yaml -version: "3" +version: '3' vars: - OS_VAR: ["windows", "linux", "darwin"] - ARCH_VAR: ["amd64", "arm64"] + OS_VAR: ['windows', 'linux', 'darwin'] + ARCH_VAR: ['amd64', 'arm64'] tasks: default: @@ -1436,7 +1431,9 @@ tasks: ref: .OS_VAR ARCH: ref: .ARCH_VAR - cmd: echo "{{.ITEM.OS}}/{{.ITEM.ARCH}}" + cmd: + echo "{{.ITEM.OS}}/{{.ITEM.ARCH}}" ``` ### Looping over your task's sources or generated files @@ -1444,10 +1441,9 @@ tasks: You are also able to loop over the sources of your task or the files it generates: - - +::: code-group -```yaml +```yaml [Sources] version: '3' tasks: @@ -1460,10 +1456,7 @@ tasks: cmd: cat {{ .ITEM }} ``` - - - -```yaml +```yaml [Generates] version: '3' tasks: @@ -1476,8 +1469,7 @@ tasks: cmd: cat {{ .ITEM }} ``` - - +::: This will also work if you use globbing syntax in `sources` or `generates`. For example, if you specify a source for `*.txt`, the loop will iterate over all @@ -1485,50 +1477,45 @@ files that match that glob. Paths will always be returned as paths relative to the task directory. If you need to convert this to an absolute path, you can use the built-in `joinPath` -function. There are some [special -variables](/reference/templating/#special-variables) that you may find useful -for this. +function. There are some +[special variables](/docs/reference/templating#special-variables) that you may find +useful for this. - - +::: code-group -```yaml +```yaml [Sources] version: '3' tasks: default: vars: MY_DIR: /path/to/dir - dir: '{{.MY_DIR}}' + dir: '{{.MY_DIR}}' sources: - foo.txt - bar.txt cmds: - for: sources - cmd: cat {{joinPath .MY_DIR .ITEM}} + cmd: cat {{joinPath .MY_DIR .ITEM}} ``` - - - -```yaml +```yaml [Generates] version: '3' tasks: default: vars: MY_DIR: /path/to/dir - dir: '{{.MY_DIR}}' + dir: '{{.MY_DIR}}' generates: - foo.txt - bar.txt cmds: - for: generates - cmd: cat {{joinPath .MY_DIR .ITEM}} + cmd: cat {{joinPath .MY_DIR .ITEM}} ``` - - +::: ### Looping over variables @@ -1545,7 +1532,7 @@ tasks: MY_VAR: foo.txt bar.txt cmds: - for: { var: MY_VAR } - cmd: cat {{.ITEM}} + cmd: cat {{.ITEM}} ``` If you need to split a string on a different character, you can do this by @@ -1560,7 +1547,7 @@ tasks: MY_VAR: foo.txt,bar.txt cmds: - for: { var: MY_VAR, split: ',' } - cmd: cat {{.ITEM}} + cmd: cat {{.ITEM}} ``` You can also loop over arrays and maps directly: @@ -1575,12 +1562,12 @@ tasks: cmds: - for: var: LIST - cmd: echo {{.ITEM}} + cmd: echo {{.ITEM}} ``` -When looping over a map we also make an additional `{{.KEY}}` variable available -that holds the string value of the map key. Remember that maps are unordered, so -the order in which the items are looped over is random. +When looping over a map we also make an additional `{{.KEY}}` +variable available that holds the string value of the map key. Remember that +maps are unordered, so the order in which the items are looped over is random. All of this also works with dynamic variables! @@ -1594,7 +1581,7 @@ tasks: sh: find -type f -name '*.txt' cmds: - for: { var: MY_VAR } - cmd: cat {{.ITEM}} + cmd: cat {{.ITEM}} ``` ### Renaming variables @@ -1611,7 +1598,7 @@ tasks: MY_VAR: foo.txt bar.txt cmds: - for: { var: MY_VAR, as: FILE } - cmd: cat {{.FILE}} + cmd: cat {{.FILE}} ``` ### Looping over tasks @@ -1629,11 +1616,11 @@ tasks: - for: [foo, bar] task: my-task vars: - FILE: '{{.ITEM}}' + FILE: '{{.ITEM}}' my-task: cmds: - - echo '{{.FILE}}' + - echo '{{.FILE}}' ``` Or if you want to run different tasks depending on the value of the loop: @@ -1645,7 +1632,7 @@ tasks: default: cmds: - for: [foo, bar] - task: task-{{.ITEM}} + task: task-{{.ITEM}} task-foo: cmds: @@ -1670,11 +1657,11 @@ tasks: - for: [foo, bar] task: my-task vars: - FILE: '{{.ITEM}}' + FILE: '{{.ITEM}}' my-task: cmds: - - echo '{{.FILE}}' + - echo '{{.FILE}}' ``` It is important to note that as `deps` are run in parallel, the order in which @@ -1710,7 +1697,7 @@ version: '3' tasks: yarn: cmds: - - yarn {{.CLI_ARGS}} + - yarn {{.CLI_ARGS}} ``` ## Wildcard arguments @@ -1731,16 +1718,17 @@ version: '3' tasks: start:*:*: vars: - SERVICE: "{{index .MATCH 0}}" - REPLICAS: "{{index .MATCH 1}}" + SERVICE: '{{index .MATCH 0}}' + REPLICAS: '{{index .MATCH 1}}' cmds: - - echo "Starting {{.SERVICE}} with {{.REPLICAS}} replicas" + - echo "Starting {{.SERVICE}} with {{.REPLICAS}} replicas" start:*: vars: - SERVICE: "{{index .MATCH 0}}" + SERVICE: '{{index .MATCH 0}}' cmds: - - echo "Starting {{.SERVICE}}" + - echo "Starting {{.SERVICE}}" ``` This call matches the `start:*` task and the string "foo" is captured by the @@ -1804,7 +1792,7 @@ tasks: cleanup: rm -rf tmpdir/ ``` -:::info +::: info Due to the nature of how the [Go's own `defer` work](https://go.dev/tour/flowcontrol/13), the deferred @@ -1813,7 +1801,7 @@ commands are executed in the reverse order if you schedule multiple of them. ::: A special variable `.EXIT_CODE` is exposed when a command exited with a non-zero -[exit code](/reference/cli#exit-codes). You can check its presence to know if +[exit code](/docs/reference/cli#exit-codes). You can check its presence to know if the task completed successfully or not: ```yaml @@ -1822,7 +1810,10 @@ version: '3' tasks: default: cmds: - - defer: echo '{{if .EXIT_CODE}}Failed with {{.EXIT_CODE}}!{{else}}Success!{{end}}' + - defer: + echo '{{if .EXIT_CODE}}Failed with {{.EXIT_CODE}}!{{else}}Success!{{end}}' - exit 1 ``` @@ -1944,17 +1935,18 @@ version: '3' tasks: default: - - task: print - vars: - MESSAGE: hello - - task: print - vars: - MESSAGE: world + cmds: + - task: print + vars: + MESSAGE: hello + - task: print + vars: + MESSAGE: world print: - label: 'print-{{.MESSAGE}}' + label: 'print-{{.MESSAGE}}' cmds: - - echo "{{.MESSAGE}}" + - echo "{{.MESSAGE}}" ``` ## Warning Prompts @@ -2006,14 +1998,14 @@ tasks: dangerous: prompt: - - This is a dangerous command... Do you want to continue? - - Are you sure? + - This is a dangerous command... Do you want to continue? + - Are you sure? cmds: - echo 'dangerous command' ``` Warning prompts are called before executing a task. If a prompt is denied Task -will exit with [exit code](/reference/cli#exit-codes) 205. If approved, Task +will exit with [exit code](/docs/reference/cli#exit-codes) 205. If approved, Task will continue as normal. ```shell @@ -2029,7 +2021,7 @@ To skip warning prompts automatically, you can use the `--yes` (alias `-y`) option when calling the task. By including this option, all warnings, will be automatically confirmed, and no prompts will be shown. -:::caution +::: warning Tasks with prompts always fail by default on non-terminal environments, like a CI, where an `stdin` won't be available for the user to answer. In those cases, @@ -2197,7 +2189,7 @@ version: '3' output: group: - begin: '::group::{{.TASK}}' + begin: '::group::{{.TASK}}' end: '::endgroup::' tasks: @@ -2260,8 +2252,8 @@ tasks: print: cmds: - - echo "{{.TEXT}}" - prefix: 'print-{{.TEXT}}' + - echo "{{.TEXT}}" + prefix: 'print-{{.TEXT}}' silent: true ``` @@ -2272,7 +2264,7 @@ $ task default [print-baz] baz ``` -:::tip +::: tip The `output` option can also be specified by the `--output` or `-o` flags. @@ -2310,11 +2302,11 @@ the default settings (e.g. no custom `env:`, `vars:`, `desc:`, `silent:` , etc): version: '3' tasks: - build: go build -v -o ./app{{exeExt}} . + build: go build -v -o ./app{{exeExt}} . run: - task: build - - ./app{{exeExt}} -h localhost -p 8080 + - ./app{{exeExt}} -h localhost -p 8080 ``` ## `set` and `shopt` @@ -2336,7 +2328,7 @@ tasks: default: echo **/*.go ``` -:::info +::: info Keep in mind that not all options are available in the [shell interpreter library](https://github.com/mvdan/sh) that Task uses. @@ -2351,9 +2343,9 @@ which files to watch. The default watch interval is 100 milliseconds, but it's possible to change it by either setting `interval: '500ms'` in the root of the Taskfile or by passing -it as an argument like `--interval=500ms`. -This interval is the time Task will wait for duplicated events. It will only run -the task again once, even if multiple changes happen within the interval. +it as an argument like `--interval=500ms`. This interval is the time Task will +wait for duplicated events. It will only run the task again once, even if +multiple changes happen within the interval. Also, it's possible to set `watch: true` in a given task and it'll automatically run in watch mode: @@ -2373,7 +2365,7 @@ tasks: - go build # ... ``` -:::info +::: info Note that when setting `watch: true` to a task, it'll only run in watch mode when running from the CLI via `task my-watch-task`, but won't run in watch mode @@ -2381,13 +2373,12 @@ if called by another task, either directly or as a dependency. ::: -:::caution +::: warning The watcher can misbehave in certain scenarios, in particular for long-running -servers. -There is a known bug where child processes of the running might not be killed -appropriately. It's adviced to avoid running commands as `go run` and prefer -`go build [...] && ./binary` instead. +servers. There is a known bug where child processes of the running might not be +killed appropriately. It's advised to avoid running commands as `go run` and +prefer `go build [...] && ./binary` instead. If you are having issues, you might want to try tools specifically designed for live-reloading, like [Air](https://github.com/air-verse/air/). Also, be sure to @@ -2396,7 +2387,5 @@ to us. ::: -{/* prettier-ignore-start */} [gotemplate]: https://golang.org/pkg/text/template/ -[templating-reference]: ./reference/templating.mdx -{/* prettier-ignore-end */} +[templating-reference]: /docs/reference/templating diff --git a/website/src/docs/installation.md b/website/src/docs/installation.md new file mode 100644 index 00000000..3dc9a0e3 --- /dev/null +++ b/website/src/docs/installation.md @@ -0,0 +1,323 @@ +--- +title: Installation +description: Installation methods for Task +outline: deep +--- + +# Installation + +Task offers many installation methods. Check out the available methods below. + +::: info + +Some of the methods below are marked as +![Community](https://img.shields.io/badge/Community%20Owned-orange). This means +they are not maintained by the Task team and may not be up-to-date. + +::: + +## Package Managers + +### [Homebrew](https://brew.sh) ![macOS](https://img.shields.io/badge/MacOS-000000?logo=apple&logoColor=F0F0F0) ![Linux](https://img.shields.io/badge/Linux-FCC624?logo=linux&logoColor=black) {#homebrew} + +Task is available via our official Homebrew tap +[[source](https://github.com/go-task/homebrew-tap/blob/main/Formula/go-task.rb)]: + +```shell +brew install go-task/tap/go-task +``` + +Alternatively it can be installed from the official Homebrew repository +[[package](https://formulae.brew.sh/formula/go-task)] +[[source](https://github.com/Homebrew/homebrew-core/blob/master/Formula/g/go-task.rb)] +by running: + +```shell +brew install go-task +``` + +### [Macports](https://macports.org) ![macOS](https://img.shields.io/badge/MacOS-000000?logo=apple&logoColor=F0F0F0) ![Community](https://img.shields.io/badge/Community%20Owned-orange) {#macports} + +Task repository is tracked by Macports +[[package](https://ports.macports.org/port/go-task/details/)] +[[source](https://github.com/macports/macports-ports/blob/master/devel/go-task/Portfile)]: + +```shell +port install go-task +``` + +### [Snap](https://snapcraft.io/task) ![macOS](https://img.shields.io/badge/MacOS-000000?logo=apple&logoColor=F0F0F0) ![Linux](https://img.shields.io/badge/Linux-FCC624?logo=linux&logoColor=black) {#snap} + +Task is available on [Snapcraft](https://snapcraft.io/task) +[[source](https://github.com/go-task/snap/blob/main/snap/snapcraft.yaml)], but +keep in mind that your Linux distribution should allow classic confinement for +Snaps to Task work correctly: + +```shell +sudo snap install task --classic +``` + +### [npm](https://www.npmjs.com) ![macOS](https://img.shields.io/badge/MacOS-000000?logo=apple&logoColor=F0F0F0) ![Linux](https://img.shields.io/badge/Linux-FCC624?logo=linux&logoColor=black) ![Windows](https://custom-icon-badges.demolab.com/badge/Windows-0078D6?logo=windows11&logoColor=white) {#npm} + +Npm can be used as cross-platform way to install Task globally or as a +dependency of your project +[[package](https://www.npmjs.com/package/@go-task/cli)] +[[source](https://github.com/go-task/task/blob/main/package.json)]: + +```shell +npm install -g @go-task/cli +``` + +### [pip](https://pip.pypa.io) ![macOS](https://img.shields.io/badge/MacOS-000000?logo=apple&logoColor=F0F0F0) ![Linux](https://img.shields.io/badge/Linux-FCC624?logo=linux&logoColor=black) ![Windows](https://custom-icon-badges.demolab.com/badge/Windows-0078D6?logo=windows11&logoColor=white) ![Community](https://img.shields.io/badge/Community%20Owned-orange) {#pip} + +Like npm, pip can be used as a cross-platform way to install Task +[[package](https://pypi.org/project/go-task-bin)] +[[source](https://github.com/Bing-su/pip-binary-factory/tree/main/task)]: + +```shell +pip install go-task-bin +``` + +### [WinGet](https://github.com/microsoft/winget-cli) ![Windows](https://custom-icon-badges.demolab.com/badge/Windows-0078D6?logo=windows11&logoColor=white) {#winget} + +Task is available via the +[community repository](https://github.com/microsoft/winget-pkgs) +[[source](https://github.com/microsoft/winget-pkgs/tree/master/manifests/t/Task/Task)]: + +```shell +winget install Task.Task +``` + +### [Chocolatey](https://chocolatey.org) ![Windows](https://custom-icon-badges.demolab.com/badge/Windows-0078D6?logo=windows11&logoColor=white) ![Community](https://img.shields.io/badge/Community%20Owned-orange) {#chocolatey} + +[[package](https://community.chocolatey.org/packages/go-task)] +[[source](https://github.com/Starz0r/ChocolateyPackagingScripts/blob/master/src/go-task_gh_build.py)] + +```shell +choco install go-task +``` + +### [Scoop](https://scoop.sh) ![Windows](https://custom-icon-badges.demolab.com/badge/Windows-0078D6?logo=windows11&logoColor=white) ![Community](https://img.shields.io/badge/Community%20Owned-orange) {#scoop} + +[[source](https://github.com/ScoopInstaller/Main/blob/master/bucket/task.json)] + +```shell +scoop install task +``` + +### Arch ([pacman](https://wiki.archlinux.org/title/Pacman)) ![Arch Linux](https://img.shields.io/badge/Arch%20Linux-1793D1?logo=arch-linux&logoColor=fff) ![Community](https://img.shields.io/badge/Community%20Owned-orange) {#arch} + +[[package](https://archlinux.org/packages/extra/x86_64/go-task/)] +[[source](https://gitlab.archlinux.org/archlinux/packaging/packages/go-task)] + +```shell +pacman -S go-task +``` + +### Fedora ([dnf](https://docs.fedoraproject.org/en-US/quick-docs/dnf)) ![Fedora](https://img.shields.io/badge/Fedora-51A2DA?logo=fedora&logoColor=fff) ![Community](https://img.shields.io/badge/Community%20Owned-orange) {#fedora} + +[[package](https://packages.fedoraproject.org/pkgs/golang-github-task/go-task/)] +[[source](https://src.fedoraproject.org/rpms/golang-github-task)] + +```shell +dnf install go-task +``` + +### FreeBSD ([Ports](https://ports.freebsd.org/cgi/ports.cgi)) ![FreeBSD](https://img.shields.io/badge/FreeBSD-990000?logo=freebsd&logoColor=fff) ![Community](https://img.shields.io/badge/Community%20Owned-orange) {#freebsd} + +[[package](https://cgit.freebsd.org/ports/tree/devel/task)] +[[source](https://cgit.freebsd.org/ports/tree/devel/task/Makefile)] + +```shell +pkg install task +``` + +### NixOS ([nix](https://nixos.org)) ![NixOS](https://img.shields.io/badge/NixOS-5277C3?logo=nixos&logoColor=fff) ![Linux](https://img.shields.io/badge/Linux-FCC624?logo=linux&logoColor=black) ![Community](https://img.shields.io/badge/Community%20Owned-orange) {#nix} + +[[source](https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/go/go-task/package.nix)] + +```shell +nix-env -iA nixpkgs.go-task +``` + +### [pacstall](https://github.com/pacstall/pacstall) ![Debian](https://img.shields.io/badge/Debian-A81D33?logo=debian&logoColor=fff) ![Ubuntu](https://img.shields.io/badge/Ubuntu-E95420?logo=ubuntu&logoColor=fff) ![Community](https://img.shields.io/badge/Community%20Owned-orange) {#pacstall} + +[[package](https://pacstall.dev/packages/go-task-deb)] +[[source](https://github.com/pacstall/pacstall-programs/blob/master/packages/go-task-deb/go-task-deb.pacscript)] + +```shell +pacstall -I go-task-deb +``` + +### [pkgx](https://pkgx.sh) ![macOS](https://img.shields.io/badge/MacOS-000000?logo=apple&logoColor=F0F0F0) ![Linux](https://img.shields.io/badge/Linux-FCC624?logo=linux&logoColor=black) ![Community](https://img.shields.io/badge/Community%20Owned-orange) {#pkgx} + +[[package](https://pkgx.dev/pkgs/taskfile.dev)] +[[source](https://github.com/pkgxdev/pantry/blob/main/projects/taskfile.dev/package.yml)] + +```shell +pkgx task +``` + +or, if you have pkgx integration enabled: + +```shell +task +``` + +## Get The Binary + +### Binary + +You can download the binary from the +[releases page on GitHub](https://github.com/go-task/task/releases) and add to +your `$PATH`. + +DEB and RPM packages are also available. + +The `task_checksums.txt` file contains the SHA-256 checksum for each file. + +### Install Script + +We also have an +[install script](https://github.com/go-task/task/blob/main/install-task.sh) +which is very useful in scenarios like CI. Many thanks to +[GoDownloader](https://github.com/goreleaser/godownloader) for enabling the easy +generation of this script. + +By default, it installs on the `./bin` directory relative to the working +directory: + +```shell +sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d +``` + +It is possible to override the installation directory with the `-b` parameter. +On Linux, common choices are `~/.local/bin` and `~/bin` to install for the +current user or `/usr/local/bin` to install for all users: + +```shell +sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin +``` + +::: warning + +On macOS and Windows, `~/.local/bin` and `~/bin` are not added to `$PATH` by +default. + +::: + +By default, it installs the latest version available. You can also specify a tag +(available in [releases](https://github.com/go-task/task/releases)) to install a +specific version: + +```shell +sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d v3.36.0 +``` + +Parameters are order specific, to set both installation directory and version: + +```shell +sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin v3.42.1 +``` + +### GitHub Actions + +If you want to install Task in GitHub Actions you can try using +[this action](https://github.com/arduino/setup-task) by the Arduino team: + +```yaml +- name: Install Task + uses: arduino/setup-task@v2 + with: + version: 3.x + repo-token: ${{ secrets.GITHUB_TOKEN }} +``` + +This installation method is community owned. + +## Build From Source + +### Go Modules + +Ensure that you have a supported version of [Go](https://golang.org) properly +installed and setup. You can find the minimum required version of Go in the +[go.mod](https://github.com/go-task/task/blob/main/go.mod#L3) file. + +You can then install the latest release globally by running: + +```shell +go install github.com/go-task/task/v3/cmd/task@latest +``` + +Or you can install into another directory: + +```shell +env GOBIN=/bin go install github.com/go-task/task/v3/cmd/task@latest +``` + +::: tip + +For CI environments we recommend using the [install script](#install-script) +instead, which is faster and more stable, since it'll just download the latest +released binary. + +::: + +## Setup completions + +Some installation methods will automatically install completions too, but if +this isn't working for you or your chosen method doesn't include them, you can +run `task --completion ` to output a completion script for any supported +shell. There are a couple of ways these completions can be added to your shell +config: + +### Option 1. Load the completions in your shell's startup config (Recommended) + +This method loads the completion script from the currently installed version of +task every time you create a new shell. This ensures that your completions are +always up-to-date. + +::: code-group + +```shell [bash] +# ~/.bashrc +eval "$(task --completion bash)" +``` + +```shell [zsh] +# ~/.zshrc +eval "$(task --completion zsh)" +``` + +```shell [fish] +# ~/.config/fish/config.fish +task --completion fish | source +``` + +```powershell [powershell] +# $PROFILE\Microsoft.PowerShell_profile.ps1 +Invoke-Expression (&task --completion powershell | Out-String) +``` + +::: + +### Option 2. Copy the script to your shell's completions directory + +This method requires you to manually update the completions whenever Task is +updated. However, it is useful if you want to modify the completions yourself. + +::: code-group + +```shell [bash] +task --completion bash > /etc/bash_completion.d/task +``` + +```shell [zsh] +task --completion zsh > /usr/local/share/zsh/site-functions/_task +``` + +```shell [fish] +task --completion fish > ~/.config/fish/completions/task.fish +``` + +::: diff --git a/website/versioned_docs/version-latest/integrations.mdx b/website/src/docs/integrations.md similarity index 95% rename from website/versioned_docs/version-latest/integrations.mdx rename to website/src/docs/integrations.md index bf1f8e69..5f76ad96 100644 --- a/website/versioned_docs/version-latest/integrations.mdx +++ b/website/src/docs/integrations.md @@ -1,6 +1,9 @@ --- -slug: /integrations/ -sidebar_position: 9 +title: Integrations +description: + Official and community integrations for Task, including VS Code, JSON schemas, + and other tools +outline: deep --- # Integrations diff --git a/website/src/docs/reference/cli.md b/website/src/docs/reference/cli.md new file mode 100644 index 00000000..eb1c7019 --- /dev/null +++ b/website/src/docs/reference/cli.md @@ -0,0 +1,343 @@ +--- +title: CLI Reference +description: Complete reference for Task CLI commands, flags, and exit codes +permalink: /reference/cli/ +outline: deep +--- + +# Command Line Interface + +Task CLI commands have the following syntax: + +```bash +task [options] [tasks...] [-- CLI_ARGS...] +``` + +::: tip + +If `--` is given, all remaining arguments will be assigned to a special +`CLI_ARGS` variable + +::: + +## Commands + +### `task [tasks...]` + +Run one or more tasks defined in your Taskfile. + +```bash +task build +task test lint +task deploy --force +``` + +### `task --list` + +List all available tasks with their descriptions. + +```bash +task --list +task -l +``` + +### `task --list-all` + +List all tasks, including those without descriptions. + +```bash +task --list-all +task -a +``` + +### `task --init` + +Create a new Taskfile.yml in the current directory. + +```bash +task --init +task -i +``` + +## Options + +### General + +#### `-h, --help` + +Show help information. + +```bash +task --help +``` + +#### `--version` + +Show Task version. + +```bash +task --version +``` + +#### `-v, --verbose` + +Enable verbose mode for detailed output. + +```bash +task build --verbose +``` + +#### `-s, --silent` + +Disable command echoing. + +```bash +task deploy --silent +``` + +### Execution Control + +#### `-f, --force` + +Force execution even when the task is up-to-date. + +```bash +task build --force +``` + +#### `-n, --dry` + +Compile and print tasks without executing them. + +```bash +task deploy --dry +``` + +#### `-p, --parallel` + +Execute multiple tasks in parallel. + +```bash +task test lint --parallel +``` + +#### `-C, --concurrency ` + +Limit the number of concurrent tasks. Zero means unlimited. + +```bash +task test --concurrency 4 +``` + +#### `-x, --exit-code` + +Pass through the exit code of failed commands. + +```bash +task test --exit-code +``` + +### File and Directory + +#### `-d, --dir ` + +Set the directory where Task will run and look for Taskfiles. + +```bash +task build --dir ./backend +``` + +#### `-t, --taskfile ` + +Specify a custom Taskfile path. + +```bash +task build --taskfile ./custom/Taskfile.yml +``` + +#### `-g, --global` + +Run the global Taskfile from `$HOME/Taskfile.{yml,yaml}`. + +```bash +task backup --global +``` + +### Output Control + +#### `-o, --output ` + +Set output style. Available modes: `interleaved`, `group`, `prefixed`. + +```bash +task test --output group +``` + +#### `--output-group-begin