diff --git a/packages/handlebars/src/helpers/index.ts b/packages/handlebars/src/helpers/index.ts index 3c59d25eb0ad08e809c07eb4127071a146da3dce..d7118c3d80377fb90b3e5b98b609de3633f508f2 100644 --- a/packages/handlebars/src/helpers/index.ts +++ b/packages/handlebars/src/helpers/index.ts @@ -4,6 +4,7 @@ import { HelperConcat } from './concat/concat'; import { HelperEq } from './eq/eq'; import { HelperGt } from './gt/gt'; import { HelperGte } from './gte/gte'; +import { HelperIsExist } from './is-exist/is-exist'; import { HelperJson } from './json/json'; import { HelperLowerCase } from './lower-case/lower-case'; import { HelperLt } from './lt/lt'; @@ -31,6 +32,7 @@ export function installHelpers(): void { new HelperEq(); new HelperGt(); new HelperGte(); + new HelperIsExist(); new HelperJson(); new HelperLowerCase(); new HelperLt(); diff --git a/packages/handlebars/src/helpers/is-exist/is-exist.ts b/packages/handlebars/src/helpers/is-exist/is-exist.ts new file mode 100644 index 0000000000000000000000000000000000000000..87907e2ad514e7896c97b44d5f0c251f326790f5 --- /dev/null +++ b/packages/handlebars/src/helpers/is-exist/is-exist.ts @@ -0,0 +1,35 @@ +import * as Handlebars from 'handlebars'; +import { HelperUtil } from '../../utils'; +import { HelperBase } from '../helper-base'; + +/** + * 标识是否已存在 + * + * @description 判断: 标识在当前模板中是否已被引用, 用法: {{#isExist key mark}}xxx{{else}}yyy{{/eq}}、{{isExist key 'name'}} 返回值为 boolean 类型 + * @author chitanda + * @date 2021-12-24 14:12:25 + * @export + * @class HelperEq + * @extends {HelperBase} + */ +export class HelperIsExist extends HelperBase { + constructor() { + super('isExist'); + } + + onExecute( + key: string, + mark: string, + options: Handlebars.HelperOptions, + ): string | boolean { + const nameMap = options.data.nameMap || new Map(); + const marks = nameMap.get(key) || []; + const result = marks.indexOf(mark) !== -1; + if (!result) { + marks.push(mark); + nameMap.set(key, marks); + options.data.nameMap = nameMap; + } + return HelperUtil.handleJudgmentExecute(this, result, options); + } +} diff --git a/packages/handlebars/src/utils/helper/helper.ts b/packages/handlebars/src/utils/helper/helper.ts index 2c26fc6b88358304722898f65129b9a73158be8c..7bf51a412e82fea78f7cd791cca3db3d4b484222 100644 --- a/packages/handlebars/src/utils/helper/helper.ts +++ b/packages/handlebars/src/utils/helper/helper.ts @@ -24,6 +24,7 @@ export class HelperUtil { 'eq', 'gt', 'get', + 'isExist', 'lowerCase', 'lt', 'lte', diff --git a/packages/handlebars/test/helpers/helper.test.ts b/packages/handlebars/test/helpers/helper.test.ts index 7660d159184954c8ff92312a5e452f45ed6280c8..f5c20d5089e15b6a14ef5f823aa0210ba0998995 100644 --- a/packages/handlebars/test/helpers/helper.test.ts +++ b/packages/handlebars/test/helpers/helper.test.ts @@ -158,6 +158,20 @@ describe('模板助手测试', () => { } }); + it('标识是否已存在: is-exist', () => { + { + const template = `{{#entities}}{{#unless (isExist 'importService' codeName)}}{{codeName}}{{/unless}}{{/entities}}`; + const str = engine.render(template, { + entities: [ + { codeName: 'entity1' }, + { codeName: 'entity2' }, + { codeName: 'entity2' }, + ], + }); + expect(str).toBe('entity1entity2'); + } + }); + it('字符串转小写: lower-case', () => { { const template = `{{lowerCase "GlobalModel"}}`;