openapi-typescript-codegen/src/utils/readHandlebarsTemplates.ts
2020-02-22 22:27:31 +01:00

42 lines
1.7 KiB
TypeScript

import * as Handlebars from 'handlebars';
import * as glob from 'glob';
import * as path from 'path';
import { readHandlebarsTemplate } from './readHandlebarsTemplate';
import { registerHandlebarHelpers } from './registerHandlebarHelpers';
export interface Templates {
index: Handlebars.TemplateDelegate;
model: Handlebars.TemplateDelegate;
schema: Handlebars.TemplateDelegate;
service: Handlebars.TemplateDelegate;
settings: Handlebars.TemplateDelegate;
}
/**
* Read all the Handlebar templates that we need and return on wrapper object
* so we can easily access the templates in out generator / write functions.
*/
export function readHandlebarsTemplates(): Templates {
try {
registerHandlebarHelpers();
const templates: Templates = {
index: readHandlebarsTemplate(path.resolve(__dirname, `../../src/templates/index.hbs`)),
model: readHandlebarsTemplate(path.resolve(__dirname, `../../src/templates/model.hbs`)),
schema: readHandlebarsTemplate(path.resolve(__dirname, `../../src/templates/schema.hbs`)),
service: readHandlebarsTemplate(path.resolve(__dirname, `../../src/templates/service.hbs`)),
settings: readHandlebarsTemplate(path.resolve(__dirname, `../../src/templates/core/OpenAPI.hbs`)),
};
const partials = path.resolve(__dirname, `../../src/templates/partials`);
const partialsFiles = glob.sync('*.hbs', { cwd: partials });
partialsFiles.forEach(partial => {
Handlebars.registerPartial(path.basename(partial, '.hbs'), readHandlebarsTemplate(path.resolve(partials, partial)));
});
return templates;
} catch (e) {
throw new Error(`Could not read Handlebar templates`);
}
}