From 76d11a448dc33ad4398afc7b62720ed70198d19a Mon Sep 17 00:00:00 2001 From: Alfi Maulana Date: Tue, 10 Jun 2025 11:16:05 +0700 Subject: [PATCH 1/2] test: enable strict TypeScript ESLint configuration Signed-off-by: Alfi Maulana --- eslint.config.js | 21 ++++++++++++++++----- src/bin.ts | 2 +- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index 3ee43ed0..983ed77e 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,9 +1,20 @@ import eslint from "@eslint/js"; +import { globalIgnores } from "eslint/config"; import tseslint from "typescript-eslint"; -export default [ +export default tseslint.config( + globalIgnores(["dist"]), eslint.configs.recommended, - ...tseslint.configs.recommended, - ...tseslint.configs.stylistic, - { ignores: ["dist"] }, -]; + tseslint.configs.strictTypeChecked, + tseslint.configs.stylisticTypeChecked, + { + languageOptions: { + parserOptions: { + projectService: { + allowDefaultProject: ["*.js"], + }, + tsconfigRootDir: import.meta.dirname, + }, + }, + }, +); diff --git a/src/bin.ts b/src/bin.ts index ff0de1ea..0fdff87e 100644 --- a/src/bin.ts +++ b/src/bin.ts @@ -8,7 +8,7 @@ program .version("0.0.0") .description("Generate a Fibonacci sequence up to the given number of terms.") .argument("", "The number of terms", parseInt) - .action((n) => { + .action((n: number) => { const sequence = fibonacciSequence(n); process.stdout.write(`${sequence.join(" ")}\n`); }) From cb0490b0cd9b42812689fdf32f290c5e6f38adaf Mon Sep 17 00:00:00 2001 From: Alfi Maulana Date: Tue, 10 Jun 2025 11:16:44 +0700 Subject: [PATCH 2/2] test: convert ESLint configuration to TypeScript Signed-off-by: Alfi Maulana --- eslint.config.js => eslint.config.ts | 4 +- package.json | 1 + pnpm-lock.yaml | 92 ++++++++++++++++------------ 3 files changed, 54 insertions(+), 43 deletions(-) rename eslint.config.js => eslint.config.ts (84%) diff --git a/eslint.config.js b/eslint.config.ts similarity index 84% rename from eslint.config.js rename to eslint.config.ts index 983ed77e..21eb570a 100644 --- a/eslint.config.js +++ b/eslint.config.ts @@ -10,9 +10,7 @@ export default tseslint.config( { languageOptions: { parserOptions: { - projectService: { - allowDefaultProject: ["*.js"], - }, + projectService: true, tsconfigRootDir: import.meta.dirname, }, }, diff --git a/package.json b/package.json index 32e4563d..9dba4740 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "@types/node": "^22.15.30", "@vitest/coverage-v8": "^3.2.0", "eslint": "^9.28.0", + "jiti": "^2.4.2", "lefthook": "^1.11.13", "prettier": "^3.5.3", "typescript": "^5.8.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 69e04257..69a53fd4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,10 +23,13 @@ importers: version: 22.15.30 '@vitest/coverage-v8': specifier: ^3.2.0 - version: 3.2.0(vitest@3.2.0(@types/node@22.15.30)) + version: 3.2.0(vitest@3.2.0(@types/node@22.15.30)(jiti@2.4.2)) eslint: specifier: ^9.28.0 - version: 9.28.0 + version: 9.28.0(jiti@2.4.2) + jiti: + specifier: ^2.4.2 + version: 2.4.2 lefthook: specifier: ^1.11.13 version: 1.11.13 @@ -38,13 +41,13 @@ importers: version: 5.8.3 typescript-eslint: specifier: ^8.33.1 - version: 8.33.1(eslint@9.28.0)(typescript@5.8.3) + version: 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) vite-node: specifier: ^3.2.3 - version: 3.2.3(@types/node@22.15.30) + version: 3.2.3(@types/node@22.15.30)(jiti@2.4.2) vitest: specifier: ^3.2.0 - version: 3.2.0(@types/node@22.15.30) + version: 3.2.0(@types/node@22.15.30)(jiti@2.4.2) packages: @@ -846,6 +849,10 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + js-tokens@9.0.1: resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} @@ -1374,9 +1381,9 @@ snapshots: '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0)': + '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0(jiti@2.4.2))': dependencies: - eslint: 9.28.0 + eslint: 9.28.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -1550,15 +1557,15 @@ snapshots: dependencies: undici-types: 6.21.0 - '@typescript-eslint/eslint-plugin@8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.28.0)(typescript@5.8.3))(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.33.1(eslint@9.28.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.33.1 - '@typescript-eslint/type-utils': 8.33.1(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.1(eslint@9.28.0)(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.33.1 - eslint: 9.28.0 + eslint: 9.28.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -1567,14 +1574,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.33.1(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/parser@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.33.1 '@typescript-eslint/types': 8.33.1 '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.33.1 debug: 4.4.1 - eslint: 9.28.0 + eslint: 9.28.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -1597,12 +1604,12 @@ snapshots: dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.33.1(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.1(eslint@9.28.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.1 - eslint: 9.28.0 + eslint: 9.28.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -1626,13 +1633,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.33.1(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/utils@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.33.1 '@typescript-eslint/types': 8.33.1 '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) - eslint: 9.28.0 + eslint: 9.28.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -1642,7 +1649,7 @@ snapshots: '@typescript-eslint/types': 8.33.1 eslint-visitor-keys: 4.2.0 - '@vitest/coverage-v8@3.2.0(vitest@3.2.0(@types/node@22.15.30))': + '@vitest/coverage-v8@3.2.0(vitest@3.2.0(@types/node@22.15.30)(jiti@2.4.2))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -1657,7 +1664,7 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.0(@types/node@22.15.30) + vitest: 3.2.0(@types/node@22.15.30)(jiti@2.4.2) transitivePeerDependencies: - supports-color @@ -1669,13 +1676,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.0(vite@6.3.5(@types/node@22.15.30))': + '@vitest/mocker@3.2.0(vite@6.3.5(@types/node@22.15.30)(jiti@2.4.2))': dependencies: '@vitest/spy': 3.2.0 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@22.15.30) + vite: 6.3.5(@types/node@22.15.30)(jiti@2.4.2) '@vitest/pretty-format@3.2.0': dependencies: @@ -1840,9 +1847,9 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.28.0: + eslint@9.28.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.20.0 '@eslint/config-helpers': 0.2.2 @@ -1877,6 +1884,8 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 2.4.2 transitivePeerDependencies: - supports-color @@ -2029,6 +2038,8 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jiti@2.4.2: {} + js-tokens@9.0.1: {} js-yaml@4.1.0: @@ -2307,12 +2318,12 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.33.1(eslint@9.28.0)(typescript@5.8.3): + typescript-eslint@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.28.0)(typescript@5.8.3))(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/parser': 8.33.1(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.1(eslint@9.28.0)(typescript@5.8.3) - eslint: 9.28.0 + '@typescript-eslint/eslint-plugin': 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.28.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -2325,13 +2336,13 @@ snapshots: dependencies: punycode: 2.3.1 - vite-node@3.2.0(@types/node@22.15.30): + vite-node@3.2.0(@types/node@22.15.30)(jiti@2.4.2): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@22.15.30) + vite: 6.3.5(@types/node@22.15.30)(jiti@2.4.2) transitivePeerDependencies: - '@types/node' - jiti @@ -2346,13 +2357,13 @@ snapshots: - tsx - yaml - vite-node@3.2.3(@types/node@22.15.30): + vite-node@3.2.3(@types/node@22.15.30)(jiti@2.4.2): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@22.15.30) + vite: 6.3.5(@types/node@22.15.30)(jiti@2.4.2) transitivePeerDependencies: - '@types/node' - jiti @@ -2367,7 +2378,7 @@ snapshots: - tsx - yaml - vite@6.3.5(@types/node@22.15.30): + vite@6.3.5(@types/node@22.15.30)(jiti@2.4.2): dependencies: esbuild: 0.25.5 fdir: 6.4.5(picomatch@4.0.2) @@ -2378,12 +2389,13 @@ snapshots: optionalDependencies: '@types/node': 22.15.30 fsevents: 2.3.3 + jiti: 2.4.2 - vitest@3.2.0(@types/node@22.15.30): + vitest@3.2.0(@types/node@22.15.30)(jiti@2.4.2): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.0 - '@vitest/mocker': 3.2.0(vite@6.3.5(@types/node@22.15.30)) + '@vitest/mocker': 3.2.0(vite@6.3.5(@types/node@22.15.30)(jiti@2.4.2)) '@vitest/pretty-format': 3.2.0 '@vitest/runner': 3.2.0 '@vitest/snapshot': 3.2.0 @@ -2401,8 +2413,8 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.0 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.15.30) - vite-node: 3.2.0(@types/node@22.15.30) + vite: 6.3.5(@types/node@22.15.30)(jiti@2.4.2) + vite-node: 3.2.0(@types/node@22.15.30)(jiti@2.4.2) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.15.30