fix: for throws undefined var with a null value with strictVariables

This commit is contained in:
Francisco Soto
2023-08-19 23:54:32 +08:00
committed by Jun Yang
parent 803a0907fc
commit dc6a301387
3 changed files with 12 additions and 2 deletions
+2 -2
View File
@@ -2,7 +2,7 @@ import { Drop } from '../drop/drop'
import { __assign } from 'tslib'
import { NormalizedFullOptions, defaultOptions, RenderOptions } from '../liquid-options'
import { Scope } from './scope'
import { isArray, isNil, isString, isFunction, toLiquid, InternalUndefinedVariableError, toValueSync } from '../util'
import { isArray, isNil, isUndefined, isString, isFunction, toLiquid, InternalUndefinedVariableError, toValueSync } from '../util'
type PropertyKey = string | number;
@@ -80,7 +80,7 @@ export class Context {
if (isString(paths)) paths = paths.split('.')
for (let i = 0; i < paths.length; i++) {
scope = yield readProperty(scope as object, paths[i], this.ownPropertyOnly)
if (isNil(scope) && this.strictVariables) {
if (this.strictVariables && isUndefined(scope)) {
throw new InternalUndefinedVariableError((paths as string[]).slice(0, i + 1).join!('.'))
}
}
+4
View File
@@ -63,6 +63,10 @@ export function isNil (value: any): boolean {
return value == null
}
export function isUndefined (value: any): boolean {
return value === undefined
}
export function isArray (value: any): value is any[] {
// be compatible with IE 8
return toString.call(value) === '[object Array]'