diff --git a/.eslintrc.json b/.eslintrc.json index ece49a3..10823fe 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,43 +1,14 @@ { "root": true, - "plugins": ["file-progress"], "overrides": [ { - // All files. - "files": ["*.ts", "*.tsx", "*.cjs"], - "extends": [ - "airbnb", - "plugin:eslint-comments/recommended", - "plugin:storybook/recommended", - "plugin:prettier/recommended" // This config needs to be the last one as it overrides rules from other configs. - ], - "rules": { - // We prefer named exports as they ensure that import name is the same as the export name. - "import/prefer-default-export": 0, - "import/no-default-export": 2, - - // Shows information about currently processing file in the console. - "file-progress/activate": 1, - - // Removes eslint-disable comments when they are not needed. - "eslint-comments/no-unused-disable": 2, - - // Ensure each eslint-disable has a description comment. - "eslint-comments/require-description": [2, { "ignore": ["eslint-enable"] }] - } - }, - { - // TypeScript files. - "files": ["*.ts", "*.tsx"], - "plugins": ["simple-import-sort"], - "extends": [ - "airbnb-typescript", - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-requiring-type-checking", - "plugin:prettier/recommended" - ], + // Files containing TypeScript code. + "files": ["*.ts", "*.tsx", "*.astro"], + "extends": ["plugin:@typescript-eslint/recommended"], + "parser": "@typescript-eslint/parser", "parserOptions": { - "project": "./tsconfig.eslint.json" + "project": "./tsconfig.eslint.json", + "extraFileExtensions": [".astro"] }, "settings": { "import/resolver": { @@ -45,28 +16,19 @@ } }, "rules": { - // We can create an empty interface only when it extends other interface. - "@typescript-eslint/no-empty-interface": [2, { "allowSingleExtends": true }], - - // Rules for imports and exports order. - "simple-import-sort/imports": [ - 2, - { - "groups": [ - ["^\\u0000"], // Side effects - ["^@?\\w"], // Packages - ["^"], // Absolute imports - ["^\\."] // Relative imports - ] - } - ], - "simple-import-sort/exports": 2 + // Create empty interface only when it extends other interface. + "@typescript-eslint/no-empty-interface": [2, { "allowSingleExtends": true }] } }, { - // Files with React components. "files": ["*.tsx"], - "extends": ["airbnb/hooks", "plugin:react/jsx-runtime", "plugin:prettier/recommended"], + "extends": [ + "airbnb", + "airbnb-typescript", + "airbnb/hooks", + "plugin:react/jsx-runtime", + "plugin:@typescript-eslint/recommended-requiring-type-checking" + ], "rules": { // Write all components as arrow functions. "react/function-component-definition": [ @@ -82,20 +44,60 @@ } }, { - // Storybook stories - "files": ["*.stories.tsx"], - "rules": { - "import/no-default-export": 0 + "files": ["*.ts"], + "extends": [ + "airbnb/base", + "airbnb-typescript/base", + "plugin:@typescript-eslint/recommended-requiring-type-checking" + ] + }, + { + "files": ["*.astro"], + "globals": { + "astroHTML": true + }, + "extends": ["airbnb/base", "airbnb-typescript/base", "plugin:astro/all"], + "parser": "astro-eslint-parser", + "parserOptions": { + "parser": "@typescript-eslint/parser" } }, { - // Configuration files - "files": ["astro.config.ts", "tailwind.config.cjs", ".storybook/*"], + "files": ["*.cjs"], + "extends": ["airbnb/base"] + }, + { + // All linted files. + "files": ["*.ts", "*.tsx", "*.astro", "*.cjs"], + "plugins": ["file-progress", "simple-import-sort"], + "extends": ["plugin:eslint-comments/recommended", "plugin:prettier/recommended"], "rules": { - "import/no-default-export": 0, - "import/no-extraneous-dependencies": [2, { "devDependencies": true }] + // Shows information about currently processing file in the console. + "file-progress/activate": 1, + + // Removes eslint-disable comments when they are not needed. + "eslint-comments/no-unused-disable": 2, + + // Ensure each eslint-disable has a description comment. + "eslint-comments/require-description": [2, { "ignore": ["eslint-enable"] }], + + // Allow devDependencies in some files. + "import/no-extraneous-dependencies": [2, { "devDependencies": ["astro.config.ts", "tailwind.config.cjs"] }], + + // Imports and exports order. + "simple-import-sort/imports": [ + 2, + { + "groups": [ + ["^\\u0000"], // Side effects + ["^@?\\w"], // Packages + ["^"], // Absolute imports + ["^\\."] // Relative imports + ] + } + ], + "simple-import-sort/exports": 2 } } - ], - "ignorePatterns": ["!.storybook"] + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 0ccf72d..5525d33 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,16 +1,10 @@ { "typescript.tsdk": "node_modules/typescript/lib", "typescript.enablePromptUseWorkspaceTsdk": true, - "[json]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "[javascript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "[typescript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "[typescriptreact]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - } + "eslint.validate": ["javascript", "javascriptreact", "astro", "typescript", "typescriptreact"], + "[astro]": { "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, + "[json]": { "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, + "[javascript]": { "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, + "[typescript]": { "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, + "[typescriptreact]": { "editor.defaultFormatter": "dbaeumer.vscode-eslint" } } diff --git a/package-lock.json b/package-lock.json index ba32255..cd90b75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "astro-icon": "^0.7.3", "clsx": "^1.2.1", + "prettier-plugin-astro": "^0.5.3", "react": "^18.2.0", "react-dom": "^18.2.0" }, @@ -31,6 +32,7 @@ "eslint-config-airbnb-typescript": "^17.0.0", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.0", + "eslint-plugin-astro": "^0.17.1", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-file-progress": "^1.3.0", "eslint-plugin-import": "^2.26.0", @@ -63,8 +65,7 @@ "node_modules/@astrojs/compiler": { "version": "0.23.4", "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-0.23.4.tgz", - "integrity": "sha512-vNZIa5Tf5nOqBEGJvM6xyYBnGcz4MAp+bBPnyVI0UYRjsIWlP7RgMdCpRV0OOh5kgh00BoAypGv27kcoJCMVfA==", - "dev": true + "integrity": "sha512-vNZIa5Tf5nOqBEGJvM6xyYBnGcz4MAp+bBPnyVI0UYRjsIWlP7RgMdCpRV0OOh5kgh00BoAypGv27kcoJCMVfA==" }, "node_modules/@astrojs/language-server": { "version": "0.20.3", @@ -3050,7 +3051,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "is-glob": "^4.0.3", @@ -6945,6 +6945,26 @@ "npm": ">=6.14.0" } }, + "node_modules/astro-eslint-parser": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/astro-eslint-parser/-/astro-eslint-parser-0.5.1.tgz", + "integrity": "sha512-es63TAA7vjgV8aI5pUOXqoxa9JHelqzFSk1qOVSCGkeoAMayrr7BdFt9waVWyXyIcOjTXJlQa1pM832bEaCS2Q==", + "dev": true, + "dependencies": { + "@astrojs/compiler": "0.18.0 - 0.23.0 || ^0.23.0", + "@typescript-eslint/types": "^5.25.0", + "debug": "^4.3.4", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "synckit": "^0.8.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, "node_modules/astro-icon": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/astro-icon/-/astro-icon-0.7.3.tgz", @@ -9605,7 +9625,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -9936,7 +9955,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, "engines": { "node": ">=8" } @@ -11369,6 +11387,29 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-plugin-astro": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-astro/-/eslint-plugin-astro-0.17.1.tgz", + "integrity": "sha512-G2S2zAaDokH2v7O+nzcd0iFskGJ1ohANhQpsFwaAqDPyn+GolFl4zSCnoQefLZ+ONEeZkZ8Jp7Imvbo3FI3LOA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "^5.25.0", + "astro-eslint-parser": "^0.5.0", + "eslint-utils": "^3.0.0", + "postcss": "^8.4.14", + "postcss-selector-parser": "^6.0.10", + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-plugin-eslint-comments": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", @@ -13738,8 +13779,7 @@ "node_modules/globalyzer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" }, "node_modules/globby": { "version": "11.1.0", @@ -13764,8 +13804,7 @@ "node_modules/globrex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" }, "node_modules/graceful-fs": { "version": "4.2.10", @@ -15015,7 +15054,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -15052,7 +15090,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -15312,7 +15349,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, "dependencies": { "is-docker": "^2.0.0" }, @@ -15324,7 +15360,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, "bin": { "is-docker": "cli.js" }, @@ -15344,8 +15379,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", @@ -18369,7 +18403,6 @@ "version": "8.4.0", "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -18386,7 +18419,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, "bin": { "is-docker": "cli.js" }, @@ -18797,7 +18829,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -19310,7 +19341,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true, "bin": { "prettier": "bin-prettier.js" }, @@ -19333,6 +19363,36 @@ "node": ">=6.0.0" } }, + "node_modules/prettier-plugin-astro": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/prettier-plugin-astro/-/prettier-plugin-astro-0.5.3.tgz", + "integrity": "sha512-g4uJ/7k1rJeIWBifeBgTqzgV5gmMTG+lOmOvUZvtIh1R91aqa+yYMzbysIlsJKRaRyWefejrOpvpIuEePBDAyw==", + "dependencies": { + "@astrojs/compiler": "^0.23.3", + "prettier": "^2.7.1", + "sass-formatter": "^0.7.2", + "synckit": "^0.7.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0", + "npm": ">=6.14.0" + } + }, + "node_modules/prettier-plugin-astro/node_modules/synckit": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.7.3.tgz", + "integrity": "sha512-jNroMv7Juy+mJ/CHW5H6TzsLWpa1qck6sCHbkv8YTur+irSq2PjbvmGnm2gy14BUQ6jF33vyR4DPssHqmqsDQw==", + "dependencies": { + "@pkgr/utils": "^2.3.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/pretty-error": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", @@ -21964,6 +22024,11 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, + "node_modules/s.color": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/s.color/-/s.color-0.0.15.tgz", + "integrity": "sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==" + }, "node_modules/sade": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", @@ -22289,6 +22354,14 @@ "which": "bin/which" } }, + "node_modules/sass-formatter": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/sass-formatter/-/sass-formatter-0.7.5.tgz", + "integrity": "sha512-NKFP8ddjhUYi6A/iD1cEtzkEs91U61kzqe3lY9SVNuvX7LGc88xnEN0mmsWL7Ol//YTi2GL/ol7b9XZ2+hgXuA==", + "dependencies": { + "suf-log": "^2.5.3" + } + }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -22508,7 +22581,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -22520,7 +22592,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -23440,6 +23511,14 @@ "inline-style-parser": "0.1.1" } }, + "node_modules/suf-log": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/suf-log/-/suf-log-2.5.3.tgz", + "integrity": "sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==", + "dependencies": { + "s.color": "0.0.15" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -24191,7 +24270,6 @@ "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, "dependencies": { "globalyzer": "0.1.0", "globrex": "^0.1.2" @@ -24448,8 +24526,7 @@ "node_modules/tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "node_modules/tsm": { "version": "2.2.2", @@ -26377,7 +26454,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -26860,8 +26936,7 @@ "@astrojs/compiler": { "version": "0.23.4", "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-0.23.4.tgz", - "integrity": "sha512-vNZIa5Tf5nOqBEGJvM6xyYBnGcz4MAp+bBPnyVI0UYRjsIWlP7RgMdCpRV0OOh5kgh00BoAypGv27kcoJCMVfA==", - "dev": true + "integrity": "sha512-vNZIa5Tf5nOqBEGJvM6xyYBnGcz4MAp+bBPnyVI0UYRjsIWlP7RgMdCpRV0OOh5kgh00BoAypGv27kcoJCMVfA==" }, "@astrojs/language-server": { "version": "0.20.3", @@ -29001,7 +29076,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", - "dev": true, "requires": { "cross-spawn": "^7.0.3", "is-glob": "^4.0.3", @@ -32059,6 +32133,20 @@ } } }, + "astro-eslint-parser": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/astro-eslint-parser/-/astro-eslint-parser-0.5.1.tgz", + "integrity": "sha512-es63TAA7vjgV8aI5pUOXqoxa9JHelqzFSk1qOVSCGkeoAMayrr7BdFt9waVWyXyIcOjTXJlQa1pM832bEaCS2Q==", + "dev": true, + "requires": { + "@astrojs/compiler": "0.18.0 - 0.23.0 || ^0.23.0", + "@typescript-eslint/types": "^5.25.0", + "debug": "^4.3.4", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "synckit": "^0.8.0" + } + }, "astro-icon": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/astro-icon/-/astro-icon-0.7.3.tgz", @@ -33944,7 +34032,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -34186,8 +34273,7 @@ "define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, "define-properties": { "version": "1.1.4", @@ -35373,6 +35459,20 @@ } } }, + "eslint-plugin-astro": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-astro/-/eslint-plugin-astro-0.17.1.tgz", + "integrity": "sha512-G2S2zAaDokH2v7O+nzcd0iFskGJ1ohANhQpsFwaAqDPyn+GolFl4zSCnoQefLZ+ONEeZkZ8Jp7Imvbo3FI3LOA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "^5.25.0", + "astro-eslint-parser": "^0.5.0", + "eslint-utils": "^3.0.0", + "postcss": "^8.4.14", + "postcss-selector-parser": "^6.0.10", + "sourcemap-codec": "^1.4.8" + } + }, "eslint-plugin-eslint-comments": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", @@ -37012,8 +37112,7 @@ "globalyzer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" }, "globby": { "version": "11.1.0", @@ -37032,8 +37131,7 @@ "globrex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" }, "graceful-fs": { "version": "4.2.10", @@ -37952,8 +38050,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-finite": { "version": "1.1.0", @@ -37978,7 +38075,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -38148,7 +38244,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, "requires": { "is-docker": "^2.0.0" }, @@ -38156,8 +38251,7 @@ "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" } } }, @@ -38170,8 +38264,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isobject": { "version": "3.0.1", @@ -40420,7 +40513,6 @@ "version": "8.4.0", "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, "requires": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -40430,8 +40522,7 @@ "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" } } }, @@ -40753,8 +40844,7 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", @@ -41111,8 +41201,7 @@ "prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==" }, "prettier-linter-helpers": { "version": "1.0.0", @@ -41123,6 +41212,28 @@ "fast-diff": "^1.1.2" } }, + "prettier-plugin-astro": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/prettier-plugin-astro/-/prettier-plugin-astro-0.5.3.tgz", + "integrity": "sha512-g4uJ/7k1rJeIWBifeBgTqzgV5gmMTG+lOmOvUZvtIh1R91aqa+yYMzbysIlsJKRaRyWefejrOpvpIuEePBDAyw==", + "requires": { + "@astrojs/compiler": "^0.23.3", + "prettier": "^2.7.1", + "sass-formatter": "^0.7.2", + "synckit": "^0.7.0" + }, + "dependencies": { + "synckit": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.7.3.tgz", + "integrity": "sha512-jNroMv7Juy+mJ/CHW5H6TzsLWpa1qck6sCHbkv8YTur+irSq2PjbvmGnm2gy14BUQ6jF33vyR4DPssHqmqsDQw==", + "requires": { + "@pkgr/utils": "^2.3.0", + "tslib": "^2.4.0" + } + } + } + }, "pretty-error": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", @@ -43055,6 +43166,11 @@ } } }, + "s.color": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/s.color/-/s.color-0.0.15.tgz", + "integrity": "sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==" + }, "sade": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", @@ -43319,6 +43435,14 @@ } } }, + "sass-formatter": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/sass-formatter/-/sass-formatter-0.7.5.tgz", + "integrity": "sha512-NKFP8ddjhUYi6A/iD1cEtzkEs91U61kzqe3lY9SVNuvX7LGc88xnEN0mmsWL7Ol//YTi2GL/ol7b9XZ2+hgXuA==", + "requires": { + "suf-log": "^2.5.3" + } + }, "scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -43507,7 +43631,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -43515,8 +43638,7 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shiki": { "version": "0.10.1", @@ -44265,6 +44387,14 @@ "inline-style-parser": "0.1.1" } }, + "suf-log": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/suf-log/-/suf-log-2.5.3.tgz", + "integrity": "sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==", + "requires": { + "s.color": "0.0.15" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -44841,7 +44971,6 @@ "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, "requires": { "globalyzer": "0.1.0", "globrex": "^0.1.2" @@ -45038,8 +45167,7 @@ "tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "tsm": { "version": "2.2.2", @@ -46559,7 +46687,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } diff --git a/package.json b/package.json index a876980..80b4c7d 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "build": "astro build", "preview": "astro preview", "astro": "astro", - "lint": "eslint . --ext .cjs,.ts,.tsx --ignore-path .gitignore", + "lint": "eslint . --ext .cjs,.ts,.tsx,.astro --ignore-path .gitignore", "lint:ts": "tsc --jsx preserve --skipLibCheck", "storybook": "start-storybook -p 6006", "build-storybook": "build-storybook" @@ -16,6 +16,7 @@ "dependencies": { "astro-icon": "^0.7.3", "clsx": "^1.2.1", + "prettier-plugin-astro": "^0.5.3", "react": "^18.2.0", "react-dom": "^18.2.0" }, @@ -37,6 +38,7 @@ "eslint-config-airbnb-typescript": "^17.0.0", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.0", + "eslint-plugin-astro": "^0.17.1", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-file-progress": "^1.3.0", "eslint-plugin-import": "^2.26.0", diff --git a/src/components/atoms/button.astro b/src/components/atoms/button.astro index c47f2bc..119864d 100644 --- a/src/components/atoms/button.astro +++ b/src/components/atoms/button.astro @@ -1,7 +1,7 @@ --- export interface Props extends astroHTML.JSX.ButtonHTMLAttributes {} -const props = Astro.props; +const { props } = Astro; ---