From 5f6a02770a5bbab014bd4481d4112730d9a38c81 Mon Sep 17 00:00:00 2001 From: fahreddinozcan Date: Mon, 16 Sep 2024 18:22:06 +0300 Subject: [PATCH 1/3] bump eslint --- bun.lockb | Bin 149948 -> 159920 bytes eslint.config.mjs | 81 +++++++++++++++++++++++++++++++++++++++++++ package.json | 10 +++--- pkg/auto-pipeline.ts | 10 +++--- pkg/http.ts | 2 +- 5 files changed, 92 insertions(+), 11 deletions(-) create mode 100644 eslint.config.mjs diff --git a/bun.lockb b/bun.lockb index df1c6fef72005621758f4bb5f8ec4fca2e291308..c72cde5d72f5b02dc8f09c131487b2c5fd8f34c9 100755 GIT binary patch delta 28497 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 a=6c%3<*jve(>Rt(=$y7_gqxnwkwGWjU3lbw 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 diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..7de094a0 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,81 @@ +import typescriptEslint from "@typescript-eslint/eslint-plugin"; +import unicorn from "eslint-plugin-unicorn"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [{ + ignores: ["**/*.config.*", "**/examples", "**/dist"], +}, ...compat.extends( + "eslint:recommended", + "plugin:unicorn/recommended", + "plugin:@typescript-eslint/recommended", +), { + plugins: { + "@typescript-eslint": typescriptEslint, + unicorn, + }, + + languageOptions: { + globals: {}, + ecmaVersion: 5, + sourceType: "script", + + parserOptions: { + project: "./tsconfig.json", + }, + }, + + rules: { + "no-console": ["error", { + allow: ["warn", "error"], + }], + + "@typescript-eslint/no-magic-numbers": "off", + "@typescript-eslint/unbound-method": "off", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/consistent-type-definitions": ["error", "type"], + + "@typescript-eslint/no-unused-vars": ["error", { + varsIgnorePattern: "^_", + argsIgnorePattern: "^_", + }], + + "@typescript-eslint/prefer-ts-expect-error": "off", + + "@typescript-eslint/no-misused-promises": ["error", { + checksVoidReturn: false, + }], + + "unicorn/prevent-abbreviations": "off", + + "no-implicit-coercion": ["error", { + boolean: true, + }], + + "no-extra-boolean-cast": ["error", { + enforceForLogicalOperands: true, + }], + + "no-unneeded-ternary": ["error", { + defaultAssignment: true, + }], + + "unicorn/no-array-reduce": ["off"], + "unicorn/no-nested-ternary": "off", + "unicorn/no-null": "off", + "unicorn/filename-case": "off", + }, +}]; \ No newline at end of file diff --git a/package.json b/package.json index 8335dda9..b79e8bba 100644 --- a/package.json +++ b/package.json @@ -48,10 +48,10 @@ "test": "bun test pkg", "fmt": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"", "prepare": "husky install", - "lint": "eslint . --ext .ts,.tsx,.js,.jsx", + "lint": "eslint \"**/*.{js,ts,tsx}\" --quiet --fix", "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"", "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,md}\"", - "lint:fix": "eslint . --ext .ts,.tsx,.js,.jsx --fix", + "lint:fix": "eslint . -c .ts,.tsx,.js,.jsx --fix", "commit": "cz", "lint:format": "bun run lint:fix && bun run format" }, @@ -79,10 +79,10 @@ "@commitlint/cli": "^19.3.0", "@commitlint/config-conventional": "^19.2.2", "@types/crypto-js": "^4.1.3", - "@typescript-eslint/eslint-plugin": "7.17.0", - "@typescript-eslint/parser": "7.17.0", + "@typescript-eslint/eslint-plugin": "8.4.0", + "@typescript-eslint/parser": "8.4.0", "bun-types": "1.0.33", - "eslint": "8.56", + "eslint": "9.10.0", "eslint-plugin-unicorn": "55.0.0", "husky": "^9.1.1", "prettier": "^3.3.3", diff --git a/pkg/auto-pipeline.ts b/pkg/auto-pipeline.ts index 40430884..e3258f18 100644 --- a/pkg/auto-pipeline.ts +++ b/pkg/auto-pipeline.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/ban-types */ import type { Command } from "./commands/command"; import type { Pipeline } from "./pipeline"; import type { Redis } from "./redis"; @@ -12,7 +11,6 @@ export function createAutoPipelineProxy(_redis: Redis, json?: boolean): Redis { autoPipelineExecutor: AutoPipelineExecutor; }; - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!redis.autoPipelineExecutor) { redis.autoPipelineExecutor = new AutoPipelineExecutor(redis); } @@ -45,9 +43,11 @@ export function createAutoPipelineProxy(_redis: Redis, json?: boolean): Redis { // pass the function as a callback return redis.autoPipelineExecutor.withAutoPipeline((pipeline) => { if (json) { - (pipeline.json[command as keyof Pipeline["json"]] as Function)(...args); + (pipeline.json[command as keyof Pipeline["json"]] as (...args: any) => unknown)( + ...args + ); } else { - (pipeline[command as keyof Pipeline] as Function)(...args); + (pipeline[command as keyof Pipeline] as (...args: any) => unknown)(...args); } }); }; @@ -92,7 +92,7 @@ class AutoPipelineExecutor { this.pipelinePromises.set(pipeline, pipelinePromise); this.activePipeline = null; } - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return this.pipelinePromises.get(pipeline)!; }); diff --git a/pkg/http.ts b/pkg/http.ts index 72c6e319..6753baae 100644 --- a/pkg/http.ts +++ b/pkg/http.ts @@ -20,7 +20,7 @@ export type UpstashRequest = { }; export type UpstashResponse = { result?: TResult; error?: string }; -export interface Requester { +export type Requester = { /** * When this flag is enabled, any subsequent commands issued by this client are guaranteed to observe the effects of all earlier writes submitted by the same client. */ From 40fc3ea2a3636897cbb2b0b97f645a1b5e5e8c15 Mon Sep 17 00:00:00 2001 From: fahreddinozcan Date: Mon, 16 Sep 2024 18:22:28 +0300 Subject: [PATCH 2/3] lint --- pkg/http.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/http.ts b/pkg/http.ts index 6753baae..c6edc151 100644 --- a/pkg/http.ts +++ b/pkg/http.ts @@ -31,7 +31,7 @@ export type Requester = { */ upstashSyncToken?: string; request: (req: UpstashRequest) => Promise>; -} +}; type ResultError = { result?: string | number | null | (string | number | null)[]; From c5b7088eadd58a9780e4c95eda4bd61d4c74d6c9 Mon Sep 17 00:00:00 2001 From: fahreddinozcan Date: Tue, 17 Sep 2024 22:45:46 +0300 Subject: [PATCH 3/3] revert --- .eslintrc.json | 44 ----------------- eslint.config.mjs | 117 +++++++++++++++++++++++++++------------------- pkg/http.ts | 4 +- 3 files changed, 71 insertions(+), 94 deletions(-) delete mode 100644 .eslintrc.json diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index adcf4d25..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "env": { - "es2024": true - }, - "extends": [ - "eslint:recommended", - "plugin:unicorn/recommended", - "plugin:@typescript-eslint/recommended" - ], - "plugins": ["@typescript-eslint", "unicorn"], - "parserOptions": { - "project": "./tsconfig.json" - }, - "ignorePatterns": ["*.config.*", "examples", "dist"], - "rules": { - "no-console": ["error", { "allow": ["warn", "error"] }], - "@typescript-eslint/no-magic-numbers": "off", - "@typescript-eslint/unbound-method": "off", - "@typescript-eslint/prefer-as-const": "error", - "@typescript-eslint/consistent-type-imports": "error", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/restrict-template-expressions": "off", - "@typescript-eslint/consistent-type-definitions": ["error", "type"], - "@typescript-eslint/no-unused-vars": [ - "error", - { "varsIgnorePattern": "^_", "argsIgnorePattern": "^_" } - ], - "@typescript-eslint/prefer-ts-expect-error": "off", - "@typescript-eslint/no-misused-promises": [ - "error", - { - "checksVoidReturn": false - } - ], - "unicorn/prevent-abbreviations": "off", - "no-implicit-coercion": ["error", { "boolean": true }], - "no-extra-boolean-cast": ["error", { "enforceForLogicalOperands": true }], - "no-unneeded-ternary": ["error", { "defaultAssignment": true }], - "unicorn/no-array-reduce": ["off"], - "unicorn/no-nested-ternary": "off", - "unicorn/no-null": "off", - "unicorn/filename-case": "off" - } -} diff --git a/eslint.config.mjs b/eslint.config.mjs index 7de094a0..b10f1a0a 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -8,74 +8,95 @@ import { FlatCompat } from "@eslint/eslintrc"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const compat = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, }); -export default [{ +export default [ + { ignores: ["**/*.config.*", "**/examples", "**/dist"], -}, ...compat.extends( + }, + ...compat.extends( "eslint:recommended", "plugin:unicorn/recommended", - "plugin:@typescript-eslint/recommended", -), { + "plugin:@typescript-eslint/recommended" + ), + { plugins: { - "@typescript-eslint": typescriptEslint, - unicorn, + "@typescript-eslint": typescriptEslint, + unicorn, }, languageOptions: { - globals: {}, - ecmaVersion: 5, - sourceType: "script", + globals: {}, + ecmaVersion: 5, + sourceType: "script", - parserOptions: { - project: "./tsconfig.json", - }, + parserOptions: { + project: "./tsconfig.json", + }, }, rules: { - "no-console": ["error", { - allow: ["warn", "error"], - }], + "no-console": [ + "error", + { + allow: ["warn", "error"], + }, + ], - "@typescript-eslint/no-magic-numbers": "off", - "@typescript-eslint/unbound-method": "off", - "@typescript-eslint/prefer-as-const": "error", - "@typescript-eslint/consistent-type-imports": "error", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/restrict-template-expressions": "off", - "@typescript-eslint/consistent-type-definitions": ["error", "type"], + "@typescript-eslint/no-magic-numbers": "off", + "@typescript-eslint/unbound-method": "off", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/restrict-template-expressions": "off", - "@typescript-eslint/no-unused-vars": ["error", { - varsIgnorePattern: "^_", - argsIgnorePattern: "^_", - }], + "@typescript-eslint/no-unused-vars": [ + "error", + { + varsIgnorePattern: "^_", + argsIgnorePattern: "^_", + }, + ], - "@typescript-eslint/prefer-ts-expect-error": "off", + "@typescript-eslint/prefer-ts-expect-error": "off", - "@typescript-eslint/no-misused-promises": ["error", { - checksVoidReturn: false, - }], + "@typescript-eslint/no-misused-promises": [ + "error", + { + checksVoidReturn: false, + }, + ], - "unicorn/prevent-abbreviations": "off", + "unicorn/prevent-abbreviations": "off", - "no-implicit-coercion": ["error", { - boolean: true, - }], + "no-implicit-coercion": [ + "error", + { + boolean: true, + }, + ], - "no-extra-boolean-cast": ["error", { - enforceForLogicalOperands: true, - }], + "no-extra-boolean-cast": [ + "error", + { + enforceForLogicalOperands: true, + }, + ], - "no-unneeded-ternary": ["error", { - defaultAssignment: true, - }], + "no-unneeded-ternary": [ + "error", + { + defaultAssignment: true, + }, + ], - "unicorn/no-array-reduce": ["off"], - "unicorn/no-nested-ternary": "off", - "unicorn/no-null": "off", - "unicorn/filename-case": "off", + "unicorn/no-array-reduce": ["off"], + "unicorn/no-nested-ternary": "off", + "unicorn/no-null": "off", + "unicorn/filename-case": "off", }, -}]; \ No newline at end of file + }, +]; diff --git a/pkg/http.ts b/pkg/http.ts index c6edc151..72c6e319 100644 --- a/pkg/http.ts +++ b/pkg/http.ts @@ -20,7 +20,7 @@ export type UpstashRequest = { }; export type UpstashResponse = { result?: TResult; error?: string }; -export type Requester = { +export interface Requester { /** * When this flag is enabled, any subsequent commands issued by this client are guaranteed to observe the effects of all earlier writes submitted by the same client. */ @@ -31,7 +31,7 @@ export type Requester = { */ upstashSyncToken?: string; request: (req: UpstashRequest) => Promise>; -}; +} type ResultError = { result?: string | number | null | (string | number | null)[];