Skip to content
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

feat: move to esm with build supporting commonjs #27

Merged
merged 1 commit into from
Jul 20, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .eslintignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
node_modules
lib
esm
cjs
@type
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
.idea
lib
esm/*
!esm/package.json
cjs/*
!cjs/package.json
@type
coverage
node_modules/
2 changes: 1 addition & 1 deletion .husky/commit-msg
Original file line number Diff line number Diff line change
@@ -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"
File renamed without changes.
3 changes: 3 additions & 0 deletions cjs/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"type": "commonjs"
}
File renamed without changes.
3 changes: 3 additions & 0 deletions esm/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"type": "module"
}
8 changes: 6 additions & 2 deletions jest.config.js → jest.config.cjs
Original file line number Diff line number Diff line change
@@ -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/(.*)': '<rootDir>/src/$1',
'^(\\.{1,2}/.*)\\.js$': '$1',
},
preset: 'ts-jest',
rootDir: '.',
roots: ['<rootDir>/test'],
transform: { '^.+\\.ts$': 'ts-jest' },
verbose: true,
};
20 changes: 15 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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"
Expand Down
18 changes: 9 additions & 9 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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<StateRT = DefaultState, ContextRT = DefaultContext> extends KoaRouter {
routeSpecs: RouteSpecification<any, any, any, any, any, any>[] = [];
Expand Down Expand Up @@ -95,6 +95,6 @@ class YupRouter<StateRT = DefaultState, ContextRT = DefaultContext> extends KoaR
}
}

export * from './types';

export default YupRouter;

export { YupRouter };
4 changes: 2 additions & 2 deletions src/middlewares/errorHandler.ts
Original file line number Diff line number Diff line change
@@ -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'];

Expand Down
2 changes: 1 addition & 1 deletion src/middlewares/exposeSpecification.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import type {
RouteSpecification,
DefaultContext,
DefaultState,
} from '../types';
} from '../types/index.js';

export default function createExposeSpecification<
ParamsT = DefaultParams,
Expand Down
12 changes: 6 additions & 6 deletions src/middlewares/parseBody/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion src/middlewares/parseBody/parseFormBody.ts
Original file line number Diff line number Diff line change
@@ -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<void> {
Expand Down
2 changes: 1 addition & 1 deletion src/middlewares/parseBody/parseJsonBody.ts
Original file line number Diff line number Diff line change
@@ -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<void> {
Expand Down
6 changes: 3 additions & 3 deletions src/middlewares/validate.ts
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion src/types/constants.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import type { ValidationType } from './index';
import type { ValidationType } from './index.js';

export const inputParts: ValidationType[] = ['headers', 'query', 'params', 'body'];
2 changes: 1 addition & 1 deletion src/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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' {
Expand Down
2 changes: 1 addition & 1 deletion src/utils/captureError.ts
Original file line number Diff line number Diff line change
@@ -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 || {};
Expand Down
12 changes: 6 additions & 6 deletions src/utils/validateSpecification/index.ts
Original file line number Diff line number Diff line change
@@ -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<ParamsT, QueryT, BodyT, HeadersT, StateT, ContextT>(
spec: RouteConfig<ParamsT, QueryT, BodyT, HeadersT, StateT, ContextT>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import type {
Middleware,
DefaultContext,
DefaultState,
} from '../../types';
} from '../../types/index.js';

export default function isHandlerSupportedFunction<
ParamsT = DefaultParams,
Expand Down
4 changes: 2 additions & 2 deletions src/utils/validateSpecification/validateHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion src/utils/validateSpecification/validateMethod.ts
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
4 changes: 2 additions & 2 deletions src/utils/validateSpecification/validatePreHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion src/utils/validateSpecification/validateRoutePath.ts
Original file line number Diff line number Diff line change
@@ -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)) {
Expand Down
6 changes: 3 additions & 3 deletions src/utils/validateSpecification/validateValidator.ts
Original file line number Diff line number Diff line change
@@ -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) {
Expand Down
6 changes: 3 additions & 3 deletions test/integration/customErrorHandler.spec.ts
Original file line number Diff line number Diff line change
@@ -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());
Expand Down
6 changes: 3 additions & 3 deletions test/integration/definingRoute.spec.ts
Original file line number Diff line number Diff line change
@@ -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<typeof paramsSchema>;
type QueryT = TypeOf<typeof querySchema>;
Expand Down
4 changes: 2 additions & 2 deletions test/integration/failingRoute.spec.ts
Original file line number Diff line number Diff line change
@@ -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());
Expand Down
4 changes: 2 additions & 2 deletions test/integration/parseBody.spec.ts
Original file line number Diff line number Diff line change
@@ -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());
Expand Down
4 changes: 2 additions & 2 deletions test/unit/middlewares/emptyMiddleware.spec.ts
Original file line number Diff line number Diff line change
@@ -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();

Expand Down
4 changes: 2 additions & 2 deletions test/unit/middlewares/errorHandler.spec.ts
Original file line number Diff line number Diff line change
@@ -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();

Expand Down
4 changes: 2 additions & 2 deletions test/unit/middlewares/exposeSpecification.spec.ts
Original file line number Diff line number Diff line change
@@ -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();

Expand Down
28 changes: 14 additions & 14 deletions test/unit/middlewares/parseBody/index.spec.ts
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Loading