@koala-ts/framework 0.1.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
1
  export * from './types.js';
2
2
  export * from './config-defaults.js';
3
+ export * from './load-env-config.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './types.js';
2
2
  export * from './config-defaults.js';
3
+ export * from './load-env-config.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare function loadEnvConfig(env: string): void;
2
+ export { loadEnvConfig };
3
+ //# sourceMappingURL=load-env-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-env-config.d.ts","sourceRoot":"","sources":["../../src/config/load-env-config.ts"],"names":[],"mappings":"AAIA,iBAAS,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAWxC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import dotenv from 'dotenv';
2
+ import dotenvExpand from 'dotenv-expand';
3
+ import path from 'path';
4
+ function loadEnvConfig(env) {
5
+ const rootDir = process.cwd();
6
+ const loadFile = (fileName) => {
7
+ dotenvExpand.expand(dotenv.config({ path: path.resolve(rootDir, fileName), override: true }));
8
+ };
9
+ loadFile('.env');
10
+ if (env !== 'test')
11
+ loadFile('.env.local');
12
+ loadFile(`.env.${env}`);
13
+ loadFile(`.env.${env}.local`);
14
+ }
15
+ export { loadEnvConfig };
16
+ //# sourceMappingURL=load-env-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-env-config.js","sourceRoot":"","sources":["../../src/config/load-env-config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,SAAS,aAAa,CAAC,GAAW;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE9B,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,EAAE;QAClC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClG,CAAC,CAAC;IAEF,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjB,IAAI,GAAG,KAAK,MAAM;QAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IACxB,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/core/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAC;AAIvD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,MAAM,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAcpD"}
1
+ {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/core/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAC;AAIvD,OAAO,EAAE,YAAY,EAAiB,MAAM,WAAW,CAAC;AAIxD,wBAAgB,MAAM,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CA2BpD"}
@@ -1,17 +1,22 @@
1
1
  import Koa from 'koa';
2
2
  import Router from '@koa/router';
3
3
  import { getRoutes } from './route.js';
4
+ import { loadEnvConfig } from '../config/index.js';
4
5
  import { koaBody } from 'koa-body';
6
+ import { extendResponse } from './response.js';
5
7
  export function create(_) {
6
8
  const app = new Koa();
9
+ loadEnvConfig(app.env);
10
+ app.scope = app.context;
7
11
  const router = new Router();
8
- getRoutes().forEach(({ methods, path, middleware, handler, parseBody }) => {
12
+ getRoutes().forEach(({ methods, path, middleware, handler, parseBody, bodyOptions, }) => {
9
13
  const middlewareStack = [...middleware, handler];
10
14
  methods.forEach(method => {
11
- const routeMiddleware = parseBody ? [koaBody(), ...middlewareStack] : middlewareStack;
15
+ const routeMiddleware = parseBody ? [koaBody(bodyOptions), ...middlewareStack] : middlewareStack;
12
16
  router[method](path, ...routeMiddleware);
13
17
  });
14
18
  });
19
+ app.use(extendResponse);
15
20
  app.use(router.routes());
16
21
  return app;
17
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/core/application.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,UAAU,MAAM,CAAC,CAAe;IAClC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAE5B,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAkB,EAAE,EAAE;QACtF,MAAM,eAAe,GAAG,CAAC,GAAG,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACrB,MAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;YACtF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,eAAe,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACzB,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/core/application.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAgB,aAAa,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,UAAU,MAAM,CAAC,CAAe;IAClC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEtC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC;IAExB,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAE5B,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,EACjB,OAAO,EACP,IAAI,EACJ,UAAU,EACV,OAAO,EACP,SAAS,EACT,WAAW,GACE,EAAE,EAAE;QACjB,MAAM,eAAe,GAAG,CAAC,GAAG,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACrB,MAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;YACjG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,eAAe,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzB,OAAO,GAAG,CAAC;AACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type INext, type IScope } from './types.js';
2
+ export declare function extendResponse(scope: IScope, next: INext): Promise<void>;
3
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/core/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAa,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAE7D,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9E"}
@@ -0,0 +1,14 @@
1
+ export async function extendResponse(scope, next) {
2
+ scope.response.setHeader = function (name, value) {
3
+ scope.set(name, value);
4
+ return this;
5
+ };
6
+ scope.response.withHeaders = function (headers) {
7
+ Object.entries(headers).forEach(([name, value]) => {
8
+ scope.set(name, value);
9
+ });
10
+ return this;
11
+ };
12
+ await next();
13
+ }
14
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/core/response.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa,EAAE,IAAW;IAC3D,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,UAAU,IAAY,EAAE,KAAwB;QACvE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEvB,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAGF,KAAK,CAAC,QAAQ,CAAC,WAAW,GAAG,UAAU,OAA0C;QAC7E,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9C,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,IAAI,EAAE,CAAC;AACjB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import 'reflect-metadata';
2
- import { IRouteMetadata, IRouteOptions } from './types.js';
3
- export declare function Route({ method, path, parseBody, middleware }: IRouteOptions): MethodDecorator;
2
+ import { IRoute, IRouteMetadata } from './types.js';
3
+ export declare function Route({ method, path, middleware, options }: IRoute): MethodDecorator;
4
4
  export declare function getRoutes(): IRouteMetadata[];
5
5
  //# sourceMappingURL=route.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/core/route.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAW,cAAc,EAAE,aAAa,EAA8B,MAAM,SAAS,CAAC;AAI7F,wBAAgB,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAgB,EAAE,UAAe,EAAE,EAAE,aAAa,GAAG,eAAe,CAYzG;AAED,wBAAgB,SAAS,IAAI,cAAc,EAAE,CAE5C"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/core/route.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAW,MAAM,EAAE,cAAc,EAA8B,MAAM,SAAS,CAAC;AAItF,wBAAgB,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAe,EAAE,OAAY,EAAE,EAAE,MAAM,GAAG,eAAe,CAgB9F;AAED,wBAAgB,SAAS,IAAI,cAAc,EAAE,CAE5C"}
@@ -1,20 +1,22 @@
1
1
  import 'reflect-metadata';
2
2
  const key = Symbol('Route');
3
- export function Route({ method, path, parseBody = true, middleware = [] }) {
3
+ export function Route({ method, path, middleware = [], options = {} }) {
4
4
  return function (target, propertyKey) {
5
5
  const routes = Reflect.getMetadata(key, Reflect) || [];
6
+ const { parseBody, ...bodyOptions } = options;
6
7
  routes.push({
7
8
  path,
8
9
  methods: qualifyMethod(method),
9
10
  handler: qualifyHandler(target, propertyKey),
10
- parseBody: parseBody,
11
- middleware: middleware
11
+ parseBody: options.parseBody ?? true,
12
+ middleware: middleware,
13
+ bodyOptions: bodyOptions,
12
14
  });
13
15
  Reflect.defineMetadata(key, routes, Reflect);
14
16
  };
15
17
  }
16
18
  export function getRoutes() {
17
- return Reflect.getMetadata(key, Reflect);
19
+ return Reflect.getMetadata(key, Reflect) ?? [];
18
20
  }
19
21
  function qualifyMethod(method) {
20
22
  const methods = Array.isArray(method) ? method : [method];
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/core/route.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAE5B,MAAM,UAAU,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,EAAE,UAAU,GAAG,EAAE,EAAiB;IACpF,OAAO,UAAU,MAAc,EAAE,WAA4B;QACzD,MAAM,MAAM,GAAqB,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC;YACR,IAAI;YACJ,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC;YAC5C,SAAS,EAAE,SAAS;YACpB,UAAU,EAAE,UAAU;SACzB,CAAC,CAAC;QACH,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,SAAS;IACrB,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa,CAAC,MAAmC;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAmB,CAAC,CAAC,CAAC;AACzH,CAAC;AAED,SAAS,cAAc,CAAC,MAAe,EAAE,WAA4B;IACjE,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,MAAiB,CAAC;IAC7B,CAAC;IAED,OAAQ,MAAc,CAAC,WAAW,CAAY,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/core/route.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAE5B,MAAM,UAAU,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAU;IACzE,OAAO,UAAU,MAAc,EAAE,WAA4B;QACzD,MAAM,MAAM,GAAqB,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QACzE,MAAM,EAAE,SAAS,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;QAE9C,MAAM,CAAC,IAAI,CAAC;YACR,IAAI;YACJ,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC;YAC5C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;YACpC,UAAU,EAAE,UAAU;YACtB,WAAW,EAAE,WAAW;SAC3B,CAAC,CAAC;QAEH,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,SAAS;IACrB,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,aAAa,CAAC,MAAmC;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAmB,CAAC,CAAC,CAAC;AACzH,CAAC;AAED,SAAS,cAAc,CAAC,MAAe,EAAE,WAA4B;IACjE,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,MAAiB,CAAC;IAC7B,CAAC;IAED,OAAQ,MAAc,CAAC,WAAW,CAAY,CAAC;AACnD,CAAC"}
@@ -1,30 +1,38 @@
1
- import { IncomingMessage, Server, ServerResponse } from 'http';
2
- import { Middleware } from '@koa/router';
3
- import { Context, Next, Request } from 'koa';
4
- import { Http2ServerRequest, Http2ServerResponse } from 'http2';
5
- export interface IApplication {
6
- listen(port?: number): Server;
7
- callback(): (req: IncomingMessage | Http2ServerRequest, res: ServerResponse | Http2ServerResponse) => Promise<void>;
1
+ import Koa, { Context, DefaultState, Next, Request, Response } from 'koa';
2
+ import { KoaBodyMiddlewareOptions } from 'koa-body';
3
+ import { File } from 'formidable';
4
+ export type IApplication<StateT = IState, ScopeT = IScope> = Koa<StateT, ScopeT> & {
5
+ scope: IScope;
6
+ };
7
+ export interface IState extends DefaultState {
8
+ }
9
+ export interface IScope extends Context {
10
+ request: IRequest | IHttpRequest;
11
+ response: IResponse;
12
+ }
13
+ export interface IUploadedFile extends File {
14
+ }
15
+ export interface IFilesMap {
16
+ [file: string]: IUploadedFile | IUploadedFile[];
8
17
  }
9
18
  export interface IRequest extends Request {
10
- body?: {
11
- [key: string]: any;
12
- };
19
+ body?: Record<string, any>;
20
+ files?: IFilesMap;
21
+ params: IScope['params'];
13
22
  }
14
23
  export interface IHttpRequest extends IRequest {
15
- body: {
16
- [key: string]: any;
17
- };
24
+ body: Record<string, any>;
18
25
  }
19
- export interface IScope extends Context {
20
- request: IRequest | IHttpRequest;
26
+ export interface IResponse extends Response {
27
+ setHeader(name: string, value: string | string[]): IResponse;
28
+ withHeaders(headers: Record<string, string | string[]>): IResponse;
21
29
  }
22
- export interface IMiddleware extends Middleware {
30
+ export interface IMiddleware {
23
31
  (scope: IScope, next: INext): Promise<INext>;
24
32
  }
25
33
  export interface INext extends Next {
26
34
  }
27
- export interface Handler extends Middleware {
35
+ export interface Handler extends IMiddleware {
28
36
  }
29
37
  export type THttpMethod = 'get' | 'post' | 'put' | 'patch' | 'delete' | 'options' | 'head' | 'any' | 'all' | 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'ANY' | 'ALL';
30
38
  export type TRouterMethod = 'get' | 'post' | 'put' | 'patch' | 'delete' | 'options' | 'head' | 'all';
@@ -33,12 +41,16 @@ export interface IRouteMetadata {
33
41
  methods: TRouterMethod[];
34
42
  handler: Handler;
35
43
  parseBody: boolean;
36
- middleware: Middleware[];
44
+ middleware: IMiddleware[];
45
+ bodyOptions: Partial<KoaBodyMiddlewareOptions>;
37
46
  }
38
- export interface IRouteOptions {
47
+ export type IRouteOptions = Partial<KoaBodyMiddlewareOptions & {
48
+ parseBody?: boolean;
49
+ }>;
50
+ export interface IRoute {
39
51
  path: string;
40
52
  method: THttpMethod | THttpMethod[];
41
- parseBody?: boolean;
42
- middleware?: Middleware[];
53
+ middleware?: IMiddleware[];
54
+ options?: IRouteOptions;
43
55
  }
44
56
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAG,MAAM,KAAK,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAEhE,MAAM,WAAW,YAAY;IACzB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE9B,QAAQ,IAAI,CAAC,GAAG,EAAE,eAAe,GAAG,kBAAkB,EAAE,GAAG,EAAE,cAAc,GAAG,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvH;AAED,MAAM,WAAW,QAAS,SAAQ,OAAO;IACrC,IAAI,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CACjC;AAED,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC1C,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CAChC;AAED,MAAM,WAAW,MAAO,SAAQ,OAAO;IACnC,OAAO,EAAE,QAAQ,GAAG,YAAY,CAAC;CACpC;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC3C,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,KAAM,SAAQ,IAAI;CAClC;AAGD,MAAM,WAAW,OAAQ,SAAQ,UAAU;CAC1C;AAED,MAAM,MAAM,WAAW,GACnB,KAAK,GACH,MAAM,GACN,KAAK,GACL,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,KAAK,GACL,KAAK,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC;AAErG,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;CAC7B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,MAAM,YAAY,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IAC/E,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,MAAO,SAAQ,YAAY;CAC3C;AAED,MAAM,WAAW,MAAO,SAAQ,OAAO;IACnC,OAAO,EAAE,QAAQ,GAAG,YAAY,CAAC;IACjC,QAAQ,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI;CAC1C;AAED,MAAM,WAAW,SAAS;IACtB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,aAAa,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,QAAS,SAAQ,OAAO;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACvC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;IAE7D,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC;CACtE;AAED,MAAM,WAAW,WAAW;IACxB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,KAAM,SAAQ,IAAI;CAClC;AAED,MAAM,WAAW,OAAQ,SAAQ,WAAW;CAC3C;AAED,MAAM,MAAM,WAAW,GACjB,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAC3C,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAClC,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAChC,QAAQ,GAAG,SAAS,GAAG,MAAM,GAC7B,KAAK,GAAG,KAAK,CAAC;AAEpB,MAAM,MAAM,aAAa,GACnB,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAChC,QAAQ,GAAG,SAAS,GAAG,MAAM,GAC7B,KAAK,CAAC;AAEZ,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAClD;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,wBAAwB,GAAG;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC,CAAC;AAEH,MAAM,WAAW,MAAM;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IACpC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAC;CAC3B"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@koala-ts/framework",
3
3
  "main": "dist/index.js",
4
4
  "type": "module",
5
- "version": "0.1.1",
5
+ "version": "1.1.0",
6
6
  "description": "A NodeJS framework for lazy developers",
7
7
  "keywords": [
8
8
  "koala",
@@ -42,18 +42,20 @@
42
42
  "tsx": "^4.19.2",
43
43
  "typescript": "^5.7.2",
44
44
  "typescript-eslint": "^8.18.2",
45
- "vitest": "^2.1.8"
45
+ "vitest": "^2.1.8",
46
+ "@vitest/coverage-v8": "^2.1.8"
46
47
  },
47
48
  "dependencies": {
48
49
  "@koa/router": "^13.1.0",
49
50
  "@types/koa": "^2.15.0",
50
- "koa": "^2.15.3",
51
- "koa-body": "^6.0.1",
52
- "reflect-metadata": "^0.2.2",
53
- "supertest": "^7.0.0",
54
51
  "@types/koa__router": "^12.0.4",
55
52
  "@types/stack-trace": "^0.0.33",
56
53
  "@types/supertest": "^6.0.2",
57
- "@vitest/coverage-v8": "^2.1.8"
54
+ "dotenv": "^16.4.7",
55
+ "dotenv-expand": "^12.0.1",
56
+ "koa": "^2.15.3",
57
+ "koa-body": "^6.0.1",
58
+ "reflect-metadata": "^0.2.2",
59
+ "supertest": "^7.0.0"
58
60
  }
59
61
  }