From be4627add3606fe8c0b835345a8d554cacc8be4f Mon Sep 17 00:00:00 2001 From: MosYCo Date: Tue, 13 Dec 2022 15:25:10 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E6=96=B0=E5=A2=9Ehandlebars?= =?UTF-8?q?=E5=8A=A9=E6=89=8B=E7=B1=BBisExist?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 判断标识在当前模板中是否已被引用 --- packages/handlebars/src/helpers/index.ts | 2 ++ .../src/helpers/is-exist/is-exist.ts | 35 +++++++++++++++++++ .../handlebars/src/utils/helper/helper.ts | 1 + .../handlebars/test/helpers/helper.test.ts | 14 ++++++++ 4 files changed, 52 insertions(+) create mode 100644 packages/handlebars/src/helpers/is-exist/is-exist.ts diff --git a/packages/handlebars/src/helpers/index.ts b/packages/handlebars/src/helpers/index.ts index 3c59d25..d7118c3 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 0000000..87907e2 --- /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 2c26fc6..7bf51a4 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 7660d15..f5c20d5 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"}}`; -- Gitee