diff --git a/src/context/context.ts b/src/context/context.ts index b4f9a9d42..a9a0083c5 100644 --- a/src/context/context.ts +++ b/src/context/context.ts @@ -13,7 +13,7 @@ export class Context { * for tags like `{% capture %}` `{% assign %}` to operate */ private scopes: Scope[] = [createScope()] - private registers: Record = Object.create(null) + private registers = {} /** * user passed in scope * `{% increment %}`, `{% decrement %}` changes this scope, @@ -49,7 +49,7 @@ export class Context { this.renderLimit = renderLimit ?? new Limiter('template render', getPerformance().now() + (renderOptions.renderLimit ?? opts.renderLimit)) } public getRegister (key: string, defaultValue: T = undefined as T): T { - return (this.registers[key] = this.registers[key] ?? defaultValue) + return (this.registers[key] = this.registers[key] || defaultValue) } public setRegister (key: string, value: any) { return (this.registers[key] = value) diff --git a/src/tags/block.ts b/src/tags/block.ts index b6aca1acf..56dca80af 100644 --- a/src/tags/block.ts +++ b/src/tags/block.ts @@ -23,7 +23,7 @@ export default class extends Tag { * render (ctx: Context, emitter: Emitter) { const blockRender = this.getBlockRender(ctx) if (ctx.getRegister('blockMode') === BlockMode.STORE) { - ctx.getRegister('blocks', createScope() as Record)[this.block] = blockRender + ctx.getRegister('blocks', {} as Record)[this.block] = blockRender } else { yield blockRender(new BlockDrop(), emitter) } @@ -32,7 +32,7 @@ export default class extends Tag { private getBlockRender (ctx: Context) { const self = this as Tag const { liquid, templates } = this - const renderChild = ctx.getRegister('blocks', createScope() as Record)[this.block] + const renderChild = ctx.getRegister('blocks', {} as Record)[this.block] const renderCurrent = function * (superBlock: BlockDrop, emitter: Emitter) { const stack: Tag[] = ctx.getRegister('blockStack', []) if (stack.includes(self)) throw new Error('block tag cannot be nested') diff --git a/src/tags/cycle.ts b/src/tags/cycle.ts index db81e9b51..063c01b01 100644 --- a/src/tags/cycle.ts +++ b/src/tags/cycle.ts @@ -1,4 +1,4 @@ -import { TopLevelToken, Liquid, ValueToken, evalToken, Emitter, TagToken, Context, Tag, createScope } from '..' +import { TopLevelToken, Liquid, ValueToken, evalToken, Emitter, TagToken, Context, Tag } from '..' import { Arguments } from '../template' export default class extends Tag { @@ -27,7 +27,7 @@ export default class extends Tag { * render (ctx: Context, emitter: Emitter): Generator { const group = (yield evalToken(this.group, ctx)) as ValueToken const fingerprint = `cycle:${group}:` + this.candidates.join(',') - const groups = ctx.getRegister('cycle', createScope() as Record) + const groups = ctx.getRegister('cycle', {} as Record) let idx = groups[fingerprint] if (idx === undefined) { diff --git a/src/tags/include.ts b/src/tags/include.ts index ffecd93d3..74b404bbe 100644 --- a/src/tags/include.ts +++ b/src/tags/include.ts @@ -32,7 +32,7 @@ export default class extends Tag { assert(filepath, () => `illegal file path "${filepath}"`) const saved = ctx.saveRegister('blocks', 'blockMode') - ctx.setRegister('blocks', createScope()) + ctx.setRegister('blocks', {}) ctx.setRegister('blockMode', BlockMode.OUTPUT) const scope = (yield hash.render(ctx)) as Scope if (withVar) scope[filepath] = yield evalToken(withVar, ctx) diff --git a/src/tags/layout.ts b/src/tags/layout.ts index b73d7637c..ccd176d4b 100644 --- a/src/tags/layout.ts +++ b/src/tags/layout.ts @@ -32,7 +32,7 @@ export default class extends Tag { // render remaining contents and store rendered results ctx.setRegister('blockMode', BlockMode.STORE) const html = yield renderer.renderTemplates(this.templates, ctx) - const blocks = ctx.getRegister('blocks', createScope() as Record) + const blocks = ctx.getRegister('blocks', {} as Record) // set whole content to anonymous block if anonymous doesn't specified if (blocks[''] === undefined) blocks[''] = (parent: BlankDrop, emitter: Emitter) => emitter.write(html)