diff --git a/.husky/pre-commit b/.husky/pre-commit index 36af219..ac0344a 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,5 @@ #!/bin/sh . "$(dirname "$0")/_/husky.sh" +npm run lint npx lint-staged diff --git a/denolint.config.json b/denolint.config.json new file mode 100644 index 0000000..0ff0853 --- /dev/null +++ b/denolint.config.json @@ -0,0 +1,7 @@ +{ + "include": ["src/"], + "ignore": ["dist/", "node_modules/"], + "rules": { + "tags": ["recommended"] + } +} diff --git a/package-lock.json b/package-lock.json index f2546ff..3449593 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.1.0", "license": "MIT", "devDependencies": { + "@node-rs/deno-lint": "^1.20.4", "@vitest/coverage-v8": "^0.34.4", "doctoc": "2.2.1", "husky": "8.0.3", @@ -460,6 +461,249 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@node-rs/deno-lint": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint/-/deno-lint-1.20.4.tgz", + "integrity": "sha512-hz1lc7qdMJwEYdT/+W+H0l9Lb3DCaFgnMpddEVzMGCY78zA/WMxlrBrH6AscGmoGhHVwsL5Z0W0SNDuQ1e0/PA==", + "dev": true, + "dependencies": { + "clipanion": "^4.0.0-rc.3", + "typanion": "^3.14.0" + }, + "bin": { + "denolint": "bin.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@node-rs/deno-lint-android-arm-eabi": "1.20.4", + "@node-rs/deno-lint-android-arm64": "1.20.4", + "@node-rs/deno-lint-darwin-arm64": "1.20.4", + "@node-rs/deno-lint-darwin-x64": "1.20.4", + "@node-rs/deno-lint-freebsd-x64": "1.20.4", + "@node-rs/deno-lint-linux-arm-gnueabihf": "1.20.4", + "@node-rs/deno-lint-linux-arm64-gnu": "1.20.4", + "@node-rs/deno-lint-linux-arm64-musl": "1.20.4", + "@node-rs/deno-lint-linux-x64-gnu": "1.20.4", + "@node-rs/deno-lint-linux-x64-musl": "1.20.4", + "@node-rs/deno-lint-win32-arm64-msvc": "1.20.4", + "@node-rs/deno-lint-win32-ia32-msvc": "1.20.4", + "@node-rs/deno-lint-win32-x64-msvc": "1.20.4" + } + }, + "node_modules/@node-rs/deno-lint-android-arm-eabi": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-android-arm-eabi/-/deno-lint-android-arm-eabi-1.20.4.tgz", + "integrity": "sha512-B/OjD2eeRveO3Io9c0SPgsbyfJruOyekV2x5i9lTWhUfmrfOG/e4UuB30g+yP6jfKP5lfgYzYdHQoiy+s4c2BQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/deno-lint-android-arm64": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-android-arm64/-/deno-lint-android-arm64-1.20.4.tgz", + "integrity": "sha512-l33tecCAyZ1se10jHSHcu5janWHk8NkjsYrxtEwm1cgBJJrcjw1Xes16MqJcnwkHkFfJz+6zJYEDMhUwNYIuQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/deno-lint-darwin-arm64": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-darwin-arm64/-/deno-lint-darwin-arm64-1.20.4.tgz", + "integrity": "sha512-g4Ot35YnxC5fT71N6Vl7fRPeH86IOKSg8kUpyCzH1QmoKpXlz1awt1+un8aGQi0h3X6ArgV4Eqrjv3BPGm3fSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/deno-lint-darwin-x64": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-darwin-x64/-/deno-lint-darwin-x64-1.20.4.tgz", + "integrity": "sha512-7QYR2I/nf8dyQnbpe+DZiBG484sxvrXJ9Wxu3Ht/rbKH7gbOaHAWiKPFXntUvka3ZojhaDfE+LG3A1vfupWTeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/deno-lint-freebsd-x64": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-freebsd-x64/-/deno-lint-freebsd-x64-1.20.4.tgz", + "integrity": "sha512-g+kd8y77osIiPeuz73fxq59NXuHFdsqrMYEmO9ox7e9aklzjaTlRvPmc291S6jL8KfB/NVZDHi0++1FiJAH+vQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/deno-lint-linux-arm-gnueabihf": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-linux-arm-gnueabihf/-/deno-lint-linux-arm-gnueabihf-1.20.4.tgz", + "integrity": "sha512-2lAygQm0INu68bmxGl1MKw3BENV9ymZG4coLrTK1o0ysUodtv0lO8UqrxEyqEFzuWq49vikzw+v8274XgseF2w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/deno-lint-linux-arm64-gnu": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-linux-arm64-gnu/-/deno-lint-linux-arm64-gnu-1.20.4.tgz", + "integrity": "sha512-D88TT5xSBIetN42xioyBZJ1p+I3n0EuBqBV4r1TBe36RBh0TpQB2Z7E6+BRJJdStqlb4cFUZjJBp+6wUTJqNqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/deno-lint-linux-arm64-musl": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-linux-arm64-musl/-/deno-lint-linux-arm64-musl-1.20.4.tgz", + "integrity": "sha512-kBVkLSjwhNdGpY2h1+1GCls8l8qgQlIbdggJKva0PFsi/RyO5kU5zgfRcusYS47+qti9Dw0d23MrOTiiUQv0Eg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/deno-lint-linux-x64-gnu": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-linux-x64-gnu/-/deno-lint-linux-x64-gnu-1.20.4.tgz", + "integrity": "sha512-Ghfcsslpdy84nJMY8/lbgv+rBqpBRDUkyHorXK9h7Img0KgGc5yJp6RtPk2nSk18PsKBFcfzEVaaEaCNvxrcIA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/deno-lint-linux-x64-musl": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-linux-x64-musl/-/deno-lint-linux-x64-musl-1.20.4.tgz", + "integrity": "sha512-C+IiwSqq1z3CndxINXnJc3L1ueJI1SpzX1tVrQde0oWqDmNB5O4qxbmOICmhigbAYxqsnKUE6jIp6hqrL8tazw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/deno-lint-win32-arm64-msvc": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-win32-arm64-msvc/-/deno-lint-win32-arm64-msvc-1.20.4.tgz", + "integrity": "sha512-ymPV36j9k+R3tQ21We2q+WbaGLRbjw929JT8UbisEJx9X5gydfFWFYbt7kNGwp23cgZIFpH7RgOMr3wYybqggA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/deno-lint-win32-ia32-msvc": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-win32-ia32-msvc/-/deno-lint-win32-ia32-msvc-1.20.4.tgz", + "integrity": "sha512-/C0Jky8HcqNKjxA1aMzcFzxduCFM/ayRxHJz+zB7zN5x16olNkDoNEqKKhdLllkBGayHL/FL3uaL94hzycq3hA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/deno-lint-win32-x64-msvc": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-win32-x64-msvc/-/deno-lint-win32-x64-msvc-1.20.4.tgz", + "integrity": "sha512-4bWekxmEbklPnYLWitPrjDa17HMcOzdR4Cx5BVqCbrkKnSTBpO4WDCafsBZJhqbRFliAeRkcoUUeC9THsCVUQA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -859,6 +1103,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/clipanion": { + "version": "4.0.0-rc.3", + "resolved": "https://registry.npmjs.org/clipanion/-/clipanion-4.0.0-rc.3.tgz", + "integrity": "sha512-+rJOJMt2N6Oikgtfqmo/Duvme7uz3SIedL2b6ycgCztQMiTfr3aQh2DDyLHl+QUPClKMNpSg3gDJFvNQYIcq1g==", + "dev": true, + "workspaces": [ + "website" + ], + "dependencies": { + "typanion": "^3.8.0" + }, + "peerDependencies": { + "typanion": "*" + } + }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -2648,6 +2907,15 @@ "lodash": "^4.17.5" } }, + "node_modules/typanion": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/typanion/-/typanion-3.14.0.tgz", + "integrity": "sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==", + "dev": true, + "workspaces": [ + "website" + ] + }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -3271,6 +3539,120 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "@node-rs/deno-lint": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint/-/deno-lint-1.20.4.tgz", + "integrity": "sha512-hz1lc7qdMJwEYdT/+W+H0l9Lb3DCaFgnMpddEVzMGCY78zA/WMxlrBrH6AscGmoGhHVwsL5Z0W0SNDuQ1e0/PA==", + "dev": true, + "requires": { + "@node-rs/deno-lint-android-arm-eabi": "1.20.4", + "@node-rs/deno-lint-android-arm64": "1.20.4", + "@node-rs/deno-lint-darwin-arm64": "1.20.4", + "@node-rs/deno-lint-darwin-x64": "1.20.4", + "@node-rs/deno-lint-freebsd-x64": "1.20.4", + "@node-rs/deno-lint-linux-arm-gnueabihf": "1.20.4", + "@node-rs/deno-lint-linux-arm64-gnu": "1.20.4", + "@node-rs/deno-lint-linux-arm64-musl": "1.20.4", + "@node-rs/deno-lint-linux-x64-gnu": "1.20.4", + "@node-rs/deno-lint-linux-x64-musl": "1.20.4", + "@node-rs/deno-lint-win32-arm64-msvc": "1.20.4", + "@node-rs/deno-lint-win32-ia32-msvc": "1.20.4", + "@node-rs/deno-lint-win32-x64-msvc": "1.20.4", + "clipanion": "^4.0.0-rc.3", + "typanion": "^3.14.0" + } + }, + "@node-rs/deno-lint-android-arm-eabi": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-android-arm-eabi/-/deno-lint-android-arm-eabi-1.20.4.tgz", + "integrity": "sha512-B/OjD2eeRveO3Io9c0SPgsbyfJruOyekV2x5i9lTWhUfmrfOG/e4UuB30g+yP6jfKP5lfgYzYdHQoiy+s4c2BQ==", + "dev": true, + "optional": true + }, + "@node-rs/deno-lint-android-arm64": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-android-arm64/-/deno-lint-android-arm64-1.20.4.tgz", + "integrity": "sha512-l33tecCAyZ1se10jHSHcu5janWHk8NkjsYrxtEwm1cgBJJrcjw1Xes16MqJcnwkHkFfJz+6zJYEDMhUwNYIuQg==", + "dev": true, + "optional": true + }, + "@node-rs/deno-lint-darwin-arm64": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-darwin-arm64/-/deno-lint-darwin-arm64-1.20.4.tgz", + "integrity": "sha512-g4Ot35YnxC5fT71N6Vl7fRPeH86IOKSg8kUpyCzH1QmoKpXlz1awt1+un8aGQi0h3X6ArgV4Eqrjv3BPGm3fSA==", + "dev": true, + "optional": true + }, + "@node-rs/deno-lint-darwin-x64": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-darwin-x64/-/deno-lint-darwin-x64-1.20.4.tgz", + "integrity": "sha512-7QYR2I/nf8dyQnbpe+DZiBG484sxvrXJ9Wxu3Ht/rbKH7gbOaHAWiKPFXntUvka3ZojhaDfE+LG3A1vfupWTeA==", + "dev": true, + "optional": true + }, + "@node-rs/deno-lint-freebsd-x64": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-freebsd-x64/-/deno-lint-freebsd-x64-1.20.4.tgz", + "integrity": "sha512-g+kd8y77osIiPeuz73fxq59NXuHFdsqrMYEmO9ox7e9aklzjaTlRvPmc291S6jL8KfB/NVZDHi0++1FiJAH+vQ==", + "dev": true, + "optional": true + }, + "@node-rs/deno-lint-linux-arm-gnueabihf": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-linux-arm-gnueabihf/-/deno-lint-linux-arm-gnueabihf-1.20.4.tgz", + "integrity": "sha512-2lAygQm0INu68bmxGl1MKw3BENV9ymZG4coLrTK1o0ysUodtv0lO8UqrxEyqEFzuWq49vikzw+v8274XgseF2w==", + "dev": true, + "optional": true + }, + "@node-rs/deno-lint-linux-arm64-gnu": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-linux-arm64-gnu/-/deno-lint-linux-arm64-gnu-1.20.4.tgz", + "integrity": "sha512-D88TT5xSBIetN42xioyBZJ1p+I3n0EuBqBV4r1TBe36RBh0TpQB2Z7E6+BRJJdStqlb4cFUZjJBp+6wUTJqNqw==", + "dev": true, + "optional": true + }, + "@node-rs/deno-lint-linux-arm64-musl": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-linux-arm64-musl/-/deno-lint-linux-arm64-musl-1.20.4.tgz", + "integrity": "sha512-kBVkLSjwhNdGpY2h1+1GCls8l8qgQlIbdggJKva0PFsi/RyO5kU5zgfRcusYS47+qti9Dw0d23MrOTiiUQv0Eg==", + "dev": true, + "optional": true + }, + "@node-rs/deno-lint-linux-x64-gnu": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-linux-x64-gnu/-/deno-lint-linux-x64-gnu-1.20.4.tgz", + "integrity": "sha512-Ghfcsslpdy84nJMY8/lbgv+rBqpBRDUkyHorXK9h7Img0KgGc5yJp6RtPk2nSk18PsKBFcfzEVaaEaCNvxrcIA==", + "dev": true, + "optional": true + }, + "@node-rs/deno-lint-linux-x64-musl": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-linux-x64-musl/-/deno-lint-linux-x64-musl-1.20.4.tgz", + "integrity": "sha512-C+IiwSqq1z3CndxINXnJc3L1ueJI1SpzX1tVrQde0oWqDmNB5O4qxbmOICmhigbAYxqsnKUE6jIp6hqrL8tazw==", + "dev": true, + "optional": true + }, + "@node-rs/deno-lint-win32-arm64-msvc": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-win32-arm64-msvc/-/deno-lint-win32-arm64-msvc-1.20.4.tgz", + "integrity": "sha512-ymPV36j9k+R3tQ21We2q+WbaGLRbjw929JT8UbisEJx9X5gydfFWFYbt7kNGwp23cgZIFpH7RgOMr3wYybqggA==", + "dev": true, + "optional": true + }, + "@node-rs/deno-lint-win32-ia32-msvc": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-win32-ia32-msvc/-/deno-lint-win32-ia32-msvc-1.20.4.tgz", + "integrity": "sha512-/C0Jky8HcqNKjxA1aMzcFzxduCFM/ayRxHJz+zB7zN5x16olNkDoNEqKKhdLllkBGayHL/FL3uaL94hzycq3hA==", + "dev": true, + "optional": true + }, + "@node-rs/deno-lint-win32-x64-msvc": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@node-rs/deno-lint-win32-x64-msvc/-/deno-lint-win32-x64-msvc-1.20.4.tgz", + "integrity": "sha512-4bWekxmEbklPnYLWitPrjDa17HMcOzdR4Cx5BVqCbrkKnSTBpO4WDCafsBZJhqbRFliAeRkcoUUeC9THsCVUQA==", + "dev": true, + "optional": true + }, "@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -3569,6 +3951,15 @@ "string-width": "^5.0.0" } }, + "clipanion": { + "version": "4.0.0-rc.3", + "resolved": "https://registry.npmjs.org/clipanion/-/clipanion-4.0.0-rc.3.tgz", + "integrity": "sha512-+rJOJMt2N6Oikgtfqmo/Duvme7uz3SIedL2b6ycgCztQMiTfr3aQh2DDyLHl+QUPClKMNpSg3gDJFvNQYIcq1g==", + "dev": true, + "requires": { + "typanion": "^3.8.0" + } + }, "colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -4811,6 +5202,12 @@ "lodash": "^4.17.5" } }, + "typanion": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/typanion/-/typanion-3.14.0.tgz", + "integrity": "sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==", + "dev": true + }, "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", diff --git a/package.json b/package.json index 8ceb5a8..307f010 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "scripts": { "test": "vitest --watch=false", "test:watch": "vitest --watch=true", + "lint": "npx denolint --config denolint.config.json", "format": "prettier --write --ignore-path .gitignore .", "toc": "doctoc README.md --github --title \"**Table of Contents**\"", "prepare": "husky install" @@ -15,6 +16,7 @@ "author": "César Alberca ", "license": "MIT", "devDependencies": { + "@node-rs/deno-lint": "^1.20.4", "@vitest/coverage-v8": "^0.34.4", "doctoc": "2.2.1", "husky": "8.0.3", diff --git a/src/calculator/solutions/calculator.ts b/src/calculator/solutions/calculator.ts index 2698b86..edf7783 100644 --- a/src/calculator/solutions/calculator.ts +++ b/src/calculator/solutions/calculator.ts @@ -10,7 +10,7 @@ export class Calculator { let signedStringifiedNumber = '' const sequence = [] - for (let char of string) { + for (const char of string) { const isSignFound = ['+', '-'].includes(char) if (isSignFound) { sequence.push(signedStringifiedNumber) diff --git a/src/christmas-tree/solutions/christmas-tree.ts b/src/christmas-tree/solutions/christmas-tree.ts index e2bbafb..dfc0674 100644 --- a/src/christmas-tree/solutions/christmas-tree.ts +++ b/src/christmas-tree/solutions/christmas-tree.ts @@ -1,6 +1,6 @@ export class ChristmasTree { render(rows: number): string { - let maxStarsPerRow = rows + rows - 1 + const maxStarsPerRow = rows + rows - 1 const treeArr: string[] = []