Skip to content

Commit

Permalink
Use URLs in the handlers instead of string.
Browse files Browse the repository at this point in the history
  • Loading branch information
Jason3S committed Jul 28, 2022
1 parent f6cedba commit 4bce54e
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 11 deletions.
37 changes: 31 additions & 6 deletions packages/cspell-io/src/handlers/node/file.ts
Original file line number Diff line number Diff line change
@@ -1,39 +1,64 @@
import { createRequestHandler, ServiceBus, createResponse, isServiceResponseSuccess } from '@cspell/cspell-service-bus';
import {
createRequestHandler,
ServiceBus,
createResponse,
isServiceResponseSuccess,
createResponseFail,
isServiceResponseFailure,
} from '@cspell/cspell-service-bus';
import { RequestFsReadBinaryFile, RequestFsReadFile, RequestZlibInflate } from '../../requests';
import { promises as fs } from 'fs';
import { deflateSync } from 'zlib';
import { isZipped } from '../../node/file/util';
import assert from 'assert';

/**
* Handle Binary File Reads
*/
const handleRequestFsReadBinaryFile = createRequestHandler(
RequestFsReadBinaryFile,
({ params }) => createResponse(fs.readFile(params.filename)),
({ params }) => createResponse(fs.readFile(params.url)),
undefined,
'Node: Read Binary File.'
);

/**
* Handle UTF-8 Text File Reads
*/
const handleRequestFsReadFile = createRequestHandler(
RequestFsReadFile,
({ params }) => createResponse(fs.readFile(params.filename, 'utf-8')),
(req, _, dispatcher) => {
const { url } = req.params;
const res = dispatcher.dispatch(RequestFsReadBinaryFile.create({ url }));
if (!isServiceResponseSuccess(res)) {
assert(isServiceResponseFailure(res));
return createResponseFail(req, res.error);
}
return createResponse(res.value.then((buf) => buf.toString('utf-8')));
},
RequestFsReadFile.type,
'Node: Read Text File.'
);

/**
* Handle deflating gzip data
*/
const handleRequestZlibInflate = createRequestHandler(
RequestZlibInflate,
({ params }) => createResponse(deflateSync(params.data).toString('utf-8')),
RequestZlibInflate.type,
'Node: gz deflate.'
);

/**
* Handle reading gzip'ed text files.
*/
const handleRequestFsReadFileGz = createRequestHandler(
RequestFsReadFile,
(req, next, dispatcher) => {
const { filename } = req.params;
if (!isZipped(filename)) return next(req);
const result = dispatcher.dispatch(RequestFsReadBinaryFile.create({ filename }));
const { url } = req.params;
if (!isZipped(url)) return next(req);
const result = dispatcher.dispatch(RequestFsReadBinaryFile.create({ url }));
return isServiceResponseSuccess(result)
? createResponse(result.value.then((buf) => deflateSync(buf).toString('utf-8')))
: result;
Expand Down
2 changes: 1 addition & 1 deletion packages/cspell-io/src/requests/RequestFsReadBinaryFile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ import { requestFactory } from '@cspell/cspell-service-bus';

const RequestType = 'fs:readBinaryFile' as const;
interface RequestParams {
readonly filename: string;
readonly url: URL;
}
export const RequestFsReadBinaryFile = requestFactory<typeof RequestType, RequestParams, Promise<Buffer>>(RequestType);
2 changes: 1 addition & 1 deletion packages/cspell-io/src/requests/RequestFsReadFile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ import { requestFactory } from '@cspell/cspell-service-bus';

const RequestType = 'fs:readFile' as const;
interface RequestParams {
readonly filename: string;
readonly url: URL;
}
export const RequestFsReadFile = requestFactory<typeof RequestType, RequestParams, Promise<string>>(RequestType);
4 changes: 2 additions & 2 deletions packages/cspell-io/src/requests/RequestFsReadFileSync.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ import { requestFactory } from '@cspell/cspell-service-bus';

const RequestType = 'fs:readFileSync' as const;
interface RequestParams {
readonly filename: string;
readonly url: URL;
}
export const RequestFsReadFile = requestFactory<typeof RequestType, RequestParams, string>(RequestType);
export const RequestFsReadFileSync = requestFactory<typeof RequestType, RequestParams, string>(RequestType);
13 changes: 13 additions & 0 deletions packages/cspell-io/src/requests/RequestFsStat.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { requestFactory } from '@cspell/cspell-service-bus';
import { Stats } from '../models';

const RequestTypeStat = 'fs:stat' as const;
interface RequestStatParams {
readonly url: URL;
}
export const RequestFsStat = requestFactory<typeof RequestTypeStat, RequestStatParams, Promise<Stats>>(RequestTypeStat);

const RequestTypeStatSync = 'fs:statSync' as const;
export const RequestFsStatSync = requestFactory<typeof RequestTypeStatSync, RequestStatParams, Stats>(
RequestTypeStatSync
);
4 changes: 3 additions & 1 deletion packages/cspell-io/src/requests/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
export { RequestFsReadBinaryFile } from './RequestFsReadBinaryFile';
export { RequestFsReadFile } from './RequestFsReadFile';
export { RequestFsReadFileSync } from './RequestFsReadFileSync';
export { RequestFsStat, RequestFsStatSync } from './RequestFsStat';
export { RequestZlibInflate } from './RequestZlibInflate';
export { RequestFsReadBinaryFile } from './RequestFsReadBinaryFile';

0 comments on commit 4bce54e

Please sign in to comment.