From 644ef88d98b27b2c74381370ccb8f6330500b316 Mon Sep 17 00:00:00 2001 From: Krzysztof Rudowski Date: Wed, 20 Jul 2022 12:59:08 +0200 Subject: [PATCH] feat: move to esm with build supporting commonjs --- .eslintignore | 4 ++- .gitignore | 6 +++- .husky/commit-msg | 2 +- .prettierrc.js => .prettierrc.cjs | 0 cjs/package.json | 3 ++ commitlint.config.js => commitlint.config.cjs | 0 esm/package.json | 3 ++ jest.config.js => jest.config.cjs | 8 ++++-- package.json | 20 +++++++++---- src/index.ts | 18 ++++++------ src/middlewares/errorHandler.ts | 4 +-- src/middlewares/exposeSpecification.ts | 2 +- src/middlewares/parseBody/index.ts | 12 ++++---- src/middlewares/parseBody/parseFormBody.ts | 2 +- src/middlewares/parseBody/parseJsonBody.ts | 2 +- src/middlewares/validate.ts | 6 ++-- src/types/constants.ts | 2 +- src/types/index.ts | 2 +- src/utils/captureError.ts | 2 +- src/utils/validateSpecification/index.ts | 12 ++++---- .../isHandlerSupportedFunction.ts | 2 +- .../validateSpecification/validateHandler.ts | 4 +-- .../validateSpecification/validateMethod.ts | 2 +- .../validatePreHandler.ts | 4 +-- .../validateRoutePath.ts | 2 +- .../validateValidator.ts | 6 ++-- test/integration/customErrorHandler.spec.ts | 6 ++-- test/integration/definingRoute.spec.ts | 6 ++-- test/integration/failingRoute.spec.ts | 4 +-- test/integration/parseBody.spec.ts | 4 +-- test/unit/middlewares/emptyMiddleware.spec.ts | 4 +-- test/unit/middlewares/errorHandler.spec.ts | 4 +-- .../middlewares/exposeSpecification.spec.ts | 4 +-- test/unit/middlewares/parseBody/index.spec.ts | 28 +++++++++---------- .../parseBody/parseFormBody.spec.ts | 2 +- .../parseBody/parseJsonBody.spec.ts | 2 +- .../parseBody/parseMultipartBody.spec.ts | 6 ++-- test/unit/middlewares/validate.spec.ts | 12 ++++---- test/unit/utils/captureError.spec.ts | 4 +-- .../utils/validateSpecification/index.spec.ts | 24 ++++++++-------- .../isHandlerSupportedFunction.spec.ts | 4 +-- .../validateHandler.spec.ts | 10 +++---- .../validateMethod.spec.ts | 2 +- .../validatePreHandler.spec.ts | 6 ++-- .../validateRoutePath.spec.ts | 2 +- .../validateValidator.spec.ts | 4 +-- tsconfig.build.json | 4 --- tsconfig.cjs.json | 9 ++++++ tsconfig.d.ts.json | 9 ++++++ tsconfig.eslint.json | 2 +- tsconfig.esm.json | 3 ++ tsconfig.json | 27 +++++++++--------- 52 files changed, 184 insertions(+), 138 deletions(-) rename .prettierrc.js => .prettierrc.cjs (100%) create mode 100644 cjs/package.json rename commitlint.config.js => commitlint.config.cjs (100%) create mode 100644 esm/package.json rename jest.config.js => jest.config.cjs (55%) delete mode 100644 tsconfig.build.json create mode 100644 tsconfig.cjs.json create mode 100644 tsconfig.d.ts.json create mode 100644 tsconfig.esm.json diff --git a/.eslintignore b/.eslintignore index 491fc35..12d9c80 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,4 @@ node_modules -lib +esm +cjs +@type diff --git a/.gitignore b/.gitignore index d921642..3ae95d3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,8 @@ .idea -lib +esm/* +!esm/package.json +cjs/* +!cjs/package.json +@type coverage node_modules/ diff --git a/.husky/commit-msg b/.husky/commit-msg index 418b01d..280b849 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -npx --no-install commitlint -g commitlint.config.js --edit "$1" +npx --no-install commitlint -g commitlint.config.cjs --edit "$1" diff --git a/.prettierrc.js b/.prettierrc.cjs similarity index 100% rename from .prettierrc.js rename to .prettierrc.cjs diff --git a/cjs/package.json b/cjs/package.json new file mode 100644 index 0000000..5bbefff --- /dev/null +++ b/cjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/commitlint.config.js b/commitlint.config.cjs similarity index 100% rename from commitlint.config.js rename to commitlint.config.cjs diff --git a/esm/package.json b/esm/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/jest.config.js b/jest.config.cjs similarity index 55% rename from jest.config.js rename to jest.config.cjs index dd33e01..454eae5 100644 --- a/jest.config.js +++ b/jest.config.cjs @@ -1,16 +1,20 @@ module.exports = { + extensionsToTreatAsEsm: ['.ts'], globals: { 'ts-jest': { diagnostics: false, - tsconfig: 'tsconfig.json', + tsconfig: 'tsconfig.cjs.json', + isolatedModules: true, + useESM: true, }, }, moduleFileExtensions: ['js', 'ts', 'd.ts'], moduleNameMapper: { - '@src/(.*)': '/src/$1', + '^(\\.{1,2}/.*)\\.js$': '$1', }, preset: 'ts-jest', rootDir: '.', roots: ['/test'], + transform: { '^.+\\.ts$': 'ts-jest' }, verbose: true, }; diff --git a/package.json b/package.json index 3ee3d10..8f648e1 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,11 @@ "validation" ], "scripts": { - "typecheck": "tsc --noEmit", - "build": "tsc --build --verbose tsconfig.build.json", + "typecheck": "tsc --noEmit -p tsconfig.esm.json", + "build": "npm run build:esm && npm run build:cjs && npm run build:types", + "build:types": "tsc --build --verbose tsconfig.d.ts.json", + "build:esm": "tsc --build --verbose tsconfig.esm.json", + "build:cjs": "tsc --build --verbose tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > ./cjs/package.json", "lint": "eslint .", "lint:fix": "eslint --fix .", "test": "npm run test:unit && npm run test:integration", @@ -38,13 +41,20 @@ }, "homepage": "https://github.com/rudi23/koa-yup-router", "files": [ - "lib/**/*" + "esm/**/*", + "cjs/**/*", + "@type" ], "publishConfig": { "access": "public" }, - "main": "lib/index.js", - "types": "lib/index.d.ts", + "exports": { + "require": "./cjs/index.js", + "import": "./esm/index.js" + }, + "main": "./cjs/index.js", + "types": "./@type/index.d.ts", + "type": "module", "lint-staged": { "*.{js,ts}": "eslint --fix", "*.{json,md}": "prettier --write" diff --git a/src/index.ts b/src/index.ts index f0659b3..142b457 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,11 +1,11 @@ import delegate from 'delegates'; import KoaRouter from '@koa/router'; import type Koa from 'koa'; -import parseBody from './middlewares/parseBody'; -import exposeSpecification from './middlewares/exposeSpecification'; -import validate from './middlewares/validate'; -import errorHandler from './middlewares/errorHandler'; -import validateSpecification from './utils/validateSpecification'; +import parseBody from './middlewares/parseBody/index.js'; +import exposeSpecification from './middlewares/exposeSpecification.js'; +import validate from './middlewares/validate.js'; +import errorHandler from './middlewares/errorHandler.js'; +import validateSpecification from './utils/validateSpecification/index.js'; import type { DefaultBody, DefaultHeaders, @@ -17,8 +17,8 @@ import type { DefaultState, DefaultContext, Middleware, -} from './types'; -import validatePreHandler from './utils/validateSpecification/validatePreHandler'; +} from './types/index.js'; +import validatePreHandler from './utils/validateSpecification/validatePreHandler.js'; class YupRouter extends KoaRouter { routeSpecs: RouteSpecification[] = []; @@ -95,6 +95,6 @@ class YupRouter extends KoaR } } -export * from './types'; - export default YupRouter; + +export { YupRouter }; diff --git a/src/middlewares/errorHandler.ts b/src/middlewares/errorHandler.ts index 5f4c1a8..ab8dc18 100644 --- a/src/middlewares/errorHandler.ts +++ b/src/middlewares/errorHandler.ts @@ -1,6 +1,6 @@ import type Koa from 'koa'; -import type { ErrorType, ValidationErrorResponse, ValidationErrors } from '../types'; -import { isEmptyObject, isObject, filterObject } from '../utils/object'; +import type { ErrorType, ValidationErrorResponse, ValidationErrors } from '../types/index.js'; +import { isEmptyObject, isObject, filterObject } from '../utils/object.js'; const errorTypes: ErrorType[] = ['params', 'query', 'headers', 'body', 'type']; diff --git a/src/middlewares/exposeSpecification.ts b/src/middlewares/exposeSpecification.ts index ce1c3fd..d7effa2 100644 --- a/src/middlewares/exposeSpecification.ts +++ b/src/middlewares/exposeSpecification.ts @@ -8,7 +8,7 @@ import type { RouteSpecification, DefaultContext, DefaultState, -} from '../types'; +} from '../types/index.js'; export default function createExposeSpecification< ParamsT = DefaultParams, diff --git a/src/middlewares/parseBody/index.ts b/src/middlewares/parseBody/index.ts index 7a87fe8..cf07a95 100644 --- a/src/middlewares/parseBody/index.ts +++ b/src/middlewares/parseBody/index.ts @@ -10,12 +10,12 @@ import type { InputType, RouteSpecification, ValidateConfig, -} from '../../types'; -import captureError from '../../utils/captureError'; -import emptyMiddleware from '../emptyMiddleware'; -import parseFormBody from './parseFormBody'; -import parseMultipartBody from './parseMultipartBody'; -import parseJsonBody from './parseJsonBody'; +} from '../../types/index.js'; +import captureError from '../../utils/captureError.js'; +import emptyMiddleware from '../emptyMiddleware.js'; +import parseFormBody from './parseFormBody.js'; +import parseMultipartBody from './parseMultipartBody.js'; +import parseJsonBody from './parseJsonBody.js'; function resolveBodyParser(type: InputType, validateSpec: ValidateConfig) { switch (type) { diff --git a/src/middlewares/parseBody/parseFormBody.ts b/src/middlewares/parseBody/parseFormBody.ts index f56d187..6894534 100644 --- a/src/middlewares/parseBody/parseFormBody.ts +++ b/src/middlewares/parseBody/parseFormBody.ts @@ -1,6 +1,6 @@ import { form } from 'co-body'; import type Koa from 'koa'; -import type { FormBodyOptions } from '../../types'; +import type { FormBodyOptions } from '../../types/index.js'; export default function createParseFormBody(options: FormBodyOptions = {}): Koa.Middleware { return async function parseFormBody(ctx: Koa.Context): Promise { diff --git a/src/middlewares/parseBody/parseJsonBody.ts b/src/middlewares/parseBody/parseJsonBody.ts index 2e6d045..8292a6f 100644 --- a/src/middlewares/parseBody/parseJsonBody.ts +++ b/src/middlewares/parseBody/parseJsonBody.ts @@ -1,6 +1,6 @@ import { json } from 'co-body'; import type Koa from 'koa'; -import type { JsonBodyOptions } from '../../types'; +import type { JsonBodyOptions } from '../../types/index.js'; export default function createParseJsonBody(options: JsonBodyOptions = {}): Koa.Middleware { return async function parseJsonBody(ctx: Koa.Context): Promise { diff --git a/src/middlewares/validate.ts b/src/middlewares/validate.ts index f47763f..c238a99 100644 --- a/src/middlewares/validate.ts +++ b/src/middlewares/validate.ts @@ -1,8 +1,8 @@ import type Koa from 'koa'; import type { ObjectSchema } from 'yup'; import * as yup from 'yup'; -import captureError from '../utils/captureError'; -import { inputParts } from '../types/constants'; +import captureError from '../utils/captureError.js'; +import { inputParts } from '../types/constants.js'; import type { DefaultBody, DefaultContext, @@ -12,7 +12,7 @@ import type { DefaultState, RouteSpecification, ValidationType, -} from '../types'; +} from '../types/index.js'; function updateRequestWithCastedValues(ctx: Koa.Context, inputPart: ValidationType, validationResult: any) { switch (inputPart) { diff --git a/src/types/constants.ts b/src/types/constants.ts index 625b357..e6a385d 100644 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -1,3 +1,3 @@ -import type { ValidationType } from './index'; +import type { ValidationType } from './index.js'; export const inputParts: ValidationType[] = ['headers', 'query', 'params', 'body']; diff --git a/src/types/index.ts b/src/types/index.ts index 7b8d15e..d6b9da5 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -5,7 +5,7 @@ import type CoBody from 'co-body'; import type * as Koa from 'koa'; import type * as Yup from 'yup'; import type * as KoaRouter from '@koa/router'; -import type YupRouter from '../index'; +import type YupRouter from '../index.js'; // because we don not want koa-bodyparser/index.d.ts to set body?: any declare module 'koa' { diff --git a/src/utils/captureError.ts b/src/utils/captureError.ts index 4591cc5..0b1bb14 100644 --- a/src/utils/captureError.ts +++ b/src/utils/captureError.ts @@ -1,6 +1,6 @@ import type Koa from 'koa'; import type * as Yup from 'yup'; -import type { ErrorType } from '../types'; +import type { ErrorType } from '../types/index.js'; export default function captureError(ctx: Koa.Context, type: ErrorType, err: Yup.ValidationError): void { ctx.invalid = ctx.invalid || {}; diff --git a/src/utils/validateSpecification/index.ts b/src/utils/validateSpecification/index.ts index 3668712..e347087 100644 --- a/src/utils/validateSpecification/index.ts +++ b/src/utils/validateSpecification/index.ts @@ -1,9 +1,9 @@ -import type { RouteConfig, RouteSpecification } from '../../types'; -import validateValidator from './validateValidator'; -import validateMethod from './validateMethod'; -import validateHandler from './validateHandler'; -import validatePreHandler from './validatePreHandler'; -import validateRoutePath from './validateRoutePath'; +import type { RouteConfig, RouteSpecification } from '../../types/index.js'; +import validateValidator from './validateValidator.js'; +import validateMethod from './validateMethod.js'; +import validateHandler from './validateHandler.js'; +import validatePreHandler from './validatePreHandler.js'; +import validateRoutePath from './validateRoutePath.js'; export default function validateSpecification( spec: RouteConfig diff --git a/src/utils/validateSpecification/isHandlerSupportedFunction.ts b/src/utils/validateSpecification/isHandlerSupportedFunction.ts index 6819d5b..3b88106 100644 --- a/src/utils/validateSpecification/isHandlerSupportedFunction.ts +++ b/src/utils/validateSpecification/isHandlerSupportedFunction.ts @@ -6,7 +6,7 @@ import type { Middleware, DefaultContext, DefaultState, -} from '../../types'; +} from '../../types/index.js'; export default function isHandlerSupportedFunction< ParamsT = DefaultParams, diff --git a/src/utils/validateSpecification/validateHandler.ts b/src/utils/validateSpecification/validateHandler.ts index 36836ea..c557b0f 100644 --- a/src/utils/validateSpecification/validateHandler.ts +++ b/src/utils/validateSpecification/validateHandler.ts @@ -7,8 +7,8 @@ import type { DefaultState, Middleware, RouteConfig, -} from '../../types'; -import isHandlerSupportedFunction from './isHandlerSupportedFunction'; +} from '../../types/index.js'; +import isHandlerSupportedFunction from './isHandlerSupportedFunction.js'; export default function validateHandler< ParamsT = DefaultParams, diff --git a/src/utils/validateSpecification/validateMethod.ts b/src/utils/validateSpecification/validateMethod.ts index 3946800..56606da 100644 --- a/src/utils/validateSpecification/validateMethod.ts +++ b/src/utils/validateSpecification/validateMethod.ts @@ -1,4 +1,4 @@ -import type { RouteConfig } from '../../types'; +import type { RouteConfig } from '../../types/index.js'; export default function validateMethod(method: RouteConfig['method']): string[] { let methods = method; diff --git a/src/utils/validateSpecification/validatePreHandler.ts b/src/utils/validateSpecification/validatePreHandler.ts index 4a99bcd..9e1fe71 100644 --- a/src/utils/validateSpecification/validatePreHandler.ts +++ b/src/utils/validateSpecification/validatePreHandler.ts @@ -7,8 +7,8 @@ import type { RouteConfig, DefaultContext, DefaultState, -} from '../../types'; -import isHandlerSupportedFunction from './isHandlerSupportedFunction'; +} from '../../types/index.js'; +import isHandlerSupportedFunction from './isHandlerSupportedFunction.js'; export default function validatePreHandler< ParamsT = DefaultParams, diff --git a/src/utils/validateSpecification/validateRoutePath.ts b/src/utils/validateSpecification/validateRoutePath.ts index 27b2e32..a9381fa 100644 --- a/src/utils/validateSpecification/validateRoutePath.ts +++ b/src/utils/validateSpecification/validateRoutePath.ts @@ -1,4 +1,4 @@ -import type { RouteConfig } from '../../types'; +import type { RouteConfig } from '../../types/index.js'; export default function validateRoutePath(path: RouteConfig['path']): string | RegExp { if (typeof path !== 'string' && !((path as any) instanceof RegExp)) { diff --git a/src/utils/validateSpecification/validateValidator.ts b/src/utils/validateSpecification/validateValidator.ts index 72fe48e..02d346c 100644 --- a/src/utils/validateSpecification/validateValidator.ts +++ b/src/utils/validateSpecification/validateValidator.ts @@ -1,7 +1,7 @@ import * as yup from 'yup'; -import type { RouteConfig, ValidateConfig } from '../../types'; -import { isObject, isEmptyObject } from '../object'; -import { inputParts } from '../../types/constants'; +import type { RouteConfig, ValidateConfig } from '../../types/index.js'; +import { isObject, isEmptyObject } from '../object.js'; +import { inputParts } from '../../types/constants.js'; export default function validateValidator(validate: RouteConfig['validate']): ValidateConfig { if (validate === undefined) { diff --git a/test/integration/customErrorHandler.spec.ts b/test/integration/customErrorHandler.spec.ts index 8616f2b..66c248e 100644 --- a/test/integration/customErrorHandler.spec.ts +++ b/test/integration/customErrorHandler.spec.ts @@ -1,8 +1,8 @@ import Koa from 'koa'; import supertest from 'supertest'; -import { paramsSchema, querySchema, bodySchema, headersSchema } from './schema'; -import YupRouter from '@src/index'; -import type { ValidationErrors } from '@src/types'; +import YupRouter from '../../src/index.js'; +import type { ValidationErrors } from '../../src/types/index.js'; +import { paramsSchema, querySchema, bodySchema, headersSchema } from './schema.js'; const app = new Koa(); const request = supertest(app.callback()); diff --git a/test/integration/definingRoute.spec.ts b/test/integration/definingRoute.spec.ts index 84fef49..234f53e 100644 --- a/test/integration/definingRoute.spec.ts +++ b/test/integration/definingRoute.spec.ts @@ -1,9 +1,9 @@ import Koa from 'koa'; import supertest from 'supertest'; import type { TypeOf } from 'yup'; -import { paramsSchema, querySchema, bodySchema, headersSchema } from './schema'; -import YupRouter from '@src/index'; -import type { Middleware, RouterContext } from '@src/types'; +import type { Middleware, RouterContext } from '../../src/types/index.js'; +import YupRouter from '../../src/index.js'; +import { paramsSchema, querySchema, bodySchema, headersSchema } from './schema.js'; type ParamsT = TypeOf; type QueryT = TypeOf; diff --git a/test/integration/failingRoute.spec.ts b/test/integration/failingRoute.spec.ts index cb6aebb..ebbb0c5 100644 --- a/test/integration/failingRoute.spec.ts +++ b/test/integration/failingRoute.spec.ts @@ -1,7 +1,7 @@ import Koa from 'koa'; import supertest from 'supertest'; -import { paramsSchema, querySchema, bodySchema, headersSchema } from './schema'; -import YupRouter from '@src/index'; +import YupRouter from '../../src/index.js'; +import { paramsSchema, querySchema, bodySchema, headersSchema } from './schema.js'; const app = new Koa(); const request = supertest(app.callback()); diff --git a/test/integration/parseBody.spec.ts b/test/integration/parseBody.spec.ts index b97fca4..9a470a8 100644 --- a/test/integration/parseBody.spec.ts +++ b/test/integration/parseBody.spec.ts @@ -1,7 +1,7 @@ import Koa from 'koa'; import supertest from 'supertest'; -import { bodySchema } from './schema'; -import YupRouter from '@src/index'; +import YupRouter from '../../src/index.js'; +import { bodySchema } from './schema.js'; let app = new Koa(); let request = supertest(app.callback()); diff --git a/test/unit/middlewares/emptyMiddleware.spec.ts b/test/unit/middlewares/emptyMiddleware.spec.ts index 5a8f213..a3d3baf 100644 --- a/test/unit/middlewares/emptyMiddleware.spec.ts +++ b/test/unit/middlewares/emptyMiddleware.spec.ts @@ -1,6 +1,6 @@ import type Koa from 'koa'; -import { valueOfType } from '../../utils'; -import emptyMiddleware from '@src/middlewares/emptyMiddleware'; +import { valueOfType } from '../../utils.js'; +import emptyMiddleware from '../../../src/middlewares/emptyMiddleware.js'; const next = jest.fn(); diff --git a/test/unit/middlewares/errorHandler.spec.ts b/test/unit/middlewares/errorHandler.spec.ts index bdceb45..c2a1b47 100644 --- a/test/unit/middlewares/errorHandler.spec.ts +++ b/test/unit/middlewares/errorHandler.spec.ts @@ -1,7 +1,7 @@ import type Koa from 'koa'; import { ValidationError } from 'yup'; -import { valueOfType } from '../../utils'; -import errorHandler from '@src/middlewares/errorHandler'; +import { valueOfType } from '../../utils.js'; +import errorHandler from '../../../src/middlewares/errorHandler.js'; const next = jest.fn(); diff --git a/test/unit/middlewares/exposeSpecification.spec.ts b/test/unit/middlewares/exposeSpecification.spec.ts index 190a958..149f792 100644 --- a/test/unit/middlewares/exposeSpecification.spec.ts +++ b/test/unit/middlewares/exposeSpecification.spec.ts @@ -1,6 +1,6 @@ import type Koa from 'koa'; -import { valueOfType } from '../../utils'; -import createExposeSpecification from '@src/middlewares/exposeSpecification'; +import { valueOfType } from '../../utils.js'; +import createExposeSpecification from '../../../src/middlewares/exposeSpecification.js'; const next = jest.fn(); diff --git a/test/unit/middlewares/parseBody/index.spec.ts b/test/unit/middlewares/parseBody/index.spec.ts index 6d63515..35537d7 100644 --- a/test/unit/middlewares/parseBody/index.spec.ts +++ b/test/unit/middlewares/parseBody/index.spec.ts @@ -1,19 +1,19 @@ import type * as Koa from 'koa'; import * as yup from 'yup'; -import { valueOfType } from '../../../utils'; -import createParseBody from '@src/middlewares/parseBody'; -import parseJsonBody from '@src/middlewares/parseBody/parseJsonBody'; -import parseFormBody from '@src/middlewares/parseBody/parseFormBody'; -import parseMultipartBody from '@src/middlewares/parseBody/parseMultipartBody'; -import emptyMiddleware from '@src/middlewares/emptyMiddleware'; -import captureError from '@src/utils/captureError'; -import type { RouteSpecification } from '@src/types'; - -jest.mock('@src/middlewares/parseBody/parseJsonBody'); -jest.mock('@src/middlewares/parseBody/parseFormBody'); -jest.mock('@src/middlewares/parseBody/parseMultipartBody'); -jest.mock('@src/middlewares/emptyMiddleware'); -jest.mock('@src/utils/captureError'); +import { valueOfType } from '../../../utils.js'; +import createParseBody from '../../../../src/middlewares/parseBody/index.js'; +import parseJsonBody from '../../../../src/middlewares/parseBody/parseJsonBody.js'; +import parseFormBody from '../../../../src/middlewares/parseBody/parseFormBody.js'; +import parseMultipartBody from '../../../../src/middlewares/parseBody/parseMultipartBody.js'; +import emptyMiddleware from '../../../../src/middlewares/emptyMiddleware.js'; +import captureError from '../../../../src/utils/captureError.js'; +import type { RouteSpecification } from '../../../../src/types/index.js'; + +jest.mock('../../../../src/middlewares/parseBody/parseJsonBody.js'); +jest.mock('../../../../src/middlewares/parseBody/parseFormBody.js'); +jest.mock('../../../../src/middlewares/parseBody/parseMultipartBody.js'); +jest.mock('../../../../src/middlewares/emptyMiddleware.js'); +jest.mock('../../../../src/utils/captureError.js'); const mockParseJsonBody = parseJsonBody as jest.Mock; const mockParseFormBody = parseFormBody as jest.Mock; diff --git a/test/unit/middlewares/parseBody/parseFormBody.spec.ts b/test/unit/middlewares/parseBody/parseFormBody.spec.ts index c632e49..b55d1ad 100644 --- a/test/unit/middlewares/parseBody/parseFormBody.spec.ts +++ b/test/unit/middlewares/parseBody/parseFormBody.spec.ts @@ -1,7 +1,7 @@ import type * as Koa from 'koa'; import { form } from 'co-body'; import { valueOfType } from '../../../utils'; -import createParseFormBody from '@src/middlewares/parseBody/parseFormBody'; +import createParseFormBody from '../../../../src/middlewares/parseBody/parseFormBody.js'; jest.mock('co-body', () => ({ form: jest.fn().mockImplementation(() => Promise.resolve('parsed body')), diff --git a/test/unit/middlewares/parseBody/parseJsonBody.spec.ts b/test/unit/middlewares/parseBody/parseJsonBody.spec.ts index 0531795..8e23f4c 100644 --- a/test/unit/middlewares/parseBody/parseJsonBody.spec.ts +++ b/test/unit/middlewares/parseBody/parseJsonBody.spec.ts @@ -1,7 +1,7 @@ import type * as Koa from 'koa'; import { json } from 'co-body'; import { valueOfType } from '../../../utils'; -import createParseJsonBody from '@src/middlewares/parseBody/parseJsonBody'; +import createParseJsonBody from '../../../../src/middlewares/parseBody/parseJsonBody.js'; jest.mock('co-body', () => ({ json: jest.fn().mockImplementation(() => Promise.resolve({ res: 'parsed body' })), diff --git a/test/unit/middlewares/parseBody/parseMultipartBody.spec.ts b/test/unit/middlewares/parseBody/parseMultipartBody.spec.ts index 98100f1..de8d50b 100644 --- a/test/unit/middlewares/parseBody/parseMultipartBody.spec.ts +++ b/test/unit/middlewares/parseBody/parseMultipartBody.spec.ts @@ -1,7 +1,9 @@ -import busboy from 'await-busboy'; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import * as busboy from 'await-busboy'; import type * as Koa from 'koa'; import { valueOfType } from '../../../utils'; -import createParseMultipartBody from '@src/middlewares/parseBody/parseMultipartBody'; +import createParseMultipartBody from '../../../../src/middlewares/parseBody/parseMultipartBody'; jest.mock('await-busboy'); diff --git a/test/unit/middlewares/validate.spec.ts b/test/unit/middlewares/validate.spec.ts index 20ee7bb..87d1453 100644 --- a/test/unit/middlewares/validate.spec.ts +++ b/test/unit/middlewares/validate.spec.ts @@ -1,12 +1,12 @@ import type { ObjectSchema } from 'yup'; import type Koa from 'koa'; import * as yup from 'yup'; -import { valueOfType } from '../../utils'; -import createValidate from '@src/middlewares/validate'; -import captureError from '@src/utils/captureError'; -import type { ValidateConfig } from '@src/types'; +import createValidate from '../../../src/middlewares/validate.js'; +import captureError from '../../../src/utils/captureError.js'; +import type { ValidateConfig } from '../../../src/types/index.js'; +import { valueOfType } from '../../utils.js'; -jest.mock('@src/utils/captureError'); +jest.mock('../../../src/utils/captureError.js'); const mockCaptureError = (captureError as jest.Mock).mockImplementation(jest.fn()); @@ -29,7 +29,7 @@ const calledOptions = { }; const mockInputParts = jest.fn().mockReturnValue(['headers', 'query', 'params', 'body']); -jest.mock('@src/types/constants', () => ({ +jest.mock('../../../src/types/constants.js', () => ({ get inputParts() { return mockInputParts(); }, diff --git a/test/unit/utils/captureError.spec.ts b/test/unit/utils/captureError.spec.ts index 857402a..f068842 100644 --- a/test/unit/utils/captureError.spec.ts +++ b/test/unit/utils/captureError.spec.ts @@ -1,7 +1,7 @@ import type Koa from 'koa'; import { ValidationError } from 'yup'; -import { valueOfType } from '../../utils'; -import captureError from '@src/utils/captureError'; +import { valueOfType } from '../../utils.js'; +import captureError from '../../../src/utils/captureError.js'; describe('utils/captureError', () => { it('capture error', async () => { diff --git a/test/unit/utils/validateSpecification/index.spec.ts b/test/unit/utils/validateSpecification/index.spec.ts index 0a0b053..f1bf42e 100644 --- a/test/unit/utils/validateSpecification/index.spec.ts +++ b/test/unit/utils/validateSpecification/index.spec.ts @@ -1,17 +1,17 @@ import { valueOfType } from '../../../utils'; -import validateSpecification from '@src/utils/validateSpecification'; -import type { RouteConfig } from '@src/types'; -import validateHandler from '@src/utils/validateSpecification/validateHandler'; -import validatePreHandler from '@src/utils/validateSpecification/validatePreHandler'; -import validateMethod from '@src/utils/validateSpecification/validateMethod'; -import validateRoutePath from '@src/utils/validateSpecification/validateRoutePath'; -import validateValidator from '@src/utils/validateSpecification/validateValidator'; +import validateSpecification from '../../../../src/utils/validateSpecification/index.js'; +import type { RouteConfig } from '../../../../src/types/index.js'; +import validateHandler from '../../../../src/utils/validateSpecification/validateHandler.js'; +import validatePreHandler from '../../../../src/utils/validateSpecification/validatePreHandler.js'; +import validateMethod from '../../../../src/utils/validateSpecification/validateMethod.js'; +import validateRoutePath from '../../../../src/utils/validateSpecification/validateRoutePath.js'; +import validateValidator from '../../../../src/utils/validateSpecification/validateValidator.js'; -jest.mock('@src/utils/validateSpecification/validateHandler'); -jest.mock('@src/utils/validateSpecification/validatePreHandler'); -jest.mock('@src/utils/validateSpecification/validateMethod'); -jest.mock('@src/utils/validateSpecification/validateRoutePath'); -jest.mock('@src/utils/validateSpecification/validateValidator'); +jest.mock('../../../../src/utils/validateSpecification/validateHandler.js'); +jest.mock('../../../../src/utils/validateSpecification/validatePreHandler.js'); +jest.mock('../../../../src/utils/validateSpecification/validateMethod.js'); +jest.mock('../../../../src/utils/validateSpecification/validateRoutePath.js'); +jest.mock('../../../../src/utils/validateSpecification/validateValidator.js'); const mockValidateHandler = (validateHandler as jest.Mock).mockImplementation((arg: unknown) => [arg]); const mockValidatePreHandler = (validatePreHandler as jest.Mock).mockImplementation((arg: unknown) => [arg]); diff --git a/test/unit/utils/validateSpecification/isHandlerSupportedFunction.spec.ts b/test/unit/utils/validateSpecification/isHandlerSupportedFunction.spec.ts index f429195..47301fe 100644 --- a/test/unit/utils/validateSpecification/isHandlerSupportedFunction.spec.ts +++ b/test/unit/utils/validateSpecification/isHandlerSupportedFunction.spec.ts @@ -1,5 +1,5 @@ -import isHandlerSupportedFunction from '@src/utils/validateSpecification/isHandlerSupportedFunction'; -import type { Middleware } from '@src/types'; +import isHandlerSupportedFunction from '../../../../src/utils/validateSpecification/isHandlerSupportedFunction.js'; +import type { Middleware } from '../../../../src/types/index.js'; describe('utils/validateSpecification/isHandlerSupportedFunction', () => { it('throws error when handler is not defined', () => { diff --git a/test/unit/utils/validateSpecification/validateHandler.spec.ts b/test/unit/utils/validateSpecification/validateHandler.spec.ts index 533bf56..7fed1e9 100644 --- a/test/unit/utils/validateSpecification/validateHandler.spec.ts +++ b/test/unit/utils/validateSpecification/validateHandler.spec.ts @@ -1,9 +1,9 @@ -import validateHandler from '@src/utils/validateSpecification/validateHandler'; -import isHandlerSupportedFunction from '@src/utils/validateSpecification/isHandlerSupportedFunction'; -import validatePreHandler from '@src/utils/validateSpecification/validatePreHandler'; -import type { Middleware } from '@src/types'; +import validateHandler from '../../../../src/utils/validateSpecification/validateHandler.js'; +import isHandlerSupportedFunction from '../../../../src/utils/validateSpecification/isHandlerSupportedFunction.js'; +import validatePreHandler from '../../../../src/utils/validateSpecification/validatePreHandler.js'; +import type { Middleware } from '../../../../src/types/index.js'; -jest.mock('@src/utils/validateSpecification/isHandlerSupportedFunction'); +jest.mock('../../../../src/utils/validateSpecification/isHandlerSupportedFunction.js'); const mockIsHandlerSupportedFunction = (isHandlerSupportedFunction as jest.Mock).mockImplementation( (arg: unknown) => arg diff --git a/test/unit/utils/validateSpecification/validateMethod.spec.ts b/test/unit/utils/validateSpecification/validateMethod.spec.ts index 5270053..41ab9f6 100644 --- a/test/unit/utils/validateSpecification/validateMethod.spec.ts +++ b/test/unit/utils/validateSpecification/validateMethod.spec.ts @@ -1,4 +1,4 @@ -import validateMethod from '@src/utils/validateSpecification/validateMethod'; +import validateMethod from '../../../../src/utils/validateSpecification/validateMethod.js'; describe('utils/validateSpecification/validateMethod', () => { it('throws error when method is not defined', () => { diff --git a/test/unit/utils/validateSpecification/validatePreHandler.spec.ts b/test/unit/utils/validateSpecification/validatePreHandler.spec.ts index d1a6e83..e659669 100644 --- a/test/unit/utils/validateSpecification/validatePreHandler.spec.ts +++ b/test/unit/utils/validateSpecification/validatePreHandler.spec.ts @@ -1,7 +1,7 @@ -import validatePreHandler from '@src/utils/validateSpecification/validatePreHandler'; -import isHandlerSupportedFunction from '@src/utils/validateSpecification/isHandlerSupportedFunction'; +import validatePreHandler from '../../../../src/utils/validateSpecification/validatePreHandler.js'; +import isHandlerSupportedFunction from '../../../../src/utils/validateSpecification/isHandlerSupportedFunction.js'; -jest.mock('@src/utils/validateSpecification/isHandlerSupportedFunction'); +jest.mock('../../../../src/utils/validateSpecification/isHandlerSupportedFunction.js'); const mockIsHandlerSupportedFunction = (isHandlerSupportedFunction as jest.Mock).mockImplementation( (arg: unknown) => arg diff --git a/test/unit/utils/validateSpecification/validateRoutePath.spec.ts b/test/unit/utils/validateSpecification/validateRoutePath.spec.ts index a075ca0..b581bd8 100644 --- a/test/unit/utils/validateSpecification/validateRoutePath.spec.ts +++ b/test/unit/utils/validateSpecification/validateRoutePath.spec.ts @@ -1,4 +1,4 @@ -import validateRoutePath from '@src/utils/validateSpecification/validateRoutePath'; +import validateRoutePath from '../../../../src/utils/validateSpecification/validateRoutePath.js'; describe('utils/validateSpecification/validateRoutePath', () => { it('throws error when path is not string', () => { diff --git a/test/unit/utils/validateSpecification/validateValidator.spec.ts b/test/unit/utils/validateSpecification/validateValidator.spec.ts index 21d7485..5ffa258 100644 --- a/test/unit/utils/validateSpecification/validateValidator.spec.ts +++ b/test/unit/utils/validateSpecification/validateValidator.spec.ts @@ -1,6 +1,6 @@ import * as yup from 'yup'; -import validateValidator from '@src/utils/validateSpecification/validateValidator'; -import type { ValidateConfig } from '@src/types'; +import validateValidator from '../../../../src/utils/validateSpecification/validateValidator.js'; +import type { ValidateConfig } from '../../../../src/types/index.js'; describe('utils/validateSpecification/validateValidator', () => { it('returns empty validator if validate is not defined', () => { diff --git a/tsconfig.build.json b/tsconfig.build.json deleted file mode 100644 index 5af44f7..0000000 --- a/tsconfig.build.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig", - "exclude": ["node_modules", "lib", "test"] -} diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json new file mode 100644 index 0000000..e91bb3d --- /dev/null +++ b/tsconfig.cjs.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./cjs", + "target": "es6", + "module": "commonjs", + "lib": ["ES2019"] + } +} diff --git a/tsconfig.d.ts.json b/tsconfig.d.ts.json new file mode 100644 index 0000000..cdd0054 --- /dev/null +++ b/tsconfig.d.ts.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "declarationDir": "./@type", + "removeComments": false, + "emitDeclarationOnly": true + } +} diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index 212ce70..6f24f74 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -1,5 +1,5 @@ { "extends": "./tsconfig.json", "include": ["**/*.ts", "*.js"], - "exclude": ["node_modules", "lib"] + "exclude": ["node_modules", "esm", "cjs", "@type"] } diff --git a/tsconfig.esm.json b/tsconfig.esm.json new file mode 100644 index 0000000..fc8520e --- /dev/null +++ b/tsconfig.esm.json @@ -0,0 +1,3 @@ +{ + "extends": "./tsconfig.json" +} diff --git a/tsconfig.json b/tsconfig.json index 92d86e8..800635f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,28 +1,29 @@ { "compilerOptions": { + "allowSyntheticDefaultImports": true, "alwaysStrict": true, - "declaration": true, + "baseUrl": ".", "esModuleInterop": true, "importsNotUsedAsValues": "error", - "module": "commonjs", - "noUnusedLocals": true, - "noImplicitReturns": true, + "lib": ["esnext"], + "module": "es2022", + "moduleResolution": "node", + "noFallthroughCasesInSwitch": true, "noImplicitAny": true, + "noImplicitReturns": true, "noImplicitThis": true, - "noFallthroughCasesInSwitch": true, - "outDir": "./lib", + "noUnusedLocals": true, + "outDir": "./esm", + "paths": { + "@src/*": ["src/*"] + }, "removeComments": true, "rootDirs": ["src"], "skipLibCheck": true, "strict": true, "strictNullChecks": true, - "target": "ES5", - "lib": ["es2020"], - "baseUrl": ".", - "paths": { - "@src/*": ["src/*"] - } + "target": "es2021" }, "include": ["**/*"], - "exclude": ["node_modules", "lib"] + "exclude": ["node_modules", "esm", "cjs", "@type", "test"] }