@whook/whook
Version:
Build strong and efficient REST web services.
41 lines (40 loc) • 1.71 kB
JavaScript
import { autoService } from 'knifecycle';
import { generateOpenAPITypes as generateTypes, toSource } from 'schema2dts';
/* Architecture Note #2.9.2.2: Typings generator
This command allows you to generate the API types that
helps you to write your handler in a clean and safe
manner.
*/
export const definition = {
name: 'generateOpenAPITypes',
description: 'Write openAPI types to stdout',
example: `whook generateOpenAPITypes`,
arguments: [],
};
async function initGenerateOpenAPITypes({ OPEN_API_TYPES_CONFIG, instream = process.stdin, outstream = process.stdout, log, }) {
return async function generateOpenAPITypes() {
log('warning', '📥 - Retrieving API schema...');
const openAPI = await new Promise((resolve, reject) => {
let buffer = Buffer.from('');
instream.on('data', (aBuffer) => {
buffer = Buffer.concat([buffer, aBuffer]);
});
instream.once('error', () => reject);
instream.once('end', () => resolve(buffer.toString()));
});
const typesDefs = toSource(await generateTypes(JSON.parse(openAPI), OPEN_API_TYPES_CONFIG));
log('warning', '📇 - Writing types...');
await new Promise((resolve, reject) => {
outstream.once('finish', resolve);
outstream.once('error', reject);
outstream.write(`// This file is autogenerated by Whook
// Do not try to change it in place
/* eslint-disable @typescript-eslint/ban-types */
`);
outstream.write(typesDefs);
outstream.end();
});
};
}
export default autoService(initGenerateOpenAPITypes);
//# sourceMappingURL=generateOpenAPITypes.js.map