From 275c0aa9b161063bbceb09e8be63dba5649746b6 Mon Sep 17 00:00:00 2001 From: Wilson Hobbs Date: Thu, 23 Nov 2017 15:22:25 -0500 Subject: [PATCH] feat(serve-index): add serve-index middleware --- src/serve-index/index.spec.ts | 34 ++++++++++++++++++++++++++++++++++ src/serve-index/index.ts | 25 +++++++++++++++++++++++++ src/serve-index/package.json | 28 ++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 src/serve-index/index.spec.ts create mode 100644 src/serve-index/index.ts create mode 100644 src/serve-index/package.json diff --git a/src/serve-index/index.spec.ts b/src/serve-index/index.spec.ts new file mode 100644 index 0000000..8502318 --- /dev/null +++ b/src/serve-index/index.spec.ts @@ -0,0 +1,34 @@ +import { ServeIndexMiddleware } from './index'; +import { expect } from 'chai'; + +describe('ServeIndexMiddleware', () => { + let middleware: ServeIndexMiddleware; + describe('properly configured', () => { + beforeEach(() => { + ServeIndexMiddleware.configure('./lerna.json', {}); + middleware = new ServeIndexMiddleware(); + }); + + it('should be defined', () => { + expect(middleware).to.not.be.undefined; + }); + + it('should have a function called resolve', () => { + expect(middleware.resolve).to.be.instanceof(Function); + }); + + it('should should return a middleware from calling resolve', () => { + expect(middleware.resolve()).to.be.an.instanceof(Function); + }); + afterEach(() => { + ServeIndexMiddleware.configure(undefined); + }); + }); + + describe('not configured', () => { + middleware = new ServeIndexMiddleware(); + it('should should return a middleware from calling resolve', () => { + expect(middleware.resolve.bind(middleware)).to.throw(Error); + }); + }); +}); diff --git a/src/serve-index/index.ts b/src/serve-index/index.ts new file mode 100644 index 0000000..342c13f --- /dev/null +++ b/src/serve-index/index.ts @@ -0,0 +1,25 @@ +import * as serveIndex from 'serve-index'; + +import { Middleware, NestMiddleware } from '@nestjs/common'; + +import { RequestHandler } from 'express'; + +@Middleware() +export class ServeIndexMiddleware implements NestMiddleware { + + public static configure(path: string, opts?: serveIndex.Options) { + this.path = path; + this.options = opts; + } + + private static options: serveIndex.Options; + private static path: string; + + public resolve(...args: any[]): RequestHandler { + if (ServeIndexMiddleware.options) { + return serveIndex(ServeIndexMiddleware.path, ServeIndexMiddleware.options); + } else { + throw new Error('ServeIndexMiddleware requires a path in configure.'); + } + } +} diff --git a/src/serve-index/package.json b/src/serve-index/package.json new file mode 100644 index 0000000..b993a31 --- /dev/null +++ b/src/serve-index/package.json @@ -0,0 +1,28 @@ +{ + "name": "@nest-middlewares/serve-index", + "version": "1.0.0", + "description": "NestJS Middleware for Serve Index", + "main": "index", + "repository": { + "type": "git", + "url": "git+https://github.com/wbhob/nest-middlewares.git" + }, + "keywords": [ + "nest", + "middlewares", + "express", + "node" + ], + "author": "Wilson Hobbs ", + "license": "MIT", + "bugs": { + "url": "https://github.com/wbhob/nest-middlewares/issues" + }, + "homepage": "https://github.com/wbhob/nest-middlewares#readme", + "peerDependencies": { + "@nestjs/common": "^4.0.0" + }, + "dependencies": { + "serve-index": "^1.9.1" + } +}