diff --git a/.circleci/config.yml b/.circleci/config.yml index debb0fa..64e2fa0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,7 +13,7 @@ commands: steps: - node/install-packages: pkg-manager: yarn - cache-version: v1-all + cache-version: v2-all cache-only-lockfile: true app-dir: ~/repo override-ci-command: yarn install --pure-lockfile --no-progress @@ -27,6 +27,6 @@ jobs: steps: - checkout - install_deps - - run: yarn test - run: yarn type-check - run: yarn lint:ci + - run: yarn test diff --git a/jest.config.mjs b/jest.config.mjs new file mode 100644 index 0000000..6571e0f --- /dev/null +++ b/jest.config.mjs @@ -0,0 +1,25 @@ +const ES_PACKAGES_TO_TRANSFORM = []; + +/** @type {import('jest').Config} */ +const config = { + collectCoverageFrom: ['src/**/*.ts', '!src/**/schema.ts', '!src/**/types.ts'], + reporters: ['default', 'jest-junit'], + transform: { + '^.+\\.(t|j)sx?$': [ + '@swc/jest', + { + jsc: { + parser: { + syntax: 'typescript', + }, + }, + }, + ], + }, + resolver: 'ts-jest-resolver', + transformIgnorePatterns: [ + `node_modules/(?!(${ES_PACKAGES_TO_TRANSFORM.join('|')}))/node_modules/.+\\.js`, + ], +}; + +export default config; diff --git a/package.json b/package.json index 6f9579e..ce225a6 100644 --- a/package.json +++ b/package.json @@ -15,15 +15,16 @@ "email": "andrii.bakanov@shelf.io", "url": "https://shelf.io" }, - "main": "lib", + "sideEffects": false, + "type": "module", + "exports": "./lib/index.js", + "module": "./lib/index.js", "types": "lib/index.d.ts", "files": [ "lib" ], "scripts": { - "build": "rm -rf lib/ && yarn build:types && yarn build:code", - "build:code": "babel src --out-dir lib --ignore '**/*.test.ts' --extensions '.ts' && find ./lib -name '*.test.d.ts' -delete", - "build:types": "tsc --emitDeclarationOnly --declaration --isolatedModules false --declarationDir lib", + "build": "rm -rf lib/ && tsc", "coverage": "yarn test --coverage", "lint": "yarn lint:ci --fix", "lint:ci": "eslint . --quiet", @@ -43,25 +44,23 @@ ".husky/validate-circleci-config.sh" ] }, - "babel": { - "extends": "@shelf/babel-config/backend" - }, "prettier": "@shelf/prettier-config", "dependencies": {}, "devDependencies": { - "@babel/cli": "7.26.4", - "@babel/core": "7.26.0", - "@shelf/babel-config": "3.0.0", "@shelf/eslint-config": "4.2.1", "@shelf/prettier-config": "1.0.0", "@shelf/tsconfig": "0.1.0", + "@swc/core": "1.4.11", + "@swc/jest": "0.2.36", "@types/jest": "29.5.14", "@types/node": "20", "eslint": "9.17.0", "husky": "9.1.7", "jest": "29.7.0", + "jest-junit": "16.0.0", "lint-staged": "15.3.0", "prettier": "3.4.2", + "ts-jest-resolver": "2.0.1", "typescript": "5.7.2" }, "engines": { diff --git a/src/evaluation.test.ts b/src/evaluation.test.ts index 5c17197..d903ed3 100644 --- a/src/evaluation.test.ts +++ b/src/evaluation.test.ts @@ -1,5 +1,5 @@ -import type {Expression} from './types'; -import {evaluate} from './evaluation'; +import type {Expression} from './types.js'; +import {evaluate} from './evaluation.js'; const baseExpression: Expression = { joiner: 'and', diff --git a/src/evaluation.ts b/src/evaluation.ts index 1fe470b..7a981c5 100644 --- a/src/evaluation.ts +++ b/src/evaluation.ts @@ -1,8 +1,5 @@ -import type {Expression} from './types'; -import type {JoinerParameters} from './types'; -import type {Rule, StackElement} from './types'; -import type {RuleParameters} from './types'; -import {validateJoinerInvoke, validateRuleInvoke} from './validations'; +import type {Expression, JoinerParameters, Rule, RuleParameters, StackElement} from './types.js'; +import {validateJoinerInvoke, validateRuleInvoke} from './validations.js'; export const evaluate = ({ expression, diff --git a/src/index.test.ts b/src/index.test.ts index f839cec..f62e604 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -1,7 +1,7 @@ -jest.mock('./evaluation'); +jest.mock('./evaluation.js'); -import {evaluate} from './evaluation'; -import {evaluateExpression} from './index'; +import {evaluate} from './evaluation.js'; +import {evaluateExpression} from './index.js'; it('should return true', () => { jest.mocked(evaluate).mockReturnValue(true); diff --git a/src/index.ts b/src/index.ts index b404996..2f57453 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,5 @@ -import type {Expression, VariableWithValue} from './types'; -import {evaluate} from './evaluation'; +import type {Expression, VariableWithValue} from './types.js'; +import {evaluate} from './evaluation.js'; export const evaluateExpression = ( expression: Expression, @@ -19,4 +19,4 @@ export const evaluateExpression = ( return result; }; -export type {Expression, Rule} from './types'; +export type {Expression, Rule} from './types.js'; diff --git a/src/validations.test.ts b/src/validations.test.ts index 1d97f00..07d7fac 100644 --- a/src/validations.test.ts +++ b/src/validations.test.ts @@ -1,4 +1,4 @@ -import {validateJoinerInvoke, validateRuleInvoke} from './validations'; +import {validateJoinerInvoke, validateRuleInvoke} from './validations.js'; describe('validateJoinerInvoke', () => { it('should throw error if joiner is not SINGLE and left is undefined', () => { diff --git a/src/validations.ts b/src/validations.ts index 595f88b..76e5df4 100644 --- a/src/validations.ts +++ b/src/validations.ts @@ -1,4 +1,4 @@ -import type {Expression, JoinerParameters, Rule} from './types'; +import type {Expression, JoinerParameters, Rule} from './types.js'; export const validateJoinerInvoke = ({ joiner, diff --git a/tsconfig.json b/tsconfig.json index 5bbaf96..cfcc41c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,12 @@ { "extends": "@shelf/tsconfig/backend", "compilerOptions": { - "strict": true + "strict": true, + "module": "NodeNext", + "declaration": true, + "declarationMap": true, + "outDir": "lib" }, - "exclude": ["node_modules"], + "exclude": ["node_modules", "**/*.test.*", "**/mocks.ts"], "include": ["src"] }