From 4e1a30a20c579408c87f2d28b9b6ec8e1dda65cc Mon Sep 17 00:00:00 2001 From: Jun Yang Date: Sat, 26 Nov 2022 12:22:15 +0800 Subject: [PATCH] refactor: `_evalToken` renamed to `evalToken` BREAKING CHANGE: `evalToken` now returns a generator (LiquidJS async), which is different from `evalToken` in previous LiquidJS versions. --- src/index.ts | 3 +-- src/render/expression.ts | 10 +++++----- src/tags/case.ts | 4 ++-- src/tags/cycle.ts | 6 +++--- src/tags/for.ts | 4 ++-- src/tags/include.ts | 4 ++-- src/tags/render.ts | 8 ++++---- src/tags/tablerow.ts | 4 ++-- src/template/filter.ts | 6 +++--- src/template/hash.ts | 4 ++-- 10 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/index.ts b/src/index.ts index 0ee3daf4f0..a73cb973ec 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,8 +4,7 @@ export * as TypeGuards from './util/type-guards' export { toValue, TimezoneDate, createTrie, Trie, toPromise, toValueSync, assert, ParseError, TokenizationError, AssertionError } from './util' export { Drop } from './drop' export { Emitter } from './emitters' -// TODO change to _evalToken -export { defaultOperators, Operators, _evalToken, evalQuotedToken, Expression, isFalsy, isTruthy } from './render' +export { defaultOperators, Operators, evalToken, evalQuotedToken, Expression, isFalsy, isTruthy } from './render' export { Context, Scope } from './context' export { Value, Hash, Template, FilterImplOptions, Tag, Filter } from './template' export { Token, TopLevelToken, TagToken, ValueToken } from './tokens' diff --git a/src/render/expression.ts b/src/render/expression.ts index 0bb388122a..6357d51412 100644 --- a/src/render/expression.ts +++ b/src/render/expression.ts @@ -20,14 +20,14 @@ export class Expression { const result = yield evalOperatorToken(ctx.opts.operators, token, l, r, ctx) operands.push(result) } else { - operands.push(yield _evalToken(token, ctx, lenient && this.postfix.length === 1)) + operands.push(yield evalToken(token, ctx, lenient && this.postfix.length === 1)) } } return operands[0] } } -export function * _evalToken (token: Token | undefined, ctx: Context, lenient = false): IterableIterator { +export function * evalToken (token: Token | undefined, ctx: Context, lenient = false): IterableIterator { if (isPropertyAccessToken(token)) return yield evalPropertyAccessToken(token, ctx, lenient) if (isRangeToken(token)) return yield evalRangeToken(token, ctx) if (isLiteralToken(token)) return evalLiteralToken(token) @@ -39,7 +39,7 @@ export function * _evalToken (token: Token | undefined, ctx: Context, lenient = function * evalPropertyAccessToken (token: PropertyAccessToken, ctx: Context, lenient: boolean): IterableIterator { const props: string[] = [] for (const prop of token.props) { - props.push((yield _evalToken(prop, ctx, false)) as unknown as string) + props.push((yield evalToken(prop, ctx, false)) as unknown as string) } try { return yield ctx._get([token.propertyName, ...props]) @@ -68,8 +68,8 @@ function evalLiteralToken (token: LiteralToken) { } function * evalRangeToken (token: RangeToken, ctx: Context) { - const low: number = yield _evalToken(token.lhs, ctx) - const high: number = yield _evalToken(token.rhs, ctx) + const low: number = yield evalToken(token.lhs, ctx) + const high: number = yield evalToken(token.rhs, ctx) return range(+low, +high + 1) } diff --git a/src/tags/case.ts b/src/tags/case.ts index 703e94df82..8cad4bbd2a 100644 --- a/src/tags/case.ts +++ b/src/tags/case.ts @@ -1,4 +1,4 @@ -import { ValueToken, Liquid, Tokenizer, toValue, _evalToken, Value, Emitter, TagToken, TopLevelToken, Context, Template, Tag, ParseStream } from '..' +import { ValueToken, Liquid, Tokenizer, toValue, evalToken, Value, Emitter, TagToken, TopLevelToken, Context, Template, Tag, ParseStream } from '..' export default class extends Tag { private cond: Value @@ -39,7 +39,7 @@ export default class extends Tag { const r = this.liquid.renderer const cond = toValue(yield this.cond.value(ctx, ctx.opts.lenientIf)) for (const branch of this.cases) { - const val = yield _evalToken(branch.val, ctx, ctx.opts.lenientIf) + const val = yield evalToken(branch.val, ctx, ctx.opts.lenientIf) if (val === cond) { yield r.renderTemplates(branch.templates, ctx, emitter) return diff --git a/src/tags/cycle.ts b/src/tags/cycle.ts index 06d7074595..396d31f7c7 100644 --- a/src/tags/cycle.ts +++ b/src/tags/cycle.ts @@ -1,4 +1,4 @@ -import { Tokenizer, assert, TopLevelToken, Liquid, ValueToken, _evalToken, Emitter, TagToken, Context, Tag } from '..' +import { Tokenizer, assert, TopLevelToken, Liquid, ValueToken, evalToken, Emitter, TagToken, Context, Tag } from '..' export default class extends Tag { private candidates: ValueToken[] = [] @@ -25,7 +25,7 @@ export default class extends Tag { } * render (ctx: Context, emitter: Emitter): Generator { - const group = (yield _evalToken(this.group, ctx)) as ValueToken + const group = (yield evalToken(this.group, ctx)) as ValueToken const fingerprint = `cycle:${group}:` + this.candidates.join(',') const groups = ctx.getRegister('cycle') let idx = groups[fingerprint] @@ -37,6 +37,6 @@ export default class extends Tag { const candidate = this.candidates[idx] idx = (idx + 1) % this.candidates.length groups[fingerprint] = idx - return yield _evalToken(candidate, ctx) + return yield evalToken(candidate, ctx) } } diff --git a/src/tags/for.ts b/src/tags/for.ts index b10a6ddb96..110d04ee29 100644 --- a/src/tags/for.ts +++ b/src/tags/for.ts @@ -1,4 +1,4 @@ -import { Hash, ValueToken, Liquid, Tag, Tokenizer, _evalToken, Emitter, TagToken, TopLevelToken, Context, Template, ParseStream } from '..' +import { Hash, ValueToken, Liquid, Tag, Tokenizer, evalToken, Emitter, TagToken, TopLevelToken, Context, Template, ParseStream } from '..' import { toEnumerable } from '../util/collection' import { ForloopDrop } from '../drop/forloop-drop' @@ -43,7 +43,7 @@ export default class extends Tag { } * render (ctx: Context, emitter: Emitter): Generator { const r = this.liquid.renderer - let collection = toEnumerable(yield _evalToken(this.collection, ctx)) + let collection = toEnumerable(yield evalToken(this.collection, ctx)) if (!collection.length) { yield r.renderTemplates(this.elseTemplates, ctx, emitter) diff --git a/src/tags/include.ts b/src/tags/include.ts index 199c35f34e..207c8ffc28 100644 --- a/src/tags/include.ts +++ b/src/tags/include.ts @@ -1,4 +1,4 @@ -import { Template, ValueToken, TopLevelToken, Liquid, Tag, assert, Tokenizer, _evalToken, Hash, Emitter, TagToken, Context } from '..' +import { Template, ValueToken, TopLevelToken, Liquid, Tag, assert, Tokenizer, evalToken, Hash, Emitter, TagToken, Context } from '..' import { BlockMode, Scope } from '../context' import { parseFilePath, renderFilePath } from './render' @@ -33,7 +33,7 @@ export default class extends Tag { ctx.setRegister('blocks', {}) ctx.setRegister('blockMode', BlockMode.OUTPUT) const scope = (yield hash.render(ctx)) as Scope - if (withVar) scope[filepath] = yield _evalToken(withVar, ctx) + if (withVar) scope[filepath] = yield evalToken(withVar, ctx) const templates = (yield liquid._parsePartialFile(filepath, ctx.sync, this['currentFile'])) as Template[] ctx.push(ctx.opts.jekyllInclude ? { include: scope } : scope) yield renderer.renderTemplates(templates, ctx, emitter) diff --git a/src/tags/render.ts b/src/tags/render.ts index 12b202b777..2e54d653ed 100644 --- a/src/tags/render.ts +++ b/src/tags/render.ts @@ -1,7 +1,7 @@ import { __assign } from 'tslib' import { ForloopDrop } from '../drop' import { toEnumerable } from '../util' -import { TopLevelToken, assert, Liquid, Token, Template, evalQuotedToken, TypeGuards, Tokenizer, _evalToken, Hash, Emitter, TagToken, Context, Tag } from '..' +import { TopLevelToken, assert, Liquid, Token, Template, evalQuotedToken, TypeGuards, Tokenizer, evalToken, Hash, Emitter, TagToken, Context, Tag } from '..' export type ParsedFileName = Template[] | Token | string | undefined @@ -57,12 +57,12 @@ export default class extends Tag { __assign(scope, yield hash.render(ctx)) if (this['with']) { const { value, alias } = this['with'] - scope[alias || filepath] = yield _evalToken(value, ctx) + scope[alias || filepath] = yield evalToken(value, ctx) } if (this['for']) { const { value, alias } = this['for'] - const collection = toEnumerable(yield _evalToken(value, ctx)) + const collection = toEnumerable(yield evalToken(value, ctx)) scope['forloop'] = new ForloopDrop(collection.length, value.getText(), alias) for (const item of collection) { scope[alias] = item @@ -109,5 +109,5 @@ function optimize (templates: Template[]): string | Template[] { export function * renderFilePath (file: ParsedFileName, ctx: Context, liquid: Liquid): IterableIterator { if (typeof file === 'string') return file if (Array.isArray(file)) return liquid.renderer.renderTemplates(file, ctx) - return yield _evalToken(file, ctx) + return yield evalToken(file, ctx) } diff --git a/src/tags/tablerow.ts b/src/tags/tablerow.ts index 82b63270e5..23ed63ad01 100644 --- a/src/tags/tablerow.ts +++ b/src/tags/tablerow.ts @@ -1,5 +1,5 @@ import { toEnumerable } from '../util/collection' -import { ValueToken, Liquid, Tag, _evalToken, Emitter, Hash, TagToken, TopLevelToken, Context, Template, ParseStream } from '..' +import { ValueToken, Liquid, Tag, evalToken, Emitter, Hash, TagToken, TopLevelToken, Context, Template, ParseStream } from '..' import { TablerowloopDrop } from '../drop/tablerowloop-drop' import { Tokenizer } from '../parser/tokenizer' @@ -39,7 +39,7 @@ export default class extends Tag { } * render (ctx: Context, emitter: Emitter): Generator { - let collection = toEnumerable(yield _evalToken(this.collection, ctx)) + let collection = toEnumerable(yield evalToken(this.collection, ctx)) const hash = (yield this.hash.render(ctx)) as Record const offset = hash.offset || 0 const limit = (hash.limit === undefined) ? collection.length : hash.limit diff --git a/src/template/filter.ts b/src/template/filter.ts index b6797b1771..50f630616b 100644 --- a/src/template/filter.ts +++ b/src/template/filter.ts @@ -1,4 +1,4 @@ -import { _evalToken } from '../render' +import { evalToken } from '../render' import { Context } from '../context' import { identify } from '../util/underscore' import { FilterImplOptions } from './filter-impl-options' @@ -20,8 +20,8 @@ export class Filter { public * render (value: any, context: Context): IterableIterator { const argv: any[] = [] for (const arg of this.args as FilterArg[]) { - if (isKeyValuePair(arg)) argv.push([arg[0], yield _evalToken(arg[1], context)]) - else argv.push(yield _evalToken(arg, context)) + if (isKeyValuePair(arg)) argv.push([arg[0], yield evalToken(arg[1], context)]) + else argv.push(yield evalToken(arg, context)) } return this.impl.apply({ context, liquid: this.liquid }, [value, ...argv]) } diff --git a/src/template/hash.ts b/src/template/hash.ts index e9479a3715..0cbff8eea7 100644 --- a/src/template/hash.ts +++ b/src/template/hash.ts @@ -1,4 +1,4 @@ -import { _evalToken } from '../render/expression' +import { evalToken } from '../render/expression' import { Context } from '../context/context' import { Tokenizer } from '../parser/tokenizer' import { Token } from '../tokens/token' @@ -24,7 +24,7 @@ export class Hash { * render (ctx: Context): Generator, unknown> { const hash = {} for (const key of Object.keys(this.hash)) { - hash[key] = this.hash[key] === undefined ? true : yield _evalToken(this.hash[key], ctx) + hash[key] = this.hash[key] === undefined ? true : yield evalToken(this.hash[key], ctx) } return hash }