From debd5ab6855c83b6a274d4b53dd0f4e671593373 Mon Sep 17 00:00:00 2001 From: Justin Neff Date: Thu, 4 Oct 2018 17:20:09 -0500 Subject: [PATCH] Custom helper support and getDistinctForeignModels helper (#9) --- package-lock.json | 8 +----- package.json | 2 +- .../ITemplateEmitterOptions.ts | 2 ++ src/TemplateEmitter/TemplateEmitter.ts | 25 +++++++++++++++++++ 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 86c69a5..71b535c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@gatewayapps/cradle-template-emitter", - "version": "0.1.6", + "version": "0.1.7", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -614,12 +614,6 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, - "prettier": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.14.3.tgz", - "integrity": "sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg==", - "dev": true - }, "regexp-to-ast": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.3.5.tgz", diff --git a/package.json b/package.json index 764ef35..7fa1fd5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@gatewayapps/cradle-template-emitter", - "version": "0.1.7", + "version": "0.1.8", "description": "Cradle emitter for reading Handlebars based template files", "main": "./dist/index.js", "scripts": { diff --git a/src/TemplateEmitter/ITemplateEmitterOptions.ts b/src/TemplateEmitter/ITemplateEmitterOptions.ts index b63f3b4..d6f0dc1 100644 --- a/src/TemplateEmitter/ITemplateEmitterOptions.ts +++ b/src/TemplateEmitter/ITemplateEmitterOptions.ts @@ -1,4 +1,5 @@ import { CradleModel } from '@gatewayapps/cradle' +import { HelperDelegate } from 'handlebars' export interface ITemplateEmitterOptions { readonly sourcePath: string @@ -6,6 +7,7 @@ export interface ITemplateEmitterOptions { readonly overwriteExisting: boolean readonly mode: string readonly languageType: string + readonly registerCustomHelpers?: (register: (name: string, fn: HelperDelegate) => void) => void readonly shouldEmit: (meta: CradleModel) => boolean readonly onFileEmitted: (path: string) => any } diff --git a/src/TemplateEmitter/TemplateEmitter.ts b/src/TemplateEmitter/TemplateEmitter.ts index 87c4d33..2cf419a 100644 --- a/src/TemplateEmitter/TemplateEmitter.ts +++ b/src/TemplateEmitter/TemplateEmitter.ts @@ -195,6 +195,26 @@ export class TemplateEmitter implements ICradleEmitter { return got }) + handlebars.registerHelper('getDistinctForeignModels', (context, options) => { + const got: any[] = [] + + if (!context || Object.keys(context).length === 0) { + return [] + } + + for (const c in context) { + const ref = context[c] + if (!ref.ForeignModel) { + continue + } + if (got.indexOf(ref.ForeignModel) === -1) { + got.push(ref.ForeignModel) + } + } + + return got + }) + handlebars.registerHelper('getObjectProps', (context, options) => { const got: any = [] @@ -217,6 +237,11 @@ export class TemplateEmitter implements ICradleEmitter { return got }) + + if (this.config && this.config.options.registerCustomHelpers) { + const register = handlebars.registerHelper.bind(handlebars) + this.config.options.registerCustomHelpers(register) + } } public writeFileContents(filePath: string, content: string) { const fileExists = fs.existsSync(filePath)