chore: add astro eslint parser; add pre-commit lint:fix

This commit is contained in:
ayo 2026-04-04 10:11:21 +02:00
parent 3a20843c92
commit 15414e26d2
6 changed files with 198 additions and 7 deletions

2
.husky/pre-commit Normal file
View file

@ -0,0 +1,2 @@
echo "pre-commit..."
npm run lint:fix

View file

@ -6,9 +6,10 @@ import globals from 'globals'
import { defineConfig, globalIgnores } from 'eslint/config'
import stylistic from '@stylistic/eslint-plugin'
import eslintPluginAstro from 'eslint-plugin-astro'
import astroParser from 'astro-eslint-parser'
import tseslint from 'typescript-eslint'
export default defineConfig([
...eslintPluginAstro.configs.recommended,
{
files: ['**/*.css'],
plugins: {
@ -51,5 +52,15 @@ export default defineConfig([
}]
}
},
...eslintPluginAstro.configs.recommended,
{
files: ['**/*.astro'],
languageOptions: {
parser: astroParser,
parserOptions: {
parser: tseslint.parser
}
}
},
globalIgnores(['**/dist', '**/**.d.ts'])
])

View file

@ -39,11 +39,13 @@
"@eslint/css": "^1.1.0",
"@eslint/js": "^10.0.1",
"@stylistic/eslint-plugin": "^5.10.0",
"astro-eslint-parser": "^1.4.0",
"devalue": "^5.6.4",
"eslint": "^10.2.0",
"eslint-plugin-astro": "^1.6.0",
"globals": "^17.4.0",
"husky": "^9.1.7"
"husky": "^9.1.7",
"typescript-eslint": "^8.58.0"
},
"peerDependencies": {
"astro": "^6"

View file

@ -21,6 +21,9 @@ importers:
'@stylistic/eslint-plugin':
specifier: ^5.10.0
version: 5.10.0(eslint@10.2.0)
astro-eslint-parser:
specifier: ^1.4.0
version: 1.4.0
devalue:
specifier: ^5.6.4
version: 5.6.4
@ -36,6 +39,9 @@ importers:
husky:
specifier: ^9.1.7
version: 9.1.7
typescript-eslint:
specifier: ^8.58.0
version: 8.58.0(eslint@10.2.0)(typescript@5.7.2)
packages:
@ -672,14 +678,61 @@ packages:
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
'@typescript-eslint/eslint-plugin@8.58.0':
resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.58.0
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/parser@8.58.0':
resolution: {integrity: sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/project-service@8.58.0':
resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/scope-manager@8.58.0':
resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.58.0':
resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/type-utils@8.58.0':
resolution: {integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/types@8.58.0':
resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.58.0':
resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/utils@8.58.0':
resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/visitor-keys@8.58.0':
resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -833,6 +886,15 @@ packages:
supports-color:
optional: true
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
decode-named-character-reference@1.0.2:
resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
@ -1121,6 +1183,10 @@ packages:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
ignore@7.0.5:
resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
engines: {node: '>= 4'}
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
@ -1623,6 +1689,12 @@ packages:
trough@2.2.0:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
ts-api-utils@2.5.0:
resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
engines: {node: '>=18.12'}
peerDependencies:
typescript: '>=4.8.4'
tsconfck@3.1.6:
resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==}
engines: {node: ^18 || >=20}
@ -1640,6 +1712,13 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
typescript-eslint@8.58.0:
resolution: {integrity: sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
typescript@5.7.2:
resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==}
engines: {node: '>=14.17'}
@ -2359,13 +2438,92 @@ snapshots:
'@types/unist@3.0.3': {}
'@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.2.0)(typescript@5.7.2))(eslint@10.2.0)(typescript@5.7.2)':
dependencies:
'@eslint-community/regexpp': 4.12.2
'@typescript-eslint/parser': 8.58.0(eslint@10.2.0)(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.58.0
'@typescript-eslint/type-utils': 8.58.0(eslint@10.2.0)(typescript@5.7.2)
'@typescript-eslint/utils': 8.58.0(eslint@10.2.0)(typescript@5.7.2)
'@typescript-eslint/visitor-keys': 8.58.0
eslint: 10.2.0
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 2.5.0(typescript@5.7.2)
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.58.0(eslint@10.2.0)(typescript@5.7.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.58.0
'@typescript-eslint/types': 8.58.0
'@typescript-eslint/typescript-estree': 8.58.0(typescript@5.7.2)
'@typescript-eslint/visitor-keys': 8.58.0
debug: 4.4.3
eslint: 10.2.0
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/project-service@8.58.0(typescript@5.7.2)':
dependencies:
'@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.7.2)
'@typescript-eslint/types': 8.58.0
debug: 4.4.3
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@8.58.0':
dependencies:
'@typescript-eslint/types': 8.58.0
'@typescript-eslint/visitor-keys': 8.58.0
'@typescript-eslint/tsconfig-utils@8.58.0(typescript@5.7.2)':
dependencies:
typescript: 5.7.2
'@typescript-eslint/type-utils@8.58.0(eslint@10.2.0)(typescript@5.7.2)':
dependencies:
'@typescript-eslint/types': 8.58.0
'@typescript-eslint/typescript-estree': 8.58.0(typescript@5.7.2)
'@typescript-eslint/utils': 8.58.0(eslint@10.2.0)(typescript@5.7.2)
debug: 4.4.3
eslint: 10.2.0
ts-api-utils: 2.5.0(typescript@5.7.2)
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@8.58.0': {}
'@typescript-eslint/typescript-estree@8.58.0(typescript@5.7.2)':
dependencies:
'@typescript-eslint/project-service': 8.58.0(typescript@5.7.2)
'@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.7.2)
'@typescript-eslint/types': 8.58.0
'@typescript-eslint/visitor-keys': 8.58.0
debug: 4.4.3
minimatch: 10.2.5
semver: 7.7.4
tinyglobby: 0.2.15
ts-api-utils: 2.5.0(typescript@5.7.2)
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.58.0(eslint@10.2.0)(typescript@5.7.2)':
dependencies:
'@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0)
'@typescript-eslint/scope-manager': 8.58.0
'@typescript-eslint/types': 8.58.0
'@typescript-eslint/typescript-estree': 8.58.0(typescript@5.7.2)
eslint: 10.2.0
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/visitor-keys@8.58.0':
dependencies:
'@typescript-eslint/types': 8.58.0
@ -2595,6 +2753,10 @@ snapshots:
dependencies:
ms: 2.1.3
debug@4.4.3:
dependencies:
ms: 2.1.3
decode-named-character-reference@1.0.2:
dependencies:
character-entities: 2.0.2
@ -2969,6 +3131,8 @@ snapshots:
ignore@5.3.2: {}
ignore@7.0.5: {}
imurmurhash@0.1.4: {}
iron-webcrypto@1.2.1: {}
@ -3723,6 +3887,10 @@ snapshots:
trough@2.2.0: {}
ts-api-utils@2.5.0(typescript@5.7.2):
dependencies:
typescript: 5.7.2
tsconfck@3.1.6(typescript@5.7.2):
optionalDependencies:
typescript: 5.7.2
@ -3734,8 +3902,18 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
typescript@5.7.2:
optional: true
typescript-eslint@8.58.0(eslint@10.2.0)(typescript@5.7.2):
dependencies:
'@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.2.0)(typescript@5.7.2))(eslint@10.2.0)(typescript@5.7.2)
'@typescript-eslint/parser': 8.58.0(eslint@10.2.0)(typescript@5.7.2)
'@typescript-eslint/typescript-estree': 8.58.0(typescript@5.7.2)
'@typescript-eslint/utils': 8.58.0(eslint@10.2.0)(typescript@5.7.2)
eslint: 10.2.0
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
typescript@5.7.2: {}
ufo@1.6.3: {}

View file

@ -1,6 +1,4 @@
---
// type Primitive = string | number | boolean | null | undefined;
export interface Props {
/**
* The id that the client script will pass to the `deserialize()` function

View file

@ -17,7 +17,7 @@ export type Data = typeof data;
<script>
import { deserialize } from '../deserialize'
import { parse } from 'devalue'
import type { Data } from './index.astro'
import { type Data } from './index.astro'
const data = deserialize<Data>('my-data', parse)
console.log(data)