diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..cae025d --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,82 @@ +// See: https://eslint.org/docs/latest/use/configure/configuration-files + +import { fixupPluginRules } from '@eslint/compat' +import { FlatCompat } from '@eslint/eslintrc' +import js from '@eslint/js' +import typescriptEslint from '@typescript-eslint/eslint-plugin' +import tsParser from '@typescript-eslint/parser' +import _import from 'eslint-plugin-import' +import jest from 'eslint-plugin-jest' +import prettier from 'eslint-plugin-prettier' +import globals from 'globals' +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +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: ['**/coverage', '**/dist', '**/linter', '**/node_modules'] + }, + ...compat.extends( + 'eslint:recommended', + 'plugin:@typescript-eslint/eslint-recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:jest/recommended', + 'plugin:prettier/recommended' + ), + { + plugins: { + import: fixupPluginRules(_import), + jest, + prettier, + '@typescript-eslint': typescriptEslint + }, + + languageOptions: { + globals: { + ...globals.node, + ...globals.jest, + Atomics: 'readonly', + SharedArrayBuffer: 'readonly' + }, + + parser: tsParser, + ecmaVersion: 2023, + sourceType: 'module', + + parserOptions: { + project: ['tsconfig.eslint.json'], + tsconfigRootDir: '.' + } + }, + + settings: { + 'import/resolver': { + typescript: { + alwaysTryTypes: true, + project: 'tsconfig.eslint.json' + } + } + }, + + rules: { + '@typescript-eslint/no-explicit-any': 'off', + camelcase: 'off', + 'eslint-comments/no-use': 'off', + 'eslint-comments/no-unused-disable': 'off', + 'i18n-text/no-en': 'off', + 'import/no-namespace': 'off', + 'no-console': 'off', + 'no-shadow': 'off', + 'no-unused-vars': 'off', + 'prettier/prettier': 'error' + } + } +] diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..c5f946a --- /dev/null +++ b/jest.config.js @@ -0,0 +1,37 @@ +// See: https://jestjs.io/docs/configuration + +/** @type {import('ts-jest').JestConfigWithTsJest} **/ +export default { + clearMocks: true, + collectCoverage: true, + collectCoverageFrom: ['./src/**'], + coverageDirectory: './coverage', + coveragePathIgnorePatterns: ['/node_modules/', '/dist/'], + coverageReporters: ['json-summary', 'text', 'lcov'], + coverageThreshold: { + global: { + branches: 100, + functions: 100, + lines: 100, + statements: 100 + } + }, + extensionsToTreatAsEsm: ['.ts'], + moduleFileExtensions: ['ts', 'js'], + preset: 'ts-jest', + reporters: ['default'], + resolver: 'ts-jest-resolver', + testEnvironment: 'node', + testMatch: ['**/*.test.ts'], + testPathIgnorePatterns: ['/dist/', '/node_modules/'], + transform: { + '^.+\\.ts$': [ + 'ts-jest', + { + tsconfig: 'tsconfig.eslint.json', + useESM: true + } + ] + }, + verbose: true +}