diff --git a/.github/MAINTENANCE.md b/.github/MAINTENANCE.md new file mode 100644 index 0000000..326983c --- /dev/null +++ b/.github/MAINTENANCE.md @@ -0,0 +1,10 @@ +This document explains how to perform the project's maintenance tasks. + +### Creating a new release + +Anyone with write access to the repository can request a new release. To do so, follow these steps: + +1. Run `pnpm version ` locally to bump the version number and create a new commit / tag. +2. Push the commit and tag to the repository by running `git push --follow-tags`. +3. The release will be automatically published to npm by GitHub Actions once approved by an administrator. +4. Go to and create a new release with the tag that was just created. Describe the notable changes in the release notes. diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..8d51132 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,24 @@ +name: Publish + +on: + push: + tags: + - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 + +jobs: + release: + # Use Publish environment for deployment protection + environment: Publish + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 'lts/*' + registry-url: 'https://registry.npmjs.org' + - run: npm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/bin/create-eslint-config.js b/bin/create-eslint-config.js index da4595a..46e4a0e 100644 --- a/bin/create-eslint-config.js +++ b/bin/create-eslint-config.js @@ -234,7 +234,7 @@ const lintCommand = console.info( '\n' + - `${bold(yellow('package.json'))} and ${bold(blue('eslint.config.js'))} have been updated.\n` + + `${bold(yellow('package.json'))} and ${bold(blue(`eslint.config.${hasTypeScript ? 'ts' : 'js'}`))} have been updated.\n` + `Now please run ${bold(green(installCommand))} to re-install the dependencies.\n` + `Then you can run ${bold(green(lintCommand))} to lint your files.`, ) diff --git a/index.js b/index.js index 424b75b..eafa1ff 100644 --- a/index.js +++ b/index.js @@ -28,28 +28,13 @@ export default function createConfig({ if (hasTypeScript) { // TODO: allowJs option fileExtensions.unshift('ts', 'mts', 'tsx') - additionalConfigs.unshift({ - devDependencies: pickDependencies(['@vue/eslint-config-typescript']), - afterVuePlugin: [ - { - importer: - "import vueTsEslintConfig from '@vue/eslint-config-typescript'", - // TODO: supportedScriptLangs - content: '...vueTsEslintConfig(),', - }, - ], + devDependencies: pickDependencies(['@vue/eslint-config-typescript', 'jiti']), }) } else { fileExtensions.unshift('js', 'mjs', 'jsx') additionalConfigs.unshift({ devDependencies: pickDependencies(['@eslint/js']), - beforeVuePlugin: [ - { - importer: "import js from '@eslint/js'", - content: 'js.configs.recommended,', - }, - ], }) } @@ -106,22 +91,31 @@ export default function createConfig({ const templateData = { styleGuide, + needsPrettier, fileExtensions, configsBeforeVuePlugin, configsAfterVuePlugin, } const files = { - 'eslint.config.js': renderEjsFile( - './templates/eslint.config.js.ejs', - templateData, - ), '.editorconfig': renderEjsFile( './templates/_editorconfig.ejs', templateData, ), } + if (hasTypeScript) { + files['eslint.config.ts'] = renderEjsFile( + './templates/eslint.config.ts.ejs', + templateData, + ) + } else { + files['eslint.config.js'] = renderEjsFile( + './templates/eslint.config.js.ejs', + templateData, + ) + } + // .editorconfig & .prettierrc.json if (needsPrettier) { // Prettier recommends an explicit configuration file to let the editor know that it's used. @@ -131,6 +125,14 @@ export default function createConfig({ ) } + if (styleGuide !== 'standard' || needsPrettier) { + // TODO: + // I used renderEjsFile instead of readFileSync for simplicity and easier integration + // with create-vue. But it's ugly. + // Should refactor later, or move this project into create-vue. + files['.gitattributes'] = renderEjsFile('./templates/_gitattributes', {}) + } + return { pkg, files, diff --git a/package.json b/package.json index 4a57d9f..a78c98a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vue/create-eslint-config", - "version": "0.6.1", + "version": "0.7.0", "description": "Utility to setup ESLint in Vue.js projects.", "type": "module", "main": "index.js", @@ -30,7 +30,8 @@ }, "homepage": "https://github.com/vuejs/create-eslint-config#readme", "publishConfig": { - "access": "public" + "access": "public", + "provenance": true }, "dependencies": { "ejs": "^3.1.10", @@ -38,16 +39,17 @@ "kolorist": "^1.8.0" }, "devDependencies": { - "@eslint/js": "^9.14.0", - "@types/node": "^22.8.7", + "@eslint/js": "^9.18.0", + "@types/node": "^22.10.6", "@vue/eslint-config-prettier": "^10.1.0", - "@vue/eslint-config-typescript": "^14.1.3", - "eslint": "^9.14.0", - "eslint-plugin-oxlint": "^0.11.0", - "eslint-plugin-vue": "^9.30.0", - "npm-run-all2": "^7.0.1", - "oxlint": "^0.11.0", - "prettier": "^3.3.3", - "typescript": "~5.6.0" + "@vue/eslint-config-typescript": "^14.3.0", + "eslint": "^9.18.0", + "eslint-plugin-oxlint": "^0.15.6", + "eslint-plugin-vue": "^9.32.0", + "jiti": "^2.4.2", + "npm-run-all2": "^7.0.2", + "oxlint": "^0.15.6", + "prettier": "^3.4.2", + "typescript": "~5.7.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index efcbcc9..1c7a024 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,38 +19,41 @@ importers: version: 1.8.0 devDependencies: '@eslint/js': - specifier: ^9.14.0 - version: 9.14.0 + specifier: ^9.18.0 + version: 9.18.0 '@types/node': - specifier: ^22.8.7 - version: 22.8.7 + specifier: ^22.10.6 + version: 22.10.6 '@vue/eslint-config-prettier': specifier: ^10.1.0 - version: 10.1.0(eslint@9.14.0)(prettier@3.3.3) + version: 10.1.0(eslint@9.18.0(jiti@2.4.2))(prettier@3.4.2) '@vue/eslint-config-typescript': - specifier: ^14.1.3 - version: 14.1.3(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-vue@9.30.0(eslint@9.14.0))(eslint@9.14.0)(typescript@5.6.3) + specifier: ^14.3.0 + version: 14.3.0(eslint-plugin-vue@9.32.0(eslint@9.18.0(jiti@2.4.2)))(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2) eslint: - specifier: ^9.14.0 - version: 9.14.0 + specifier: ^9.18.0 + version: 9.18.0(jiti@2.4.2) eslint-plugin-oxlint: - specifier: ^0.11.0 - version: 0.11.0 + specifier: ^0.15.6 + version: 0.15.6 eslint-plugin-vue: - specifier: ^9.30.0 - version: 9.30.0(eslint@9.14.0) + specifier: ^9.32.0 + version: 9.32.0(eslint@9.18.0(jiti@2.4.2)) + jiti: + specifier: ^2.4.2 + version: 2.4.2 npm-run-all2: - specifier: ^7.0.1 - version: 7.0.1 + specifier: ^7.0.2 + version: 7.0.2 oxlint: - specifier: ^0.11.0 - version: 0.11.0 + specifier: ^0.15.6 + version: 0.15.6 prettier: - specifier: ^3.3.3 - version: 3.3.3 + specifier: ^3.4.2 + version: 3.4.2 typescript: - specifier: ~5.6.0 - version: 5.6.3 + specifier: ~5.7.0 + version: 5.7.2 packages: @@ -60,36 +63,32 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.1': - resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.18.0': - resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.7.0': - resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==} + '@eslint/core@0.10.0': + resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.1.0': - resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.14.0': - resolution: {integrity: sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==} + '@eslint/js@9.18.0': + resolution: {integrity: sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.4': - resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + '@eslint/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.0': - resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==} + '@eslint/plugin-kit@0.2.5': + resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@humanfs/core@0.19.1': @@ -108,8 +107,8 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.0': - resolution: {integrity: sha512-xnRgu9DxZbkWak/te3fcytNyp8MTbuiZIaueg2rgEvBuN55n04nwLYLU9TX/VVlusc9L2ZNXi99nUFNkHXtr5g==} + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} engines: {node: '>=18.18'} '@nodelib/fs.scandir@2.1.5': @@ -124,43 +123,43 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxlint/darwin-arm64@0.11.0': - resolution: {integrity: sha512-qQ1C5yvRYECp+FP8DCOSqNX4+e72xXyApJ2O8QyIeYFuGGF2MoDVQz3NYJEOjOfArZ9YXGsELwM3UFtjTGIZVg==} + '@oxlint/darwin-arm64@0.15.6': + resolution: {integrity: sha512-Oyx21zpBMttAykoL3VSXM4ScfO0OygKAVFJlRFzh14CF4pnMQRcQ8fIH38BXy6wdE3YyZ9ml1ZspsCwguqb/3A==} cpu: [arm64] os: [darwin] - '@oxlint/darwin-x64@0.11.0': - resolution: {integrity: sha512-pAqp6/6+mAIPr8WBndzmEuRbcXW8WNdn80hd8fLeR9teJI8eMpTkYL6kQIU7VjJ3NxpmzBLO7nh979/bwmmuBQ==} + '@oxlint/darwin-x64@0.15.6': + resolution: {integrity: sha512-fNjxp7MBflKYyvvYgvjvAaCnVdYE3QZkscNhd8ygMko4yFErzPnvPong04QhvNN/cSxrL74nowMHrijPxZbm6Q==} cpu: [x64] os: [darwin] - '@oxlint/linux-arm64-gnu@0.11.0': - resolution: {integrity: sha512-RmpjCWjX0RJ1MdIcqGQsOlXh9WgXnVgVolZLCs8MHqNuYtaIA+0VOxOhJOr7CQ0HmwV+ysPTAiQ2SVSI2tVJQQ==} + '@oxlint/linux-arm64-gnu@0.15.6': + resolution: {integrity: sha512-/yLShYUGVQV/lCxKDEKaZr5+QQm68NKuFkLcB3z0Qcd45BVdpa/0HGoOpOL7mexo+zxZkRQSGn7x2idVYv2Tng==} cpu: [arm64] os: [linux] - '@oxlint/linux-arm64-musl@0.11.0': - resolution: {integrity: sha512-totBeaOeZlblKRpSZi3svVWpJjFlhxR7Xzrh3nhPTgHMM3696qjzyb80Yg0K8gAlOrIDlBblLG0JnaxvdM2yjg==} + '@oxlint/linux-arm64-musl@0.15.6': + resolution: {integrity: sha512-S0i/xb/TEep2CjZ11D4BxifsaX2a1LyuxW1hFcREMebtXJjpZMFfCNR7Cnwk7tp6eWiXLo3DJ/6iPLkxV6iivg==} cpu: [arm64] os: [linux] - '@oxlint/linux-x64-gnu@0.11.0': - resolution: {integrity: sha512-tXiJ97WH4vwTIkGMnXYPx5NqwQiYLW9MbmnGkKkm5Xv/wpAaN761PkHRJT0zsYoAgoU3nZVp3qhit9MpHq1SQg==} + '@oxlint/linux-x64-gnu@0.15.6': + resolution: {integrity: sha512-BNSRAn2SMF2/TVpQ/Y/Sg4emXia3Kfihu2apVFLyRj2h2lJCB0g/Us3gjRux2AoD4KkdlMJiqY/Tnaz2xMq49w==} cpu: [x64] os: [linux] - '@oxlint/linux-x64-musl@0.11.0': - resolution: {integrity: sha512-LgjgD80fiz37g31t/jMm9kyDM31WPjcTkXXXU702WQsdhujXVUZDWid9/QeVvi51EVufyyekaTYgNR8REVVZZg==} + '@oxlint/linux-x64-musl@0.15.6': + resolution: {integrity: sha512-BUv/dJIBXeinL2vgy1CvzwqbvnDfydU10urbofOF8XXob6AmDewZSIr3ctDvd5qJisR7oEhAuxH4+rPkKnmjEw==} cpu: [x64] os: [linux] - '@oxlint/win32-arm64@0.11.0': - resolution: {integrity: sha512-lfANFSWt0vU6x9JQYeMEy6uy8wniZGYQt0nT45P3BwXIMhAJbEC3yEX+bP5x8eTQrgkDu4dwIDURGCeeUL/NdA==} + '@oxlint/win32-arm64@0.15.6': + resolution: {integrity: sha512-keVVbVxWBZ4myHlokg1JDQ0Fw2+iXMJSwbM3yr5SXXtMm7UgNaO3fGVAFA4Kv9OovhVCpfeqZy63gIgSv/w3oA==} cpu: [arm64] os: [win32] - '@oxlint/win32-x64@0.11.0': - resolution: {integrity: sha512-5CHtAp82xbv0jnh/HGi3QE0ANBr3+R338MA0wgZXc7477Vuri0aSK0T9oRU+K/pVloPVJaWKSDCCZoiZIYckzg==} + '@oxlint/win32-x64@0.15.6': + resolution: {integrity: sha512-onKba1QPlcX6sVBMp8KqsAmjgZfaanFZcYGYl6o6q6dzuZSLuKWCPyn/OeJ1PYryYVsbDKZYaCzLoBLrY13MqQ==} cpu: [x64] os: [win32] @@ -174,64 +173,54 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@22.8.7': - resolution: {integrity: sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==} + '@types/node@22.10.6': + resolution: {integrity: sha512-qNiuwC4ZDAUNcY47xgaSuS92cjf8JbSUoaKS77bmLG1rU7MlATVSiw/IlrjtIyyskXBZ8KkNfjK/P5na7rgXbQ==} - '@typescript-eslint/eslint-plugin@8.8.1': - resolution: {integrity: sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==} + '@typescript-eslint/eslint-plugin@8.20.0': + resolution: {integrity: sha512-naduuphVw5StFfqp4Gq4WhIBE2gN1GEmMUExpJYknZJdRnc+2gDzB8Z3+5+/Kv33hPQRDGzQO/0opHE72lZZ6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.8.1': - resolution: {integrity: sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==} + '@typescript-eslint/parser@8.20.0': + resolution: {integrity: sha512-gKXG7A5HMyjDIedBi6bUrDcun8GIjnI8qOwVLiY3rx6T/sHP/19XLJOnIq/FgQvWLHja5JN/LSE7eklNBr612g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.8.1': - resolution: {integrity: sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==} + '@typescript-eslint/scope-manager@8.20.0': + resolution: {integrity: sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.8.1': - resolution: {integrity: sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==} + '@typescript-eslint/type-utils@8.20.0': + resolution: {integrity: sha512-bPC+j71GGvA7rVNAHAtOjbVXbLN5PkwqMvy1cwGeaxUoRQXVuKCebRoLzm+IPW/NtFFpstn1ummSIasD5t60GA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@8.8.1': - resolution: {integrity: sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==} + '@typescript-eslint/types@8.20.0': + resolution: {integrity: sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.8.1': - resolution: {integrity: sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==} + '@typescript-eslint/typescript-estree@8.20.0': + resolution: {integrity: sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.8.1': - resolution: {integrity: sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==} + '@typescript-eslint/utils@8.20.0': + resolution: {integrity: sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/visitor-keys@8.8.1': - resolution: {integrity: sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==} + '@typescript-eslint/visitor-keys@8.20.0': + resolution: {integrity: sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vue/eslint-config-prettier@10.1.0': @@ -240,8 +229,8 @@ packages: eslint: '>= 8.21.0' prettier: '>= 3.0.0' - '@vue/eslint-config-typescript@14.1.3': - resolution: {integrity: sha512-L4NUJQz/0We2QYtrNwRAGRy4KfpOagl5V3MpZZ+rQ51a+bKjlKYYrugi7lp7PIX8LolRgu06ZwDoswnSGWnAmA==} + '@vue/eslint-config-typescript@14.3.0': + resolution: {integrity: sha512-bOreIxlSC/xsUdhDdKIHb1grwJah+IokNeJ50LqA1StdOHeSPUxSIPNxyKgRx4YdjhyzC6TKtrCf6yYK99x3Uw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^9.10.0 @@ -256,11 +245,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.14.0: resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} @@ -325,8 +309,8 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} cssesc@3.0.0: @@ -365,8 +349,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-oxlint@0.11.0: - resolution: {integrity: sha512-9CHYh1eLt2Z83ShLbvj79G6lqC2qLJBfsd7baGWOwDmLM2GXu2COi1r4tMMS2OI8gfB4s2uOgS8ZiYzHhN8uzQ==} + eslint-plugin-oxlint@0.15.6: + resolution: {integrity: sha512-NqaqORy2nUt3Zj9hiblxajiAWLoGMUPUIpuEMLJQmWJceTvB4Hu7R7zihWoXRuu+3/M6QZuMEYJe3sZaL9HKMQ==} eslint-plugin-prettier@5.2.1: resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} @@ -382,8 +366,8 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-vue@9.30.0: - resolution: {integrity: sha512-CyqlRgShvljFkOeYK8wN5frh/OGTvkj1S7wlr2Q2pUvwq+X5VYiLd6ZjujpgSgLnys2W8qrBLkXQ41SUYaoPIQ==} + eslint-plugin-vue@9.32.0: + resolution: {integrity: sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -404,8 +388,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.14.0: - resolution: {integrity: sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==} + eslint@9.18.0: + resolution: {integrity: sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -444,8 +428,8 @@ packages: fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: @@ -538,6 +522,10 @@ packages: engines: {node: '>=10'} hasBin: true + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -611,8 +599,8 @@ packages: resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==} engines: {node: ^18.17.0 || >=20.5.0} - npm-run-all2@7.0.1: - resolution: {integrity: sha512-Adbv+bJQ8UTAM03rRODqrO5cx0YU5KCG2CvHtSURiadvdTjjgGJXdbc1oQ9CXBh9dnGfHSoSB1Web/0Dzp6kOQ==} + npm-run-all2@7.0.2: + resolution: {integrity: sha512-7tXR+r9hzRNOPNTvXegM+QzCuMjzUIIq66VDunL6j60O4RrExx32XUhlrS7UK4VcdGw5/Wxzb3kfNcFix9JKDA==} engines: {node: ^18.17.0 || >=20.5.0, npm: '>= 9'} hasBin: true @@ -623,8 +611,8 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxlint@0.11.0: - resolution: {integrity: sha512-uY6/R4k5bECwJBR+y8CqGRcUb5hxNReziBjt5+pk6DKxj46DqMd6HwEk090KnaH1czVf23r8mcEsJYGowMWeIA==} + oxlint@0.15.6: + resolution: {integrity: sha512-LiDI0mIzvnL/oQq7AyAganWAKtk/RaiOKdACnzeJDe64gWp7c+0y3T554IvfWd/9kVt5awlvyg5eRRp67PaxNA==} engines: {node: '>=14.*'} hasBin: true @@ -669,8 +657,8 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} engines: {node: '>=14'} hasBin: true @@ -728,18 +716,15 @@ packages: resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} engines: {node: ^14.18.0 || >=16.0.0} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} + ts-api-utils@2.0.0: + resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + engines: {node: '>=18.12'} peerDependencies: - typescript: '>=4.2.0' + typescript: '>=4.8.4' tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} @@ -752,22 +737,20 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - typescript-eslint@8.8.1: - resolution: {integrity: sha512-R0dsXFt6t4SAFjUSKFjMh4pXDtq04SsFKCVGDP3ZOzNP7itF0jBcZYU4fMsZr4y7O7V7Nc751dDeESbe4PbQMQ==} + typescript-eslint@8.20.0: + resolution: {integrity: sha512-Kxz2QRFsgbWj6Xcftlw3Dd154b3cEPFqQC+qMZrMypSijPd4UanKKvoKDrJ4o8AIfZFKAF+7sMaEIR8mTElozA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} hasBin: true - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -805,26 +788,26 @@ packages: snapshots: - '@eslint-community/eslint-utils@4.4.0(eslint@9.14.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.18.0(jiti@2.4.2))': dependencies: - eslint: 9.14.0 + eslint: 9.18.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.1': {} - '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.18.0': + '@eslint/config-array@0.19.1': dependencies: - '@eslint/object-schema': 2.1.4 + '@eslint/object-schema': 2.1.5 debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/core@0.7.0': {} + '@eslint/core@0.10.0': + dependencies: + '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.1.0': + '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 debug: 4.3.7 @@ -838,12 +821,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.14.0': {} + '@eslint/js@9.18.0': {} - '@eslint/object-schema@2.1.4': {} + '@eslint/object-schema@2.1.5': {} - '@eslint/plugin-kit@0.2.0': + '@eslint/plugin-kit@0.2.5': dependencies: + '@eslint/core': 0.10.0 levn: 0.4.1 '@humanfs/core@0.19.1': {} @@ -857,7 +841,7 @@ snapshots: '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.0': {} + '@humanwhocodes/retry@0.4.1': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -871,28 +855,28 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@oxlint/darwin-arm64@0.11.0': + '@oxlint/darwin-arm64@0.15.6': optional: true - '@oxlint/darwin-x64@0.11.0': + '@oxlint/darwin-x64@0.15.6': optional: true - '@oxlint/linux-arm64-gnu@0.11.0': + '@oxlint/linux-arm64-gnu@0.15.6': optional: true - '@oxlint/linux-arm64-musl@0.11.0': + '@oxlint/linux-arm64-musl@0.15.6': optional: true - '@oxlint/linux-x64-gnu@0.11.0': + '@oxlint/linux-x64-gnu@0.15.6': optional: true - '@oxlint/linux-x64-musl@0.11.0': + '@oxlint/linux-x64-musl@0.15.6': optional: true - '@oxlint/win32-arm64@0.11.0': + '@oxlint/win32-arm64@0.15.6': optional: true - '@oxlint/win32-x64@0.11.0': + '@oxlint/win32-x64@0.15.6': optional: true '@pkgr/core@0.1.1': {} @@ -901,124 +885,113 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@22.8.7': + '@types/node@22.10.6': dependencies: - undici-types: 6.19.8 + undici-types: 6.20.0 - '@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.20.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 8.8.1(eslint@9.14.0)(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.8.1 - '@typescript-eslint/type-utils': 8.8.1(eslint@9.14.0)(typescript@5.6.3) - '@typescript-eslint/utils': 8.8.1(eslint@9.14.0)(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.8.1 - eslint: 9.14.0 + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.20.0 + '@typescript-eslint/type-utils': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/utils': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.20.0 + eslint: 9.18.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 + ts-api-utils: 2.0.0(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3)': + '@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@typescript-eslint/scope-manager': 8.8.1 - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.8.1 + '@typescript-eslint/scope-manager': 8.20.0 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.20.0 debug: 4.3.7 - eslint: 9.14.0 - optionalDependencies: - typescript: 5.6.3 + eslint: 9.18.0(jiti@2.4.2) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.8.1': + '@typescript-eslint/scope-manager@8.20.0': dependencies: - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/visitor-keys': 8.8.1 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/visitor-keys': 8.20.0 - '@typescript-eslint/type-utils@8.8.1(eslint@9.14.0)(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.3) - '@typescript-eslint/utils': 8.8.1(eslint@9.14.0)(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.7.2) + '@typescript-eslint/utils': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2) debug: 4.3.7 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 + eslint: 9.18.0(jiti@2.4.2) + ts-api-utils: 2.0.0(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - - eslint - supports-color - '@typescript-eslint/types@8.8.1': {} + '@typescript-eslint/types@8.20.0': {} - '@typescript-eslint/typescript-estree@8.8.1(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.20.0(typescript@5.7.2)': dependencies: - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/visitor-keys': 8.8.1 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/visitor-keys': 8.20.0 debug: 4.3.7 - fast-glob: 3.3.2 + fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 + ts-api-utils: 2.0.0(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.8.1(eslint@9.14.0)(typescript@5.6.3)': + '@typescript-eslint/utils@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0) - '@typescript-eslint/scope-manager': 8.8.1 - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.3) - eslint: 9.14.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.18.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.20.0 + '@typescript-eslint/types': 8.20.0 + '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.7.2) + eslint: 9.18.0(jiti@2.4.2) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - - typescript - '@typescript-eslint/visitor-keys@8.8.1': + '@typescript-eslint/visitor-keys@8.20.0': dependencies: - '@typescript-eslint/types': 8.8.1 - eslint-visitor-keys: 3.4.3 + '@typescript-eslint/types': 8.20.0 + eslint-visitor-keys: 4.2.0 - '@vue/eslint-config-prettier@10.1.0(eslint@9.14.0)(prettier@3.3.3)': + '@vue/eslint-config-prettier@10.1.0(eslint@9.18.0(jiti@2.4.2))(prettier@3.4.2)': dependencies: - eslint: 9.14.0 - eslint-config-prettier: 9.1.0(eslint@9.14.0) - eslint-plugin-prettier: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.14.0))(eslint@9.14.0)(prettier@3.3.3) - prettier: 3.3.3 + eslint: 9.18.0(jiti@2.4.2) + eslint-config-prettier: 9.1.0(eslint@9.18.0(jiti@2.4.2)) + eslint-plugin-prettier: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.18.0(jiti@2.4.2)))(eslint@9.18.0(jiti@2.4.2))(prettier@3.4.2) + prettier: 3.4.2 transitivePeerDependencies: - '@types/eslint' - '@vue/eslint-config-typescript@14.1.3(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-vue@9.30.0(eslint@9.14.0))(eslint@9.14.0)(typescript@5.6.3)': + '@vue/eslint-config-typescript@14.3.0(eslint-plugin-vue@9.32.0(eslint@9.18.0(jiti@2.4.2)))(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3) - eslint: 9.14.0 - eslint-plugin-vue: 9.30.0(eslint@9.14.0) - fast-glob: 3.3.2 - typescript-eslint: 8.8.1(eslint@9.14.0)(typescript@5.6.3) - vue-eslint-parser: 9.4.3(eslint@9.14.0) + '@typescript-eslint/utils': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.18.0(jiti@2.4.2) + eslint-plugin-vue: 9.32.0(eslint@9.18.0(jiti@2.4.2)) + fast-glob: 3.3.3 + typescript-eslint: 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2) + vue-eslint-parser: 9.4.3(eslint@9.18.0(jiti@2.4.2)) optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 transitivePeerDependencies: - - '@typescript-eslint/parser' - supports-color - acorn-jsx@5.3.2(acorn@8.12.1): - dependencies: - acorn: 8.12.1 - acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 - acorn@8.12.1: {} - acorn@8.14.0: {} ajv@6.12.6: @@ -1074,7 +1047,7 @@ snapshots: concat-map@0.0.1: {} - cross-spawn@7.0.3: + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 @@ -1099,33 +1072,33 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@9.1.0(eslint@9.14.0): + eslint-config-prettier@9.1.0(eslint@9.18.0(jiti@2.4.2)): dependencies: - eslint: 9.14.0 + eslint: 9.18.0(jiti@2.4.2) - eslint-plugin-oxlint@0.11.0: + eslint-plugin-oxlint@0.15.6: dependencies: jsonc-parser: 3.3.1 - eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.14.0))(eslint@9.14.0)(prettier@3.3.3): + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.18.0(jiti@2.4.2)))(eslint@9.18.0(jiti@2.4.2))(prettier@3.4.2): dependencies: - eslint: 9.14.0 - prettier: 3.3.3 + eslint: 9.18.0(jiti@2.4.2) + prettier: 3.4.2 prettier-linter-helpers: 1.0.0 synckit: 0.9.1 optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@9.14.0) + eslint-config-prettier: 9.1.0(eslint@9.18.0(jiti@2.4.2)) - eslint-plugin-vue@9.30.0(eslint@9.14.0): + eslint-plugin-vue@9.32.0(eslint@9.18.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0) - eslint: 9.14.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.18.0(jiti@2.4.2)) + eslint: 9.18.0(jiti@2.4.2) globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.6.3 - vue-eslint-parser: 9.4.3(eslint@9.14.0) + vue-eslint-parser: 9.4.3(eslint@9.18.0(jiti@2.4.2)) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -1144,23 +1117,23 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.14.0: + eslint@9.18.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.18.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.18.0 - '@eslint/core': 0.7.0 - '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.14.0 - '@eslint/plugin-kit': 0.2.0 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.10.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.18.0 + '@eslint/plugin-kit': 0.2.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.0 + '@humanwhocodes/retry': 0.4.1 '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 debug: 4.3.7 escape-string-regexp: 4.0.0 eslint-scope: 8.2.0 @@ -1180,7 +1153,8 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - text-table: 0.2.0 + optionalDependencies: + jiti: 2.4.2 transitivePeerDependencies: - supports-color @@ -1192,8 +1166,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 esquery@1.6.0: @@ -1212,7 +1186,7 @@ snapshots: fast-diff@1.3.0: {} - fast-glob@3.3.2: + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -1298,6 +1272,8 @@ snapshots: filelist: 1.0.4 minimatch: 3.1.2 + jiti@2.4.2: {} + js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -1358,10 +1334,10 @@ snapshots: npm-normalize-package-bin@4.0.0: {} - npm-run-all2@7.0.1: + npm-run-all2@7.0.2: dependencies: ansi-styles: 6.2.1 - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 memorystream: 0.3.1 minimatch: 9.0.5 pidtree: 0.6.0 @@ -1382,16 +1358,16 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxlint@0.11.0: + oxlint@0.15.6: optionalDependencies: - '@oxlint/darwin-arm64': 0.11.0 - '@oxlint/darwin-x64': 0.11.0 - '@oxlint/linux-arm64-gnu': 0.11.0 - '@oxlint/linux-arm64-musl': 0.11.0 - '@oxlint/linux-x64-gnu': 0.11.0 - '@oxlint/linux-x64-musl': 0.11.0 - '@oxlint/win32-arm64': 0.11.0 - '@oxlint/win32-x64': 0.11.0 + '@oxlint/darwin-arm64': 0.15.6 + '@oxlint/darwin-x64': 0.15.6 + '@oxlint/linux-arm64-gnu': 0.15.6 + '@oxlint/linux-arm64-musl': 0.15.6 + '@oxlint/linux-x64-gnu': 0.15.6 + '@oxlint/linux-x64-musl': 0.15.6 + '@oxlint/win32-arm64': 0.15.6 + '@oxlint/win32-x64': 0.15.6 p-limit@3.1.0: dependencies: @@ -1424,7 +1400,7 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.3.3: {} + prettier@3.4.2: {} punycode@2.3.1: {} @@ -1468,15 +1444,13 @@ snapshots: '@pkgr/core': 0.1.1 tslib: 2.7.0 - text-table@0.2.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - ts-api-utils@1.3.0(typescript@5.6.3): + ts-api-utils@2.0.0(typescript@5.7.2): dependencies: - typescript: 5.6.3 + typescript: 5.7.2 tslib@2.7.0: {} @@ -1486,20 +1460,19 @@ snapshots: type-fest@0.20.2: {} - typescript-eslint@8.8.1(eslint@9.14.0)(typescript@5.6.3): + typescript-eslint@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3) - '@typescript-eslint/parser': 8.8.1(eslint@9.14.0)(typescript@5.6.3) - '@typescript-eslint/utils': 8.8.1(eslint@9.14.0)(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 + '@typescript-eslint/eslint-plugin': 8.20.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/parser': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/utils': 8.20.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.18.0(jiti@2.4.2) + typescript: 5.7.2 transitivePeerDependencies: - - eslint - supports-color - typescript@5.6.3: {} + typescript@5.7.2: {} - undici-types@6.19.8: {} + undici-types@6.20.0: {} uri-js@4.4.1: dependencies: @@ -1507,10 +1480,10 @@ snapshots: util-deprecate@1.0.2: {} - vue-eslint-parser@9.4.3(eslint@9.14.0): + vue-eslint-parser@9.4.3(eslint@9.18.0(jiti@2.4.2)): dependencies: debug: 4.3.7 - eslint: 9.14.0 + eslint: 9.18.0(jiti@2.4.2) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 diff --git a/templates/_editorconfig.ejs b/templates/_editorconfig.ejs index 9cdd5ec..f72a9a2 100644 --- a/templates/_editorconfig.ejs +++ b/templates/_editorconfig.ejs @@ -4,12 +4,13 @@ indent_size = 2 indent_style = space insert_final_newline = true trim_trailing_whitespace = true -<%_ if (styleGuide === 'airbnb') { _%> -<%# // standard doesn't have an opinion on line endings +<%_ if (styleGuide !== 'standard' || needsPrettier) { _%> +<%# +// standard doesn't have an opinion on line endings // https://github.com/standard/standard/issues/140 // or maximum line length // https://github.com/standard/standard/issues/1559 -// so we only configure them for airbnb style +// Prettier enforces these things, though. %> end_of_line = lf max_line_length = 100 diff --git a/templates/_gitattributes b/templates/_gitattributes new file mode 100644 index 0000000..6313b56 --- /dev/null +++ b/templates/_gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/templates/eslint.config.js.ejs b/templates/eslint.config.js.ejs index b56c6ff..ff4e5fb 100644 --- a/templates/eslint.config.js.ejs +++ b/templates/eslint.config.js.ejs @@ -1,6 +1,7 @@ <%_ for (const { importer } of configsBeforeVuePlugin) { _%> <%- importer %> <%_ } _%> +import js from '@eslint/js' import pluginVue from 'eslint-plugin-vue' <%_ for (const { importer } of configsAfterVuePlugin) { _%> <%- importer %> @@ -17,11 +18,12 @@ export default [ ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'], }, - <%_ for (const { content } of configsBeforeVuePlugin) { _%> +<%_ for (const { content } of configsBeforeVuePlugin) { _%> <%- content %><%# TODO: auto-indent if content's multi-line %> - <%_ } _%> +<%_ } _%> + js.configs.recommended, ...pluginVue.configs['flat/essential'], - <%_ for (const { content } of configsAfterVuePlugin) { _%> +<%_ for (const { content } of configsAfterVuePlugin) { _%> <%- content %><%# TODO: auto-indent if content's multi-line %> - <%_ } _%> +<%_ } _%> ] diff --git a/templates/eslint.config.ts.ejs b/templates/eslint.config.ts.ejs new file mode 100644 index 0000000..6efe9dc --- /dev/null +++ b/templates/eslint.config.ts.ejs @@ -0,0 +1,32 @@ +<%_ for (const { importer } of configsBeforeVuePlugin) { _%> +<%- importer %> +<%_ } _%> +import pluginVue from 'eslint-plugin-vue' +import { + defineConfigWithVueTs, + vueTsConfigs, +} from '@vue/eslint-config-typescript' +<%_ for (const { importer } of configsAfterVuePlugin) { _%> +<%- importer %> +<%_ } _%> + +export default defineConfigWithVueTs( + { + name: 'app/files-to-lint', + files: ['**/*.{<%= fileExtensions.join(',') %>}'], + }, + + { + name: 'app/files-to-ignore', + ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'], + }, + +<%_ for (const { content } of configsBeforeVuePlugin) { _%> + <%- content %><%# TODO: auto-indent if content's multi-line %> +<%_ } _%> + pluginVue.configs['flat/essential'], + vueTsConfigs.recommended, +<%_ for (const { content } of configsAfterVuePlugin) { _%> + <%- content %><%# TODO: auto-indent if content's multi-line %> +<%_ } _%> +)