├── .github ├── example-annotation.png ├── example-comment.png └── workflows │ ├── demo.yml │ └── tagger.yml ├── .gitignore ├── .prettierrc ├── LICENSE ├── README.md ├── action.yml ├── dist └── index.js ├── package.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── src ├── ctx.ts ├── diagnostic.ts ├── files.ts ├── index.ts └── render.ts ├── test ├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── README.md ├── package.json ├── src │ ├── app.d.ts │ ├── app.html │ ├── lib │ │ └── index.ts │ └── routes │ │ └── +page.svelte ├── static │ └── favicon.png ├── svelte.config.js ├── test.ts ├── tsconfig.json └── vite.config.ts └── tsconfig.json /.github/example-annotation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghostdevv/svelte-check-action/82ef97021a5ee0f174e04b6cae09641727fde9c4/.github/example-annotation.png -------------------------------------------------------------------------------- /.github/example-comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghostdevv/svelte-check-action/82ef97021a5ee0f174e04b6cae09641727fde9c4/.github/example-comment.png -------------------------------------------------------------------------------- /.github/workflows/demo.yml: -------------------------------------------------------------------------------- 1 | name: demo 2 | 3 | on: 4 | - pull_request 5 | - workflow_dispatch 6 | 7 | jobs: 8 | demo: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout 12 | uses: actions/checkout@v4 13 | 14 | - name: Setup Node 20.19.2 15 | uses: actions/setup-node@v4 16 | with: 17 | node-version: 20.19.2 18 | registry-url: https://registry.npmjs.org/ 19 | 20 | - name: Setup PNPM 21 | uses: pnpm/action-setup@v4.1.0 22 | 23 | - name: Install 24 | run: pnpm install 25 | 26 | # For a full documented example please checkout the README.md 27 | - name: svelte-check 28 | # uses: ghostdevv/svelte-check-action@main 29 | uses: ./ 30 | with: 31 | paths: ./test 32 | -------------------------------------------------------------------------------- /.github/workflows/tagger.yml: -------------------------------------------------------------------------------- 1 | name: Tagger 2 | 3 | on: 4 | release: 5 | types: [created, edited] 6 | 7 | jobs: 8 | actions-tagger: 9 | runs-on: ubuntu-latest 10 | 11 | permissions: 12 | contents: write 13 | 14 | steps: 15 | - name: Checkout 16 | uses: actions/checkout@v4 17 | 18 | - name: Tag Release 19 | uses: stevenjdh/action-tagger@v1 20 | with: 21 | set-latest-tag: true 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "quoteProps": "as-needed", 4 | "trailingComma": "all", 5 | "bracketSpacing": true, 6 | "arrowParens": "always", 7 | "semi": true, 8 | "useTabs": true, 9 | "tabWidth": 4, 10 | "printWidth": 100 11 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright © 2022 - Present GHOST 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Svelte Check Action 2 | 3 | Enhance your [svelte-check](http://npmjs.com/svelte-check) experience in GitHub actions by adding both comments and annotations to your PRs. 4 | 5 | ```yaml 6 | name: Svelte Check 7 | 8 | on: 9 | - pull_request 10 | 11 | jobs: 12 | demo: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout 16 | uses: actions/checkout@v4 17 | 18 | # You can replace these steps with your specific setup steps 19 | # This example assumes Node 22 and pnpm 10 20 | - name: Setup Node 22 21 | uses: actions/setup-node@v4 22 | with: 23 | node-version: 22 24 | registry-url: https://registry.npmjs.org/ 25 | 26 | - name: Setup PNPM 27 | uses: pnpm/action-setup@v4.1.0 28 | with: 29 | version: 10.11.1 30 | 31 | - name: Install 32 | run: pnpm install 33 | 34 | # Run the svelte check action 35 | - name: Svelte Check 36 | uses: ghostdevv/svelte-check-action@v1 37 | ``` 38 | 39 | This will add a comment to your PRs with any errors, for example: 40 | 41 | ![example comment](./.github/example-comment.png) 42 | 43 | and annotations to your changed files tab: 44 | 45 | ![example annotation](./.github/example-annotation.png) 46 | 47 | ## Options 48 | 49 | | Option | Description | Default | 50 | | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | 51 | | `paths` | The folder(s) to run svelte-check in, one per line. `svelte-kit sync` will be ran before diagnostics if SvelteKit is found at the folder package.json. | `.` | 52 | | `filterChanges` | When true only the files that change (in the pull request) will be checked | `true` | 53 | | `failOnError` | Should we cause CI to fail if there is a Svelte Check error? | `false` | 54 | | `failOnWarning` | Should we cause CI to fail if there is a Svelte Check warning? | `false` | 55 | | `failFilter` | When failFilter is set and either failOnError or failOnWarning is enabled, the action will only fail for issues that occur in paths matching these globs. | Disabled | 56 | | `token` | The GitHub token used to authenticate with the GitHub API. By default, GitHub generates a token for the workflow run - which we use. You can provide your own token if you like. | `${{ github.token }}` | 57 | 58 | You can configure the action by passing the options under the `with` key, for example: 59 | 60 | ```yaml 61 | - name: Svelte Check 62 | uses: ghostdevv/svelte-check-action@v1 63 | with: 64 | paths: | 65 | ./packages/app 66 | ``` 67 | 68 | ## Deprecated Options (will be removed in next major release) 69 | 70 | - Setting `GITHUB_TOKEN` environment variable is deprecated, please remove it completely if you want to use the default token managed by GitHub - or set your own using the `token` option. 71 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: 'Svelte Check for PRs' 2 | description: 'Provides a Svelte Check readout on the files in a Pull Request' 3 | 4 | # Add your action's branding here. This will appear on the GitHub Marketplace. 5 | branding: 6 | icon: 'search' 7 | color: 'orange' 8 | 9 | inputs: 10 | paths: 11 | description: 'The path(s) to run svelte-check from, one per line' 12 | required: false 13 | default: '.' 14 | filterChanges: 15 | description: 'When true only the files that change (in the pull request) will be checked' 16 | required: false 17 | default: 'true' 18 | failOnError: 19 | description: 'Should we cause CI to fail if there is a Svelte Check error?' 20 | required: false 21 | default: 'false' 22 | failOnWarning: 23 | description: 'Should we cause CI to fail if there is a Svelte Check warning?' 24 | required: false 25 | default: 'false' 26 | failFilter: 27 | description: 'When failFilter is set and either failOnError or failOnWarning is enabled, the action will only fail for issues that occur in paths matching these globes.' 28 | required: false 29 | default: '**' 30 | token: 31 | description: The GitHub token used to authenticate with the GitHub API. By default, GitHub generates a token for the workflow run - which we use. You can provide your own token if you like. 32 | required: false 33 | default: ${{ github.token }} 34 | 35 | runs: 36 | using: 'node20' 37 | main: 'dist/index.js' 38 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-check-action", 3 | "version": "1.4.0", 4 | "private": true, 5 | "exports": { 6 | ".": "./dist/index.js" 7 | }, 8 | "scripts": { 9 | "build": "tsup src/index.ts --clean --format cjs" 10 | }, 11 | "devDependencies": { 12 | "@actions/core": "^1.11.1", 13 | "@actions/github": "^6.0.0", 14 | "@types/node": "^20.17.10", 15 | "@types/picomatch": "^3.0.1", 16 | "date-fns": "^4.1.0", 17 | "nanoexec": "^1.1.0", 18 | "picomatch": "^4.0.2", 19 | "tsup": "^8.3.5", 20 | "typescript": "^5.7.2", 21 | "zod": "^3.24.1" 22 | }, 23 | "packageManager": "pnpm@10.11.1", 24 | "volta": { 25 | "node": "20.19.2", 26 | "pnpm": "10.11.1" 27 | }, 28 | "engines": { 29 | "pnpm": "10.11.1", 30 | "npm": "forbidden, use pnpm", 31 | "node": "^20.19.2" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@actions/core': 12 | specifier: ^1.11.1 13 | version: 1.11.1 14 | '@actions/github': 15 | specifier: ^6.0.0 16 | version: 6.0.0 17 | '@types/node': 18 | specifier: ^20.17.10 19 | version: 20.17.10 20 | '@types/picomatch': 21 | specifier: ^3.0.1 22 | version: 3.0.1 23 | date-fns: 24 | specifier: ^4.1.0 25 | version: 4.1.0 26 | nanoexec: 27 | specifier: ^1.1.0 28 | version: 1.1.0(@types/node@20.17.10) 29 | picomatch: 30 | specifier: ^4.0.2 31 | version: 4.0.2 32 | tsup: 33 | specifier: ^8.3.5 34 | version: 8.3.5(postcss@8.4.49)(typescript@5.7.2) 35 | typescript: 36 | specifier: ^5.7.2 37 | version: 5.7.2 38 | zod: 39 | specifier: ^3.24.1 40 | version: 3.24.1 41 | 42 | test: 43 | devDependencies: 44 | '@sveltejs/adapter-auto': 45 | specifier: ^3.3.1 46 | version: 3.3.1(@sveltejs/kit@2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)))(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2))) 47 | '@sveltejs/kit': 48 | specifier: ^2.15.1 49 | version: 2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)))(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)) 50 | '@sveltejs/vite-plugin-svelte': 51 | specifier: ^5.0.3 52 | version: 5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)) 53 | prettier: 54 | specifier: ^3.4.2 55 | version: 3.4.2 56 | prettier-plugin-svelte: 57 | specifier: ^3.3.2 58 | version: 3.3.2(prettier@3.4.2)(svelte@5.16.0) 59 | svelte: 60 | specifier: ^5.16.0 61 | version: 5.16.0 62 | svelte-check: 63 | specifier: ^4.1.1 64 | version: 4.1.1(picomatch@4.0.2)(svelte@5.16.0)(typescript@5.7.2) 65 | tslib: 66 | specifier: ^2.8.1 67 | version: 2.8.1 68 | typescript: 69 | specifier: ^5.7.2 70 | version: 5.7.2 71 | vite: 72 | specifier: ^6.0.6 73 | version: 6.0.6(@types/node@22.10.2) 74 | 75 | packages: 76 | 77 | '@actions/core@1.11.1': 78 | resolution: {integrity: sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==} 79 | 80 | '@actions/exec@1.1.1': 81 | resolution: {integrity: sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==} 82 | 83 | '@actions/github@6.0.0': 84 | resolution: {integrity: sha512-alScpSVnYmjNEXboZjarjukQEzgCRmjMv6Xj47fsdnqGS73bjJNDpiiXmp8jr0UZLdUB6d9jW63IcmddUP+l0g==} 85 | 86 | '@actions/http-client@2.2.3': 87 | resolution: {integrity: sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==} 88 | 89 | '@actions/io@1.1.3': 90 | resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==} 91 | 92 | '@ampproject/remapping@2.3.0': 93 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 94 | engines: {node: '>=6.0.0'} 95 | 96 | '@esbuild/aix-ppc64@0.24.2': 97 | resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} 98 | engines: {node: '>=18'} 99 | cpu: [ppc64] 100 | os: [aix] 101 | 102 | '@esbuild/android-arm64@0.24.2': 103 | resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} 104 | engines: {node: '>=18'} 105 | cpu: [arm64] 106 | os: [android] 107 | 108 | '@esbuild/android-arm@0.24.2': 109 | resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} 110 | engines: {node: '>=18'} 111 | cpu: [arm] 112 | os: [android] 113 | 114 | '@esbuild/android-x64@0.24.2': 115 | resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} 116 | engines: {node: '>=18'} 117 | cpu: [x64] 118 | os: [android] 119 | 120 | '@esbuild/darwin-arm64@0.24.2': 121 | resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} 122 | engines: {node: '>=18'} 123 | cpu: [arm64] 124 | os: [darwin] 125 | 126 | '@esbuild/darwin-x64@0.24.2': 127 | resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} 128 | engines: {node: '>=18'} 129 | cpu: [x64] 130 | os: [darwin] 131 | 132 | '@esbuild/freebsd-arm64@0.24.2': 133 | resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} 134 | engines: {node: '>=18'} 135 | cpu: [arm64] 136 | os: [freebsd] 137 | 138 | '@esbuild/freebsd-x64@0.24.2': 139 | resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} 140 | engines: {node: '>=18'} 141 | cpu: [x64] 142 | os: [freebsd] 143 | 144 | '@esbuild/linux-arm64@0.24.2': 145 | resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} 146 | engines: {node: '>=18'} 147 | cpu: [arm64] 148 | os: [linux] 149 | 150 | '@esbuild/linux-arm@0.24.2': 151 | resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} 152 | engines: {node: '>=18'} 153 | cpu: [arm] 154 | os: [linux] 155 | 156 | '@esbuild/linux-ia32@0.24.2': 157 | resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} 158 | engines: {node: '>=18'} 159 | cpu: [ia32] 160 | os: [linux] 161 | 162 | '@esbuild/linux-loong64@0.24.2': 163 | resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} 164 | engines: {node: '>=18'} 165 | cpu: [loong64] 166 | os: [linux] 167 | 168 | '@esbuild/linux-mips64el@0.24.2': 169 | resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} 170 | engines: {node: '>=18'} 171 | cpu: [mips64el] 172 | os: [linux] 173 | 174 | '@esbuild/linux-ppc64@0.24.2': 175 | resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} 176 | engines: {node: '>=18'} 177 | cpu: [ppc64] 178 | os: [linux] 179 | 180 | '@esbuild/linux-riscv64@0.24.2': 181 | resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} 182 | engines: {node: '>=18'} 183 | cpu: [riscv64] 184 | os: [linux] 185 | 186 | '@esbuild/linux-s390x@0.24.2': 187 | resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} 188 | engines: {node: '>=18'} 189 | cpu: [s390x] 190 | os: [linux] 191 | 192 | '@esbuild/linux-x64@0.24.2': 193 | resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} 194 | engines: {node: '>=18'} 195 | cpu: [x64] 196 | os: [linux] 197 | 198 | '@esbuild/netbsd-arm64@0.24.2': 199 | resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} 200 | engines: {node: '>=18'} 201 | cpu: [arm64] 202 | os: [netbsd] 203 | 204 | '@esbuild/netbsd-x64@0.24.2': 205 | resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} 206 | engines: {node: '>=18'} 207 | cpu: [x64] 208 | os: [netbsd] 209 | 210 | '@esbuild/openbsd-arm64@0.24.2': 211 | resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} 212 | engines: {node: '>=18'} 213 | cpu: [arm64] 214 | os: [openbsd] 215 | 216 | '@esbuild/openbsd-x64@0.24.2': 217 | resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} 218 | engines: {node: '>=18'} 219 | cpu: [x64] 220 | os: [openbsd] 221 | 222 | '@esbuild/sunos-x64@0.24.2': 223 | resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} 224 | engines: {node: '>=18'} 225 | cpu: [x64] 226 | os: [sunos] 227 | 228 | '@esbuild/win32-arm64@0.24.2': 229 | resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} 230 | engines: {node: '>=18'} 231 | cpu: [arm64] 232 | os: [win32] 233 | 234 | '@esbuild/win32-ia32@0.24.2': 235 | resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} 236 | engines: {node: '>=18'} 237 | cpu: [ia32] 238 | os: [win32] 239 | 240 | '@esbuild/win32-x64@0.24.2': 241 | resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} 242 | engines: {node: '>=18'} 243 | cpu: [x64] 244 | os: [win32] 245 | 246 | '@fastify/busboy@2.1.1': 247 | resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} 248 | engines: {node: '>=14'} 249 | 250 | '@isaacs/cliui@8.0.2': 251 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 252 | engines: {node: '>=12'} 253 | 254 | '@jridgewell/gen-mapping@0.3.8': 255 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 256 | engines: {node: '>=6.0.0'} 257 | 258 | '@jridgewell/resolve-uri@3.1.2': 259 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 260 | engines: {node: '>=6.0.0'} 261 | 262 | '@jridgewell/set-array@1.2.1': 263 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 264 | engines: {node: '>=6.0.0'} 265 | 266 | '@jridgewell/sourcemap-codec@1.5.0': 267 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 268 | 269 | '@jridgewell/trace-mapping@0.3.25': 270 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 271 | 272 | '@octokit/auth-token@4.0.0': 273 | resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} 274 | engines: {node: '>= 18'} 275 | 276 | '@octokit/core@5.2.0': 277 | resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} 278 | engines: {node: '>= 18'} 279 | 280 | '@octokit/endpoint@9.0.5': 281 | resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==} 282 | engines: {node: '>= 18'} 283 | 284 | '@octokit/graphql@7.1.0': 285 | resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==} 286 | engines: {node: '>= 18'} 287 | 288 | '@octokit/openapi-types@20.0.0': 289 | resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} 290 | 291 | '@octokit/openapi-types@22.2.0': 292 | resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} 293 | 294 | '@octokit/plugin-paginate-rest@9.2.1': 295 | resolution: {integrity: sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==} 296 | engines: {node: '>= 18'} 297 | peerDependencies: 298 | '@octokit/core': '5' 299 | 300 | '@octokit/plugin-rest-endpoint-methods@10.4.1': 301 | resolution: {integrity: sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==} 302 | engines: {node: '>= 18'} 303 | peerDependencies: 304 | '@octokit/core': '5' 305 | 306 | '@octokit/request-error@5.1.0': 307 | resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==} 308 | engines: {node: '>= 18'} 309 | 310 | '@octokit/request@8.4.0': 311 | resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==} 312 | engines: {node: '>= 18'} 313 | 314 | '@octokit/types@12.6.0': 315 | resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} 316 | 317 | '@octokit/types@13.6.2': 318 | resolution: {integrity: sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==} 319 | 320 | '@pkgjs/parseargs@0.11.0': 321 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 322 | engines: {node: '>=14'} 323 | 324 | '@polka/url@1.0.0-next.28': 325 | resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} 326 | 327 | '@rollup/rollup-android-arm-eabi@4.29.1': 328 | resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==} 329 | cpu: [arm] 330 | os: [android] 331 | 332 | '@rollup/rollup-android-arm64@4.29.1': 333 | resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==} 334 | cpu: [arm64] 335 | os: [android] 336 | 337 | '@rollup/rollup-darwin-arm64@4.29.1': 338 | resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==} 339 | cpu: [arm64] 340 | os: [darwin] 341 | 342 | '@rollup/rollup-darwin-x64@4.29.1': 343 | resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==} 344 | cpu: [x64] 345 | os: [darwin] 346 | 347 | '@rollup/rollup-freebsd-arm64@4.29.1': 348 | resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==} 349 | cpu: [arm64] 350 | os: [freebsd] 351 | 352 | '@rollup/rollup-freebsd-x64@4.29.1': 353 | resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==} 354 | cpu: [x64] 355 | os: [freebsd] 356 | 357 | '@rollup/rollup-linux-arm-gnueabihf@4.29.1': 358 | resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==} 359 | cpu: [arm] 360 | os: [linux] 361 | 362 | '@rollup/rollup-linux-arm-musleabihf@4.29.1': 363 | resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==} 364 | cpu: [arm] 365 | os: [linux] 366 | 367 | '@rollup/rollup-linux-arm64-gnu@4.29.1': 368 | resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==} 369 | cpu: [arm64] 370 | os: [linux] 371 | 372 | '@rollup/rollup-linux-arm64-musl@4.29.1': 373 | resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==} 374 | cpu: [arm64] 375 | os: [linux] 376 | 377 | '@rollup/rollup-linux-loongarch64-gnu@4.29.1': 378 | resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==} 379 | cpu: [loong64] 380 | os: [linux] 381 | 382 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': 383 | resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==} 384 | cpu: [ppc64] 385 | os: [linux] 386 | 387 | '@rollup/rollup-linux-riscv64-gnu@4.29.1': 388 | resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==} 389 | cpu: [riscv64] 390 | os: [linux] 391 | 392 | '@rollup/rollup-linux-s390x-gnu@4.29.1': 393 | resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==} 394 | cpu: [s390x] 395 | os: [linux] 396 | 397 | '@rollup/rollup-linux-x64-gnu@4.29.1': 398 | resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==} 399 | cpu: [x64] 400 | os: [linux] 401 | 402 | '@rollup/rollup-linux-x64-musl@4.29.1': 403 | resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==} 404 | cpu: [x64] 405 | os: [linux] 406 | 407 | '@rollup/rollup-win32-arm64-msvc@4.29.1': 408 | resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==} 409 | cpu: [arm64] 410 | os: [win32] 411 | 412 | '@rollup/rollup-win32-ia32-msvc@4.29.1': 413 | resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==} 414 | cpu: [ia32] 415 | os: [win32] 416 | 417 | '@rollup/rollup-win32-x64-msvc@4.29.1': 418 | resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==} 419 | cpu: [x64] 420 | os: [win32] 421 | 422 | '@sveltejs/adapter-auto@3.3.1': 423 | resolution: {integrity: sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==} 424 | peerDependencies: 425 | '@sveltejs/kit': ^2.0.0 426 | 427 | '@sveltejs/kit@2.15.1': 428 | resolution: {integrity: sha512-8t7D3hQHbUDMiaQ2RVnjJJ/+Ur4Fn/tkeySJCsHtX346Q9cp3LAnav8xXdfuqYNJwpUGX0x3BqF1uvbmXQw93A==} 429 | engines: {node: '>=18.13'} 430 | hasBin: true 431 | peerDependencies: 432 | '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 433 | svelte: ^4.0.0 || ^5.0.0-next.0 434 | vite: ^5.0.3 || ^6.0.0 435 | 436 | '@sveltejs/vite-plugin-svelte-inspector@4.0.1': 437 | resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} 438 | engines: {node: ^18.0.0 || ^20.0.0 || >=22} 439 | peerDependencies: 440 | '@sveltejs/vite-plugin-svelte': ^5.0.0 441 | svelte: ^5.0.0 442 | vite: ^6.0.0 443 | 444 | '@sveltejs/vite-plugin-svelte@5.0.3': 445 | resolution: {integrity: sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==} 446 | engines: {node: ^18.0.0 || ^20.0.0 || >=22} 447 | peerDependencies: 448 | svelte: ^5.0.0 449 | vite: ^6.0.0 450 | 451 | '@types/cookie@0.6.0': 452 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} 453 | 454 | '@types/estree@1.0.6': 455 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 456 | 457 | '@types/node@20.17.10': 458 | resolution: {integrity: sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==} 459 | 460 | '@types/node@22.10.2': 461 | resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} 462 | 463 | '@types/picomatch@3.0.1': 464 | resolution: {integrity: sha512-1MRgzpzY0hOp9pW/kLRxeQhUWwil6gnrUYd3oEpeYBqp/FexhaCPv3F8LsYr47gtUU45fO2cm1dbwkSrHEo8Uw==} 465 | 466 | acorn-typescript@1.4.13: 467 | resolution: {integrity: sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==} 468 | peerDependencies: 469 | acorn: '>=8.9.0' 470 | 471 | acorn@8.14.0: 472 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 473 | engines: {node: '>=0.4.0'} 474 | hasBin: true 475 | 476 | ansi-regex@5.0.1: 477 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 478 | engines: {node: '>=8'} 479 | 480 | ansi-regex@6.1.0: 481 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 482 | engines: {node: '>=12'} 483 | 484 | ansi-styles@4.3.0: 485 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 486 | engines: {node: '>=8'} 487 | 488 | ansi-styles@6.2.1: 489 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 490 | engines: {node: '>=12'} 491 | 492 | any-promise@1.3.0: 493 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 494 | 495 | aria-query@5.3.2: 496 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 497 | engines: {node: '>= 0.4'} 498 | 499 | axobject-query@4.1.0: 500 | resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 501 | engines: {node: '>= 0.4'} 502 | 503 | balanced-match@1.0.2: 504 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 505 | 506 | before-after-hook@2.2.3: 507 | resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} 508 | 509 | brace-expansion@2.0.1: 510 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 511 | 512 | bundle-require@5.1.0: 513 | resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} 514 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 515 | peerDependencies: 516 | esbuild: '>=0.18' 517 | 518 | cac@6.7.14: 519 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 520 | engines: {node: '>=8'} 521 | 522 | chokidar@4.0.3: 523 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 524 | engines: {node: '>= 14.16.0'} 525 | 526 | clsx@2.1.1: 527 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 528 | engines: {node: '>=6'} 529 | 530 | color-convert@2.0.1: 531 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 532 | engines: {node: '>=7.0.0'} 533 | 534 | color-name@1.1.4: 535 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 536 | 537 | commander@4.1.1: 538 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 539 | engines: {node: '>= 6'} 540 | 541 | consola@3.3.3: 542 | resolution: {integrity: sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==} 543 | engines: {node: ^14.18.0 || >=16.10.0} 544 | 545 | cookie@0.6.0: 546 | resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} 547 | engines: {node: '>= 0.6'} 548 | 549 | cross-spawn@7.0.6: 550 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 551 | engines: {node: '>= 8'} 552 | 553 | date-fns@4.1.0: 554 | resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} 555 | 556 | debug@4.4.0: 557 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 558 | engines: {node: '>=6.0'} 559 | peerDependencies: 560 | supports-color: '*' 561 | peerDependenciesMeta: 562 | supports-color: 563 | optional: true 564 | 565 | deepmerge@4.3.1: 566 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 567 | engines: {node: '>=0.10.0'} 568 | 569 | deprecation@2.3.1: 570 | resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} 571 | 572 | devalue@5.1.1: 573 | resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} 574 | 575 | eastasianwidth@0.2.0: 576 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 577 | 578 | emoji-regex@8.0.0: 579 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 580 | 581 | emoji-regex@9.2.2: 582 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 583 | 584 | esbuild@0.24.2: 585 | resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} 586 | engines: {node: '>=18'} 587 | hasBin: true 588 | 589 | esm-env@1.2.1: 590 | resolution: {integrity: sha512-U9JedYYjCnadUlXk7e1Kr+aENQhtUaoaV9+gZm1T8LC/YBAPJx3NSPIAurFOC0U5vrdSevnUJS2/wUVxGwPhng==} 591 | 592 | esrap@1.3.2: 593 | resolution: {integrity: sha512-C4PXusxYhFT98GjLSmb20k9PREuUdporer50dhzGuJu9IJXktbMddVCMLAERl5dAHyAi73GWWCE4FVHGP1794g==} 594 | 595 | fdir@6.4.2: 596 | resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} 597 | peerDependencies: 598 | picomatch: ^3 || ^4 599 | peerDependenciesMeta: 600 | picomatch: 601 | optional: true 602 | 603 | foreground-child@3.3.0: 604 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 605 | engines: {node: '>=14'} 606 | 607 | fsevents@2.3.3: 608 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 609 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 610 | os: [darwin] 611 | 612 | glob@10.4.5: 613 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 614 | hasBin: true 615 | 616 | globalyzer@0.1.0: 617 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} 618 | 619 | globrex@0.1.2: 620 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 621 | 622 | import-meta-resolve@4.1.0: 623 | resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} 624 | 625 | is-fullwidth-code-point@3.0.0: 626 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 627 | engines: {node: '>=8'} 628 | 629 | is-reference@3.0.3: 630 | resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} 631 | 632 | isexe@2.0.0: 633 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 634 | 635 | jackspeak@3.4.3: 636 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 637 | 638 | joycon@3.1.1: 639 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 640 | engines: {node: '>=10'} 641 | 642 | kleur@4.1.5: 643 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 644 | engines: {node: '>=6'} 645 | 646 | lilconfig@3.1.3: 647 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 648 | engines: {node: '>=14'} 649 | 650 | lines-and-columns@1.2.4: 651 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 652 | 653 | load-tsconfig@0.2.5: 654 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 655 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 656 | 657 | locate-character@3.0.0: 658 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 659 | 660 | lodash.sortby@4.7.0: 661 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 662 | 663 | lru-cache@10.4.3: 664 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 665 | 666 | magic-string@0.30.17: 667 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 668 | 669 | minimatch@9.0.5: 670 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 671 | engines: {node: '>=16 || 14 >=14.17'} 672 | 673 | minipass@7.1.2: 674 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 675 | engines: {node: '>=16 || 14 >=14.17'} 676 | 677 | mri@1.2.0: 678 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 679 | engines: {node: '>=4'} 680 | 681 | mrmime@2.0.0: 682 | resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} 683 | engines: {node: '>=10'} 684 | 685 | ms@2.1.3: 686 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 687 | 688 | mz@2.7.0: 689 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 690 | 691 | nanoexec@1.1.0: 692 | resolution: {integrity: sha512-AFEBFWI+4vgstL3Czpbn8yCKBgN+b2d0qPdBCjmrOf9OOUUpLqBr+JocLJCfA5OYxKSmoOdEm6OWO5QraTNtDg==} 693 | peerDependencies: 694 | '@types/node': '*' 695 | 696 | nanoid@3.3.8: 697 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 698 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 699 | hasBin: true 700 | 701 | object-assign@4.1.1: 702 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 703 | engines: {node: '>=0.10.0'} 704 | 705 | once@1.4.0: 706 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 707 | 708 | package-json-from-dist@1.0.1: 709 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 710 | 711 | path-key@3.1.1: 712 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 713 | engines: {node: '>=8'} 714 | 715 | path-scurry@1.11.1: 716 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 717 | engines: {node: '>=16 || 14 >=14.18'} 718 | 719 | picocolors@1.1.1: 720 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 721 | 722 | picomatch@4.0.2: 723 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 724 | engines: {node: '>=12'} 725 | 726 | pirates@4.0.6: 727 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 728 | engines: {node: '>= 6'} 729 | 730 | postcss-load-config@6.0.1: 731 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} 732 | engines: {node: '>= 18'} 733 | peerDependencies: 734 | jiti: '>=1.21.0' 735 | postcss: '>=8.0.9' 736 | tsx: ^4.8.1 737 | yaml: ^2.4.2 738 | peerDependenciesMeta: 739 | jiti: 740 | optional: true 741 | postcss: 742 | optional: true 743 | tsx: 744 | optional: true 745 | yaml: 746 | optional: true 747 | 748 | postcss@8.4.49: 749 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 750 | engines: {node: ^10 || ^12 || >=14} 751 | 752 | prettier-plugin-svelte@3.3.2: 753 | resolution: {integrity: sha512-kRPjH8wSj2iu+dO+XaUv4vD8qr5mdDmlak3IT/7AOgGIMRG86z/EHOLauFcClKEnOUf4A4nOA7sre5KrJD4Raw==} 754 | peerDependencies: 755 | prettier: ^3.0.0 756 | svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 757 | 758 | prettier@3.4.2: 759 | resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} 760 | engines: {node: '>=14'} 761 | hasBin: true 762 | 763 | promise-make-naked@3.0.0: 764 | resolution: {integrity: sha512-h71wwAMB2udFnlPmcxQMqKl6CckNLVKdk/ROtFivE6/VmW+rQKV0DWlGJ6VphRIoq22Tkonvdi3F+jlm5XDlow==} 765 | 766 | punycode@2.3.1: 767 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 768 | engines: {node: '>=6'} 769 | 770 | readdirp@4.0.2: 771 | resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} 772 | engines: {node: '>= 14.16.0'} 773 | 774 | resolve-from@5.0.0: 775 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 776 | engines: {node: '>=8'} 777 | 778 | rollup@4.29.1: 779 | resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==} 780 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 781 | hasBin: true 782 | 783 | sade@1.8.1: 784 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 785 | engines: {node: '>=6'} 786 | 787 | set-cookie-parser@2.7.1: 788 | resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} 789 | 790 | shebang-command@2.0.0: 791 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 792 | engines: {node: '>=8'} 793 | 794 | shebang-regex@3.0.0: 795 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 796 | engines: {node: '>=8'} 797 | 798 | signal-exit@4.1.0: 799 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 800 | engines: {node: '>=14'} 801 | 802 | sirv@3.0.0: 803 | resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} 804 | engines: {node: '>=18'} 805 | 806 | source-map-js@1.2.1: 807 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 808 | engines: {node: '>=0.10.0'} 809 | 810 | source-map@0.8.0-beta.0: 811 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 812 | engines: {node: '>= 8'} 813 | 814 | string-width@4.2.3: 815 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 816 | engines: {node: '>=8'} 817 | 818 | string-width@5.1.2: 819 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 820 | engines: {node: '>=12'} 821 | 822 | strip-ansi@6.0.1: 823 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 824 | engines: {node: '>=8'} 825 | 826 | strip-ansi@7.1.0: 827 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 828 | engines: {node: '>=12'} 829 | 830 | sucrase@3.35.0: 831 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 832 | engines: {node: '>=16 || 14 >=14.17'} 833 | hasBin: true 834 | 835 | svelte-check@4.1.1: 836 | resolution: {integrity: sha512-NfaX+6Qtc8W/CyVGS/F7/XdiSSyXz+WGYA9ZWV3z8tso14V2vzjfXviKaTFEzB7g8TqfgO2FOzP6XT4ApSTUTw==} 837 | engines: {node: '>= 18.0.0'} 838 | hasBin: true 839 | peerDependencies: 840 | svelte: ^4.0.0 || ^5.0.0-next.0 841 | typescript: '>=5.0.0' 842 | 843 | svelte@5.16.0: 844 | resolution: {integrity: sha512-Ygqsiac6UogVED2ruKclU+pOeMThxWtp9LG+li7BXeDKC2paVIsRTMkNmcON4Zejerd1s5sZHWx6ZtU85xklVg==} 845 | engines: {node: '>=18'} 846 | 847 | thenify-all@1.6.0: 848 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 849 | engines: {node: '>=0.8'} 850 | 851 | thenify@3.3.1: 852 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 853 | 854 | tiny-glob@0.2.9: 855 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} 856 | 857 | tinyexec@0.3.1: 858 | resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} 859 | 860 | tinyglobby@0.2.10: 861 | resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} 862 | engines: {node: '>=12.0.0'} 863 | 864 | totalist@3.0.1: 865 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 866 | engines: {node: '>=6'} 867 | 868 | tr46@1.0.1: 869 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 870 | 871 | tree-kill@1.2.2: 872 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 873 | hasBin: true 874 | 875 | ts-interface-checker@0.1.13: 876 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 877 | 878 | tslib@2.8.1: 879 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 880 | 881 | tsup@8.3.5: 882 | resolution: {integrity: sha512-Tunf6r6m6tnZsG9GYWndg0z8dEV7fD733VBFzFJ5Vcm1FtlXB8xBD/rtrBi2a3YKEV7hHtxiZtW5EAVADoe1pA==} 883 | engines: {node: '>=18'} 884 | hasBin: true 885 | peerDependencies: 886 | '@microsoft/api-extractor': ^7.36.0 887 | '@swc/core': ^1 888 | postcss: ^8.4.12 889 | typescript: '>=4.5.0' 890 | peerDependenciesMeta: 891 | '@microsoft/api-extractor': 892 | optional: true 893 | '@swc/core': 894 | optional: true 895 | postcss: 896 | optional: true 897 | typescript: 898 | optional: true 899 | 900 | tunnel@0.0.6: 901 | resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} 902 | engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} 903 | 904 | typescript@5.7.2: 905 | resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} 906 | engines: {node: '>=14.17'} 907 | hasBin: true 908 | 909 | undici-types@6.19.8: 910 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 911 | 912 | undici-types@6.20.0: 913 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 914 | 915 | undici@5.28.4: 916 | resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} 917 | engines: {node: '>=14.0'} 918 | 919 | universal-user-agent@6.0.1: 920 | resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} 921 | 922 | vite@6.0.6: 923 | resolution: {integrity: sha512-NSjmUuckPmDU18bHz7QZ+bTYhRR0iA72cs2QAxCqDpafJ0S6qetco0LB3WW2OxlMHS0JmAv+yZ/R3uPmMyGTjQ==} 924 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 925 | hasBin: true 926 | peerDependencies: 927 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 928 | jiti: '>=1.21.0' 929 | less: '*' 930 | lightningcss: ^1.21.0 931 | sass: '*' 932 | sass-embedded: '*' 933 | stylus: '*' 934 | sugarss: '*' 935 | terser: ^5.16.0 936 | tsx: ^4.8.1 937 | yaml: ^2.4.2 938 | peerDependenciesMeta: 939 | '@types/node': 940 | optional: true 941 | jiti: 942 | optional: true 943 | less: 944 | optional: true 945 | lightningcss: 946 | optional: true 947 | sass: 948 | optional: true 949 | sass-embedded: 950 | optional: true 951 | stylus: 952 | optional: true 953 | sugarss: 954 | optional: true 955 | terser: 956 | optional: true 957 | tsx: 958 | optional: true 959 | yaml: 960 | optional: true 961 | 962 | vitefu@1.0.4: 963 | resolution: {integrity: sha512-y6zEE3PQf6uu/Mt6DTJ9ih+kyJLr4XcSgHR2zUkM8SWDhuixEJxfJ6CZGMHh1Ec3vPLoEA0IHU5oWzVqw8ulow==} 964 | peerDependencies: 965 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 966 | peerDependenciesMeta: 967 | vite: 968 | optional: true 969 | 970 | webidl-conversions@4.0.2: 971 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 972 | 973 | whatwg-url@7.1.0: 974 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 975 | 976 | which@2.0.2: 977 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 978 | engines: {node: '>= 8'} 979 | hasBin: true 980 | 981 | wrap-ansi@7.0.0: 982 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 983 | engines: {node: '>=10'} 984 | 985 | wrap-ansi@8.1.0: 986 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 987 | engines: {node: '>=12'} 988 | 989 | wrappy@1.0.2: 990 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 991 | 992 | zimmerframe@1.1.2: 993 | resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} 994 | 995 | zod@3.24.1: 996 | resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} 997 | 998 | snapshots: 999 | 1000 | '@actions/core@1.11.1': 1001 | dependencies: 1002 | '@actions/exec': 1.1.1 1003 | '@actions/http-client': 2.2.3 1004 | 1005 | '@actions/exec@1.1.1': 1006 | dependencies: 1007 | '@actions/io': 1.1.3 1008 | 1009 | '@actions/github@6.0.0': 1010 | dependencies: 1011 | '@actions/http-client': 2.2.3 1012 | '@octokit/core': 5.2.0 1013 | '@octokit/plugin-paginate-rest': 9.2.1(@octokit/core@5.2.0) 1014 | '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.0) 1015 | 1016 | '@actions/http-client@2.2.3': 1017 | dependencies: 1018 | tunnel: 0.0.6 1019 | undici: 5.28.4 1020 | 1021 | '@actions/io@1.1.3': {} 1022 | 1023 | '@ampproject/remapping@2.3.0': 1024 | dependencies: 1025 | '@jridgewell/gen-mapping': 0.3.8 1026 | '@jridgewell/trace-mapping': 0.3.25 1027 | 1028 | '@esbuild/aix-ppc64@0.24.2': 1029 | optional: true 1030 | 1031 | '@esbuild/android-arm64@0.24.2': 1032 | optional: true 1033 | 1034 | '@esbuild/android-arm@0.24.2': 1035 | optional: true 1036 | 1037 | '@esbuild/android-x64@0.24.2': 1038 | optional: true 1039 | 1040 | '@esbuild/darwin-arm64@0.24.2': 1041 | optional: true 1042 | 1043 | '@esbuild/darwin-x64@0.24.2': 1044 | optional: true 1045 | 1046 | '@esbuild/freebsd-arm64@0.24.2': 1047 | optional: true 1048 | 1049 | '@esbuild/freebsd-x64@0.24.2': 1050 | optional: true 1051 | 1052 | '@esbuild/linux-arm64@0.24.2': 1053 | optional: true 1054 | 1055 | '@esbuild/linux-arm@0.24.2': 1056 | optional: true 1057 | 1058 | '@esbuild/linux-ia32@0.24.2': 1059 | optional: true 1060 | 1061 | '@esbuild/linux-loong64@0.24.2': 1062 | optional: true 1063 | 1064 | '@esbuild/linux-mips64el@0.24.2': 1065 | optional: true 1066 | 1067 | '@esbuild/linux-ppc64@0.24.2': 1068 | optional: true 1069 | 1070 | '@esbuild/linux-riscv64@0.24.2': 1071 | optional: true 1072 | 1073 | '@esbuild/linux-s390x@0.24.2': 1074 | optional: true 1075 | 1076 | '@esbuild/linux-x64@0.24.2': 1077 | optional: true 1078 | 1079 | '@esbuild/netbsd-arm64@0.24.2': 1080 | optional: true 1081 | 1082 | '@esbuild/netbsd-x64@0.24.2': 1083 | optional: true 1084 | 1085 | '@esbuild/openbsd-arm64@0.24.2': 1086 | optional: true 1087 | 1088 | '@esbuild/openbsd-x64@0.24.2': 1089 | optional: true 1090 | 1091 | '@esbuild/sunos-x64@0.24.2': 1092 | optional: true 1093 | 1094 | '@esbuild/win32-arm64@0.24.2': 1095 | optional: true 1096 | 1097 | '@esbuild/win32-ia32@0.24.2': 1098 | optional: true 1099 | 1100 | '@esbuild/win32-x64@0.24.2': 1101 | optional: true 1102 | 1103 | '@fastify/busboy@2.1.1': {} 1104 | 1105 | '@isaacs/cliui@8.0.2': 1106 | dependencies: 1107 | string-width: 5.1.2 1108 | string-width-cjs: string-width@4.2.3 1109 | strip-ansi: 7.1.0 1110 | strip-ansi-cjs: strip-ansi@6.0.1 1111 | wrap-ansi: 8.1.0 1112 | wrap-ansi-cjs: wrap-ansi@7.0.0 1113 | 1114 | '@jridgewell/gen-mapping@0.3.8': 1115 | dependencies: 1116 | '@jridgewell/set-array': 1.2.1 1117 | '@jridgewell/sourcemap-codec': 1.5.0 1118 | '@jridgewell/trace-mapping': 0.3.25 1119 | 1120 | '@jridgewell/resolve-uri@3.1.2': {} 1121 | 1122 | '@jridgewell/set-array@1.2.1': {} 1123 | 1124 | '@jridgewell/sourcemap-codec@1.5.0': {} 1125 | 1126 | '@jridgewell/trace-mapping@0.3.25': 1127 | dependencies: 1128 | '@jridgewell/resolve-uri': 3.1.2 1129 | '@jridgewell/sourcemap-codec': 1.5.0 1130 | 1131 | '@octokit/auth-token@4.0.0': {} 1132 | 1133 | '@octokit/core@5.2.0': 1134 | dependencies: 1135 | '@octokit/auth-token': 4.0.0 1136 | '@octokit/graphql': 7.1.0 1137 | '@octokit/request': 8.4.0 1138 | '@octokit/request-error': 5.1.0 1139 | '@octokit/types': 13.6.2 1140 | before-after-hook: 2.2.3 1141 | universal-user-agent: 6.0.1 1142 | 1143 | '@octokit/endpoint@9.0.5': 1144 | dependencies: 1145 | '@octokit/types': 13.6.2 1146 | universal-user-agent: 6.0.1 1147 | 1148 | '@octokit/graphql@7.1.0': 1149 | dependencies: 1150 | '@octokit/request': 8.4.0 1151 | '@octokit/types': 13.6.2 1152 | universal-user-agent: 6.0.1 1153 | 1154 | '@octokit/openapi-types@20.0.0': {} 1155 | 1156 | '@octokit/openapi-types@22.2.0': {} 1157 | 1158 | '@octokit/plugin-paginate-rest@9.2.1(@octokit/core@5.2.0)': 1159 | dependencies: 1160 | '@octokit/core': 5.2.0 1161 | '@octokit/types': 12.6.0 1162 | 1163 | '@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.2.0)': 1164 | dependencies: 1165 | '@octokit/core': 5.2.0 1166 | '@octokit/types': 12.6.0 1167 | 1168 | '@octokit/request-error@5.1.0': 1169 | dependencies: 1170 | '@octokit/types': 13.6.2 1171 | deprecation: 2.3.1 1172 | once: 1.4.0 1173 | 1174 | '@octokit/request@8.4.0': 1175 | dependencies: 1176 | '@octokit/endpoint': 9.0.5 1177 | '@octokit/request-error': 5.1.0 1178 | '@octokit/types': 13.6.2 1179 | universal-user-agent: 6.0.1 1180 | 1181 | '@octokit/types@12.6.0': 1182 | dependencies: 1183 | '@octokit/openapi-types': 20.0.0 1184 | 1185 | '@octokit/types@13.6.2': 1186 | dependencies: 1187 | '@octokit/openapi-types': 22.2.0 1188 | 1189 | '@pkgjs/parseargs@0.11.0': 1190 | optional: true 1191 | 1192 | '@polka/url@1.0.0-next.28': {} 1193 | 1194 | '@rollup/rollup-android-arm-eabi@4.29.1': 1195 | optional: true 1196 | 1197 | '@rollup/rollup-android-arm64@4.29.1': 1198 | optional: true 1199 | 1200 | '@rollup/rollup-darwin-arm64@4.29.1': 1201 | optional: true 1202 | 1203 | '@rollup/rollup-darwin-x64@4.29.1': 1204 | optional: true 1205 | 1206 | '@rollup/rollup-freebsd-arm64@4.29.1': 1207 | optional: true 1208 | 1209 | '@rollup/rollup-freebsd-x64@4.29.1': 1210 | optional: true 1211 | 1212 | '@rollup/rollup-linux-arm-gnueabihf@4.29.1': 1213 | optional: true 1214 | 1215 | '@rollup/rollup-linux-arm-musleabihf@4.29.1': 1216 | optional: true 1217 | 1218 | '@rollup/rollup-linux-arm64-gnu@4.29.1': 1219 | optional: true 1220 | 1221 | '@rollup/rollup-linux-arm64-musl@4.29.1': 1222 | optional: true 1223 | 1224 | '@rollup/rollup-linux-loongarch64-gnu@4.29.1': 1225 | optional: true 1226 | 1227 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': 1228 | optional: true 1229 | 1230 | '@rollup/rollup-linux-riscv64-gnu@4.29.1': 1231 | optional: true 1232 | 1233 | '@rollup/rollup-linux-s390x-gnu@4.29.1': 1234 | optional: true 1235 | 1236 | '@rollup/rollup-linux-x64-gnu@4.29.1': 1237 | optional: true 1238 | 1239 | '@rollup/rollup-linux-x64-musl@4.29.1': 1240 | optional: true 1241 | 1242 | '@rollup/rollup-win32-arm64-msvc@4.29.1': 1243 | optional: true 1244 | 1245 | '@rollup/rollup-win32-ia32-msvc@4.29.1': 1246 | optional: true 1247 | 1248 | '@rollup/rollup-win32-x64-msvc@4.29.1': 1249 | optional: true 1250 | 1251 | '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)))(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)))': 1252 | dependencies: 1253 | '@sveltejs/kit': 2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)))(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)) 1254 | import-meta-resolve: 4.1.0 1255 | 1256 | '@sveltejs/kit@2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)))(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2))': 1257 | dependencies: 1258 | '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)) 1259 | '@types/cookie': 0.6.0 1260 | cookie: 0.6.0 1261 | devalue: 5.1.1 1262 | esm-env: 1.2.1 1263 | import-meta-resolve: 4.1.0 1264 | kleur: 4.1.5 1265 | magic-string: 0.30.17 1266 | mrmime: 2.0.0 1267 | sade: 1.8.1 1268 | set-cookie-parser: 2.7.1 1269 | sirv: 3.0.0 1270 | svelte: 5.16.0 1271 | tiny-glob: 0.2.9 1272 | vite: 6.0.6(@types/node@22.10.2) 1273 | 1274 | '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)))(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2))': 1275 | dependencies: 1276 | '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)) 1277 | debug: 4.4.0 1278 | svelte: 5.16.0 1279 | vite: 6.0.6(@types/node@22.10.2) 1280 | transitivePeerDependencies: 1281 | - supports-color 1282 | 1283 | '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2))': 1284 | dependencies: 1285 | '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)))(svelte@5.16.0)(vite@6.0.6(@types/node@22.10.2)) 1286 | debug: 4.4.0 1287 | deepmerge: 4.3.1 1288 | kleur: 4.1.5 1289 | magic-string: 0.30.17 1290 | svelte: 5.16.0 1291 | vite: 6.0.6(@types/node@22.10.2) 1292 | vitefu: 1.0.4(vite@6.0.6(@types/node@22.10.2)) 1293 | transitivePeerDependencies: 1294 | - supports-color 1295 | 1296 | '@types/cookie@0.6.0': {} 1297 | 1298 | '@types/estree@1.0.6': {} 1299 | 1300 | '@types/node@20.17.10': 1301 | dependencies: 1302 | undici-types: 6.19.8 1303 | 1304 | '@types/node@22.10.2': 1305 | dependencies: 1306 | undici-types: 6.20.0 1307 | optional: true 1308 | 1309 | '@types/picomatch@3.0.1': {} 1310 | 1311 | acorn-typescript@1.4.13(acorn@8.14.0): 1312 | dependencies: 1313 | acorn: 8.14.0 1314 | 1315 | acorn@8.14.0: {} 1316 | 1317 | ansi-regex@5.0.1: {} 1318 | 1319 | ansi-regex@6.1.0: {} 1320 | 1321 | ansi-styles@4.3.0: 1322 | dependencies: 1323 | color-convert: 2.0.1 1324 | 1325 | ansi-styles@6.2.1: {} 1326 | 1327 | any-promise@1.3.0: {} 1328 | 1329 | aria-query@5.3.2: {} 1330 | 1331 | axobject-query@4.1.0: {} 1332 | 1333 | balanced-match@1.0.2: {} 1334 | 1335 | before-after-hook@2.2.3: {} 1336 | 1337 | brace-expansion@2.0.1: 1338 | dependencies: 1339 | balanced-match: 1.0.2 1340 | 1341 | bundle-require@5.1.0(esbuild@0.24.2): 1342 | dependencies: 1343 | esbuild: 0.24.2 1344 | load-tsconfig: 0.2.5 1345 | 1346 | cac@6.7.14: {} 1347 | 1348 | chokidar@4.0.3: 1349 | dependencies: 1350 | readdirp: 4.0.2 1351 | 1352 | clsx@2.1.1: {} 1353 | 1354 | color-convert@2.0.1: 1355 | dependencies: 1356 | color-name: 1.1.4 1357 | 1358 | color-name@1.1.4: {} 1359 | 1360 | commander@4.1.1: {} 1361 | 1362 | consola@3.3.3: {} 1363 | 1364 | cookie@0.6.0: {} 1365 | 1366 | cross-spawn@7.0.6: 1367 | dependencies: 1368 | path-key: 3.1.1 1369 | shebang-command: 2.0.0 1370 | which: 2.0.2 1371 | 1372 | date-fns@4.1.0: {} 1373 | 1374 | debug@4.4.0: 1375 | dependencies: 1376 | ms: 2.1.3 1377 | 1378 | deepmerge@4.3.1: {} 1379 | 1380 | deprecation@2.3.1: {} 1381 | 1382 | devalue@5.1.1: {} 1383 | 1384 | eastasianwidth@0.2.0: {} 1385 | 1386 | emoji-regex@8.0.0: {} 1387 | 1388 | emoji-regex@9.2.2: {} 1389 | 1390 | esbuild@0.24.2: 1391 | optionalDependencies: 1392 | '@esbuild/aix-ppc64': 0.24.2 1393 | '@esbuild/android-arm': 0.24.2 1394 | '@esbuild/android-arm64': 0.24.2 1395 | '@esbuild/android-x64': 0.24.2 1396 | '@esbuild/darwin-arm64': 0.24.2 1397 | '@esbuild/darwin-x64': 0.24.2 1398 | '@esbuild/freebsd-arm64': 0.24.2 1399 | '@esbuild/freebsd-x64': 0.24.2 1400 | '@esbuild/linux-arm': 0.24.2 1401 | '@esbuild/linux-arm64': 0.24.2 1402 | '@esbuild/linux-ia32': 0.24.2 1403 | '@esbuild/linux-loong64': 0.24.2 1404 | '@esbuild/linux-mips64el': 0.24.2 1405 | '@esbuild/linux-ppc64': 0.24.2 1406 | '@esbuild/linux-riscv64': 0.24.2 1407 | '@esbuild/linux-s390x': 0.24.2 1408 | '@esbuild/linux-x64': 0.24.2 1409 | '@esbuild/netbsd-arm64': 0.24.2 1410 | '@esbuild/netbsd-x64': 0.24.2 1411 | '@esbuild/openbsd-arm64': 0.24.2 1412 | '@esbuild/openbsd-x64': 0.24.2 1413 | '@esbuild/sunos-x64': 0.24.2 1414 | '@esbuild/win32-arm64': 0.24.2 1415 | '@esbuild/win32-ia32': 0.24.2 1416 | '@esbuild/win32-x64': 0.24.2 1417 | 1418 | esm-env@1.2.1: {} 1419 | 1420 | esrap@1.3.2: 1421 | dependencies: 1422 | '@jridgewell/sourcemap-codec': 1.5.0 1423 | 1424 | fdir@6.4.2(picomatch@4.0.2): 1425 | optionalDependencies: 1426 | picomatch: 4.0.2 1427 | 1428 | foreground-child@3.3.0: 1429 | dependencies: 1430 | cross-spawn: 7.0.6 1431 | signal-exit: 4.1.0 1432 | 1433 | fsevents@2.3.3: 1434 | optional: true 1435 | 1436 | glob@10.4.5: 1437 | dependencies: 1438 | foreground-child: 3.3.0 1439 | jackspeak: 3.4.3 1440 | minimatch: 9.0.5 1441 | minipass: 7.1.2 1442 | package-json-from-dist: 1.0.1 1443 | path-scurry: 1.11.1 1444 | 1445 | globalyzer@0.1.0: {} 1446 | 1447 | globrex@0.1.2: {} 1448 | 1449 | import-meta-resolve@4.1.0: {} 1450 | 1451 | is-fullwidth-code-point@3.0.0: {} 1452 | 1453 | is-reference@3.0.3: 1454 | dependencies: 1455 | '@types/estree': 1.0.6 1456 | 1457 | isexe@2.0.0: {} 1458 | 1459 | jackspeak@3.4.3: 1460 | dependencies: 1461 | '@isaacs/cliui': 8.0.2 1462 | optionalDependencies: 1463 | '@pkgjs/parseargs': 0.11.0 1464 | 1465 | joycon@3.1.1: {} 1466 | 1467 | kleur@4.1.5: {} 1468 | 1469 | lilconfig@3.1.3: {} 1470 | 1471 | lines-and-columns@1.2.4: {} 1472 | 1473 | load-tsconfig@0.2.5: {} 1474 | 1475 | locate-character@3.0.0: {} 1476 | 1477 | lodash.sortby@4.7.0: {} 1478 | 1479 | lru-cache@10.4.3: {} 1480 | 1481 | magic-string@0.30.17: 1482 | dependencies: 1483 | '@jridgewell/sourcemap-codec': 1.5.0 1484 | 1485 | minimatch@9.0.5: 1486 | dependencies: 1487 | brace-expansion: 2.0.1 1488 | 1489 | minipass@7.1.2: {} 1490 | 1491 | mri@1.2.0: {} 1492 | 1493 | mrmime@2.0.0: {} 1494 | 1495 | ms@2.1.3: {} 1496 | 1497 | mz@2.7.0: 1498 | dependencies: 1499 | any-promise: 1.3.0 1500 | object-assign: 4.1.1 1501 | thenify-all: 1.6.0 1502 | 1503 | nanoexec@1.1.0(@types/node@20.17.10): 1504 | dependencies: 1505 | '@types/node': 20.17.10 1506 | promise-make-naked: 3.0.0 1507 | 1508 | nanoid@3.3.8: {} 1509 | 1510 | object-assign@4.1.1: {} 1511 | 1512 | once@1.4.0: 1513 | dependencies: 1514 | wrappy: 1.0.2 1515 | 1516 | package-json-from-dist@1.0.1: {} 1517 | 1518 | path-key@3.1.1: {} 1519 | 1520 | path-scurry@1.11.1: 1521 | dependencies: 1522 | lru-cache: 10.4.3 1523 | minipass: 7.1.2 1524 | 1525 | picocolors@1.1.1: {} 1526 | 1527 | picomatch@4.0.2: {} 1528 | 1529 | pirates@4.0.6: {} 1530 | 1531 | postcss-load-config@6.0.1(postcss@8.4.49): 1532 | dependencies: 1533 | lilconfig: 3.1.3 1534 | optionalDependencies: 1535 | postcss: 8.4.49 1536 | 1537 | postcss@8.4.49: 1538 | dependencies: 1539 | nanoid: 3.3.8 1540 | picocolors: 1.1.1 1541 | source-map-js: 1.2.1 1542 | 1543 | prettier-plugin-svelte@3.3.2(prettier@3.4.2)(svelte@5.16.0): 1544 | dependencies: 1545 | prettier: 3.4.2 1546 | svelte: 5.16.0 1547 | 1548 | prettier@3.4.2: {} 1549 | 1550 | promise-make-naked@3.0.0: {} 1551 | 1552 | punycode@2.3.1: {} 1553 | 1554 | readdirp@4.0.2: {} 1555 | 1556 | resolve-from@5.0.0: {} 1557 | 1558 | rollup@4.29.1: 1559 | dependencies: 1560 | '@types/estree': 1.0.6 1561 | optionalDependencies: 1562 | '@rollup/rollup-android-arm-eabi': 4.29.1 1563 | '@rollup/rollup-android-arm64': 4.29.1 1564 | '@rollup/rollup-darwin-arm64': 4.29.1 1565 | '@rollup/rollup-darwin-x64': 4.29.1 1566 | '@rollup/rollup-freebsd-arm64': 4.29.1 1567 | '@rollup/rollup-freebsd-x64': 4.29.1 1568 | '@rollup/rollup-linux-arm-gnueabihf': 4.29.1 1569 | '@rollup/rollup-linux-arm-musleabihf': 4.29.1 1570 | '@rollup/rollup-linux-arm64-gnu': 4.29.1 1571 | '@rollup/rollup-linux-arm64-musl': 4.29.1 1572 | '@rollup/rollup-linux-loongarch64-gnu': 4.29.1 1573 | '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1 1574 | '@rollup/rollup-linux-riscv64-gnu': 4.29.1 1575 | '@rollup/rollup-linux-s390x-gnu': 4.29.1 1576 | '@rollup/rollup-linux-x64-gnu': 4.29.1 1577 | '@rollup/rollup-linux-x64-musl': 4.29.1 1578 | '@rollup/rollup-win32-arm64-msvc': 4.29.1 1579 | '@rollup/rollup-win32-ia32-msvc': 4.29.1 1580 | '@rollup/rollup-win32-x64-msvc': 4.29.1 1581 | fsevents: 2.3.3 1582 | 1583 | sade@1.8.1: 1584 | dependencies: 1585 | mri: 1.2.0 1586 | 1587 | set-cookie-parser@2.7.1: {} 1588 | 1589 | shebang-command@2.0.0: 1590 | dependencies: 1591 | shebang-regex: 3.0.0 1592 | 1593 | shebang-regex@3.0.0: {} 1594 | 1595 | signal-exit@4.1.0: {} 1596 | 1597 | sirv@3.0.0: 1598 | dependencies: 1599 | '@polka/url': 1.0.0-next.28 1600 | mrmime: 2.0.0 1601 | totalist: 3.0.1 1602 | 1603 | source-map-js@1.2.1: {} 1604 | 1605 | source-map@0.8.0-beta.0: 1606 | dependencies: 1607 | whatwg-url: 7.1.0 1608 | 1609 | string-width@4.2.3: 1610 | dependencies: 1611 | emoji-regex: 8.0.0 1612 | is-fullwidth-code-point: 3.0.0 1613 | strip-ansi: 6.0.1 1614 | 1615 | string-width@5.1.2: 1616 | dependencies: 1617 | eastasianwidth: 0.2.0 1618 | emoji-regex: 9.2.2 1619 | strip-ansi: 7.1.0 1620 | 1621 | strip-ansi@6.0.1: 1622 | dependencies: 1623 | ansi-regex: 5.0.1 1624 | 1625 | strip-ansi@7.1.0: 1626 | dependencies: 1627 | ansi-regex: 6.1.0 1628 | 1629 | sucrase@3.35.0: 1630 | dependencies: 1631 | '@jridgewell/gen-mapping': 0.3.8 1632 | commander: 4.1.1 1633 | glob: 10.4.5 1634 | lines-and-columns: 1.2.4 1635 | mz: 2.7.0 1636 | pirates: 4.0.6 1637 | ts-interface-checker: 0.1.13 1638 | 1639 | svelte-check@4.1.1(picomatch@4.0.2)(svelte@5.16.0)(typescript@5.7.2): 1640 | dependencies: 1641 | '@jridgewell/trace-mapping': 0.3.25 1642 | chokidar: 4.0.3 1643 | fdir: 6.4.2(picomatch@4.0.2) 1644 | picocolors: 1.1.1 1645 | sade: 1.8.1 1646 | svelte: 5.16.0 1647 | typescript: 5.7.2 1648 | transitivePeerDependencies: 1649 | - picomatch 1650 | 1651 | svelte@5.16.0: 1652 | dependencies: 1653 | '@ampproject/remapping': 2.3.0 1654 | '@jridgewell/sourcemap-codec': 1.5.0 1655 | '@types/estree': 1.0.6 1656 | acorn: 8.14.0 1657 | acorn-typescript: 1.4.13(acorn@8.14.0) 1658 | aria-query: 5.3.2 1659 | axobject-query: 4.1.0 1660 | clsx: 2.1.1 1661 | esm-env: 1.2.1 1662 | esrap: 1.3.2 1663 | is-reference: 3.0.3 1664 | locate-character: 3.0.0 1665 | magic-string: 0.30.17 1666 | zimmerframe: 1.1.2 1667 | 1668 | thenify-all@1.6.0: 1669 | dependencies: 1670 | thenify: 3.3.1 1671 | 1672 | thenify@3.3.1: 1673 | dependencies: 1674 | any-promise: 1.3.0 1675 | 1676 | tiny-glob@0.2.9: 1677 | dependencies: 1678 | globalyzer: 0.1.0 1679 | globrex: 0.1.2 1680 | 1681 | tinyexec@0.3.1: {} 1682 | 1683 | tinyglobby@0.2.10: 1684 | dependencies: 1685 | fdir: 6.4.2(picomatch@4.0.2) 1686 | picomatch: 4.0.2 1687 | 1688 | totalist@3.0.1: {} 1689 | 1690 | tr46@1.0.1: 1691 | dependencies: 1692 | punycode: 2.3.1 1693 | 1694 | tree-kill@1.2.2: {} 1695 | 1696 | ts-interface-checker@0.1.13: {} 1697 | 1698 | tslib@2.8.1: {} 1699 | 1700 | tsup@8.3.5(postcss@8.4.49)(typescript@5.7.2): 1701 | dependencies: 1702 | bundle-require: 5.1.0(esbuild@0.24.2) 1703 | cac: 6.7.14 1704 | chokidar: 4.0.3 1705 | consola: 3.3.3 1706 | debug: 4.4.0 1707 | esbuild: 0.24.2 1708 | joycon: 3.1.1 1709 | picocolors: 1.1.1 1710 | postcss-load-config: 6.0.1(postcss@8.4.49) 1711 | resolve-from: 5.0.0 1712 | rollup: 4.29.1 1713 | source-map: 0.8.0-beta.0 1714 | sucrase: 3.35.0 1715 | tinyexec: 0.3.1 1716 | tinyglobby: 0.2.10 1717 | tree-kill: 1.2.2 1718 | optionalDependencies: 1719 | postcss: 8.4.49 1720 | typescript: 5.7.2 1721 | transitivePeerDependencies: 1722 | - jiti 1723 | - supports-color 1724 | - tsx 1725 | - yaml 1726 | 1727 | tunnel@0.0.6: {} 1728 | 1729 | typescript@5.7.2: {} 1730 | 1731 | undici-types@6.19.8: {} 1732 | 1733 | undici-types@6.20.0: 1734 | optional: true 1735 | 1736 | undici@5.28.4: 1737 | dependencies: 1738 | '@fastify/busboy': 2.1.1 1739 | 1740 | universal-user-agent@6.0.1: {} 1741 | 1742 | vite@6.0.6(@types/node@22.10.2): 1743 | dependencies: 1744 | esbuild: 0.24.2 1745 | postcss: 8.4.49 1746 | rollup: 4.29.1 1747 | optionalDependencies: 1748 | '@types/node': 22.10.2 1749 | fsevents: 2.3.3 1750 | 1751 | vitefu@1.0.4(vite@6.0.6(@types/node@22.10.2)): 1752 | optionalDependencies: 1753 | vite: 6.0.6(@types/node@22.10.2) 1754 | 1755 | webidl-conversions@4.0.2: {} 1756 | 1757 | whatwg-url@7.1.0: 1758 | dependencies: 1759 | lodash.sortby: 4.7.0 1760 | tr46: 1.0.1 1761 | webidl-conversions: 4.0.2 1762 | 1763 | which@2.0.2: 1764 | dependencies: 1765 | isexe: 2.0.0 1766 | 1767 | wrap-ansi@7.0.0: 1768 | dependencies: 1769 | ansi-styles: 4.3.0 1770 | string-width: 4.2.3 1771 | strip-ansi: 6.0.1 1772 | 1773 | wrap-ansi@8.1.0: 1774 | dependencies: 1775 | ansi-styles: 6.2.1 1776 | string-width: 5.1.2 1777 | strip-ansi: 7.1.0 1778 | 1779 | wrappy@1.0.2: {} 1780 | 1781 | zimmerframe@1.1.2: {} 1782 | 1783 | zod@3.24.1: {} 1784 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - . 3 | - ./test 4 | onlyBuiltDependencies: 5 | - '@sveltejs/kit' 6 | - esbuild 7 | -------------------------------------------------------------------------------- /src/ctx.ts: -------------------------------------------------------------------------------- 1 | import * as github from '@actions/github'; 2 | import * as core from '@actions/core'; 3 | import picomatch from 'picomatch'; 4 | import { join } from 'node:path'; 5 | 6 | export interface Config { 7 | /** 8 | * The path(s) to run svelte-check from, one per line 9 | * @default cwd 10 | */ 11 | diagnostic_paths: string[]; 12 | 13 | /** 14 | * When true only the files that change (in the pull request) will be checked 15 | * @default true 16 | */ 17 | filter_changes: boolean; 18 | 19 | /** 20 | * Should we cause CI to fail if there is a Svelte Check error? 21 | * @default false 22 | */ 23 | fail_on_error: boolean; 24 | 25 | /** 26 | * Should we cause CI to fail if there is a Svelte Check error? 27 | * @default false 28 | */ 29 | fail_on_warning: boolean; 30 | 31 | /** 32 | * The filter to check when finding errors 33 | */ 34 | fail_filter: picomatch.Matcher; 35 | } 36 | 37 | export interface CTX { 38 | /** 39 | * The user given config 40 | */ 41 | config: Config; 42 | 43 | /** 44 | * The absolute path to the root of the repository on the actions fs 45 | */ 46 | repo_root: string; 47 | 48 | /** 49 | * The GitHub access token 50 | */ 51 | token: string; 52 | 53 | /** 54 | * The number of the current pull request 55 | */ 56 | pr_number: number; 57 | 58 | /** 59 | * The octokit instance to use for GitHub API 60 | */ 61 | octokit: ReturnType; 62 | 63 | /** 64 | * The repo owner 65 | */ 66 | owner: string; 67 | 68 | /** 69 | * The repo name 70 | */ 71 | repo: string; 72 | } 73 | 74 | /** 75 | * Get the actions current context 76 | */ 77 | export function get_ctx(): CTX { 78 | const token = core.getInput('token') || process.env.GITHUB_TOKEN; 79 | if (!token) { 80 | throw new Error( 81 | 'Unable to find a GitHub token. Please set the `token` option if required.', 82 | ); 83 | } 84 | 85 | if (process.env.GITHUB_TOKEN) { 86 | core.warning( 87 | 'Support for the GITHUB_TOKEN environment variable will be removed in the next major version of ghostdevv/svelte-check-action', 88 | ); 89 | } 90 | 91 | const octokit = github.getOctokit(token); 92 | 93 | const repo_root = process.env.GITHUB_WORKSPACE; 94 | if (!repo_root) throw new Error('Missing GITHUB_WORKSPACE environment variable'); 95 | 96 | const pr_number = github.context.payload.pull_request?.number; 97 | if (!pr_number) throw new Error("Can't find a pull request, are you running this on a pr?"); 98 | 99 | const diagnostic_paths = core.getMultilineInput('paths').map((path) => join(repo_root, path)); 100 | if (diagnostic_paths.length == 0) diagnostic_paths.push(repo_root); 101 | 102 | const filter_changes = core.getBooleanInput('filterChanges'); 103 | 104 | const fail_filter = picomatch(core.getMultilineInput('failFilter')); 105 | const fail_on_warning = core.getBooleanInput('failOnWarning'); 106 | const fail_on_error = core.getBooleanInput('failOnError'); 107 | 108 | return { 109 | token, 110 | octokit, 111 | pr_number, 112 | repo_root, 113 | repo: github.context.repo.repo, 114 | owner: github.context.repo.owner, 115 | config: { 116 | diagnostic_paths, 117 | filter_changes, 118 | fail_on_warning, 119 | fail_on_error, 120 | fail_filter, 121 | }, 122 | }; 123 | } 124 | -------------------------------------------------------------------------------- /src/diagnostic.ts: -------------------------------------------------------------------------------- 1 | // Based on MIT Licenced code from SvelteLab 2 | // https://github.com/SvelteLab/SvelteLab/blob/a3fb823356a9ed1d16eb8535340c9813b7eb547d/src/lib/stores/editor_errors_store.ts#L19 3 | // https://github.com/SvelteLab/SvelteLab/blob/a3fb823356a9ed1d16eb8535340c9813b7eb547d/src/lib/webcontainer.ts#L301 4 | 5 | import { readFile } from 'node:fs/promises'; 6 | import { setFailed } from '@actions/core'; 7 | import * as core from '@actions/core'; 8 | import { existsSync } from 'node:fs'; 9 | import { join } from 'node:path'; 10 | import exec from 'nanoexec'; 11 | import { z } from 'zod'; 12 | 13 | const diagnosticSchema = z.object({ 14 | type: z 15 | .string() 16 | .toLowerCase() 17 | .refine((type): type is 'error' | 'warning' => ['error', 'warning'].includes(type)), 18 | filename: z.string().transform((filename) => `./${filename}`), 19 | start: z.object({ 20 | line: z.number().transform((line) => line + 1), 21 | character: z.number(), 22 | }), 23 | end: z.object({ 24 | line: z.number().transform((line) => line + 1), 25 | character: z.number(), 26 | }), 27 | message: z.string(), 28 | code: z.union([z.number(), z.string()]).optional(), 29 | source: z.string().optional(), 30 | }); 31 | 32 | type RawDiagnostic = z.infer; 33 | 34 | /** 35 | * A svelte-check diagnostic provides an issue in the codebase 36 | * patched to include an aboslute file path 37 | */ 38 | export interface Diagnostic extends Omit { 39 | fileName: string; 40 | path: string; 41 | } 42 | 43 | /** 44 | * Run svelte-check at a given directory and return all the issues it finds 45 | * @param cwd The directory to run svelte-check in 46 | * @returns Diagnostics 47 | */ 48 | export async function get_diagnostics(cwd: string) { 49 | await try_run_svelte_kit_sync(cwd); 50 | 51 | const result = await exec('npx', ['-y', 'svelte-check@4', '--output=machine-verbose'], { 52 | shell: true, 53 | cwd, 54 | }); 55 | 56 | if (result.code != null && result.code > 1) { 57 | console.error('Failed to run svelte-check', result.stderr.toString()); 58 | setFailed(`Failed to run svelte-check: "${result.stderr}"`); 59 | process.exit(1); 60 | } 61 | 62 | const diagnostics: Diagnostic[] = []; 63 | 64 | for (const line of result.stdout.toString().split('\n')) { 65 | const tail = line.trim().slice(line.indexOf(' ') + 1); 66 | 67 | if (tail.length === 0 || tail.startsWith('START') || tail.startsWith('COMPLETED')) { 68 | // We don't need empty lines, or the start/end lines 69 | continue; 70 | } 71 | 72 | try { 73 | const raw = JSON.parse(tail); 74 | const { filename, ...diagnostic } = diagnosticSchema.parse(raw); 75 | 76 | diagnostics.push({ 77 | ...diagnostic, 78 | fileName: filename, 79 | path: join(cwd, filename), 80 | }); 81 | } catch (e) { 82 | core.startGroup('failed to parse a diagnostic'); 83 | console.error(`cwd: "${cwd}"`); 84 | console.error(`line: "${line}"`); 85 | // prettier-ignore 86 | console.error(`error: `, e instanceof z.ZodError ? e.format() : e instanceof Error ? `"${e.message}"` : `"${e}"`); 87 | core.endGroup(); 88 | } 89 | } 90 | 91 | return diagnostics; 92 | } 93 | 94 | async function try_run_svelte_kit_sync(cwd: string) { 95 | const pkg_path = join(cwd, 'package.json'); 96 | if (!existsSync(pkg_path)) return; 97 | 98 | const pkg = JSON.parse(await readFile(pkg_path, 'utf-8')); 99 | 100 | if (pkg.dependencies?.['@sveltejs/kit'] || pkg.devDependencies?.['@sveltejs/kit']) { 101 | console.log(`running svelte-kit sync at "${cwd}"`); 102 | 103 | const result = await exec('npx', ['-y', 'svelte-kit', 'sync'], { shell: true, cwd }); 104 | 105 | if (!result.ok) { 106 | console.error('svelte-kit sync failed', { 107 | ...result, 108 | cwd, 109 | }); 110 | } 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /src/files.ts: -------------------------------------------------------------------------------- 1 | import { relative, normalize, join } from 'node:path'; 2 | import type { CTX } from './ctx'; 3 | 4 | /** 5 | * Check if `child` is a sub directory of `parent` 6 | */ 7 | export function is_subdir(parent: string, child: string) { 8 | return !relative(normalize(parent), normalize(child)).startsWith('..'); 9 | } 10 | 11 | /** 12 | * Get the GitHub blob url for file contents 13 | */ 14 | export async function get_blob_base(ctx: CTX) { 15 | const { data: pr } = await ctx.octokit.rest.pulls.get({ 16 | pull_number: ctx.pr_number, 17 | owner: ctx.owner, 18 | repo: ctx.repo, 19 | }); 20 | 21 | return new URL(`https://github.com/${ctx.owner}/${ctx.repo}/blob/${pr.head.sha}`); 22 | } 23 | 24 | /** 25 | * Get the files that changed in the current PR 26 | */ 27 | export async function get_pr_files(ctx: CTX) { 28 | if (!ctx.config.filter_changes) { 29 | return null; 30 | } 31 | 32 | const pr_files = await ctx.octokit.paginate(ctx.octokit.rest.pulls.listFiles, { 33 | per_page: 100, 34 | pull_number: ctx.pr_number, 35 | owner: ctx.owner, 36 | repo: ctx.repo, 37 | }); 38 | 39 | return pr_files.map((file) => join(ctx.repo_root, file.filename)); 40 | } 41 | 42 | export function fmt_path(path: string, ctx: CTX) { 43 | return path.replace(ctx.repo_root, '').replace(/^\/+/, ''); 44 | } 45 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { get_diagnostics, type Diagnostic } from './diagnostic'; 2 | import { fmt_path, get_pr_files, is_subdir } from './files'; 3 | import { get_ctx, type CTX } from './ctx'; 4 | import * as core from '@actions/core'; 5 | import { render } from './render'; 6 | 7 | /** 8 | * Stores the diagnostics in an easy to use way, whilst keeping track of counts. 9 | */ 10 | export class DiagnosticStore { 11 | public readonly store = new Map(); 12 | 13 | public warning_count = 0; 14 | public error_count = 0; 15 | 16 | get count() { 17 | return this.warning_count + this.error_count; 18 | } 19 | 20 | public filtered_error_count = 0; 21 | public filtered_warning_count = 0; 22 | 23 | get filtered_count() { 24 | return this.filtered_warning_count + this.filtered_error_count; 25 | } 26 | 27 | constructor( 28 | private readonly ctx: CTX, 29 | private readonly changed_files: string[] | null, 30 | ) {} 31 | 32 | add(diagnostic: Diagnostic) { 33 | if (this.changed_files && !this.changed_files.includes(diagnostic.path)) { 34 | return; 35 | } 36 | 37 | const current = this.store.get(diagnostic.path) ?? []; 38 | current.push(diagnostic); 39 | this.store.set(diagnostic.path, current); 40 | 41 | this[`${diagnostic.type}_count`]++; 42 | 43 | if (this.ctx.config.fail_filter(fmt_path(diagnostic.path, this.ctx))) { 44 | this[`filtered_${diagnostic.type}_count`]++; 45 | } 46 | } 47 | 48 | entries() { 49 | return this.store.entries(); 50 | } 51 | } 52 | 53 | /** 54 | * Send a message to the current PR, taking into account 55 | * whether the last message can be edited instead. 56 | */ 57 | async function send(ctx: CTX, body: string) { 58 | const { data: comments } = await ctx.octokit.rest.issues.listComments({ 59 | issue_number: ctx.pr_number, 60 | owner: ctx.owner, 61 | repo: ctx.repo, 62 | }); 63 | 64 | const last_comment = comments 65 | .filter((comment) => comment.body?.startsWith('# Svelte Check Results')) 66 | .sort((a, b) => Date.parse(b.created_at) - Date.parse(a.created_at)) 67 | .at(0); 68 | 69 | if (last_comment) { 70 | await ctx.octokit.rest.issues.updateComment({ 71 | comment_id: last_comment.id, 72 | issue_number: ctx.pr_number, 73 | owner: ctx.owner, 74 | repo: ctx.repo, 75 | body, 76 | }); 77 | } else { 78 | await ctx.octokit.rest.issues.createComment({ 79 | issue_number: ctx.pr_number, 80 | owner: ctx.owner, 81 | repo: ctx.repo, 82 | body, 83 | }); 84 | } 85 | } 86 | 87 | async function main() { 88 | const ctx = get_ctx(); 89 | 90 | const changed_files = await get_pr_files(ctx); 91 | const diagnostics = new DiagnosticStore(ctx, changed_files); 92 | 93 | for (const root_path of ctx.config.diagnostic_paths) { 94 | const has_changed_files = changed_files 95 | ? changed_files.some((pr_file) => is_subdir(root_path, pr_file)) 96 | : true; 97 | 98 | console.log(`${has_changed_files ? 'checking' : 'skipped'} "${root_path}"`); 99 | 100 | if (has_changed_files) { 101 | for (const diagnostic of await get_diagnostics(root_path)) { 102 | diagnostics.add(diagnostic); 103 | } 104 | } 105 | } 106 | 107 | core.startGroup('Debug information'); 108 | console.log({ 109 | ctx: { 110 | ...ctx, 111 | octokit: '(hidden)', 112 | token: '(hidden)', 113 | }, 114 | diagnostics: { 115 | store: diagnostics.store, 116 | warning_count: diagnostics.warning_count, 117 | error_count: diagnostics.error_count, 118 | filtered_error_count: diagnostics.filtered_error_count, 119 | filtered_warning_count: diagnostics.filtered_warning_count, 120 | }, 121 | changed_files, 122 | }); 123 | core.endGroup(); 124 | 125 | // Send the GitHub workflow annotations 126 | for (const [path, diags] of diagnostics.entries()) { 127 | for (const diagnostic of diags) { 128 | core[diagnostic.type](diagnostic.message, { 129 | title: 'svelte-check', 130 | file: path, 131 | startLine: diagnostic.start.line, 132 | endLine: diagnostic.end.line, 133 | startColumn: diagnostic.start.character, 134 | endColumn: diagnostic.end.character, 135 | }); 136 | } 137 | } 138 | 139 | const markdown = await render(ctx, diagnostics); 140 | await send(ctx, markdown); 141 | 142 | const failed = 143 | (ctx.config.fail_on_error && diagnostics.filtered_error_count) || 144 | (ctx.config.fail_on_warning && diagnostics.filtered_warning_count); 145 | 146 | if (failed) { 147 | function stringify(key: string, enabled: boolean, count: number) { 148 | return `\`${key}\` is ${enabled ? 'enabled' : 'disabled'} (${count} issue${count === 1 ? '' : 's'})`; 149 | } 150 | 151 | core.setFailed( 152 | `Failed with ${diagnostics.filtered_count} filtered issue${diagnostics.filtered_count === 1 ? '' : 's'} ` + 153 | `(${diagnostics.count} total). ` + 154 | `${stringify('failOnError', ctx.config.fail_on_error, diagnostics.filtered_error_count)} & ` + 155 | `${stringify('failOnWarning', ctx.config.fail_on_warning, diagnostics.filtered_warning_count)}. `, 156 | // `${ctx.config.fail_filter ? 'Failures filtered by path.' : ''}`, 157 | ); 158 | } 159 | } 160 | 161 | main() 162 | .then(() => console.log('Finished')) 163 | .catch((error) => core.setFailed(error instanceof Error ? error.message : `${error}`)); 164 | -------------------------------------------------------------------------------- /src/render.ts: -------------------------------------------------------------------------------- 1 | import { fmt_path, get_blob_base } from './files'; 2 | import type { DiagnosticStore } from './index'; 3 | import type { Diagnostic } from './diagnostic'; 4 | import { execSync } from 'node:child_process'; 5 | import { readFile } from 'node:fs/promises'; 6 | import { format } from 'date-fns'; 7 | import type { CTX } from './ctx'; 8 | 9 | /** 10 | * Get the latest git commit of the current repo 11 | */ 12 | function get_latest_commit() { 13 | try { 14 | return execSync('git rev-parse --short HEAD').toString().trim(); 15 | } catch { 16 | return 'unknown'; 17 | } 18 | } 19 | 20 | /** 21 | * Prettify the diagnostic type 22 | */ 23 | function pretty_type(type: Diagnostic['type']) { 24 | return type == 'error' ? 'Error' : 'Warn'; 25 | } 26 | 27 | /** 28 | * Render number + word taking into account simple plural 29 | */ 30 | function pl(num: number, word: string) { 31 | return `**${num}** ${word}${num == 1 ? '' : 's'}`; 32 | } 33 | 34 | /** 35 | * Render a set of diagnostics to markdown 36 | */ 37 | export async function render(ctx: CTX, diagnostics_store: DiagnosticStore) { 38 | const blob_base = await get_blob_base(ctx); 39 | const output = ['# Svelte Check Results\n']; 40 | const now = new Date(); 41 | 42 | if (diagnostics_store.count == 0) { 43 | output.push('No issues found! 🎉'); 44 | } else { 45 | output.push( 46 | `Found ${pl(diagnostics_store.error_count, 'error')} ` + 47 | `and ${pl(diagnostics_store.warning_count, 'warning')} ` + 48 | `(${diagnostics_store.error_count + diagnostics_store.warning_count} total) ` + 49 | (ctx.config.filter_changes ? ' with the files in this PR' : '') + 50 | '.\n', 51 | ); 52 | 53 | for (const [path, diagnostics] of diagnostics_store.entries()) { 54 | const readable_path = fmt_path(path, ctx); 55 | const lines = await readFile(path, 'utf-8').then((c) => c.split('\n')); 56 | 57 | const diagnostics_markdown = diagnostics.map( 58 | // prettier-ignore 59 | (d) => `#### [${readable_path}:${d.start.line}:${d.start.character}](${blob_base}${readable_path}#L${d.start.line}${d.start.line != d.end.line ? `-L${d.end.line}` : ''})\n\n\`\`\`ts\n${pretty_type(d.type)}: ${d.message}\n\n${lines.slice(d.start.line - 1, d.end.line).join('\n').trim()}\n\`\`\`\n`, 60 | ); 61 | 62 | output.push( 63 | // prettier-ignore 64 | `\n\n
\n${readable_path}\n\n${diagnostics_markdown.join('\n')}\n
`, 65 | ); 66 | } 67 | } 68 | 69 | output.push('\n---\n'); 70 | // prettier-ignore 71 | output.push(`Last Updated: ${format(now, 'do MMMM \'at\' HH:mm')} (${get_latest_commit()})`) 72 | 73 | return output.join('\n'); 74 | } 75 | -------------------------------------------------------------------------------- /test/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | # Output 4 | .output 5 | .vercel 6 | /.svelte-kit 7 | /build 8 | 9 | # OS 10 | .DS_Store 11 | Thumbs.db 12 | 13 | # Env 14 | .env 15 | .env.* 16 | !.env.example 17 | !.env.test 18 | 19 | # Vite 20 | vite.config.js.timestamp-* 21 | vite.config.ts.timestamp-* 22 | 23 | test.md 24 | -------------------------------------------------------------------------------- /test/.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /test/.prettierignore: -------------------------------------------------------------------------------- 1 | # Package Managers 2 | package-lock.json 3 | pnpm-lock.yaml 4 | yarn.lock 5 | -------------------------------------------------------------------------------- /test/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "quoteProps": "as-needed", 4 | "trailingComma": "all", 5 | "bracketSpacing": true, 6 | "arrowParens": "always", 7 | "semi": true, 8 | "useTabs": true, 9 | "tabWidth": 4, 10 | 11 | "svelteSortOrder": "scripts-options-markup-styles", 12 | "svelteAllowShorthand": true, 13 | "svelteBracketNewLine": false, 14 | "svelteIndentScriptAndStyle": true 15 | } 16 | -------------------------------------------------------------------------------- /test/README.md: -------------------------------------------------------------------------------- 1 | # create-svelte 2 | 3 | Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/main/packages/create-svelte). 4 | 5 | ## Creating a project 6 | 7 | If you're seeing this, you've probably already done this step. Congrats! 8 | 9 | ```bash 10 | # create a new project in the current directory 11 | npm create svelte@latest 12 | 13 | # create a new project in my-app 14 | npm create svelte@latest my-app 15 | ``` 16 | 17 | ## Developing 18 | 19 | Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: 20 | 21 | ```bash 22 | npm run dev 23 | 24 | # or start the server and open the app in a new browser tab 25 | npm run dev -- --open 26 | ``` 27 | 28 | ## Building 29 | 30 | To create a production version of your app: 31 | 32 | ```bash 33 | npm run build 34 | ``` 35 | 36 | You can preview the production build with `npm run preview`. 37 | 38 | > To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. 39 | -------------------------------------------------------------------------------- /test/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test", 3 | "type": "module", 4 | "version": "0.0.1", 5 | "private": true, 6 | "scripts": { 7 | "dev": "vite dev", 8 | "build": "vite build", 9 | "preview": "vite preview", 10 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 11 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 12 | "lint": "prettier --check .", 13 | "format": "prettier --write .", 14 | "postinstall": "svelte-kit sync" 15 | }, 16 | "devDependencies": { 17 | "@sveltejs/adapter-auto": "^3.3.1", 18 | "@sveltejs/kit": "^2.15.1", 19 | "@sveltejs/vite-plugin-svelte": "^5.0.3", 20 | "prettier": "^3.4.2", 21 | "prettier-plugin-svelte": "^3.3.2", 22 | "svelte": "^5.16.0", 23 | "svelte-check": "^4.1.1", 24 | "tslib": "^2.8.1", 25 | "typescript": "^5.7.2", 26 | "vite": "^6.0.6" 27 | }, 28 | "packageManager": "pnpm@10.11.1", 29 | "volta": { 30 | "node": "20.19.2", 31 | "pnpm": "10.11.1" 32 | }, 33 | "engines": { 34 | "pnpm": "10.11.1", 35 | "npm": "forbidden, use pnpm", 36 | "node": "^20.19.2" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /test/src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | declare global { 4 | namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface PageState {} 9 | // interface Platform {} 10 | } 11 | } 12 | 13 | export {}; 14 | -------------------------------------------------------------------------------- /test/src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |
%sveltekit.body%
11 | 12 | 13 | -------------------------------------------------------------------------------- /test/src/lib/index.ts: -------------------------------------------------------------------------------- 1 | // place files you want to import through the `$lib` alias in this folder. 2 | -------------------------------------------------------------------------------- /test/src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 |
{}}>
6 | 7 | 8 | 9 |
{ 11 | console.log('something'); 12 | }}> 13 |
14 | -------------------------------------------------------------------------------- /test/static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghostdevv/svelte-check-action/82ef97021a5ee0f174e04b6cae09641727fde9c4/test/static/favicon.png -------------------------------------------------------------------------------- /test/svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-auto'; 2 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors 7 | // for more information about preprocessors 8 | preprocess: vitePreprocess(), 9 | 10 | kit: { 11 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. 12 | // If your environment is not supported, or you settled on a specific environment, switch out the adapter. 13 | // See https://kit.svelte.dev/docs/adapters for more information about adapters. 14 | adapter: adapter() 15 | } 16 | }; 17 | 18 | export default config; 19 | -------------------------------------------------------------------------------- /test/test.ts: -------------------------------------------------------------------------------- 1 | import { get_diagnostics } from '../src/diagnostic'; 2 | import { writeFile } from 'node:fs/promises'; 3 | import { render } from '../src/render'; 4 | import { join } from 'node:path'; 5 | 6 | const diagnostics = await get_diagnostics(import.meta.dirname); 7 | 8 | const markdown = await render( 9 | diagnostics, 10 | import.meta.dirname, 11 | 'https://github.com/ghostdevv/svelte-check-action/blob/fake-commit-hash', 12 | ); 13 | 14 | await writeFile(join(import.meta.dirname, './test.md'), markdown, 'utf-8'); 15 | -------------------------------------------------------------------------------- /test/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true, 12 | "moduleResolution": "bundler" 13 | } 14 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias 15 | // except $lib which is handled by https://kit.svelte.dev/docs/configuration#files 16 | // 17 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 18 | // from the referenced tsconfig.json - TypeScript does not merge them in 19 | } 20 | -------------------------------------------------------------------------------- /test/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | import { defineConfig } from 'vite'; 3 | 4 | export default defineConfig({ 5 | plugins: [sveltekit()] 6 | }); 7 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "checkJs": false, 5 | "esModuleInterop": true, 6 | "forceConsistentCasingInFileNames": true, 7 | "skipLibCheck": true, 8 | "allowSyntheticDefaultImports": true, 9 | "strict": true, 10 | "isolatedModules": true, 11 | "verbatimModuleSyntax": true, 12 | "module": "ESNext", 13 | "target": "ESNext", 14 | "moduleResolution": "Bundler", 15 | "noEmit": true 16 | }, 17 | "exclude": ["node_modules/**"] 18 | } --------------------------------------------------------------------------------