Skip to content

chore: typescript 5 + ESM #936

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 21 commits into
base: main
Choose a base branch
from
111 changes: 59 additions & 52 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -1,70 +1,77 @@
module.exports = {
env: {
node: true,
es2022: true,
},
parser: '@typescript-eslint/parser', // Specifies the ESLint parser
root: true,
extends: [
'plugin:@typescript-eslint/recommended', // Uses the recommended rules from the @typescript-eslint/eslint-plugin
'plugin:@typescript-eslint/recommended-requiring-type-checking',
'eslint:recommended',
'prettier', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier
'plugin:node/recommended',
'plugin:import/recommended',
'plugin:import/typescript',
'plugin:security/recommended',
'plugin:prettier/recommended', // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array.
],
env: {
node: true,
es2022: true,
},
parserOptions: {
ecmaVersion: 'latest',
project: './tsconfig.eslint.json',
sourceType: 'module', // Allows for the use of imports,
},
rules: {
'node/no-extraneous-import': ['error', { allowModules: ['pino'] }],
'node/no-missing-import': 'off',
'node/no-unpublished-import': ['error', { allowModules: ['type-fest'] }],
'node/no-unsupported-features/es-syntax': 'off',
'import/no-named-as-default-member': 'off',
'import/order': [
'error',
{
'newlines-between': 'always',
alphabetize: {
order: 'asc',
caseInsensitive: false,
},
},
],
'@typescript-eslint/no-unused-vars': ['error', { ignoreRestSiblings: true, destructuredArrayIgnorePattern: '^_' }],
'@typescript-eslint/camelcase': 'off',
'@typescript-eslint/explicit-function-return-type': 'error',
'@typescript-eslint/explicit-member-accessibility': ['error', { overrides: { constructors: 'no-public' } }],
sourceType: 'module',
},
overrides: [
{
files: ['./**/*.ts]'],
rules: {
'@typescript-eslint/no-throw-literal': 'error',
files: ['./**/*.ts'],
parser: '@typescript-eslint/parser', // Specifies the ESLint parser
extends: [
'plugin:@typescript-eslint/recommended', // Uses the recommended rules from the @typescript-eslint/eslint-plugin
'plugin:@typescript-eslint/recommended-requiring-type-checking',
'prettier', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier
'plugin:node/recommended',
'plugin:security/recommended',
'plugin:prettier/recommended', // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array.
],
parserOptions: {
ecmaVersion: 'latest',
project: './tsconfig.eslint.json',
sourceType: 'module', // Allows for the use of imports,
},
},
{
files: ['test/**/*.ts'],
plugins: ['jest'],
extends: ['plugin:jest/recommended'],
rules: {
'node/no-unpublished-import': 'off',
'node/no-extraneous-import': 'off',
'@typescript-eslint/unbound-method': 'off',
'jest/unbound-method': 'error',
'node/no-extraneous-import': ['error', { allowModules: ['pino'] }],
'node/no-missing-import': 'off',
'node/no-unpublished-import': ['error', { allowModules: ['type-fest'] }],
'node/no-unsupported-features/es-syntax': 'off',
'@typescript-eslint/no-unused-vars': [
'error',
{ ignoreRestSiblings: true, destructuredArrayIgnorePattern: '^_' },
],
'@typescript-eslint/camelcase': 'off',
'@typescript-eslint/explicit-function-return-type': 'error',
'@typescript-eslint/explicit-member-accessibility': ['error', { overrides: { constructors: 'no-public' } }],
},
},
],
settings: {
'import/resolvers': {
typescript: {
alwaysTryTypes: true, // always try to resolve types under `<root>@types` directory even it doesn't contain any source code, like `@types/unist`
project: '.',
overrides: [
{
files: ['./**/*.ts]'],
rules: {
'@typescript-eslint/no-throw-literal': 'error',
},
},
{
files: ['test/**/*.ts'],
plugins: ['jest'],
extends: ['plugin:jest/recommended'],
rules: {
'node/no-unpublished-import': 'off',
'node/no-extraneous-import': 'off',
'@typescript-eslint/unbound-method': 'off',
'jest/unbound-method': 'error',
},
},
],
settings: {
'import/resolvers': {
typescript: {
alwaysTryTypes: true, // always try to resolve types under `<root>@types` directory even it doesn't contain any source code, like `@types/unist`
project: '.',
},
},
},
},
},
],
};
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# build stage
FROM node:18-slim as build-stage
FROM node:lts-slim as build-stage
RUN apt-get update && apt-get install -y --no-install-recommends dumb-init
WORKDIR /usr
COPY package*.json ./
Expand All @@ -10,7 +10,7 @@ RUN npm run build
RUN npm prune --omit=dev

# production stage
FROM node:18-slim
FROM node:lts-slim
ARG version
ENV npm_package_version=${version}
ENV NODE_ENV production
Expand Down
21 changes: 21 additions & 0 deletions jest.config.common.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
export default {
rootDir: '.',
testEnvironment: 'node',
extensionsToTreatAsEsm: ['.ts'],
testMatch: ['**/*.spec.ts'],
transform: {
'^.+\\.tsx?$': [
'ts-jest',
{
useESM: true,
// workaround for OOM issue, but lowers type checking
// see https://github.com/kulshekhar/ts-jest/issues/2015
isolatedModules: true,
tsconfig: '<rootDir>/tsconfig.json',
},
],
},
moduleNameMapper: {
'^(\\.{1,2}/.*)\\.js$': '$1',
},
};
9 changes: 4 additions & 5 deletions jest.config.mjs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import baseConfig from './jest.config.common.mjs';

export default {
...baseConfig,
displayName: 'Unit',
roots: ['<rootDir>/test/unit'],
testEnvironment: 'node',
testMatch: ['**/*.spec.ts'],
transform: {
'^.+\\.tsx?$': ['ts-jest'],
},
setupFiles: ['<rootDir>/test/environment/env-vars.mjs'],
};
9 changes: 4 additions & 5 deletions jest.config.psql.mjs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import baseConfig from './jest.config.common.mjs';

export default {
...baseConfig,
displayName: 'PSQL',
roots: ['<rootDir>/test/psql'],
testEnvironment: 'node',
testMatch: ['**/*.spec.ts'],
transform: {
'^.+\\.tsx?$': ['ts-jest'],
},
setupFiles: ['<rootDir>/test/environment/env-vars.mjs'],
};
9 changes: 4 additions & 5 deletions jest.config.s3.mjs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import baseConfig from './jest.config.common.mjs';

export default {
...baseConfig,
displayName: 'S3',
roots: ['<rootDir>/test/s3'],
testEnvironment: 'node',
testMatch: ['**/*.spec.ts'],
transform: {
'^.+\\.tsx?$': ['ts-jest'],
},
setupFiles: ['<rootDir>/test/environment/env-vars.s3.mjs'],
};
Loading