Skip to content

Commit

Permalink
fix: add handle local files for serve command (#1810)
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexVarchuk committed Mar 21, 2022
1 parent 30b3b57 commit 117071e
Showing 1 changed file with 32 additions and 4 deletions.
36 changes: 32 additions & 4 deletions cli/index.ts
Expand Up @@ -6,7 +6,7 @@ import { ServerStyleSheet } from 'styled-components';

import { compile } from 'handlebars';
import { createServer, IncomingMessage, ServerResponse } from 'http';
import { dirname, join, resolve } from 'path';
import { dirname, join, resolve, extname as getExtName } from 'path';

import * as zlib from 'zlib';

Expand Down Expand Up @@ -39,6 +39,24 @@ interface Options {
redocOptions?: any;
}

export const mimeTypes = {
'.html': 'text/html',
'.js': 'text/javascript',
'.css': 'text/css',
'.json': 'application/json',
'.png': 'image/png',
'.jpg': 'image/jpg',
'.gif': 'image/gif',
'.svg': 'image/svg+xml',
'.wav': 'audio/wav',
'.mp4': 'video/mp4',
'.woff': 'application/font-woff',
'.ttf': 'application/font-ttf',
'.eot': 'application/vnd.ms-fontobject',
'.otf': 'application/font-otf',
'.wasm': 'application/wasm',
};

const BUNDLES_DIR = dirname(require.resolve('redoc'));

/* tslint:disable-next-line */
Expand Down Expand Up @@ -197,9 +215,19 @@ async function serve(host: string, port: number, pathToSpec: string, options: Op
'Content-Type': 'application/json',
});
} else {
response.writeHead(404);
response.write('Not found');
response.end();
try {
const filePath = join(dirname(pathToSpec), request.url || '');
const extname = String(getExtName(filePath)).toLowerCase() as keyof typeof mimeTypes;

const contentType = mimeTypes[extname] || 'application/octet-stream';
respondWithGzip(createReadStream(filePath), request, response, {
'Content-Type': contentType,
});
} catch (e) {
response.writeHead(404);
response.write('Not found');
response.end();
}
}

console.timeEnd('GET ' + request.url);
Expand Down

0 comments on commit 117071e

Please sign in to comment.