diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..5e1d644 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +pnpm pretty diff --git a/package.json b/package.json index ab9954c..a64d151 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "lint": "next lint", "test": "jest --watch", "test-ci": "jest --ci --coverage", - "pretty": "prettier --write \"./**/*.{js,jsx,ts,tsx,json,md,mdx,css}\" --ignore-unknown" + "pretty": "prettier --write \"./**/*.{js,jsx,ts,tsx,json,md,mdx,css}\" --ignore-unknown", + "prepare": "husky install" }, "dependencies": { "@codesandbox/sandpack-react": "^2.6.9", @@ -62,6 +63,7 @@ "postcss": "^8.4.27", "prettier": "^3.0.1", "tailwindcss": "^3.3.3", - "typescript": "5.1.6" + "typescript": "5.1.6", + "husky": "^8.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77f7ead..0f29fa6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ dependencies: version: 3.5.1 '@docsearch/react': specifier: '3' - version: 3.3.2(@algolia/client-search@4.18.0)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) + version: 3.3.2(@algolia/client-search@4.19.1)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0) '@giscus/react': specifier: ^2.3.0 version: 2.3.0(react-dom@18.2.0)(react@18.2.0) @@ -130,6 +130,9 @@ devDependencies: gray-matter: specifier: ^4.0.3 version: 4.0.3 + husky: + specifier: ^8.0.0 + version: 8.0.0 jest: specifier: ^29.6.2 version: 29.6.2(@types/node@20.5.0) @@ -166,14 +169,14 @@ packages: '@algolia/autocomplete-shared': 1.7.4 dev: false - /@algolia/autocomplete-preset-algolia@1.7.4(@algolia/client-search@4.18.0)(algoliasearch@4.19.1): + /@algolia/autocomplete-preset-algolia@1.7.4(@algolia/client-search@4.19.1)(algoliasearch@4.19.1): resolution: {integrity: sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' dependencies: '@algolia/autocomplete-shared': 1.7.4 - '@algolia/client-search': 4.18.0 + '@algolia/client-search': 4.19.1 algoliasearch: 4.19.1 dev: false @@ -187,10 +190,6 @@ packages: '@algolia/cache-common': 4.19.1 dev: false - /@algolia/cache-common@4.18.0: - resolution: {integrity: sha512-BmxsicMR4doGbeEXQu8yqiGmiyvpNvejYJtQ7rvzttEAMxOPoWEHrWyzBQw4x7LrBY9pMrgv4ZlUaF8PGzewHg==} - dev: false - /@algolia/cache-common@4.19.1: resolution: {integrity: sha512-XGghi3l0qA38HiqdoUY+wvGyBsGvKZ6U3vTiMBT4hArhP3fOGLXpIINgMiiGjTe4FVlTa5a/7Zf2bwlIHfRqqg==} dev: false @@ -218,13 +217,6 @@ packages: '@algolia/transporter': 4.19.1 dev: false - /@algolia/client-common@4.18.0: - resolution: {integrity: sha512-7N+soJFP4wn8tjTr3MSUT/U+4xVXbz4jmeRfWfVAzdAbxLAQbHa0o/POSdTvQ8/02DjCLelloZ1bb4ZFVKg7Wg==} - dependencies: - '@algolia/requester-common': 4.18.0 - '@algolia/transporter': 4.18.0 - dev: false - /@algolia/client-common@4.19.1: resolution: {integrity: sha512-3kAIVqTcPrjfS389KQvKzliC559x+BDRxtWamVJt8IVp7LGnjq+aVAXg4Xogkur1MUrScTZ59/AaUd5EdpyXgA==} dependencies: @@ -240,14 +232,6 @@ packages: '@algolia/transporter': 4.19.1 dev: false - /@algolia/client-search@4.18.0: - resolution: {integrity: sha512-F9xzQXTjm6UuZtnsLIew6KSraXQ0AzS/Ee+OD+mQbtcA/K1sg89tqb8TkwjtiYZ0oij13u3EapB3gPZwm+1Y6g==} - dependencies: - '@algolia/client-common': 4.18.0 - '@algolia/requester-common': 4.18.0 - '@algolia/transporter': 4.18.0 - dev: false - /@algolia/client-search@4.19.1: resolution: {integrity: sha512-mBecfMFS4N+yK/p0ZbK53vrZbL6OtWMk8YmnOv1i0LXx4pelY8TFhqKoTit3NPVPwoSNN0vdSN9dTu1xr1XOVw==} dependencies: @@ -256,10 +240,6 @@ packages: '@algolia/transporter': 4.19.1 dev: false - /@algolia/logger-common@4.18.0: - resolution: {integrity: sha512-46etYgSlkoKepkMSyaoriSn2JDgcrpc/nkOgou/lm0y17GuMl9oYZxwKKTSviLKI5Irk9nSKGwnBTQYwXOYdRg==} - dev: false - /@algolia/logger-common@4.19.1: resolution: {integrity: sha512-i6pLPZW/+/YXKis8gpmSiNk1lOmYCmRI6+x6d2Qk1OdfvX051nRVdalRbEcVTpSQX6FQAoyeaui0cUfLYW5Elw==} dev: false @@ -276,10 +256,6 @@ packages: '@algolia/requester-common': 4.19.1 dev: false - /@algolia/requester-common@4.18.0: - resolution: {integrity: sha512-xlT8R1qYNRBCi1IYLsx7uhftzdfsLPDGudeQs+xvYB4sQ3ya7+ppolB/8m/a4F2gCkEO6oxpp5AGemM7kD27jA==} - dev: false - /@algolia/requester-common@4.19.1: resolution: {integrity: sha512-BisRkcWVxrDzF1YPhAckmi2CFYK+jdMT60q10d7z3PX+w6fPPukxHRnZwooiTUrzFe50UBmLItGizWHP5bDzVQ==} dev: false @@ -290,14 +266,6 @@ packages: '@algolia/requester-common': 4.19.1 dev: false - /@algolia/transporter@4.18.0: - resolution: {integrity: sha512-xbw3YRUGtXQNG1geYFEDDuFLZt4Z8YNKbamHPkzr3rWc6qp4/BqEeXcI2u/P/oMq2yxtXgMxrCxOPA8lyIe5jw==} - dependencies: - '@algolia/cache-common': 4.18.0 - '@algolia/logger-common': 4.18.0 - '@algolia/requester-common': 4.18.0 - dev: false - /@algolia/transporter@4.19.1: resolution: {integrity: sha512-nkpvPWbpuzxo1flEYqNIbGz7xhfhGOKGAZS7tzC+TELgEmi7z99qRyTfNSUlW7LZmB3ACdnqAo+9A9KFBENviQ==} dependencies: @@ -807,7 +775,7 @@ packages: resolution: {integrity: sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==} dev: false - /@docsearch/react@3.3.2(@algolia/client-search@4.18.0)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): + /@docsearch/react@3.3.2(@algolia/client-search@4.19.1)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-ugILab2TYKSh6IEHf6Z9xZbOovsYbsdfo60PBj+Bw+oMJ1MHJ7pBt1TTcmPki1hSgg8mysgKy2hDiVdPm7XWSQ==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' @@ -822,7 +790,7 @@ packages: optional: true dependencies: '@algolia/autocomplete-core': 1.7.4 - '@algolia/autocomplete-preset-algolia': 1.7.4(@algolia/client-search@4.18.0)(algoliasearch@4.19.1) + '@algolia/autocomplete-preset-algolia': 1.7.4(@algolia/client-search@4.19.1)(algoliasearch@4.19.1) '@docsearch/css': 3.3.2 '@types/react': 18.2.20 algoliasearch: 4.19.1 @@ -4673,6 +4641,12 @@ packages: engines: {node: '>=10.17.0'} dev: true + /husky@8.0.0: + resolution: {integrity: sha512-4qbE/5dzNDNxFEkX9MNRPKl5+omTXQzdILCUWiqG/lWIAioiM5vln265/l6I2Zx8gpW8l1ukZwGQeCFbBZ6+6w==} + engines: {node: '>=14'} + hasBin: true + dev: true + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'}