diff --git a/packages/server/Buildfile b/packages/server/Buildfile index ff28a38..ba057c1 100644 --- a/packages/server/Buildfile +++ b/packages/server/Buildfile @@ -1,4 +1,4 @@ -server := src/server/index.ts +server := src/bootstrap.ts typeorm := ts-node ../../node_modules/.bin/typeorm orm: diff --git a/packages/server/src/application/Application.ts b/packages/server/src/application/Application.ts index 9c5e1c7..dc53116 100644 --- a/packages/server/src/application/Application.ts +++ b/packages/server/src/application/Application.ts @@ -54,7 +54,7 @@ export class Application implements IApplication { router.use('/app', urlencoded({ extended: false })) - router.use(new middleware.Session({ + router.use(new middleware.SessionMiddleware({ transactionManager, baseUrl: this.config.app.baseUrl, sessionName: this.config.app.session.name, diff --git a/packages/server/src/entities/index.ts b/packages/server/src/entities/index.ts new file mode 100644 index 0000000..23221c3 --- /dev/null +++ b/packages/server/src/entities/index.ts @@ -0,0 +1,3 @@ +export * from './Session' +export * from './User' +export * from './UserEmail' diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts new file mode 100644 index 0000000..3294a98 --- /dev/null +++ b/packages/server/src/index.ts @@ -0,0 +1,9 @@ +export * from './application' +export * from './database' +export * from './entities' +export * from './logger' +export * from './middleware' +export * from './router' +export * from './routes' +export * from './services' +export * from './session' diff --git a/packages/server/src/middleware/Session.ts b/packages/server/src/middleware/SessionMiddleware.ts similarity index 96% rename from packages/server/src/middleware/Session.ts rename to packages/server/src/middleware/SessionMiddleware.ts index 57ca722..5569d90 100644 --- a/packages/server/src/middleware/Session.ts +++ b/packages/server/src/middleware/SessionMiddleware.ts @@ -14,7 +14,7 @@ export interface ISessionOptions { sessionSecret: string | string[], } -export class Session implements IMiddleware { +export class SessionMiddleware implements IMiddleware { readonly handle: IHandler constructor(readonly params: ISessionOptions) { @@ -49,4 +49,3 @@ export class Session implements IMiddleware { return this.params.transactionManager.getRepository(SessionEntity) } } - diff --git a/packages/server/src/middleware/index.ts b/packages/server/src/middleware/index.ts index 84cea4e..fcf2575 100644 --- a/packages/server/src/middleware/index.ts +++ b/packages/server/src/middleware/index.ts @@ -9,5 +9,5 @@ export * from './IHandler' export * from './IMiddleware' export * from './IPromiseHandler' export * from './RequestLogger' -export * from './Session' +export * from './SessionMiddleware' export * from './Transaction' diff --git a/packages/server/src/router/AsyncRouter.ts b/packages/server/src/router/AsyncRouter.ts index 9656bbb..4f89810 100644 --- a/packages/server/src/router/AsyncRouter.ts +++ b/packages/server/src/router/AsyncRouter.ts @@ -1,15 +1,6 @@ -import {IRoutes, IRoute, IMethod} from '@rondo/common' -import express, {NextFunction} from 'express' - -export interface IRequest extends express.Request { - body: T['body'] - params: T['params'] - query: T['query'] -} - -export type IHandler = - (req: IRequest, res: express.Response, next: NextFunction) => - Promise +import express from 'express' +import {IRoutes, IMethod} from '@rondo/common' +import {ITypedHandler} from './ITypedHandler' export class AsyncRouter { readonly router: express.Router @@ -23,7 +14,7 @@ export class AsyncRouter { protected addRoute( method: M, path: P, - handler: IHandler, + handler: ITypedHandler, ) { const addRoute = this.router[method].bind(this.router) @@ -31,7 +22,7 @@ export class AsyncRouter { } protected wrapHandler( - handler: IHandler, + handler: ITypedHandler, ): express.RequestHandler { return (req, res, next) => { handler(req, res, next) @@ -42,34 +33,45 @@ export class AsyncRouter { } } - get

(path: P, handler: IHandler) { + get

( + path: P, + handler: ITypedHandler, + ) { this.addRoute('get', path, handler) } - post

(path: P, handler: IHandler) { + post

( + path: P, + handler: ITypedHandler, + ) { this.addRoute('post', path, handler) } - put

(path: P, handler: IHandler) { + put

( + path: P, handler: ITypedHandler, + ) { this.addRoute('put', path, handler) } delete

( - path: P, handler: IHandler) { + path: P, handler: ITypedHandler) { this.addRoute('delete', path, handler) } - head

(path: P, handler: IHandler) { + head

( + path: P, + handler: ITypedHandler, + ) { this.addRoute('head', path, handler) } options

( - path: P, handler: IHandler) { + path: P, handler: ITypedHandler) { this.addRoute('options', path, handler) } patch

( - path: P, handler: IHandler) { + path: P, handler: ITypedHandler) { this.addRoute('patch', path, handler) } diff --git a/packages/server/src/router/ITypedHandler.ts b/packages/server/src/router/ITypedHandler.ts new file mode 100644 index 0000000..3c916e3 --- /dev/null +++ b/packages/server/src/router/ITypedHandler.ts @@ -0,0 +1,13 @@ +import express from 'express' +import {IRoutes, IMethod} from '@rondo/common' +import {ITypedRequest} from './ITypedRequest' + +export type ITypedHandler< + R extends IRoutes, + P extends keyof R, + M extends IMethod +> = ( + req: ITypedRequest, + res: express.Response, + next: express.NextFunction, +) => Promise diff --git a/packages/server/src/router/ITypedRequest.ts b/packages/server/src/router/ITypedRequest.ts new file mode 100644 index 0000000..4c75a8d --- /dev/null +++ b/packages/server/src/router/ITypedRequest.ts @@ -0,0 +1,8 @@ +import express from 'express' +import {IRoute} from '@rondo/common' + +export interface ITypedRequest extends express.Request { + body: T['body'] + params: T['params'] + query: T['query'] +} diff --git a/packages/server/src/router/TransactionalRouter.ts b/packages/server/src/router/TransactionalRouter.ts index fb9ce8f..80ca18f 100644 --- a/packages/server/src/router/TransactionalRouter.ts +++ b/packages/server/src/router/TransactionalRouter.ts @@ -1,7 +1,8 @@ import express from 'express' -import {AsyncRouter, IHandler} from './AsyncRouter' +import {AsyncRouter} from './AsyncRouter' import {IRoutes, IMethod} from '@rondo/common' import {ITransactionManager} from '../database/ITransactionManager' +import {ITypedHandler} from './ITypedHandler' export class TransactionalRouter extends AsyncRouter { constructor(readonly transactionManager: ITransactionManager) { @@ -9,7 +10,7 @@ export class TransactionalRouter extends AsyncRouter { } protected wrapHandler( - handler: IHandler, + handler: ITypedHandler, ): express.RequestHandler { return async (req, res, next) => { await this.transactionManager diff --git a/packages/server/src/router/index.ts b/packages/server/src/router/index.ts index b236c4b..08791ae 100644 --- a/packages/server/src/router/index.ts +++ b/packages/server/src/router/index.ts @@ -1,2 +1,4 @@ export * from './AsyncRouter' +export * from './ITypedHandler' +export * from './ITypedRequest' export * from './TransactionalRouter' diff --git a/packages/server/src/session/index.ts b/packages/server/src/session/index.ts new file mode 100644 index 0000000..13dd9d1 --- /dev/null +++ b/packages/server/src/session/index.ts @@ -0,0 +1,2 @@ +export * from './ISession' +export * from './SessionStore'